Eskiden her şey ne kadar basitti, hatırlıyor musun? Bir dosyanın hash değerini alırdın, veri tabanında sorgulardın ve 'Tamam, bu zararlı' der geçerdin. Artık kimse sadece imza tabanlı korumalara güvenmiyor; peki ya o imzasız, bellekte yaşayan ve diske hiç dokunmayan 'hayalet' scriptlere ne demeli? Tehdit aktörleri artık kapıyı kırmak yerine, kapının kilidini sizin anahtarınızla açıp içeri süzülmeyi tercih ediyor.
Bugün seninle testCompany laboratuvarımızda bir kahve eşliğinde, modern bir zararlının röntgenini nasıl çekeriz, o sinsi kod parçacıklarını nasıl deşifre ederiz ona bakacağız. İşin içine biraz assembly, biraz sezgisel analiz ve bolca 'hadi canım, bunu da mı yapmışlar?' nidası girecek.
İlk Adım: Cam Fanusun Arkasından Bakmak (Static Analysis)
Zararlıyı çalıştırmadan önce ona dışarıdan bakmak, bir bombayı imha etmeden önce röntgenini çekmek gibidir. İlk baktığımız şey genellikle dosyanın 'entropy' (entropi) değeridir. Eğer bir dosyanın entropisi çok yüksekse (7.5 ve üzeri), bil ki o arkadaş ya paketlenmiş (packed) ya da şifrelenmiştir. Saldırganlar, analizi zorlaştırmak için kodlarını gizlerler.
Örneğin, basit bir Python scripti ile dosyanın içindeki okunabilir stringleri çekmek bile bize C2 (Command and Control) adresini fısıldayabilir:
# Defanged String Extractor Mockup
import re
def extract_strings(file_path):
# Zararsızlaştırılmış örnek pattern
pattern = r'[a-zA-Z0-9.:/]{7,}'
with open(file_path, 'rb') as f:
content = f.read().decode('utf-16', errors='ignore')
found = re.findall(pattern, content)
for s in found:
# Örnek C2 yakalama simülasyonu
if "example.com" in s or "127.0.0.1" in s:
print(f"[!] Potansiyel C2 Bulundu: {s}")
# extract_strings('suspicious_payload.bin')
Statik analizde PE (Portable Executable) başlıklarına bakarken Import Address Table (IAT) kısmına odaklanıyoruz. Eğer bir dosya sadece VirtualAlloc, WriteProcessMemory ve CreateRemoteThread fonksiyonlarını çağırıyorsa, orada büyük ihtimalle bir 'Process Injection' dönüyordur. Bu fonksiyonlar tek başlarına suçlu değildir ama bir araya geldiklerinde 'ben başka bir sürece sızacağım' diye bağırırlar.
Dinamik Analiz: Kontrollü Patlatma
Statik analiz bizi bir yere kadar götürür. Bazı zararlılar o kadar utangaçtır ki, onları 'sandbox' ortamında olduklarını anlamasınlar diye kandırmamız gerekir. Modern malware'ler GetTickCount kullanarak sistemin ne kadar süredir açık olduğunu kontrol eder. Eğer sistem sadece 5 dakikadır açıksa, 'Bu kesin bir analiz laboratuvarı' diyip uyku moduna geçerler.
Analiz ortamımızda (Remnux veya Flare-VM gibi) dosyayı çalıştırdığımızda ilk izlediğimiz şey network trafiğidir. İşte burada sahte bir DNS sunucusu (FakeDNS) hayat kurtarır. Zararlı, malicious-c2-server.example.com adresine gitmek istediğinde ona 127.0.0.1 cevabını veririz ve kendi kurduğumuz dinleyiciye (listener) gelmesini bekleriz.
# Defanged NC Listener
nc -lvnp 4444
# Beklenen bağlantı: 127.0.0.1:XXXX -> 127.0.0.1:4444
Kaçış Sanatı: Anti-VM ve Anti-Debug
Saldırganlar da boş durmuyor. Analiz edildiğini anlayan bir malware, davranışını tamamen değiştirebilir. En popüler numaralardan biri, CPU çekirdek sayısını kontrol etmektir. Kim bir analiz laboratuvarına 32 çekirdek verir ki? Genelde 1 veya 2 verilir. Malware bunu görünce 'Ben gidiyorum' der.
Bir diğeri ise IsDebuggerPresent() API çağrısıdır. Eğer biz debugger (x64dbg veya GDB) ile kodun içinde geziyorsak, bu fonksiyon 'true' döner. Bunu aşmak için debugger üzerinden bu fonksiyonun dönüş değerini manuel olarak manipüle etmemiz (patchlememiz) gerekir. İşte o an, saldırganla arandaki gerçek satranç maçı başlar.
Defansif Çıkarımlar: Ne Yapmalı?
Laboratuvarda bu kadar ter döktükten sonra, bu bilgiyi nasıl savunmaya dönüştüreceğiz? İşte testCompany'de uyguladığımız ve senin de sistemlerinde yapabileceğin birkaç hardening adımı:
- Sysmon ile Görünürlüğü Artır: Sadece 'dosya oluşturuldu' logu yetmez. Event ID 10 (ProcessAccess) ve Event ID 8 (CreateRemoteThread) loglarını takip et. Bellek enjeksiyonlarını yakalamanın en temiz yolu budur.
- Entropi Taraması: Dosya sunucularına yüklenen dosyaların entropisini kontrol eden otomasyonlar kur. Bir PDF dosyasının entropisi 7.9 ise, o büyük ihtimalle PDF değil, içine gizlenmiş bir exploit'tir.
- API Monitoring: EDR (Endpoint Detection and Response) çözümlerini sadece 'alert' için kullanma. 'Suspicious API calls' (Örn:
SetWindowsHookEx) dizilerini takip eden kurallar yaz.
Bitirirken
Malware analizi bir varış noktası değil, bir yolculuktur. Bugün analiz ettiğin 'sample', yarın evrilerek karşına çıkacak. Önemli olan o hash değerini ezberlemek değil, o kodun 'neden' ve 'nasıl' çalıştığını anlamak. Unutma, en gelişmiş zararlı bile en nihayetinde bir işletim sistemi fonksiyonunu çağırmak zorundadır. Bizim işimiz o çağrıyı yakalamak.
Bir sonraki analizde, belki de bir ransomware'in şifreleme anahtarını bellekte nasıl avladığımızı konuşuruz. O zamana kadar, loglarınıza sahip çıkın ve şüpheli .exe'lerden uzak durun!
