Dosya çıkarma ve IOC üretimi
- HTTP ve SMB akışlarından dosya çıkar. Dosya özetini Zeek files.log ile eşleştir. YARA ve Sigma kuralları yaz. Bulguları STIX biçiminde ve uygun TLP paylaşım etiketiyle hazırla.
- Bu derste web01 kaydından indirilen yükü ayıklayıp IOC listesi kuracaksın.
- IOC yazmak analizin son değil, paylaşılabilir ürünüdür.
Puan bütün etkinlikleri cevaplayınca hesaba yazılır. Bu dersi tamamlayınca +60 XP alacaksın. Giriş yapmadan ilerlersen puan yalnız bu tarayıcıda durur.
Önceki derslerde şifreli kanalı ve DNS tünelini buldun. Şimdi elindeki en somut delile, ağdan geçen dosyaya dönüyorsun. fin-pc12'nin indirdiği update.exe düz HTTP ile geldi, bu yüzden kayıttan olduğu gibi çıkarılabilir. Bu derste önce dosyayı ağ kaydından ayıklayacak ve diskteki kopyasıyla eşleyeceksin.
Sonra çıkan örnekle güvenle çalışmayı ve ona özgü bir YARA kuralı yazmayı göreceksin. Ardından göstergeleri ömürlerine göre tartacaksın. En sonda kaynağı ve güven düzeyi yazılmış bir IOC listesi kurup onu tespit kuralına ve paylaşılabilir bir biçime çevireceksin.
Ağdan dosya çıkarmak
Şifresiz bir aktarımda dosya, paketlerin içinde parça parça gider. Analiz aracı bu parçaları TCP akışında birleştirir, protokolün kurallarına göre ayıklar ve diske yazar. HTTP'de gövde sıkıştırılmış (gzip) ya da parçalı (chunked) gelebilir. Wireshark'ın HTTP ayrıştırıcısı ikisini de varsayılan ayarlarla çözer.
Range istekleriyle parça parça inen bir dosyada ise her parça ayrı nesne olarak çıkar, onları sırayla birleştirmek sana kalır. Kayıt eksiksiz olmalıdır. Yakalayıcı paket düşürdüyse dosyada delik kalır ve özet diskteki kopyayla tutmaz.
$ tshark -r web01.pcap -Y 'http.request.uri contains "update.exe"' -T fields \
-e frame.time -e ip.src -e http.host -e http.request.uri
2026-09-14T03:07:09.502117000+0300 10.20.30.61 cdn-update-srv.example /d/update.exe
$ mkdir -p /eviz/cikarilan
$ tshark -r web01.pcap --export-objects http,/eviz/cikarilan/
$ ls /eviz/cikarilan/
ayar.php logo.png update.exe
$ file /eviz/cikarilan/update.exe
update.exe: PE32+ executable (console) x86-64, for MS Windows
$ sha256sum /eviz/cikarilan/update.exe
4b8e7d2c9a01f36b5e84c7a29d0f1b63e57a8c94d2b06f1e83a75c29b40d6f18 /eviz/cikarilan/update.exeKomutları satır satır oku. İlk komut update.exe isteğini bulur: fin-pc12, 03:07:09'da cdn-update-srv.example adresinden /d/update.exe dosyasını istemiş. Diskteki $MFT kaydı dosyanın Temp klasöründe 03:07:11'de oluştuğunu söylüyor.
İkinci grup kayıttaki bütün HTTP nesnelerini önceden açılmış klasöre yazar. file komutu uzantıya değil içeriğe bakar ve dosyanın 64 bitlik bir Windows programı olduğunu söyler. SHA-256 özeti diskteki kopyanınkiyle aynı, yani ağ ve disk aynı dosyayı doğruluyor. Aynı seçenek başka protokollerde de çalışır.
tshark --export-objects help desteklenen türleri listeler: dicom, ftp-data, http, imf, smb, tftp ve sertifikalar için x509af. SMB türü, paylaşım üzerinden kopyalanan dosyaları verir ve yanal hareket incelemelerinde işe yarar. POST istekleri ise sunucuya gönderilen veriyi gösterir.
İç makineden dışarı giden büyük POST veri kaçırmanın, dışarıdan web sunucusuna gelen POST ise yüklemenin izidir. Aşağıda saldırgan web01'e önce 412 baytlık bir istekle dosya yüklüyor, sonra aynı dosyaya kısa komutlar gönderiyor. Zeek de her dosyayı türü, boyutu, bağlantısı ve özetiyle files.log'a yazar.
$ tshark -r web01.pcap --export-objects smb,/eviz/smb/
$ tshark -r web01.pcap -Y 'http.request.method == "POST"' -T fields \
-e frame.time -e http.request.uri -e http.content_length
2026-09-14T03:04:31.884402000+0300 /iletisim/ek-yukle.php 412
2026-09-14T03:04:55.420220000+0300 /uploads/ayar.php 4
2026-09-14T03:05:40.117935000+0300 /uploads/ayar.php 38
$ zeek -C -r web01.pcap frameworks/files/hash-all-files
$ zeek-cut fuid uid source mime_type total_bytes sha256 < files.log | grep x-dosexec
Fq3Rz81kLw0cVbN2Ye C7mX2d3o9TqWb1FhAe HTTP application/x-dosexec 1458176 4b8e7d2c9a01f36b5e84c7a29d0f1b63e57a8c94d2b06f1e83a75c29b40d6f18files.log satırını oku. fuid dosyanın kimliği, uid ise dosyanın aktığı bağlantının kimliğidir. Aynı uid ile conn.log ve http.log'da o bağlantıyı bulursun.
source dosyanın HTTP ile geldiğini söyler. mime_type Zeek'in içerikten çıkardığı türdür ve application/x-dosexec bir Windows programı demektir. sha256 alanı hash-all-files betiği yüklenince dolar.
Değer, tshark ile çıkardığın dosyanın özetiyle aynı. İki ayrı araç aynı sonuca vardığında bulgun güçlenir. Büyük ağlarda bu eşleştirmeyi elle değil, Zeek günlükleri üzerinde betikle yaparsın.
Derinleş:Zeek ve Suricata ile otomatik dosya çıkarma
Sürekli izlenen bir ağda dosyaları tek tek elle çıkarmazsın. Zeek'in extract-all-files betiği gördüğü her dosyayı diske yazar. Varsayılan klasör çalışma dizinindeki extract_files klasörüdür ve dosya başına varsayılan sınır 100 megabayttır. Sınırı aşan dosya kesilir, files.log'daki extracted_cutoff alanı bunu işaretler.
Pratikte her dosyayı değil, belirli türleri saklarsın. Örneğin yalnız Windows programlarını ve Office belgelerini çıkaran küçük bir betik yazarsın. Suricata tarafında file-store çıktısı aynı işi görür. Kuraldaki filestore anahtar sözcüğü eşleşen dosyayı saklatır.
Dosya, içeriğinin SHA-256 özetiyle adlandırılır. Böylece aynı dosya yüz kez insen de diskte bir kez durur. Suricata HTTP, SMTP, FTP, NFS, SMB ve HTTP/2 üzerinden dosya çıkarabilir. NetworkMiner ise aynı işi grafik arayüzle yapar ve kayıttaki dosyaları, resimleri ve kimlik bilgisi izlerini sekmelerde listeler.
Etkinlik 1 / 6
web01.pcap içinden HTTP üzerinden aktarılan dosyaları /eviz/cikarilan klasörüne çıkar.
Çıkan örnekle güvenli çalışmak
Elindeki örneği tanımlamanın güçlü bir yolu YARA kuralıdır. Kural, dosyada aranacak dizeleri ve bu dizelerin hangi koşulda eşleşeceğini yazar. İyi bir kural örneğe özgü ama değiştirmesi zahmetli parçaları seçer: bir hizmet adı, sabit bir yol, bir hata iletisi. Koşul kısmı dosyanın bir Windows programı olduğunu da denetler.
İlk iki bayt MZ ise dosya PE biçimindedir. YARA'nın 4.5 serisi artık bakım aşamasında. Yeni geliştirme, kuralların büyük çoğunluğunu değiştirmeden okuyan YARA-X'te sürüyor.
$ cat svcupd.yar
rule AltayKargo_svcupd_yukleyici
{
meta:
aciklama = "update.exe yukleyicisi"
tarih = "2026-09-14"
strings:
$hizmet = "WinUpdateSvc" ascii wide
$yol = "C:\\Users\\Public\\svcupd.exe" ascii wide nocase
$alan = "cdn-update-srv.example" ascii
condition:
uint16(0) == 0x5A4D and filesize < 2MB and 2 of them
}
$ yara -s svcupd.yar /eviz/cikarilan/
AltayKargo_svcupd_yukleyici /eviz/cikarilan/update.exe
0x1c4a0:$hizmet: WinUpdateSvc
0x1c6f8:$yol: C:\Users\Public\svcupd.exe
0x1d210:$alan: cdn-update-srv.exampleKuralı ve çıktıyı satır satır oku. meta bölümü kuralın ne için yazıldığını not eder, eşleşmeyi etkilemez. strings bölümü üç dize tanımlar.
ascii wide, dizeyi hem tek baytlık hem iki baytlık karakterle arar, çünkü Windows programları dizeleri çoğu kez iki baytlık tutar. nocase büyük küçük harf farkını yok sayar. condition satırı üç şart koyar: dosya MZ ile başlamalı, 2 MB'tan küçük olmalı ve üç dizenin en az ikisi geçmeli.
-s seçeneği eşleşen her dizenin konumunu, adını ve değerini yazar. Kuralı önce temiz dosyalardan oluşan bir kümede denersin. Yanlış pozitif vermediğini görmeden yayınlamazsın.
Her dosya ağdan çıkarılamaz. TLS kullanan bir indirmede elinde yalnız şifreli akış kalır. Bu olayda fatura.pdf.js dosyası HTTPS ile indi, update.exe ise düz HTTP ile. İlkini ağ kaydından değil, uç noktadan alırsın.
Şifreli kanaldan gelen yük istemcide çözülür, bu yüzden diske ya da belleğe düşer. Tarayıcının indirme klasörü, dosyanın Zone.Identifier akışı ve bellek dökümü bu durumda asıl kaynaklardır. Ağ kaydı yine de işe yarar: indirmenin saatini, boyutunu ve hedefini verir.
Etkinlik 2 / 6
HTTPS üzerinden indirilen zararlı yükü elde etmek için hangi kaynağa gidersin?
Göstergenin ömrü: Acı Piramidi
IOC, yani uzlaşma göstergesi, olayı başkasının da arayabilmesi için yazılan kısa veridir. Adres, alan adı, dosya özeti, dosya adı ve kayıt defteri anahtarı en sık kullanılan tiplerdir. Ama göstergeler eşit değildir. David Bianco'nun 2013'te önerdiği Acı Piramidi, bir göstergeyi engellediğinde saldırganın ne kadar zorlanacağını sıralar.
En altta dosya özetleri durur. Onları IP adresleri, alan adları, ağ ve uç nokta izleri ve araçlar izler. En üstte taktik, teknik ve prosedürler, yani TTP'ler vardır.
Piramidin mantığı basittir. Saldırgan dosyada tek bayt değiştirince özet başkalaşır ve eski gösterge boşa düşer. IP adresi kolayca, alan adı biraz daha zahmetle değişir. Ağ ve uç nokta izleri, örneğin sabit bir User-Agent ya da hizmet adı, aracın yeniden ayarlanmasını ister.
Aracı değiştirmek araştırma ve geliştirme ister. TTP'yi değiştirmek ise saldırganın çalışma biçimini baştan kurmasını gerektirir. İyi bir tespit programı alttaki göstergeleri hızla engeller, ama asıl yatırımı üst katmanlara yapar.
Etkinlik 3 / 6
Göstergeleri değiştirilme kolaylığına göre ayır.
Önce bir seçeneğe, sonra aşağıdaki uygun kutuya bas. İstersen seçeneği kutuya sürükleyip bırak. Yerini değiştirmek için aynı işlemi tekrarla.
0/5 seçenek yerleşti.
Davranış desenleri piramidin üst katmanlarına oturur. WINWORD.EXE altında PowerShell başlaması, saldırganın kullandığı belge ve betik zincirine bağlıdır. Saldırgan bunu değiştirmek için ilk erişim yöntemini baştan kurmak zorunda kalır.
Hizmet kurarak kalıcılık sağlamak da aynı katmandadır. Bu yüzden olay raporunda en değerli göstergeler çoğu kez en az teknik görünenlerdir. Özet ve adresi hızlı engel için, davranışı uzun ömürlü tespit için yazarsın.
Etkinlik 4 / 6
Acı Piramidi'ndeki gösterge türlerini, saldırganın değiştirmesi en kolay olandan en zor olana doğru sırala.
Bir öğeye odaklan, yukarı ve aşağı ok tuşlarıyla taşı. Home tuşu en üste, End tuşu en alta alır.
- 1Araçlar
- 2Ağ ve uç nokta izleri
- 3TTP'ler
- 4Dosya özeti
- 5IP adresi
- 6Alan adı
IOC listesi ve tespit kuralı
IOC listesini biçimli yazarsın. Her satırda gösterge tipi, değeri, kaynağı, güven düzeyi ve tarihi durur. Kaynağı yazılmamış liste sonradan doğrulanamaz ve ekip ona güvenmez. İki bağımsız kaynakta görülen gösterge, tek bir günlükten çıkandan daha güvenlidir.
Göstergeye bir son geçerlilik tarihi de yazarsın. Bir IP adresi birkaç hafta sonra başka birine geçebilir ve süresi geçmiş gösterge yanlış alarm üretir. Paylaşılan bir barındırma adresini engellemek ise yüzlerce meşru siteyi keser. Gösterge dar ve kanıtlı olmalıdır.
tip,deger,kaynak,guven,ilk_gorulme,son_gecerlilik ip,203.0.113.19,pcap akis ozeti + bellek netscan,yuksek,2026-09-14,2026-10-14 domain,cdn-update-srv.example,DNS sorgu kaydi + TLS SNI,yuksek,2026-09-14,2026-12-14 sha256,4b8e7d2c9a01f36b5e84c7a29d0f1b63e57a8c94d2b06f1e83a75c29b40d6f18,pcap disa aktarim + disk,yuksek,2026-09-14,- ja4,t12d1908h1_2b729b4bf6f3_97e6b6ac8e76,pcap ClientHello,dusuk,2026-09-14,2026-10-14 registry,HKLM\SYSTEM\CurrentControlSet\Services\WinUpdateSvc,RegRipper services,orta,2026-09-14,- filename,C:\Users\Public\svcupd.exe,Prefetch + Amcache,orta,2026-09-14,-
Gösterge listesi tek başına beklemez, tespite dönüşür. Ağ tarafında Suricata kuralı, uç nokta tarafında Sigma kuralı yazarsın. Sigma, SIEM ürününden bağımsız bir YAML biçimidir.
logsource alanı kuralın hangi günlüğe bakacağını söyler. process_creation, Sysmon'un 1 numaralı olayına ya da Windows'un 4688 olayına karşılık gelir. Kural bir kez yazılır, sonra araçlarla her SIEM'in sorgu diline çevrilir.
Aşağıdaki kural Word altından PowerShell başlamasını yakalar. Bu davranış fin-pc12 olayının ilk adımıdır ve piramidin üst katmanındadır. Suricata satırı ise aynı alan adına giden DNS sorgusunu işaretler. İkisini önce geçmiş günlüklerde çalıştırır, kaç alarm ürettiğini ölçersin.
title: Word altindan PowerShell baslatildi
id: 6f2c1d4e-8a57-4b1e-9c3d-2e7a5b90f141
status: experimental
logsource:
category: process_creation
product: windows
detection:
secim:
ParentImage|endswith: '\WINWORD.EXE'
Image|endswith: '\powershell.exe'
condition: secim
level: high
# Suricata taslağı
alert dns $HOME_NET any -> any any (msg:"cdn-update-srv.example sorgusu"; dns.query; content:"cdn-update-srv.example"; nocase; sid:1000001; rev:1;)Etkinlik 5 / 6
İyi yazılmış bir IOC satırında hangi alanlar bulunur?
Paylaşım ve av döngüsü
Göstergeyi başka kurumlarla paylaşırken ortak bir dil kullanırsın. STIX 2.1, OASIS'in yayımladığı JSON tabanlı paylaşım biçimidir. Bir gösterge nesnesi tip, kimlik, oluşturma zamanı, bir desen ve geçerlilik başlangıcı taşır.
Desen köşeli parantez içinde yazılır. Alan adı için domain-name:value, dosya özeti için file:hashes.'SHA-256' alanı kullanılır. Paylaşımın ne kadar yayılabileceğini TLP etiketi söyler.
TLP 2.0'da beş etiket vardır. RED yalnız alıcının kendisi, AMBER+STRICT yalnız alıcının kurumu, AMBER kurum ve müşterileri, GREEN topluluk, CLEAR herkes içindir. Paylaşmadan önce iç adresleri, makine ve kullanıcı adlarını çıkarırsın.
{
"type": "indicator",
"spec_version": "2.1",
"id": "indicator--8e2e2d2b-17d4-4cbf-938f-98ee46b3cd3f",
"created": "2026-09-14T09:30:00.000Z",
"modified": "2026-09-14T09:30:00.000Z",
"name": "Komuta sunucusu alan adi",
"indicator_types": ["malicious-activity"],
"pattern": "[domain-name:value = 'cdn-update-srv.example']",
"pattern_type": "stix",
"valid_from": "2026-09-14T00:09:02Z",
"valid_until": "2026-12-14T00:00:00Z"
}Paylaşım döngünün yalnız bir parçasıdır. Gösterge, kural, av ve gözden geçirme bir döngü kurar. Av, göstergeyi geçmiş kayıtlarda aramaktır ve olayın kapsamını belirler.
Aşağıdaki komut eylül ayının Zeek arşivinde komuta alan adını soran iç makineleri sayar. Sonuçta yalnız 10.20.30.61, yani fin-pc12 çıkıyor. Bir saatlik kayıtta 56 A ve 796 TXT, toplam 852 sorgu saymıştın.
Arşivdeki sayı daha büyük, çünkü makine ağdan ayrılana kadar yoklamayı sürdürmüş. Başka bir makine çıksaydı o da olaya girer, bellek ve disk incelemesi orada da başlardı. Döngünün son adımı gözden geçirmedir.
Yeni bulgu geldikçe listeyi güncellersin. Süresi dolan göstergeleri kaldırır, hiç alarm üretmeyen kuralları yeniden sınarsın. Güncel tutulmayan bir IOC listesi zamanla ekip için yanıltıcı hâle gelir.
$ zcat /arsiv/zeek/2026-09-*/dns.*.log.gz | zeek-cut id.orig_h query \ | grep -F 'cdn-update-srv.example' | cut -f1 | sort | uniq -c 2731 10.20.30.61
Etkinlik 6 / 6
Doğru mu, yanlış mı?
WINWORD.EXE altında PowerShell çalıştırma gibi bir davranış deseni, dosya özetinden çok daha uzun ömürlü bir göstergedir.
Okumayı istediğin sırayla sürdürebilirsin. Ders, bütün etkinlikleri cevapladığında tamamlanır.