Kullanıcı Baseline Profili Oluşturma
Kullanıcı baseline profili belirli bir zaman dilimindeki normal davranışın istatistiksel özetidir. 30 günlük geçmiş veri üzerinden temel profil oluşturma: import pandas as pd import numpy as np df['timestamp'] = pd.to_datetime(df['timestamp']) baseline = df.groupby('username').agg( mean_bytes_out=('bytes_out', 'mean'), std_bytes_out=('bytes_out', 'std'), mean_login_hour=('hour', 'mean'), std_login_hour=('hour', 'std'), weekend_ratio=('is_weekend', 'mean'), unique_src_ips=('src_ip', 'nunique'), unique_dst_hosts=('dst_ip', 'nunique'), mean_session_dur=('duration', 'mean') ).reset_index()
Giris ve Temel Akis
Kullanıcı baseline profili belirli bir zaman dilimindeki normal davranışın istatistiksel özetidir. 30 günlük geçmiş veri üzerinden temel profil oluşturma: import pandas as pd import numpy as np df['timestamp'] = pd.to_datetime(df['timestamp']) baseline = df.groupby('username').agg( mean_bytes_out=('bytes_out', 'mean'), std_bytes_out=('bytes_out', 'std'), mean_login_hour=('hour', 'mean'), std_login_hour=('hour', 'std'), weekend_ratio=('is_weekend', 'mean'), unique_src_ips=('src_ip', 'nunique'), unique_dst_hosts=('dst_ip', 'nunique'), mean_session_dur=('duration', 'mean') ).reset_index()
Bu bölümün pratik akışı şu sırayla ilerler:
- df['hour'] = df['timestamp'].dt.hour
- df['dayofweek'] = df['timestamp'].dt.dayofweek
- df['is_weekend'] = df['dayofweek'].isin([5,6]).astype(int)
- baseline = df.groupby('username').agg(mean_bytes_out=('bytes_out','mean'), std_bytes_out=('bytes_out','std')).reset_index()
- print(baseline.head())
Temel Kavram Eslesmeleri
Baseline profil boyutları kullanıcı davranışının farklı yönlerini yakalar. Her boyut farklı bir tehdit kategorisine karşı görünürlük sağlar. Örnek profil boyutları: - Zaman boyutu: hangi saatlerde aktif, hafta içi/sonu oranı - Ağ boyutu: tipik bytes_out, bağlandığı host sayısı - Kimlik boyutu: kullandığı cihazlar, kaynak IP'ler - Uygulama boyutu: eriştiği servisler, HTTP metodları
- Zaman boyutu: Mesai saati dışı erişim ve impossible travel
- Ağ boyutu: Veri sızıntısı ve lateral movement
- Kimlik boyutu: Hesap ele geçirme ve yeni cihaz kullanımı
- Uygulama boyutu: Yetkisiz servis erişimi ve privilege abuse
Ilk Cekirdek Kavram
Bu bölümde öne çıkan çekirdek kavram cold start olarak verilir. Peer group analizi kullanıcıyı bireysel baseline yerine benzer rolündeki kullanıcılarla karşılaştırır. Yeni çalışanlar veya az veri olan kullanıcılar için cold start problemini çözer: import pandas as pd from sklearn.preprocessing import StandardScaler from sklearn.cluster import KMeans baseline['job_title'] = df.groupby('username')['job_title'].first() peer_groups = baseline.groupby('job_title').agg( peer_mean_bytes=('mean_bytes_out', 'mean'), peer_std_bytes=('mean_bytes_out', 'std'), peer_mean_hosts=('unique_dst_hosts', 'mean') ).reset_index() baseline = baseline.merge(peer_groups, on='job_title') baseline['peer_z_bytes'] = ( (baseline['mean_bytes_out'] - baseline['peer_mean_bytes']) / (baseline['peer_std_bytes'] + 1) ) suspicious_peers = baseline[baseline['peer_z_bytes'].abs() > 3] print(suspicious_peers[['username','job_title','mean_bytes_out','peer_mean_bytes']])
Arac, Komut veya Inceleme Akisi
Splunk ile kullanıcı baseline profili oluşturma ve anlık sapma tespiti. summary index kullanılarak baseline veri verimli depolanır: | stats avg(bytes_out) as baseline_bytes, stdev(bytes_out) as std_bytes, avg(duration) as baseline_dur, dc(dst_ip) as baseline_hosts, avg(eval(if(hour(_time)<7 OR hour(_time)>20,1,0))) as off_hours_ratio by user | join type=left user [ index=network earliest=-1h | stats avg(bytes_out) as current_bytes, dc(dst_ip) as current_hosts by user ] | table user, baseline_bytes, current_bytes, deviation
Bu bölümün pratik akışı şu sırayla ilerler:
- index=network earliest=-30d
- | stats avg(bytes_out) as baseline_bytes, stdev(bytes_out) as std_bytes by user
- | outputlookup user_baseline.csv
- | inputlookup user_baseline.csv
- | join type=left user [index=network earliest=-1h | stats avg(bytes_out) as current_bytes by user]
- | eval deviation=round((current_bytes-baseline_bytes)/(std_bytes+1),2)
- | where abs(deviation) > 3
- | sort -deviation
Kanit ve Bilesen Iliskileri
Baseline profil oluşturmada zaman penceresi seçimi kritik bir tasarım kararıdır. Çok kısa pencere gürültülü baseline, çok uzun pencere eski davranışları içerir. Örnek pencere etkileri: - 7 gün: haftalık örüntü yakalanır ama mevsimsel etki yok - 30 gün: aylık döngüler dahil, tatil dönemleri sorun olabilir - 90 gün: mevsimsel baseline, concept drift riski artar - Kayan pencere: her gün güncellenir, adaptif ama hesaplama yoğun
- 7 günlük pencere: Haftalık çalışma ritmi örüntüsünü hızlı yakalar
- 30 günlük pencere: Aylık döngü ve haftalık örüntüyü dengeler
- Kayan pencere: Davranış değişikliğine adaptif güncelleme
- Exponential smoothing: Yeni gözlemlere ağırlık vererek baseline günceller
Ikincil Odak Noktasi
Bu bölümde öne çıkan çekirdek kavram korelasyon olarak verilir. Çok boyutlu baseline sapma skoru tek bir risk değerine indirgenir. Mahalanobis mesafesi korelasyonlu özellikler için Z-score'dan üstündür: import pandas as pd import numpy as np from scipy.spatial.distance import mahalanobis features = ['bytes_out','duration','unique_hosts','failed_logins'] X_baseline = baseline[features].values cov_matrix = np.cov(X_baseline.T) cov_inv = np.linalg.inv(cov_matrix) mean_vec = X_baseline.mean(axis=0) def mahal_score(row): return mahalanobis(row, mean_vec, cov_inv) current_df[features] = current_df[features].fillna(0) current_df['mahal_dist'] = current_df[features].apply(mahal_score, axis=1) suspicious = current_df[current_df['mahal_dist'] > 3.5] print(suspicious[['username','mahal_dist']].sort_values('mahal_dist', ascending=False))
Operasyonel Dogrulama ve Raporlama
Elastic SIEM'de kullanıcı baseline profili transform API ile oluşturulur ve periyodik olarak güncellenir: PUT _transform/user_baseline_transform { "sync": { "time": { "field": "@timestamp", "delay": "60s" } }, "pivot": { "group_by": { "username": { "terms": { "field": "user.name" } } }, "aggregations": { "avg_bytes": { "avg": { "field": "network.bytes" } }, "unique_hosts": { "cardinality": { "field": "destination.ip" } }, "session_count": { "value_count": { "field": "event.id" } } } } }
Bu bölümün pratik akışı şu sırayla ilerler:
- "source": { "index": "logs-network-*" }
- "dest": { "index": "user_baseline" }
- "frequency": "1h"
- "pivot": { "group_by": { "username": { "terms": { "field": "user.name" } } } }
- "aggregations": { "avg_bytes": { "avg": { "field": "network.bytes" } } }
- "std_bytes": { "extended_stats": { "field": "network.bytes" } }
Cikti ve Kullanım Amaci
Baseline profil yönetiminde karşılaşılan operasyonel zorluklar SOC süreçlerini doğrudan etkiler. Bu zorlukları öngörerek çözüm üretmek L3 analistin sorumluluğundadır. Örnek: Bir çalışan 2 haftalık izinden döndüğünde normal davranışı anomali olarak işaretlenir. Bu vacation effect problemidir ve baseline'ın izin dönemlerini dışarıda bırakması gerekir.
- Vacation effect: İzin dönemlerini baseline hesabından çıkar
- Role değişikliği: Yeni role göre baseline'ı sıfırla ve yeniden oluştur
- Shared account: Hesabı bireysel değil servis hesabı olarak profilini al
- Mevsimsel örüntü: Yıl bazlı pencere veya seasonality decomposition uygula
Son Kavram ve Cikis
Bu bölümde öne çıkan çekirdek kavram standart sapma olarak verilir. Baseline kalitesini ölçmek için stability score hesaplanır. Yüksek varyasyonlu baseline güvenilmez anomali tespitine yol açar: import pandas as pd import numpy as np baseline['cv_bytes'] = baseline['std_bytes_out'] / (baseline['mean_bytes_out'] + 1) baseline['cv_hosts'] = baseline['std_hosts'] / (baseline['mean_hosts'] + 1) baseline['baseline_quality'] = pd.cut( baseline['cv_bytes'], bins=[0, 0.3, 0.7, 1.5, float('inf')], labels=['STABLE','MODERATE','UNSTABLE','UNRELIABLE'] ) print(baseline['baseline_quality'].value_counts()) unreliable = baseline[baseline['baseline_quality'] == 'UNRELIABLE'] print(f'Güvenilmez baseline kullanıcı sayısı: {len(unreliable)}') CV (Coefficient of Variation) standart sapmanın ortalamaya oranıdır.
Bu Egitimden Ne Kazanirsiniz?
Bu icerik, Kullanıcı Baseline Profili Oluşturma 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: Zaman boyutu, Ağ boyutu, Kimlik boyutu, Uygulama boyutu, 7 günlük pencere, 30 günlük pencere, Kayan pencere, Exponential smoothing, Vacation effect, Role değişikliği. Egitimin mantigi; once temel akis kurmak, sonra eslestirme ve kavram netlestirme yapmak, en sonda ise bulguyu operasyonel bir sonuca baglamaktir.