CyberFlow Logo CyberFlow BLOG
Soc L3 Cloud Security

UEBA (User and Entity Behavior Analytics) Temelleri

✍️ Ahmet BİRKAN 📂 Soc L3 Cloud Security

UEBA (User and Entity Behavior Analytics) Temelleri 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.

UEBA (User and Entity Behavior Analytics) Temelleri

UEBA kullanıcı ve varlık davranışlarını baseline ile karşılaştırarak anormallikleri tespit eder. Python ile temel UEBA pipeline'ı: import pandas as pd from sklearn.preprocessing import StandardScaler from sklearn.ensemble import IsolationForest user_baseline = df.groupby('username').agg( avg_bytes_out=('bytes_out', 'mean'), avg_login_hour=('login_hour', 'mean'), avg_session_dur=('duration', 'mean'), unique_hosts=('dst_ip', 'nunique'), failed_login_rate=('failed_login', 'mean') ).reset_index() print(suspicious[['username','avg_bytes_out','failed_login_rate']])

Giris ve Temel Akis

UEBA kullanıcı ve varlık davranışlarını baseline ile karşılaştırarak anormallikleri tespit eder. Python ile temel UEBA pipeline'ı: import pandas as pd from sklearn.preprocessing import StandardScaler from sklearn.ensemble import IsolationForest user_baseline = df.groupby('username').agg( avg_bytes_out=('bytes_out', 'mean'), avg_login_hour=('login_hour', 'mean'), avg_session_dur=('duration', 'mean'), unique_hosts=('dst_ip', 'nunique'), failed_login_rate=('failed_login', 'mean') ).reset_index() print(suspicious[['username','avg_bytes_out','failed_login_rate']])

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

  • user_baseline = df.groupby('username').agg(...).reset_index()
  • X = user_baseline.drop('username', axis=1)
  • X_scaled = StandardScaler().fit_transform(X)
  • model = IsolationForest(contamination=0.02, random_state=42)
  • user_baseline['ueba_score'] = model.fit_predict(X_scaled)
  • suspicious = user_baseline[user_baseline['ueba_score'] == -1]
  • print(suspicious[['username','avg_bytes_out']])

Temel Kavram Eslesmeleri

UEBA sistemleri farklı veri kaynaklarını birleştirerek bütünsel kullanıcı profili oluşturur. Her kaynak farklı bir davranış boyutuna görünürlük sağlar. Örnek çok kaynaklı UEBA korelasyonu: - AD Event 4624 + VPN log + DLP alert → aynı kullanıcı için - Giriş zamanı anomalisi + yüksek veri çıkışı + hassas dosya erişimi - Risk skoru = 45 + 30 + 25 = 100 → kritik uyarı

  • Active Directory log: Kimlik doğrulama ve yetki değişiklikleri
  • DLP alert: Hassas veri erişimi ve dışarı çıkışı
  • VPN log: Coğrafi konum ve erişim zamanı anomalisi
  • Endpoint EDR: Süreç zinciri ve dosya sistemi davranışı

Ilk Cekirdek Kavram

Bu bölümde öne çıkan çekirdek kavram 40 olarak verilir. UEBA'da risk skorlama birden fazla sinyal birleştirilerek yapılır. Ağırlıklı toplam en yaygın yöntemdir: import pandas as pd df['risk_score'] = ( df['off_hours_login'] * 25 + df['new_device'] * 20 + df['impossible_travel'] * 40 + df['failed_login_spike'] * 15 + df['sensitive_data_access'] * 30 ) df['risk_level'] = pd.cut( df['risk_score'], bins=[0, 30, 60, 100, float('inf')], labels=['LOW','MEDIUM','HIGH','CRITICAL'] ) critical = df[df['risk_level'] == 'CRITICAL'] print(f'Kritik kullanıcı sayısı: {len(critical)}')

Arac, Komut veya Inceleme Akisi

Windows Event Log üzerinde UEBA analizi için kritik Event ID'ler izlenir. Splunk ile çok katmanlı kullanıcı anomali tespiti: index=wineventlog earliest=-24h (EventCode=4624 OR EventCode=4625 OR EventCode=4648 OR EventCode=4768) | stats sum(eval(if(EventCode=4625,1,0))) as failed_count, sum(eval(if(EventCode=4624,1,0))) as success_count, sum(is_off_hours) as off_hours_count, dc(src_ip) as unique_src by user | eval risk=if(fail_ratio>50 AND off_hours_count>3, "HIGH", if(fail_ratio>20,"MEDIUM","LOW"))

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

  • index=wineventlog earliest=-24h (EventCode=4624 OR EventCode=4625)
  • | eval login_hour=tonumber(strftime(_time, "%H"))
  • | eval is_off_hours=if(login_hour<7 OR login_hour>20, 1, 0)
  • | stats sum(eval(if(EventCode=4625,1,0))) as failed_count by user
  • | eval fail_ratio=round(failed_count/(failed_count+success_count+0.001)*100,2)
  • | eval risk=if(fail_ratio>50 AND off_hours_count>3, "HIGH", "LOW")
  • | where risk!="LOW"
  • | sort -fail_ratio

