CyberFlow Logo CyberFlow BLOG
Soc L3 Cloud Security

Denetimsiz Öğrenme ile Anomali Tespiti

✍️ Ahmet BİRKAN 📂 Soc L3 Cloud Security

Denetimsiz Öğrenme ile Anomali Tespiti konusunu SOC L3 - İleri Tehdit Avcılığı - Veri Madenciliği ve Modelleme baglaminda blog formatinda ogrenin. Temel akis, kavram eslestirmeleri ve analiz mantigi tek bir yapida birlestirildi.

Denetimsiz Öğrenme ile Anomali Tespiti

Denetimsiz öğrenmede model etiketlenmemiş veri üzerinde örüntüler arar. SOC'ta sıfır gün saldırıları ve bilinmeyen tehditler için kritiktir. Isolation Forest algoritması anomali tespitinde en yaygın kullanılan denetimsiz yöntemdir: import pandas as pd from sklearn.ensemble import IsolationForest model = IsolationForest( n_estimators=100, contamination=0.01, random_state=42 )

Giris ve Temel Akis

Denetimsiz öğrenmede model etiketlenmemiş veri üzerinde örüntüler arar. SOC'ta sıfır gün saldırıları ve bilinmeyen tehditler için kritiktir. Isolation Forest algoritması anomali tespitinde en yaygın kullanılan denetimsiz yöntemdir: import pandas as pd from sklearn.ensemble import IsolationForest model = IsolationForest( n_estimators=100, contamination=0.01, random_state=42 )

Bu bölümün pratik akışı şu sırayla ilerler:

  • X = df[['bytes','duration','unique_ports','conn_count']]
  • model = IsolationForest(n_estimators=100, contamination=0.01)
  • df['anomaly_score'] = model.fit_predict(X)
  • df['anomaly'] = df['anomaly_score'].apply(lambda x: 1 if x == -1 else 0)
  • anomalies = df[df['anomaly'] == 1]
  • print(f'Tespit edilen anomali: {len(anomalies)}')

Temel Kavram Eslesmeleri

Denetimsiz öğrenme algoritmaları farklı anomali tiplerine göre seçilir. Her algoritmanın güçlü ve zayıf olduğu senaryolar vardır. Örnek karşılaştırma: - Isolation Forest: yüksek boyutlu veride hızlı, global anomali tespiti - LOF: yerel yoğunluk tabanlı, küme içi anomali tespiti - Autoencoder: karmaşık örüntüler, derin öğrenme tabanlı - DBSCAN: gürültü noktalarını anomali olarak işaretler

  • Isolation Forest: Yüksek boyutlu log verisinde hızlı global anomali
  • LOF: Yerel komşuluğa göre yoğunluk sapması tespiti
  • Autoencoder: Karmaşık ağ trafik örüntülerinde derin anomali
  • DBSCAN: Kümelere giremeyen gürültü noktalarını işaretler

Ilk Cekirdek Kavram

Bu bölümde öne çıkan çekirdek kavram contamination olarak verilir. Isolation Forest'ta contamination parametresi veri setindeki beklenen anomali oranını belirtir. Bu değer yanlış ayarlandığında model performansı dramatik biçimde düşer: from sklearn.ensemble import IsolationForest from sklearn.model_selection import cross_val_score import numpy as np for c in [0.001, 0.01, 0.05, 0.1]: model = IsolationForest(contamination=c, random_state=42) model.fit(X_train) scores = model.score_samples(X_test) print(f'contamination={c}, mean_score={scores.mean():.4f}') SOC ortamında tipik anomali oranı yüzde 1 ile yüzde 5 arasındadır.

Arac, Komut veya Inceleme Akisi

Autoencoder derin öğrenme tabanlı anomali tespitinde kullanılır. Normal trafik üzerinde eğitilen model, anormal trafiği yüksek reconstruction error ile işaretler: import tensorflow as tf from tensorflow.keras import layers, Model input_dim = X_train.shape[1] encoded = layers.Dense(32, activation='relu')(encoder_input) encoded = layers.Dense(16, activation='relu')(encoded) decoded = layers.Dense(32, activation='relu')(encoded) decoded = layers.Dense(input_dim, activation='sigmoid')(decoded) autoencoder.fit(X_train, X_train, epochs=50, batch_size=256, validation_split=0.1) anomalies = X_test[recon_error > recon_error.numpy().mean() + 3 * recon_error.numpy().std()]

Bu bölümün pratik akışı şu sırayla ilerler:

  • encoder_input = tf.keras.Input(shape=(input_dim,))
  • encoded = layers.Dense(16, activation='relu')(encoder_input)
  • decoded = layers.Dense(input_dim, activation='sigmoid')(encoded)
  • autoencoder = Model(encoder_input, decoded)
  • autoencoder.compile(optimizer='adam', loss='mse')
  • autoencoder.fit(X_train, X_train, epochs=50)
  • recon_error = tf.reduce_mean(tf.square(X_test - autoencoder.predict(X_test)), axis=1)

