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.