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

blueteaming

O Dosyaya Çift Tıklamadan Önce: Lab Ortamında Bir 'Veba' Avcısı Olmak

Zararlı yazılım analizi sadece Assembly okumak değil, bir satranç maçıdır. Kendi ayağıma nasıl sıktığımdan başlayıp, bir dosyanın ruhunu nasıl okuruz konuşalım.

Sedat Özdemir
· 4 dk okuma

Sene 2010 civarıydı, siber güvenlik dünyasına yeni yeni ısınmaya çalışıyorum. Bir forumda bulduğum 'vazgeçilmez' bir aracı inceliyorum. Tabii o zamanlar sandbox falan hak getire, bir tane VMware kurmuşuz, kendimizi kral sanıyoruz. Analiz bitti sanıp, o heyecanla ve dikkatsizlikle ana makinem ile sanal makinem arasındaki 'Shared Folders' özelliğini açık unutmuşum. Analiz ettiğim 'zararsız' görünen o araç, aslında bir fidye yazılımıymış (ransomware) ve o paylaşılan klasör üzerinden ana makinemdeki tüm üniversite projelerimi, çocukluk fotoğraflarımı saniyeler içinde şifrelemişti. O gece ağlayarak format attığımda öğrendiğim ilk ders şuydu: Malware analizinde en büyük düşmanınız zararlı kod değil, kendi dikkatsizliğinizdir.

Bugün burada, o günkü acemi Sedat’a ve bu işe merak salan arkadaşlara, bir malware (zararlı yazılım) gördüğümüzde 'bu ne ayak?' sorusuna nasıl profesyonelce cevap aranır, onu konuşacağız. Çayınızı, kahvenizi alın; testCompany laboratuvarımıza giriyoruz.

İlk Kural: Cam Bölmenin Arkasından Bakmak (Statik Analiz)

Bir dosyayı eline aldığında hemen üzerine atlayıp 'çalıştır' (execute) tuşuna basanlar genelde bizim ekipten değil, 'zarar görenler' ekibinden oluyor. Biz önce bir dosyanın dışına bakarız. Buna statik analiz diyoruz. Dosyayı hiç çalıştırmadan, sanki bir biyolog gibi o hücrenin dış yapısını inceliyoruz.

İlk baktığımız yer her zaman 'strings' komutudur. Dosyanın içindeki okunabilir metinler bize çok şey anlatır. Eğer bir calc.exe dosyasının içinde http://malicious-site.example.com/payload.exe veya CreateRemoteThread gibi kütüphane çağrıları görüyorsanız, o dosya pek de hesap makinesi gibi davranmayacak demektir.

Şu örneğe bir bakın (zararsızlaştırılmış/defanged):

# Bir dosyanın içinden şüpheli dizileri çekmek için basit bir mantık
# Gerçek hayatta strings.exe veya FLOSS kullanılır.

def simple_strings_check(file_path):
    suspicious_patterns = ["http://", "https://", "powershell", "WScript", "cmd.exe"]
    with open(file_path, "rb") as f:
        content = f.read().decode('utf-8', errors='ignore')
        for pattern in suspicious_patterns:
            if pattern in content:
                print(f"[!] Şüpheli ibare bulundu: {pattern}")

simple_strings_check("suspect_file.bin")

Statik analizde PE (Portable Executable) başlıklarını incelemek de çok kritiktir. Dosya ne zaman derlenmiş? Hangi kütüphaneleri (DLL) çağırıyor? Eğer kernel32.dll içinden WriteProcessMemory çağrılıyorsa, bu arkadaş başka bir sürecin içine kod enjekte etmeye çalışıyor olabilir.

İkinci Adım: Mayını Patlatmak Ama Kontrollü (Dinamik Analiz)

Durağan analiz bir yere kadar. Modern malware yazarları artık aptal değil. Kodlarını 'obfuscate' ediyorlar, yani karıştırıyorlar. Siz statik analizle baktığınızda sadece anlamsız bir karakter yığını görüyorsunuz. İşte burada işin eğlenceli ve adrenalin dolu kısmına geçiyoruz: Dinamik Analiz.

Dosyayı, interneti kesilmiş, ana makineyle bağı tamamen koparılmış (gerçekten koparılmış!) bir sanal makinede çalıştırıyoruz. Burada gözümüz kulağımız üç şeyde olmalı:

  1. Dosya Değişiklikleri: Kendi kendine bir yerlere dosya kopyalıyor mu? (Örn: AppData/Roaming altına sessizce yerleşmek).
  2. Kayıt Defteri (Registry) İşlemleri: Başlangıçta çalışmak için bir anahtar ekliyor mu? (HKLM\Software\Microsoft\Windows\CurrentVersion\Run).
  3. Ağ Trafiği: Nereye 'evine telefon açıyor' (Phone Home)?