Kanit ve Bilesen Iliskileri

LOF (Local Outlier Factor) algoritması bir noktanın yerel yoğunluğunu komşularıyla karşılaştırır. LOF skoru 1'den büyük olan noktalar anomali adayıdır. Python uygulaması: from sklearn.neighbors import LocalOutlierFactor model = LOF(n_neighbors=20, contamination=0.01) df['lof_score'] = model.fit_predict(X) LOF skoru ne kadar yüksekse nokta komşularından o kadar izole demektir.

  • n_neighbors: Yerel yoğunluk hesabında kullanılan komşu sayısı
  • LOF skoru > 1: Nokta komşularından daha seyrek bölgede
  • Reachability distance: İki nokta arası normalleştirilmiş mesafe ölçüsü
  • Local reachability density: Noktanın komşularına göre yerel yoğunluğu

Ikincil Odak Noktasi

Bu bölümde öne çıkan çekirdek kavram -1 olarak verilir. DBSCAN (Density-Based Spatial Clustering) küme oluşturamayan noktaları gürültü (noise) olarak işaretler ve bu noktalar SOC'ta anomali adayı olarak değerlendirilir: from sklearn.cluster import DBSCAN from sklearn.preprocessing import StandardScaler import pandas as pd X_scaled = StandardScaler().fit_transform(X) dbscan = DBSCAN(eps=0.5, min_samples=10) df['cluster'] = dbscan.fit_predict(X_scaled) anomalies = df[df['cluster'] == -1] normal = df[df['cluster'] != -1] print(f'Anomali: {len(anomalies)}, Normal küme sayısı: {df["cluster"].nunique() - 1}')

Operasyonel Dogrulama ve Raporlama

Splunk MLTK ile denetimsiz anomali tespiti DensityFunction ve KMeans algoritmaları kullanılarak yapılır: | fit DensityFunction bytes duration unique_ports threshold=0.01 INTO network_density_model

Bu bölümün pratik akışı şu sırayla ilerler:

  • index=network earliest=-7d
  • | fields src_ip, bytes, duration, unique_ports
  • | fit DensityFunction bytes duration unique_ports threshold=0.01 INTO network_density_model
  • | where IsOutlier=1
  • | eval risk_score = round((1 - BoundaryDistance) * 100, 2)
  • | table src_ip, bytes, duration, unique_ports, risk_score
  • | sort -risk_score

Cikti ve Kullanım Amaci

Denetimsiz anomali tespit modellerinin üretim ortamında karşılaştığı zorluklar model güvenilirliğini etkiler. Bu zorlukları önceden yönetmek L3 analistin sorumluluğundadır. Örnek: Bir ağda yeni bir uygulama devreye alındığında trafik örüntüsü değişir ve model bu normal değişikliği anomali olarak işaretler — bu concept drift problemidir.

  • Concept drift: Modeli periyodik olarak yeni veriyle yeniden eğit
  • Yüksek FP oranı: Contamination parametresini düşür, eşiği artır
  • Boyut laneti: PCA ile boyut indirgeme uygula
  • Cold start: Kural tabanlı baseline ile modeli önyükle

Son Kavram ve Cikis

Bu bölümde öne çıkan çekirdek kavram over_field_name olarak verilir. Elastic Stack ML modülünde denetimsiz anomali tespiti için unsupervised job tanımlanır. Population analizi her varlığı toplulukla karşılaştırır: PUT _ml/anomaly_detectors/network_population { "analysis_config": { "bucket_span": "15m", "detectors": [{ "function": "high_mean", "field_name": "bytes", "over_field_name": "src_ip", "by_field_name": "dst_port" }], "influencers": ["src_ip", "dst_port"] }, "data_description": { "time_field": "@timestamp" } } over_field_name parametresi her src_ip'yi toplulukla karşılaştırmalı analiz eder.

Bu Egitimden Ne Kazanirsiniz?

Bu icerik, Denetimsiz Öğrenme ile Anomali Tespiti konusunu SOC L3 - İleri Tehdit Avcılığı - Veri Madenciliği ve Modelleme baglaminda parcali degil, butunlu bir ogrenme akisina donusturur. Yalnizca kavramlari ezberlemek yerine surec sirasini, bilesenler arasi iliskiyi ve hangi kanitin neden onemli oldugunu kavramayi hedefler.

Ozet

Bu ders kapsaminda one cikan basliklar: Isolation Forest, LOF, Autoencoder, DBSCAN, n_neighbors, LOF skoru > 1, Reachability distance, Local reachability density, Concept drift, Yüksek FP oranı. Egitimin mantigi; once temel akis kurmak, sonra eslestirme ve kavram netlestirme yapmak, en sonda ise bulguyu operasyonel bir sonuca baglamaktir.