Kum Havuzunda Boğulmak: Malware Analizinde 'Otomatik Analiz' Yalanı ve Gerçekler
Selam millet, ben Sedat. Bugün biraz damara basacağız. Sektörde en çok gördüğüm, gördükçe de "arkadaş, biz bu işi neden hala düzgün yapamıyoruz?" dediğim o devasa yanılgıyı konuşalım: VirusTotal ve Otomatik Sandbox Bağımlılığı.
Herkes bayılıyor değil mi? Şüpheli bir .exe veya .js dosyası mı gördün? Yapıştır Any.run'a, gönder VirusTotal'e (VT), al raporu, temizse "hadi devam" de. Beyler, bayanlar; eğer prod ortamında veya kritik bir networkte bu kafayla malware analizi yapıyorsanız, aslında sadece kendinizi kandırıyorsunuz. Hatta daha kötüsünü söyleyeyim; saldırgana "Hey dostum, senin dosyayı yakaladım ama ne olduğunu anlamaya çalışıyorum, haberin olsun!" diye tekmil veriyorsunuz.
Sektördeki bu "analiz aracına tapınma" olayı artık can sıkıcı bir hal aldı. Eğer bir zararlı yazılımı gerçekten anlamak istiyorsak, o kum havuzunun içinden çıkıp, ellerimizi biraz kirletmemiz gerekiyor. Gelin, o ışıltılı raporların arkasında nelerin döndüğüne ve aslında nelere bakmamız gerektiğine beraber dalalım.
OPSEC Faciası: Düşmana Bilgi Sızdırmak
Önce en büyük hatadan başlayalım. Bir APT (Advanced Persistent Threat) grubuyla veya gerçekten sofistike bir ransomware çetesiyle uğraştığınızı düşünün. Adamlar o dosyayı sadece sizin kurumunuza özel hazırlamış olabilir. Siz bu dosyayı VT gibi herkese açık bir platforma yüklediğiniz an, saldırganın C2 (Command & Control) panelinde bir bildirim düşüyor: "Dosyanız VirusTotal'e yüklendi."
Ne oluyor peki? Saldırgan hemen altyapısını değiştiriyor, o dosyayı pasife çekiyor ve yepyeni bir varyantla, sizin henüz ruhunuz duymadan tekrar içeri sızıyor. Tebrikler, kendi kalenize golü attınız. Malware analizi sadece kod okumak değil, aynı zamanda bir istihbarat oyunudur. Bu yüzden testCompany gibi kurumlarda biz her zaman önce izole bir laboratuvarda, internete çıkışı olmayan statik analizle başlarız.
Statik Analiz: Dış Görünüşe Aldanma
Bir dosyanın ne yaptığını anlamak için onu çalıştırmak zorunda değilsiniz. Hatta çoğu zaman çalıştırmamalısınız. Dosyanın PE (Portable Executable) yapısına bakmak bize çok şey anlatır.
Mesela, dosyanın entropy değerine baktınız mı? Eğer entropy çok yüksekse (örneğin 7.5 ve üzeri), o dosya büyük ihtimalle paketlenmiş (packed) veya şifrelenmiştir. İçeride sakladığı şeyi sıradan bir sandbox göremez.
Şu basit Python (pseudo-code) örneğine bir bakın. Bir PE dosyasının içindeki importlara bakarak niyet okumak ne kadar kolay:
import pefile # Zararsızlaştırılmış örnek kütüphane kullanımı
def analyze_imports(file_path):
pe = pefile.PE(file_path)
for entry in pe.DIRECTORY_ENTRY_IMPORT:
print(f"--- Library: {entry.dll.decode()} ---")
for imp in entry.imports:
# Kritik API çağrılarını kontrol et
if imp.name in [b'CreateRemoteThread', b'WriteProcessMemory', b'IsDebuggerPresent']:
print(f"[!] Riskli API Tespit Edildi: {imp.name.decode()}")
# analyze_imports("suspicious_file.exe_defanged")
Eğer bir hesap makinesi (calc.exe) WriteProcessMemory veya CreateRemoteThread çağırıyorsa, o artık bir hesap makinesi değildir; o bir 'shellcode injector' adayıdır. Bunu görmek için herhangi bir sandbox'a ihtiyacınız yok.
Dinamik Analiz ve Kaçış Sanatı (Evasion)
Sandbox'ların en büyük zayıflığı, birer sandbox olmalarıdır. Modern malware'ler artık bir "kum havuzunda" olup olmadıklarını bizden daha iyi biliyorlar. Nasıl mı?
- Sistem Kaynakları: Sandbox'lar genellikle 2GB RAM ve tek CPU ile çalışır. Zararlı yazılım şuna bakıyor: "RAM < 4GB ise çalışma."
- Kullanıcı Hareketleri: Sandbox'ta mouse hareket eder mi? Çoğu zaman hayır. Malware, mouse 100 piksel hareket etmeden kendini asla çözmüyor.
- Zaman Aşımı (Stalling): Analiz araçları genelde 2-3 dakika çalışır. Malware ise
Sleep()fonksiyonunu çağırıp 10 dakika bekliyor. Analiz aracı "temiz" diyip raporu kapatınca, asıl şenlik başlıyor.
Örnek bir "Sleep" bypass'ı ve anti-VM kontrolü içeren pseudo-C++ kodu şöyledir:
#include <windows.h>
#include <iostream>
void check_environment() {
// VM Check: Genelde sanallaştırma araçlarının MAC adresleri belirli başlar
// Örnek: 08:00:27 (VirtualBox)
if (IsVirtualMachine()) {
exit(0); // Sandbox ise sessizce çık
}
// Stalling: Analiz aracını uyut
// Gerçek dünyada bu süre çok daha uzun olur
Sleep(300000); // 5 dakika bekle
}
int main() {
check_environment();
// Zararlı payload burada devreye girer (Zararsızlaştırılmış URL)
// DownloadAndExecute("http://example.com/payload.bin_defanged");
return 0;
}
YARA ile Avlanmak
Analiz ettiğimiz bir zararlıyı sadece o an temizlemek yetmez. O zararlının ayak izlerini (IOC - Indicator of Compromise) tüm sistemde aramamız lazım. İşte burada YARA kuralları devreye giriyor. Otomatik raporların size vermediği o "özel imzayı" sizin yazmanız gerekir.
Örneğin, şüpheli bir PowerShell script'i analiz ettiniz ve içinde belirli bir obfuscation (gizleme) tekniği gördünüz. Hemen bir YARA kuralı çakalım:
rule Suspicious_PowerShell_Downloader {
meta:
author = "Sedat Ozdemir"
description = "Encoded PS download komutlarını yakalar"
strings:
$cmd = "powershell.exe" nocase
$hidden = "-windowstyle hidden" nocase
$encoded = "-enc" nocase
$download = "Net.WebClient" nocase
$target = "http://example.com/test.ps1_defanged" // Defanged URL
condition:
$cmd and ($hidden or $encoded) and ($download or $target)
}
Ne Yapmalı? (Defensive Mindset)
Sandbox'lar yardımcı araçlardır ama asla karar verici değildirler. Gerçek bir malware analiz süreci şöyle işlemeli:
- İzolasyon: İnterneti olmayan,
testCompanystandartlarına uygun bir sanal makine (Remnux veya Flare-VM gibi) kullanın. - Statik Analiz: Stringlere bakın, importları inceleyin, entropy değerini ölçün.
Strings.exehala en iyi dostunuzdur. - Kod Analizi: Eğer dosya script bazlıysa (JS, VBS, PS1), onu 'de-obfuscate' edin. Ne idüğü belirsiz
base64kodlarını çözün. - Dinamik İzleme: Dosyayı çalıştırırken
Process Monitor(ProcMon) ile hangi registry anahtarına dokunduğuna, hangi dosyayı oluşturduğuna bakın.Wiresharkile DNS sorgularını (gerçekten gitmese bile simüle edilmiş ortamda) yakalayın. - Hafıza Analizi (Memory Forensics): Malware dosyası kendini silebilir ama RAM'de mutlaka iz bırakır.
Volatilitykullanarak bellekteki o saklı shellcode'u çekip alın.
Sözün özü; otomatize araçlar sizi hızlandırır ama tembelleştirmesin. Bir gün o sandbox'ın "temiz" dediği dosya bütün domaini şifrelediğinde, patronunuza "ama VT 0/70 demişti" diyemezsiniz.
Siber güvenlikte merak, araçtan daha üstündür. Merak etmeye, o .exe'nin içinde ne olduğunu kurcalamaya devam edin. Bir sonraki yazıda görüşürüz, güvenli kalın!
