İçeriğe atla
0 XP 0
12 dkderinleşmeyle 13 dk60 XP6 etkinlik

Dosya çıkarma ve IOC üretimi

Bu derste
  • 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.exe
--export-objects protokolü ve hedef klasörü tek argümanda alır. Dosya adı URI'nin son parçasından gelir.

Komutları 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	4b8e7d2c9a01f36b5e84c7a29d0f1b63e57a8c94d2b06f1e83a75c29b40d6f18
hash-all-files betiği her dosya için MD5, SHA1 ve SHA-256 hesaplatır.

files.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.

ogrenci@lab

Çı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.example
YARA klasörü varsayılan olarak alt klasörlere inmeden tarar. -r seçeneği alt klasörleri de katar.

Kuralı 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.

Sürükleyip doğru sıraya koy.

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,-
JA4 satırının güveni düşük: aynı iz meşru bir kitaplıktan da gelebilir. Bu biçim doğrudan SIEM'e aktarılır.

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;)
Sigma kuralı süreç oluşturma olaylarına, Suricata kuralı DNS sorgusunun ad alanına bakar.

Etkinlik 5 / 6

İyi yazılmış bir IOC satırında hangi alanlar bulunur?

Birden fazla doğru var.

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"
}
valid_until, CSV'deki son geçerlilik tarihinin STIX karşılığıdır. Paylaşım TLP:AMBER+STRICT etiketiyle yapılır.

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
Arşivdeki her günlük dosyası kendi başlığını taşır, zeek-cut başlıkları akış içinde de tanır.

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.

Bu derste bir hata mı gördün? Bildir