Girdiğin ilk breakpoint'te '0x90' (NOP) yerine '0xEB' (JMP) görüyorsan, o malware seni çoktan bir tavşan deliğine davet etmiştir. O an anlarsın ki karşındaki sadece bir kod yığını değil, seninle satranç oynayan bir zihniyetin ürünüdür.
Selam arkadaşlar, bugün biraz ellerimizi kirleteceğiz. Red Team tarafında sızma senaryoları kurgularken bazen kendi 'yaratıklarımızı' yazarız ama işin savunma (Defensive) tarafında, başkasının bıraktığı o karanlık kutuyu açıp içinde ne olduğunu anlamak apayrı bir sanat. Malware analizi, siber güvenliğin otopsi masasıdır. Masadaki hasta genelde canlıdır, uyanıktır ve sizi de beraberinde götürmek için fırsat kollar.
İlk Temas: Statik Analizin Sessiz Gücü
Bir dosyayı sandbox ortamına fırlatıp 'Bakalım ne yapacak?' demeden önce, onunla bir beyefendi gibi tanışmamız gerekir. Statik analiz, dosyayı çalıştırmadan üzerinden bilgi toplama sanatıdır. Dosyanın hash değerini (MD5, SHA256) aldın, VirusTotal'e baktın, okey. Ama bu sadece işin magazin kısmı. Gerçek analiz, strings çıktısındaki o anlamsız karakterlerin arasından bir IP adresi veya bir API çağrısı yakaladığında başlar.
Örneğin, testCompany bünyesindeki bir sunucuda şüpheli bir .exe bulduğumuzu varsayalım. İlk yapacağımız şey entropy (entropi) değerine bakmaktır. Eğer bir dosyanın entropisi 7.0'ın üzerindeyse, bil ki o dosya ya paketlenmiştir (packed) ya da şifrelenmiştir (encrypted). Yani saldırgan içeriği bizden saklıyordur.
# Defanged strings örneği
$ strings suspect_file.exe | grep -E "(http|https)://"
# Çıktı şöyle bir şey olabilir:
# http[:]//update.example[.]com/api/v1/collect
# User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Burada gördüğümüz http[:]//update.example[.]com adresi, bizim için ilk IOC (Indicator of Compromise) adayıdır. Statik analizde PE (Portable Executable) başlıklarını incelemek, hangi kütüphanelerin (DLL) import edildiğini görmek bize dosyanın niyetini söyler. Eğer bir hesap makinesi uygulaması ws2_32.dll (Network kütüphanesi) import ediyorsa, o hesap makinesi muhtemelen sadece toplama çıkarma yapmıyordur.
Dinamik Analiz: Laboratuvar Ortamında Canavarı Uyandırmak
Dinamik analiz, dosyayı kontrollü bir ortamda (izole edilmiş bir VM) çalıştırıp davranışlarını izlemektir. Burada kural bir: Asla ana makinenle köprü (bridge) kurma. Host-only network her zaman hayat kurtarır.
Dosyayı çalıştırdığımızda Process Monitor (ProcMon) veya Wireshark gibi araçlarla sistemi nasıl manipüle ettiğini izleriz. Malware genellikle şu üç şeyi yapmaya çalışır:
- Persistence (Kalıcılık): Reboot sonrası tekrar çalışmak için Registry anahtarlarına veya
Startupklasörüne yerleşmek. - C2 (Command and Control) İletişimi: Saldırganın sunucusuna 'Ben geldim, emirlerini bekliyorum' demek.
- Exfiltration (Veri Sızdırma): Hassas dosyaları paketleyip dışarı yollamak.
# Bir malware'in kayıt defterine (registry) kendini ekleme mantığı (Pseudo-code)
import winreg
def gain_persistence():
path = r"Software\Microsoft\Windows\CurrentVersion\Run"
target_exe = "C:\\Users\\Public\\Documents\\system_update.exe"
try:
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, path, 0, winreg.KEY_SET_VALUE)
winreg.SetValueEx(key, "WindowsUpdater", 0, winreg.REG_SZ, target_exe)
winreg.CloseKey(key)
print("[+] Persistence established.")
except Exception as e:
pass
# Analiz sırasında bu registry anahtarını izlemek kritik!
Dinamik analizde en çok karşılaştığımız engel, malware'in akıllı olmasıdır. Birçok modern zararlı yazılım, 'Acaba bir sandbox içinde miyim?' diye kontrol eder. Eğer ortamda VBoxGuestAdditions.sys gibi dosyalar bulursa veya ekran çözünürlüğü çok düşükse, uyku moduna geçer ve hiçbir zararlı aktivite göstermez. Buna karşı koymak için VM'lerimizi 'hardened' hale getirmemiz, yani gerçek bir kullanıcı makinesi gibi göstermemiz gerekir.
Kodun Derinliklerine İniş: Reverse Engineering
İşler ciddileştiğinde Ghidra veya IDA Pro gibi araçları masaya yatırırız. Burası artık Assembly (ASM) dilinin konuştuğu yerdir. Saldırgan kodunu obfuscate (karmaşıklaştırma) etmiş olabilir. Örneğin, basit bir CreateProcess çağrısını doğrudan yapmak yerine, API hashing kullanarak runtime'da fonksiyon ismini çözebilir.
Analiz sırasında karşımıza şöyle bir mantık çıkabilir:
; Basit bir anti-debug kontrolü (Defanged)
MOV EAX, FS:[0x30] ; PEB (Process Environment Block) adresini al
MOVZX EAX, BYTE PTR [EAX+2] ; BeingDebugged flag'ini oku
TEST EAX, EAX
JNZ _TERMINATE_PROCESS ; Eğer debugger varsa çık!
Bu tarz bir kontrolü gördüğümüzde, debugger üzerinden bu flag'i manuel olarak 0 yaparak malware'i kandırabiliriz. Malware analisti, kodun yazdığı yalanları yakalayan bir dedektiftir.
Savunma Stratejisi: Ne Yapmalı?
Analizi yaptık, dosyanın ne yaptığını anladık. Peki şimdi ne olacak? testCompany'yi korumak için bu bilgileri aksiyona dökmemiz lazım.
- YARA Kuralları Yazın: Analiz ettiğiniz malware'in karakteristik özelliklerini (stringler, byte dizilimleri) içeren YARA kuralları oluşturun. Bu sayede ağdaki diğer makinelerde benzer bir tehdit olup olmadığını hızlıca tarayabilirsiniz.
rule Suspect_Backdoor_Example {
strings:
$magic_header = { 4D 5A } // MZ Header
$c2_url = "update.example.com"
$s1 = "cmd.exe /c echo hello"
condition:
$magic_header at 0 and ($c2_url or $s1)
}
EDR ve Log İzleme: Malware'in oluşturduğu registry anahtarlarını, network bağlantılarını ve dosya değişikliklerini EDR (Endpoint Detection and Response) sistemlerinize kural olarak ekleyin.
Sıkılaştırma (Hardening): PowerShell execution policy'lerini kısıtlayın, gereksiz servisleri kapatın ve en önemlisi kullanıcı farkındalığını artırın. Unutmayın, en sofistike malware bile genellikle bir 'Lütfen bu eki açın' e-postasıyla başlar.
Malware analizi bir son değil, sürekli devam eden bir öğrenme sürecidir. Bugün analiz ettiğiniz yöntem, yarın eski kalacaktır. Bu yüzden merakınızı taze tutun, debugger'ınızı yanınızdan ayırmayın ve asla 'bu dosya temiz görünüyor' diyerek gardınızı düşürmeyin.
Bir sonraki teknik derinlikte görüşmek üzere, sistemleriniz güvenli, loglarınız temiz olsun.
