Statik Analiz Temelleri: Çalıştırmadan Zararlı Yazılımı İnceleme
PE dosya formatı, hash hesaplama, string çıkarma ve imza tabanlı ön analiz teknikleri.
Statik analiz, bir zararlı yazılım örneğini ÇALIŞTIRMADAN, sadece dosyanın kendisini inceleyerek bilgi edinme sürecidir. Bu, dinamik analize göre daha güvenlidir (kodun gerçekten çalışmasına izin verilmez) ama bazı bilgileri (gerçek zamanlı davranış gibi) ortaya çıkaramaz.
PE (Portable Executable) Formatına Genel Bakış
Windows çalıştırılabilir dosyalarının (.exe, .dll) hemen hepsi PE formatındadır. Bir analistin bilmesi gereken temel bölümler:
- DOS Header ve PE Header: Dosyanın geçerli bir PE olduğunu doğrulayan ve temel meta veriyi (hedef mimari, zaman damgası) tutan bölümler.
- Section Table:
.text(çalıştırılabilir kod),.data(başlatılmış veri),.rdata(salt okunur veri),.rsrc(kaynaklar — simgeler, string tabloları) gibi bölümlerin haritası. - Import Table: Programın hangi DLL'lerden hangi fonksiyonları çağırdığının listesi — bu, programın NE YAPMAYA ÇALIŞTIĞI hakkında en değerli ilk ipuçlarından biridir.
Import Table Analizi: Davranış Tahmini
Bir dosyanın import ettiği fonksiyonlar, potansiyel davranışı hakkında güçlü ipuçları verir:
| İçe Aktarılan Fonksiyon | Olası Anlamı |
|---|---|
CreateRemoteThread | Başka bir process'e kod enjekte etme girişimi |
RegSetValueEx | Registry'de kalıcılık (persistence) kurma |
InternetOpenUrl / WinHttpConnect | Ağ üzerinden C2 iletişimi |
CryptEncrypt | Şifreleme işlemleri (ransomware'de sık görülür) |
IsDebuggerPresent | Anti-debugging kontrolü |
Bu fonksiyonların tek başına varlığı kötü niyet kanıtı değildir (meşru yazılımlar da bunları kullanır), ama belirli kombinasyonlar (örneğin CreateRemoteThread + VirtualAllocEx + şifreli bir string tablosu) şüpheyi artırır.
Hash Hesaplama ve Tehdit İstihbaratı Kontrolü
Bir örneğin MD5/SHA-256 hash'i hesaplanıp VirusTotal gibi platformlarda sorgulanır — bu, örneğin daha önce bilinen bir aile olup olmadığını hızlıca ortaya çıkarabilir:
sha256sum suspicious_sample.exe
Ancak bu yöntemin bir sınırı vardır: hedefe özel (targeted) veya çok yeni (zero-day) bir örnek, hiçbir veritabanında henüz bulunmayabilir — bu durumda derinlemesine analiz kaçınılmaz hâle gelir.
String Çıkarma (Strings Analysis)
Bir dosyadaki okunabilir metin dizilerini çıkarmak (strings komutu veya FLOSS gibi gelişmiş araçlarla — FLOSS ayrıca basit obfuscation'ı da çözebilir), genelde şu tür ipuçları verir:
- Sabit kodlanmış (hardcoded) C2 sunucu adresleri veya IP'ler.
- Hata ayıklama mesajları (geliştiricinin bıraktığı ipuçları).
- Şifreleme anahtarları veya kullanılan algoritma isimleri.
- Dosya yolları (geliştiricinin sisteminden kalıntı bilgi sızıntısı).
Pratik Senaryo
Bir analist, e-posta ekinde gelen şüpheli bir dosyayı statik analiz aşamasında inceliyor. PE header'ı doğru görünüyor ama import table'da VirtualAlloc, WriteProcessMemory ve CreateRemoteThread üçlüsünün birlikte bulunması dikkat çekiyor — bu üçlü, klasik process injection tekniğinin karakteristik imzasıdır. strings çıktısında ayrıca base64 ile kodlanmış, çözüldüğünde bir IP adresi ortaya çıkan bir dize bulunuyor. Bu iki bulgu birlikte, dosyanın büyük olasılıkla bir C2 sunucusuna bağlanıp başka bir process'e kod enjekte etmeye çalışan bir yükleyici (loader) olduğunu gösteriyor — henüz dosya hiç çalıştırılmadan bu kadar bilgi edinilebiliyor.
Sınırlamalar
Modern zararlı yazılımların çoğu packing (sıkıştırma/şifreleme ile kodun gizlenmesi) kullanır — bu durumda import table ve string'ler anlamlı görünmeyebilir çünkü gerçek kod, çalışma zamanında bellekte açılana kadar şifreli kalır. Bu, statik analizin dinamik analizle tamamlanması gerektiğinin en önemli sebebidir.
Bu makale, statik malware analizinin orta-ileri seviye teknik bir özetidir; SiberCrew ekibi tarafından hazırlanmış özgün içeriktir.