Kanit ve Bilesen Iliskileri

UEBA'da izlenen temel kullanıcı davranış anomalileri belirli saldırı kategorilerine işaret eder. Bu örüntüleri tanımak L3 analistin triage sürecini hızlandırır. Örnek MITRE ATT&CK eşleştirmesi: - T1078 Valid Accounts → impossible travel + yeni cihaz - T1110 Brute Force → yüksek failed_login_rate - T1048 Exfiltration → yüksek bytes_out + off_hours

  • Impossible travel: T1078 — Valid Accounts ile hesap ele geçirme
  • Failed login spike: T1110 — Brute Force kimlik saldırısı
  • Off-hours yüksek bytes_out: T1048 — Exfiltration Over Alternative Protocol
  • Yeni admin grubu üyeliği: T1098 — Account Manipulation

Ikincil Odak Noktasi

Bu bölümde öne çıkan çekirdek kavram 900 olarak verilir. Impossible travel tespiti UEBA'nın en güçlü sinyallerinden biridir. İki farklı coğrafi konumdan aynı kullanıcının fiziksel olarak mümkün olmayan sürede giriş yapması hesap ele geçirme işaretidir: import pandas as pd from geopy.distance import geodesic df = df.sort_values(['username','timestamp']) df['prev_lat'] = df.groupby('username')['latitude'].shift(1) df['prev_lon'] = df.groupby('username')['longitude'].shift(1) df['prev_time'] = df.groupby('username')['timestamp'].shift(1) df['time_diff_hours'] = (df['timestamp'] - df['prev_time']).dt.total_seconds() / 3600 df['distance_km'] = df.apply( lambda r: geodesic((r['prev_lat'],r['prev_lon']),(r['latitude'],r['longitude'])).km if pd.notna(r['prev_lat']) else 0, axis=1 ) df['speed_kmh'] = df['distance_km'] / (df['time_diff_hours'] + 0.001) impossible = df[df['speed_kmh'] > 900] print(impossible[['username','distance_km','time_diff_hours','speed_kmh']])

Operasyonel Dogrulama ve Raporlama

Elastic SIEM'de UEBA kuralları EQL (Event Query Language) ile yazılır. Çok adımlı davranış zinciri tespiti: Bu EQL sorgusu 1 saat içinde: 5 başarısız giriş → başarılı giriş → hassas dosya erişimi → yurt dışı veri transferi zincirini tespit eder.

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

  • sequence by user.name with maxspan=1h
  • [authentication where event.outcome == "failure"] with runs=5
  • [authentication where event.outcome == "success"]
  • [file where file.path like "sensitive" and event.action == "access"]
  • [network where network.bytes > 10000000 and destination.geo.country_iso_code != "TR"]

Cikti ve Kullanım Amaci

UEBA platformlarının kurumsal SOC ortamına entegrasyonu farklı bileşenler gerektirir. Her bileşen UEBA sisteminin farklı bir işlevini destekler. Örnek entegrasyon mimarisi: AD + VPN + EDR + DLP → Log aggregation → UEBA engine → Risk scoring → SOAR → Ticket

  • Identity provider (AD/LDAP): Kullanıcı rolleri ve grup üyelikleri
  • SOAR entegrasyonu: Yüksek riskli kullanıcıyı otomatik karantinaya al
  • HR sistemi: İşten ayrılan kullanıcı riski artır
  • Threat intelligence feed: Kullanıcı IP'sini IOC listesiyle zenginleştir

Son Kavram ve Cikis

Bu bölümde öne çıkan çekirdek kavram öğrenme hızı olarak verilir. UEBA modellerinin sürekli güncellenmesi model drift'i önler. Adaptif baseline her yeni gün verisini ağırlıklı ortalama ile günceller: import pandas as pd import numpy as np alpha = 0.1 # öğrenme hızı def update_baseline(current_baseline, new_observation, alpha=0.1): return (1 - alpha) * current_baseline + alpha * new_observation baseline_bytes = df[df['username']=='jdoe']['bytes_out'].iloc[0] for daily_avg in df[df['username']=='jdoe']['bytes_out'].iloc[1:]: baseline_bytes = update_baseline(baseline_bytes, daily_avg, alpha) z_score = (daily_avg - baseline_bytes) / (baseline_bytes * 0.3 + 1) if abs(z_score) > 3: print(f'Anomali: {daily_avg:.0f} bytes (baseline: {baseline_bytes:.0f})')

Bu Egitimden Ne Kazanirsiniz?

Bu icerik, UEBA (User and Entity Behavior Analytics) Temelleri 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: Active Directory log, DLP alert, VPN log, Endpoint EDR, Impossible travel, Failed login spike, Off-hours yüksek bytes_out, Yeni admin grubu üyeliği, Identity provider (AD/LDAP), SOAR entegrasyonu. Egitimin mantigi; once temel akis kurmak, sonra eslestirme ve kavram netlestirme yapmak, en sonda ise bulguyu operasyonel bir sonuca baglamaktir.