Makine Öğrenmesiyle Ağ Saldırısı Nasıl Tespit Edilir?

Tarih: 2026-06-24 | Kategori: Python & Veri Bilimi

Etiketler: Python, Data

Bir ağda saniyede binlerce paket akar. Bunların büyük çoğunluğu

zararsız — ama küçük bir kesim gerçek tehdit. Geleneksel kural

tabanlı sistemler bu tehditleri ya tamamen atlıyor ya da çok fazla

yanlış alarm üretiyor. Bu projede her ikisini de azaltmaya çalıştım.

Veriyi Nasıl Topladım?

Wireshark ile kendi ağ trafiğimi kaydettim: 61.256 normal paket

ve Nmap port tarama aracıyla üretilmiş 3.654 saldırı paketi.

Toplamda 64.910 paket.

Buraya kadar klasik. Asıl fark, IANA'nın resmi port veritabanını

da işin içine katmam oldu. Her porta NLP ile tehdit risk skoru

atadım — SSH (22) kritik, HTTP (80) orta, bilinmeyen portlar düşük.

Bu iki kaynağı birleştirince veri çok daha anlamlı hale geldi.

Özellik Mühendisliği

Tek bir paketin özelliklerine bakarak saldırı tespit etmek zor.

Asıl ipucu, kaynağın davranış kalıbında gizli.

Bunun için 5 yeni özellik türettim:

  • Time_Diff — Paketler arası süre. Saldırılar %28 daha hızlı geliyor.
  • Bytes_Per_Sec — Anlık veri yoğunluğu. Saldırılarda 2.4× daha fazla.
  • Protocol_Enc — Protokolün sayısal kodu. Çeşitlilik = keşif aktivitesi.
  • Is_High_Risk — Risk skoru 80+ olan portlara gelen trafik bayrağı.
  • Port_Category — Hedef portun aralık sınıfı (well-known, registered, dynamic).
  • Model

    XGBoost ve Random Forest'ı karşılaştırdım. İkisi de birbirine çok

    yakın çıktı (F1: 0.3026 vs 0.3034) ama XGBoost daha tutarlıydı.

    Sonuçlar:

    | Metrik | Değer |

    |--------|-------|

    | Accuracy | %86.9 |

    | Recall | %50.6 |

    | AUC-ROC | 0.825 |

    Asıl Fark: Finansal Eşik Optimizasyonu

    Standart veri bilimi %50 karar eşiği kullanır. Ama bu maliyet

    açısından optimal değil.

    İki hata türünün maliyeti farklı:

  • Yanlış alarm → 117 TL (analistin 15 dakikası)
  • Kaçırılan saldırı → 1.500 TL (KVKK risk skoru)
  • Bu maliyetleri modelleyerek eşiği %50'den %34'e düşürdüm.

    Sonuç: 698.046 TL yerine 609.081 TL — yani 88.965 TL tasarruf.

    SHAP ile Modeli Açıkladım

    Model kararlarını kara kutu olarak bırakmak istemedim. SHAP analizi

    ile hangi özelliğin ne kadar etkili olduğunu gösterdim:

    1. Dst_Port (0.780) — Düşük port numarası en güçlü sinyal

    2. Length (0.741) — Küçük paket = SYN flood imzası

    3. Protocol_Enc (0.236) — Protokol çeşitliliği keşfi ele veriyor

    Is_High_Risk ve Port_Category ise modelde neredeyse hiç etkili

    olmadı. Gelecek versiyonda bu ikisini yeniden tasarlayacağım.

    Sonuç

    Bu proje bana şunu öğretti: iyi bir model sadece yüksek accuracy

    demek değil. Hataların maliyetini anlayıp eşiği ona göre ayarlamak,

    bazen algoritmadan daha fazla fark yaratıyor.

    Kod ve veri: GitHub