İçeriğe geç
Sedat Özdemir
Yazılar

blue-team

Bir 'Update.exe' Hikayesi: Lab Ortamında Malware Parçalamak

Statik analizle geçiştirilemeyecek kadar karmaşık bir zararlı yazılımla karşılaştığınızda ne yaparsınız? İşte o şüpheli dosyanın anatomisi, analiz süreçleri ve savunma taktikleri.

Sedat Özdemir
· 3 dk okuma

Hiç sabahın köründe, kum saati dönüp duran o terminal ekranına bakıp 'Acaba bu binary gerçekten sadece logging mi yapıyor, yoksa bütün database'i dışarı mı pompalıyor?' diye kendi kendine sordun mu? Eğer sormadıysan, ya çok şanslısın ya da henüz o 'özel' dosya senin sistemine uğramadı demektir.

Siber güvenlikte çoğumuz sızma testlerine, exploit geliştirmeye veya cloud güvenliğine odaklanıyoruz ama bir sabah masanda bulduğun o şüpheli .exe veya .js dosyasının ne haltlar karıştırdığını anlamak, işin gerçek 'mutfak' kısmıdır. Bugün seninle, testCompany ortamında karşımıza çıkabilecek senaryolar üzerinden, bir zararlı yazılımın (malware) DNA'sına nasıl gireriz, onu nasıl konuştururuz ve en önemlisi ondan nasıl korunuruz, biraz dertleşelim.

İlk Durak: Göz Boyayan Yüzey (Statik Analiz)

Dosyayı çift tıklayıp çalıştırmak mı? Sakın. O hatayı sadece filmlerdeki 'hacker' karakterleri yapar. İlk adımımız her zaman statik analizdir. Yani dosyayı çalıştırmadan, dışarıdan bakarak ne olduğunu anlamaya çalışmak.

Önce bir hash değerine (SHA256/MD5) bakarsın, VirusTotal'e atarsın (tabii gizlilik kuralların izin veriyorsa, yoksa kendi yerel sandbox'ına). Ama asıl eğlence strings çıktısında başlar. Dosyanın içindeki okunabilir metinler bazen saldırganın ne kadar tembel olduğunu gösterir.

Örneğin, şöyle bir çıktı gördüğünü hayal et:

http[:]//example[.]com/api/v1/collect
C:\Users\Public\log.txt
cmd.exe /c powershell -ExecutionPolicy Bypass -File ...

Bu bize dosyanın dışarıyla konuştuğunu ve muhtemelen bir persistence (süreklilik) sağlama peşinde olduğunu fısıldar. Ama günümüz zararlıları aptal değil. Genelde bu verileri şifreli veya 'obfuscated' (karartılmış) halde tutarlar. Eğer UPX! gibi bir string görüyorsan, bil ki dosya paketlenmiş (packed). Yani içindeki gerçek kodu görmek için önce o kabuğu soyman gerekecek.

İzolasyon: Kendi Güvenli Limanını Kurmak

Analiz yaparken en büyük korkumuz, zararlının lab ortamından kaçıp kurumsal ağa (testCompany ağı gibi) sıçramasıdır. Bu yüzden her zaman izole bir sanal makine (VM) kullanmalısın. İnternet erişimi kesilmiş, sadece senin kontrolündeki sahte servislerin (FakeNet-NG gibi) çalıştığı bir ortamdan bahsediyorum.

Dinamik Analiz: 'Yürü Bakalım Ne Yapacaksın?'

Dosya statik analizde sır vermiyorsa, onu kontrollü bir şekilde koşturma vakti gelmiştir. Dinamik analizde biz dosyayı izleriz. Hangi dosyayı oluşturdu? Kayıt defterinde (Registry) neyi değiştirdi? Hangi IP adresine 'Selam' dedi?

İşte burada Process Monitor (ProcMon) ve Wireshark senin en yakın dostun olur. Dosya çalışırken arkada şöyle bir trafik dönebilir (Zararsızlaştırılmış örnek):

# Zararlı yazılımın muhtemel bir C2 (Command & Control) bağlantı denemesi
# Gerçek IP ve domainler yerine yerel/zararsız adresler kullanılmıştır.

GET /d/payload.bin HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...

Eğer bu isteği görürsen, o payload.bin dosyasının ne olduğunu bulman şart. Genelde bu aşamada zararlı, asıl yıkıcı kodunu indirir.

Bir Adım Ötesi: Kodun Kalbine İnmek (Reverse Engineering)

Bazı dosyalar vardır ki, ne yapsan kendini ele vermez. Sanal makinede olduğunu anlar (Anti-VM), debugger bağladığını fark eder (Anti-Debug) ve sessizliğe bürünür. İşte o zaman Ghidra veya x64dbg gibi ağır topları çıkarma vaktidir.

Kodun içinde şöyle bir mantık ararsın:

// Sözde kod (Pseudo-code) örneği - Malware'in Anti-VM kontrolü
if (CheckForVirtualBox() || CheckForVMware()) {
    printf("Sistem hatası: 0x80041010"); // Bizi kandırmaya çalışıyor!
    exit(0);
}

Burada yapman gereken, bu kontrolü 'patch'lemek yani baypas etmektir. O if bloğunu NOP (No Operation) ile değiştirdiğinde, zararlı kendini güvende sanıp tüm yeteneklerini sergilemeye başlar.

Savunma Stratejisi: Biz Ne Yapmalıyız?

Malware analiz etmek sadece merak gidermek değildir; bu bilgiyi savunmaya dönüştürmektir. Analizden çıkardığın 'Indicator of Compromise' (IoC) verilerini kullanarak sistemini zırhlandırmalısın.

  1. Endpoint Sıkılaştırma: Eğer analiz ettiğin zararlı C:\Users\Public altına bir şey yazıyorsa, EDR/XDR üzerinde bu dizine yazma yetkisini kısıtlayan bir kural yazmalısın.
  2. Network Seviyesi: Zararlının gitmeye çalıştığı domainleri (example.com gibi) DNS seviyesinde bloklamalı ve bu domainlere gitmeye çalışan diğer makineleri 'enfekte' olarak işaretlemelisin.
  3. PowerShell Kısıtlaması: Çoğu malware, PowerShell üzerinden dosyasız (fileless) saldırılar dener. Constrained Language Mode aktivasyonu hayat kurtarır.
# PowerShell güvenlik modunu kontrol etmek ve sıkılaştırmak için bir ipucu
$ExecutionContext.SessionState.LanguageMode = "ConstrainedLanguage"

Son Bir Not: Merak Kediyi Öldürmez, Geliştirir

Malware analizi bir sabır işidir. O dosya seninle satranç oynar, seni yanıltmaya çalışır. Ama unutma, her kod parçası bir iz bırakır. Bizim işimiz o izleri takip edip resmin tamamını görmek.

Bir dahaki sefere önüne şüpheli bir dosya düştüğünde, ona sadece bir 'tehdit' olarak değil, çözülmeyi bekleyen bir bulmaca olarak bak. Ama lütfen, o bulmacayı kendi bilgisayarında değil, izole labında çöz.

Klavye başına geçtiğinde, o NOP komutunun gücü seninle olsun dostum. Güvenli kodlamalar, sağlam savunmalar!

İlgili yazılar