Hipotez Tabanlı Tehdit Avcılığı
Hipotez tabanlı tehdit avcılığı reaktif alarm yerine proaktif araştırma yaklaşımıdır. Analist bir saldırı senaryosu tanımlar ve bunu destekleyen kanıt arar. Temel avcılık döngüsü:
1. Hipotez: APT grubu T1059.001 (PowerShell) kullanarak
encoded komutlar çalıştırıyor olabilir
import pandas as pd hypothesis = { 'id': 'HYP-2024-001', 'technique': 'T1059.001', 'description': 'Encoded PowerShell execution via parent process anomaly', 'data_sources': ['process_creation', 'powershell_log', 'sysmon_event1'], 'hunt_query': 'EncodedCommand OR -enc OR -e [base64]', 'confidence': 'MEDIUM', 'priority': 'HIGH' } ps_encoded = df_proc[ df_proc['CommandLine'].str.contains( r'-[Ee][Nn][Cc]|-[Ee][Nn][Cc][Oo][Dd][Ee][Dd]', regex=True, na=False ) ]
Giris ve Temel Akis
Hipotez tabanlı tehdit avcılığı reaktif alarm yerine proaktif araştırma yaklaşımıdır. Analist bir saldırı senaryosu tanımlar ve bunu destekleyen kanıt arar. Temel avcılık döngüsü:
1. Hipotez: APT grubu T1059.001 (PowerShell) kullanarak
encoded komutlar çalıştırıyor olabilir
import pandas as pd hypothesis = { 'id': 'HYP-2024-001', 'technique': 'T1059.001', 'description': 'Encoded PowerShell execution via parent process anomaly', 'data_sources': ['process_creation', 'powershell_log', 'sysmon_event1'], 'hunt_query': 'EncodedCommand OR -enc OR -e [base64]', 'confidence': 'MEDIUM', 'priority': 'HIGH' } ps_encoded = df_proc[ df_proc['CommandLine'].str.contains( r'-[Ee][Nn][Cc]|-[Ee][Nn][Cc][Oo][Dd][Ee][Dd]', regex=True, na=False ) ]
Bu bölümün pratik akışı şu sırayla ilerler:
- hypothesis = {'id':'HYP-2024-001','technique':'T1059.001'}
- df_proc = pd.read_csv('process_creation.csv')
- ps_encoded = df_proc[df_proc['CommandLine'].str.contains(r'-[Ee][Nn][Cc]', regex=True)]
- print(f"Hipotez: {hypothesis['id']}")
- print(f"Tespit edilen encoded PS: {len(ps_encoded)} olay")
- print(ps_encoded[['timestamp','hostname','user','CommandLine']].head())
Temel Kavram Eslesmeleri
Tehdit avcılığı hipotezleri farklı kaynaklardan üretilir. Kaliteli hipotez kaynağı avcılığın başarısını doğrudan etkiler. Örnek hipotez kaynakları: - Threat intel raporu: APT29'un spear phishing sonrası LSASS dump kullandığı bildirildi - MITRE ATT&CK: T1003.001 OS Credential Dumping — LSASS Memory - Güvenlik blogu: yeni Cobalt Strike C2 profil imzası yayınlandı - Anomali alarmı: bir host gece 02:00'da yüksek DNS sorgusu gönderiyor
- Threat intel raporu: Bilinen aktör TTP'sine dayalı hedefli avcılık
- MITRE ATT&CK matrisi: Teknik bazlı kapsam odaklı avcılık
- SIEM anomali alarmı: Veri güdümlü reaktif avcılık
- Red team raporu: Tespit boşluğuna dayalı kural geliştirme
Ilk Cekirdek Kavram
Bu bölümde öne çıkan çekirdek kavram 10 olarak verilir. LSASS memory dump tespiti kritik bir tehdit avcılığı hipotezidir. T1003.001 tekniği kimlik bilgisi hırsızlığında kullanılır: import pandas as pd df_sysmon = pd.read_csv('sysmon_events.csv') # EventID 10: ProcessAccess — LSASS erişimi lsass_access = df_sysmon[ (df_sysmon['EventID'] == 10) & (df_sysmon['TargetImage'].str.contains('lsass.exe', case=False, na=False)) & (df_sysmon['GrantedAccess'].isin(['0x1010', '0x1410', '0x1438', '0x143a', '0x1fffff'])) ] print(f'LSASS erişim girişimi: {len(lsass_access)}') print(lsass_access[['timestamp','SourceImage','GrantedAccess','hostname']] .sort_values('timestamp').head(20)) suspicious_sources = lsass_access[~lsass_access['SourceImage'].str.contains( 'MsMpEng|svchost|csrss|wininit', case=False, na=False )] print(f'Şüpheli LSASS erişimi: {len(suspicious_sources)}')
Arac, Komut veya Inceleme Akisi
Splunk ile hipotez tabanlı PowerShell avcılığı. Encoded komut tespiti ve parent process anomalisi: index=sysmon EventCode=1 earliest=-24h (CommandLine="-enc" OR CommandLine="-EncodedCommand" OR CommandLine="*-e *") Image="powershell" | eval parent_suspicious=if( match(ParentImage,"word|excel|outlook|chrome|firefox|mshta|wscript|cscript"), 1, 0 ) | eval risk=case( parent_suspicious=1 AND is_encoded=1, "CRITICAL", parent_suspicious=1, "HIGH", is_encoded=1 AND cmd_len>500, "HIGH", is_encoded=1, "MEDIUM", true(), "LOW" ) | table _time, hostname, user, ParentImage, CommandLine, cmd_len, risk
Bu bölümün pratik akışı şu sırayla ilerler:
- index=sysmon EventCode=1 earliest=-24h (CommandLine="-enc") Image="powershell"
- | eval cmd_len=len(CommandLine)
- | eval is_encoded=if(match(CommandLine,"-[Ee][Nn][Cc]"),1,0)
- | eval parent_suspicious=if(match(ParentImage,"word|excel|outlook"),1,0)
- | eval risk=case(parent_suspicious=1 AND is_encoded=1,"CRITICAL",parent_suspicious=1,"HIGH",true(),"LOW")
- | where risk IN ("CRITICAL","HIGH")
- | table _time, hostname, user, ParentImage, CommandLine, risk
- | sort -risk, -cmd_len
Kanit ve Bilesen Iliskileri
Tehdit avcılığı olgunluk modeli (Hunting Maturity Model) organizasyonun avcılık kapasitesini beş seviyede tanımlar. Örnek seviye göstergeleri: - HMM0: sadece SIEM alarmlarına tepki, proaktif avcılık yok - HMM2: rutin prosedür avcılığı, MITRE ATT&CK tabanlı - HMM4: makine öğrenmesi destekli, otomatik hipotez üretimi
- HMM0 — Başlangıç: Sadece SIEM alarmlarına reaktif müdahale
- HMM2 — Prosedürel: Rutin TTP tabanlı avcılık prosedürleri mevcut
- HMM3 — Yenilikçi: Yeni tehdit aktörü TTP'leri için hipotez üretimi
- HMM4 — Lider: ML destekli otomatik hipotez ve önceliklendirme
Ikincil Odak Noktasi
Bu bölümde öne çıkan çekirdek kavram 0x17 olarak verilir. Kerberoasting tespiti hipotez tabanlı avcılığın klasik örneğidir. T1558.003 tekniği servis hesabı hash'ini çevrimdışı kırmak için kullanılır: import pandas as pd df_sec = pd.read_csv('security_events.csv') # EventID 4769: Kerberos Service Ticket Request kerberoast = df_sec[ (df_sec['EventID'] == 4769) & (df_sec['TicketEncryptionType'] == '0x17') & (~df_sec['ServiceName'].str.endswith('$', na=False)) ] print(f'Kerberoasting adayı: {len(kerberoast)}') kerberoast_by_user = kerberoast.groupby('AccountName').agg( unique_services=('ServiceName','nunique'), total_requests=('ServiceName','count'), first_seen=('timestamp','min'), last_seen=('timestamp','max') ).reset_index() high_risk = kerberoast_by_user[kerberoast_by_user['unique_services'] > 3] print(high_risk.sort_values('unique_services', ascending=False))
Operasyonel Dogrulama ve Raporlama
Elastic EQL ile hipotez tabanlı avcılık. Parent process anomalisi ve kod enjeksiyonu tespiti: [process where event.type == "start" and process.parent.name in ("winword.exe","excel.exe","outlook.exe","chrome.exe") and process.name in ("powershell.exe","cmd.exe","wscript.exe","mshta.exe")] [network where event.type == "connection" and not cidrmatch(destination.ip, "10.0.0.0/8","172.16.0.0/12","192.168.0.0/16") and destination.port in (80, 443, 4444, 8080, 8443)] [file where event.type == "creation" and file.extension in ("exe","dll","ps1","vbs","js") and file.path like "\Temp\" or file.path like "\AppData\"]
Bu bölümün pratik akışı şu sırayla ilerler:
- sequence by host.name with maxspan=30s
- [process where process.parent.name in ("winword.exe","excel.exe") and process.name in ("powershell.exe","cmd.exe")]
- [network where not cidrmatch(destination.ip,"10.0.0.0/8") and destination.port in (80,443,4444)]
- [file where file.extension in ("exe","dll","ps1") and file.path like "\Temp\"]
Cikti ve Kullanım Amaci
Tehdit avcılığı sürecinin sonunda bulgular belgelenerek aksiyon alınır. Her bulgu tipi farklı bir aksiyon sürecini tetikler. Örnek bulgu tipleri: - True positive: gerçek tehdit tespit edildi → IR süreci başlat - False positive: alarm gürültüsü → kural iyileştir - Tespit boşluğu: tehdit vardı ama alarm üretilmedi → yeni kural yaz - Yeni TTP: daha önce görülmemiş teknik → threat intel güncelle
- True positive: Incident response sürecini başlat
- False positive: SIEM kuralını iyileştir, eşiği ayarla
- Tespit boşluğu: Yeni Sigma veya SIEM kuralı yaz
- Yeni TTP keşfi: Threat intel platformuna IOC ve TTP ekle
Son Kavram ve Cikis
Bu bölümde öne çıkan çekirdek kavram coverage_rate olarak verilir. Tehdit avcılığı metrikleri programın etkinliğini ölçer. Mean Time to Hunt (MTTH) ve Hunt Coverage Rate en kritik KPI'lardır: import pandas as pd from datetime import datetime hunt_log = pd.read_csv('hunt_log.csv') hunt_log['start_time'] = pd.to_datetime(hunt_log['start_time']) hunt_log['end_time'] = pd.to_datetime(hunt_log['end_time']) hunt_log['hunt_duration_hours'] = ( hunt_log['end_time'] - hunt_log['start_time'] ).dt.total_seconds() / 3600 mtth = hunt_log['hunt_duration_hours'].mean() tp_rate = hunt_log[hunt_log['result']=='TRUE_POSITIVE'].shape[0] / len(hunt_log) mitre_covered = hunt_log['mitre_technique'].nunique() total_mitre = 196 coverage_rate = mitre_covered / total_mitre * 100 print(f'MTTH: {mtth:.1f} saat') print(f'True Positive Rate: {tp_rate:.1%}') print(f'MITRE Coverage: {coverage_rate:.1f}% ({mitre_covered}/{total_mitre})')
Bu Egitimden Ne Kazanirsiniz?
Bu icerik, Hipotez Tabanlı Tehdit Avcılığı 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: Threat intel raporu, MITRE ATT&CK matrisi, SIEM anomali alarmı, Red team raporu, HMM0 — Başlangıç, HMM2 — Prosedürel, HMM3 — Yenilikçi, HMM4 — Lider, True positive, False positive. Egitimin mantigi; once temel akis kurmak, sonra eslestirme ve kavram netlestirme yapmak, en sonda ise bulguyu operasyonel bir sonuca baglamaktir.