Cloud-Native Zafiyet Tespit Platformu — VulnDetect-Cloud
Merhaba TürkHackTeam ailesi,
Bugün sizlerle geliştirmekte olduğum AR-GE projesini paylaşmak istiyorum:
“Cloud-Native Zafiyet Tespit Platformu (VulnDetect-Cloud)”
Amacımız, bulut tabanlı sistemlerdeki zafiyetleri otomatik tespit edebilen, makine öğrenmesi destekli bir platform geliştirmek.
Yani klasik “tarayıcı” mantığından öte, veri akışını analiz eden, anomaliyi öğrenen bir sistem.
Merhaba TürkHackTeam ailesi,
Bugün sizlerle geliştirmekte olduğum AR-GE projesini paylaşmak istiyorum:
“Cloud-Native Zafiyet Tespit Platformu (VulnDetect-Cloud)”
Amacımız, bulut tabanlı sistemlerdeki zafiyetleri otomatik tespit edebilen, makine öğrenmesi destekli bir platform geliştirmek.
Yani klasik “tarayıcı” mantığından öte, veri akışını analiz eden, anomaliyi öğrenen bir sistem.
Amaç
Siber güvenlik dünyasında ağlar, kodlar ve log’lar her geçen gün daha karmaşık hâle geliyor.
Manuel zafiyet tespiti hem zaman alıyor hem de ölçeklenebilir değil.
VulnDetect-Cloud’un hedefi:
Manuel zafiyet tespiti hem zaman alıyor hem de ölçeklenebilir değil.
VulnDetect-Cloud’un hedefi:
“Ağ trafiğini, kaynak kodları ve sistem loglarını otomatik analiz ederek zafiyet ihtimalini önceden tahmin eden, bulut ortamında çalışan bir platform oluşturmak.”
Temel Mimarisi
CSS:
[ Veri Kaynağı ] > [ Feature Extractor ] > [ ML Model (XGBoost) ] > [ Alert Engine ] > [ Web Dashboard ]
Veri Kaynakları:
Ağ trafiği (Flow log’lar, Zeek, Suricata)
Uygulama logları
Kaynak kod analiz çıktıları
Teknolojiler:
Backend > FastAPI (Python)
ML Model > XGBoost
Depolama > PostgreSQL + MinIO
Orkestrasyon > Docker-Compose
Frontend > ReactJS (görselleştirme için)
Ağ trafiği (Flow log’lar, Zeek, Suricata)
Uygulama logları
Kaynak kod analiz çıktıları
Teknolojiler:
Backend > FastAPI (Python)
ML Model > XGBoost
Depolama > PostgreSQL + MinIO
Orkestrasyon > Docker-Compose
Frontend > ReactJS (görselleştirme için)
Örnek API Kullanımı
FastAPI ile oluşturulmuş örnek endpoint:
(routers/upload.py)
(main.py)
(routers/upload.py)
Python:
from fastapi import APIRouter, UploadFile, File
import uuid
import os
router = APIRouter()
@router.post("/upload/flow")
async def upload_flow(file: UploadFile = File(...)):
# Her yükleme işlemi için benzersiz bir iş kimliği oluştur
job_id = str(uuid.uuid4())
# Dosyanın kaydedileceği dizin
save_dir = "data"
os.makedirs(save_dir, exist_ok=True)
# Dosya yolu
save_path = os.path.join(save_dir, f"{job_id}.csv")
# Dosyayı kaydet
content = await file.read()
with open(save_path, "wb") as f:
f.write(content)
# Yanıt dön
return {"job_id": job_id, "status": "scheduled"}
(main.py)
Python:
from fastapi import FastAPI
from routers import upload
app = FastAPI(title="File Upload API")
# Router'ı uygulamaya ekle
app.include_router(upload.router)
@app.get("/")
def root():
return {"message": "FastAPI dosya yükleme servisine hoş geldiniz!"}
Basit Makine Öğrenmesi Modeli (XGBoost)
Küçük bir sentetik veri seti üzerinde başlangıç modeli:
Python:
# --- Gerekli kütüphaneler ---
import pandas as pd # Veri işleme ve tablo oluşturma
import numpy as np # Sayısal hesaplamalar
import xgboost as xgb # XGBoost: güçlü bir makine öğrenmesi algoritması
from sklearn.model_selection import train_test_split # Veri setini eğitim/test olarak ayırmak için
from sklearn.metrics import classification_report # Sınıflandırma performansını raporlamak için
import joblib # Eğitilen modeli diske kaydetmek için
# --- 1. Sahte (simülasyon) veri üretimi ---
n = 2000 # 2000 örnek oluşturulacak
rng = np.random.RandomState(42) # Rastgelelik için sabit seed
bytes_ = rng.exponential(scale=500, size=n) # Her akışta geçen bayt miktarı (üstel dağılım)
packets = np.maximum(1, (bytes_/rng.uniform(200,800)).astype(int)) # Paket sayısı tahmini
duration = rng.exponential(scale=5, size=n) # Akış süresi (saniye)
label = (bytes_ > 2000).astype(int) # 2000 bayttan büyükse "anormal" (1), değilse "normal" (0)
# --- 2. Veriyi DataFrame olarak düzenleme ---
df = pd.DataFrame({
'bytes': bytes_,
'packets': packets,
'duration': duration,
'label': label
})
# --- 3. Türetilmiş özellikler (feature engineering) ---
df['avg_pkt_size'] = df['bytes'] / (df['packets'] + 1e-6) # Ortalama paket boyutu
df['byte_pkt_ratio'] = df['bytes'] / (df['duration'] + 1e-6) # Bayt / süre oranı (trafik yoğunluğu)
# --- 4. Girdi ve hedef değişkenlerin ayrımı ---
X = df[['bytes','packets','duration','avg_pkt_size','byte_pkt_ratio']] # Bağımsız değişkenler
y = df['label'] # Etiket (0: normal, 1: anormal)
# --- 5. Eğitim/Test ayrımı ---
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) # %80 eğitim, %20 test
# --- 6. XGBoost veri formatına dönüştürme ---
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)
# --- 7. Model parametreleri ---
params = {
"objective": "binary:logistic", # İkili sınıflandırma
"eval_metric": "auc", # Değerlendirme metriği: AUC
"max_depth": 4 # Ağaç derinliği (karmaşıklık kontrolü)
}
# --- 8. Modeli eğitme ---
bst = xgb.train(params, dtrain, num_boost_round=100) # 100 iterasyon boyunca eğitim
# --- 9. Model performansını test etme ---
y_pred = (bst.predict(dtest) > 0.5).astype(int) # 0.5 eşiğine göre sınıflandır
print(classification_report(y_test, y_pred)) # Precision, recall, f1 skorlarını yazdır
# --- 10. Eğitilen modeli kaydetme ---
joblib.dump(bst, "xgboost_model.joblib") # Modeli diske kaydet (gelecekte yüklenebilir)
Bu model daha sonra backend tarafından çağrılarak gerçek trafik verilerinde tahmin yapabiliyor.
Dashboard (React)
Frontend tarafında, uyarıları görselleştiren basit bir arayüz örneği:
JSX:
import React, { useState, useEffect } from "react";
export default function AlertList() {
const [alerts, setAlerts] = useState([]);
useEffect(() => {
// Örnek veri (ileride API ile değiştirilebilir)
setAlerts([{ id: 1, score: 0.91, desc: "High bytes flow detected" }]);
}, []);
return (
<div
style={{
padding: "1rem",
background: "#111",
color: "#fff",
borderRadius: "12px",
fontFamily: "monospace",
}}
>
<h2 style={{ color: "#4ade80" }}>Aktif Uyarılar</h2>
{alerts.length === 0 ? (
<p>Şu anda aktif uyarı yok ✅</p>
) : (
<ul style={{ listStyle: "none", padding: 0 }}>
{alerts.map((a) => (
<li
key={a.id}
style={{
marginBottom: "0.5rem",
color: a.score > 0.8 ? "#f87171" : "#facc15",
}}
>
{a.desc} — <strong>Skor:</strong> {a.score}
</li>
))}
</ul>
)}
</div>
);
}
Sonuç
VulnDetect-Cloud,
“Bulut ortamlarında ölçeklenebilir, otomatik, öğrenen bir zafiyet tespit platformu”
oluşturma hedefiyle ilerleyen bir AR-GE projesidir.
“Bulut ortamlarında ölçeklenebilir, otomatik, öğrenen bir zafiyet tespit platformu”
oluşturma hedefiyle ilerleyen bir AR-GE projesidir.