Mesela, Wireshark'ı açtınız ve dosya çalıştıktan sonra 127.0.0.1 (yerel test için) üzerinden hxxp://example.com/cnc/gate.php gibi bir adrese DNS sorgusu gönderdiğini gördünüz. Bingo! Elinizde bir Command and Control (C2) adresi var demektir.

Maskeyi Düşürmek: Obfuscation ve XOR

Analiz ederken en sık karşılaşacağınız şey, zararlı kodun gizlenmiş olmasıdır. En popüler yöntemlerden biri XOR işlemidir. Gelin, basit bir XOR maskesini nasıl düşürürüz bir pseudo-kodla görelim. Diyelim ki saldırgan bir URL'i gizlemiş:

# Zararsızlaştırılmış XOR Deobfuscator örneği

def xor_decode(data, key):
    return "".join(chr(ord(c) ^ key) for c in data)

# Şifreli gibi görünen veri
encrypted_payload = "\x1b\x1d\x1d\x13\x39\x2c\x2c\x16\x1b\x02\x0e\x13\x0f\x06\x2d\x00\x0c\x0e"
key = 0x42 # Bu anahtarı genelde deneme-yanılma veya statik analizle buluruz

# print(xor_decode(encrypted_payload, key)) 
# Çıktı: hxxp://example.com gibi bir şey olacaktır.

Gerçek bir analizde bu anahtarı bulmak için bazen saatlerce Assembly kodunda (IDA Pro veya Ghidra kullanarak) debelenmeniz gerekebilir. Ama o 'Aha!' anı, bütün o yorgunluğa değer.

Kum Havuzundan Kaçan Afacanlar (Anti-VM Teknikleri)

Şu anki malware'ler bizim onları analiz edeceğimizi biliyor. Bu yüzden çok zekice 'Anti-VM' ve 'Anti-Sandbox' teknikleri kullanıyorlar. Program çalışıyor, 'Ben bir sanal makinedeyim' diyor ve tık diye kendini kapatıyor veya tamamen zararsız bir şeymiş gibi davranıyor (mesela sadece hesap makinesini açıyor).

Nereden anlıyorlar?

  • Ekran çözünürlüğü çok mu düşük? (Genelde VM'ler düşük çözünürlükle başlar).
  • Hard disk boyutu 60GB'dan küçük mü? (Kimse ana bilgisayarında 40GB disk kullanmaz).
  • RAM miktarı tam 2GB mı?
  • Fare hareket ediyor mu? (Sandboxlarda genelde fare sabit durur).

Bu yüzden testCompany gibi profesyonel ortamlarda biz sanal makinelerimizi 'insansılaştırmak' (humanize) için uğraşırız. İçine birkaç Word belgesi atarız, tarayıcı geçmişini doldururuz, ekran çözünürlüğünü yükseltiriz.

Peki Biz Kendimizi Nasıl Koruyacağız?

Analiz kısmını bir kenara bırakalım, peki senin yazdığın kodda veya yönettiğin sistemde bu 'veba' nasıl durdurulur?

  1. LOLBins (Living Off The Land Binaries) Takibi: Saldırganlar artık kendi araçlarını getirmek yerine Windows'un kendi araçlarını (PowerShell, Certutil, Bitsadmin) kullanıyor. Bu araçların alışılmadık parametrelerle çalışmasını izleyen EDR kuralları yazmalısın.
  2. Least Privilege (En Az Yetki): Eğer bir muhasebe çalışanı PowerShell üzerinden internetten bir dosya indiriyorsa, orada bir sorun vardır. Yetkileri kısıtlayın.
  3. Application Whitelisting: Sadece immzalı ve bilinen uygulamaların çalışmasına izin vermek, malware dünyasının %80'ini kapı dışında bırakır.

Malware analizi sadece bir teknik beceri değil, aynı zamanda bir zihin yapısıdır. Karşındaki saldırganın ne düşündüğünü, o kodu neden oraya koyduğunu anlamaya başladığında, savunma tarafında gerçek bir 'üstat' olursun.

Unutma, her bilinmeyen dosya potansiyel bir bombadır. Ama o bombayı nasıl etkisiz hale getireceğini bilirsen, patlama sadece senin laboratuvarındaki küçük bir kıvılcım olarak kalır.

Bir sonraki teknik derinlikte görüşmek üzere, sandbox'ınızdan çıkmayın, ama merakınızın sınırlarını hep zorlayın!

İlgili yazılar