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

blue-team

O Dosyayı Açmadan Önce İki Kez Düşün: Malware Analizinin Mutfağına Giriş

Zararlı yazılımların karanlık dünyasına bir bakış. İlk hatamdan çıkardığım dersler ve bir dosyayı analiz ederken izlediğimiz o heyecan verici süreç.

Sedat Özdemir
· 4 dk okuma

Sektöre ilk girdiğim yıllarda, bir forumdan indirdiğim 'crackli' bir network analiz aracının içinde bir şeyler döndüğünden şüphelenmiştim. Kendi kendime 'Sedat, sen artık bu işlerin içindesin, bir bak bakalım neymiş bu' dedim. Ama o zamanlar sandbox nedir, izole ortam nedir hak getire... Dosyayı kendi ana bilgisayarımda, sadece antivirüsü kapatıp çalıştırdım. Sonuç? Bilgisayarım bir anda zombi bir makineye dönüştü, CPU kullanımı %100'e vurdu ve tüm dosyalarımın sonuna anlamsız uzantılar gelmeye başladı. O gün o formatı atarken yaşadığım utanç, bana malware analizinin neden bir 'sanat' ve neden 'disiplin' gerektirdiğini acı yoldan öğretti.

Bugün, testCompany laboratuvarlarında veya Red Team operasyonlarımızda karşılaştığımız o 'şüpheli' dosyaları nasıl didik didik ettiğimizi, o dosyanın kalbine nasıl indiğimizi konuşalım istiyorum. Kahveni al, çünkü biraz derinlere dalacağız.

İlk Durak: Statik Analiz (Dış Görünüşe Aldanma)

Bir dosyayı analiz ederken ilk kural şudur: Onu asla çalıştırma. Önce bir dışarıdan bak, kokla, tart. Statik analiz, dosyanın kodunu yürütmeden yapılan incelemedir. Genelde ilk yaptığımız şey dosyanın hash değerini (SHA-256 veya MD5) alıp VirusTotal gibi platformlarda 'bu daha önce görülmüş mü?' diye bakmaktır.

Ama asıl eğlence strings komutuyla başlar. Bir binary dosyasının içindeki okunabilir metinleri çekmek bazen size altın tepside ipucu sunar. Örneğin, bir hxxp://example[.]com/api/v1/collect adresi gördüyseniz, o dosyanın nereye rapor vereceğini (C2 sunucusu) anlamışsınızdır.

Bir de 'Packer' meselesi var. Yazılımcılar kodlarını korumak için, saldırganlar ise yakalanmamak için dosyaları sıkıştırır (UPX gibi). Eğer bir dosyada çok az string varsa ve giriş noktası (entry point) garip bir yerdeyse, bilin ki orada bir gizleme (obfuscation) var.

# Örnek: Basit bir string analizi ve hash kontrolü (Zararsızlaştırılmış)
$ sha256sum suspicious_sample.exe
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

$ strings suspicious_sample.exe | grep "http"
hxxp://update-service-test[.]com/download/payload.bin

İkinci Durak: Dinamik Analiz (Kafese Kapat ve İzle)

Statik analiz bazen yetmez. Saldırgan kodunu öyle bir şifrelemiştir ki, çözmek günler sürer. İşte burada 'Dinamik Analiz' devreye girer. Bu aşamada dosyayı 'laboratuvar ortamında' (Sandbox) çalıştırırız. İnterneti kesilmiş veya simüle edilmiş, her adımı loglanan bir sanal makinede dosyayı serbest bırakırız.

Burada baktığımız şeyler şunlar:

  • Dosya Sistemi Hareketleri: Kendi kendine C:\Windows\System32 altına dosya mı kopyalıyor? Kendini başlangıca mı ekliyor?
  • Registry Değişiklikleri: Run anahtarlarına bir şeyler mi yazıyor?
  • Network Trafiği: DNS sorgusu mu atıyor? Beaconing (belirli aralıklarla sinyal gönderme) mi yapıyor?

Örneğin, testCompany ağında bir şüpheli dosya bulduğumuzda, onun şu tarz bir ağ trafiği yaratıp yaratmadığına bakarız:

// Simüle edilmiş bir C2 haberleşme logu
{
  "timestamp": "2023-10-27T10:00:00Z",
  "source_ip": "192.168.1.50",
  "destination_ip": "127.0.0.1", // Localhost simülasyonu
  "protocol": "HTTPS",
  "domain": "internal-update-mock[.]local",
  "action": "POST",
  "payload_size": "512 bytes"
}

Kodun Kalbi: Reverse Engineering (Tersine Mühendislik)

İşte burası 'geek'liğin zirvesi. Dosyayı parçalarına ayırıp Assembly koduna bakıyoruz. Ghidra, IDA Pro veya x64dbg gibi araçlar bizim neşterimiz. Saldırganın yazdığı mantığı çözmeye çalışıyoruz.

Bir keresinde karşılaştığım bir malware, sistemin dilini kontrol ediyordu. Eğer sistem dili Rusça ise kendini siliyordu. Bu küçük bir kontrol gibi görünebilir ama saldırganın kimliği veya hedef kitlesi hakkında devasa bir ipucudur. Bu tarz 'Anti-VM' veya 'Anti-Debug' teknikleri, analizciyi bıktırmak için konur. Eğer debugger tespit ederse, program farklı bir yola (dummy code) sapar.

Savunma: YARA Kuralları ile Avlanmak

Analiz bittikten sonra en önemli kısım şudur: 'Ben bunu bir daha nasıl tanırım?' İşte burada YARA devreye giriyor. YARA kuralları, zararlı yazılımları tanımlamak için kullandığımız bir nevi 'parmak izi' sistemidir.

Analiz ettiğimiz dosyada spesifik bir değişken ismi veya garip bir hata mesajı bulduysak, bunu bir kurala dönüştürüp tüm ağda aratabiliriz:

rule Suspicious_Phishing_Downloader {
    meta:
        author = "Sedat Ozdemir"
        description = "Basit bir downloader tespiti için örnek kural"

    strings:
        $url = "hxxp://malicious-site-example[.]com"
        $user_agent = "Mozilla/5.0 (Innocent-User)"
        $magic_bytes = { 4D 5A } // PE dosya başlangıcı

    condition:
        $magic_bytes at 0 and ($url or $user_agent)
}

Ne Yapmalı? (Defensive Mindset)

Malware analizi sadece 'ne olduğunu' anlamak için değil, 'nasıl korunacağımızı' kurgulamak içindir.

  1. Endpoint Detection & Response (EDR): Sadece imzaya dayalı antivirüsler artık yetmiyor. Davranışsal analiz şart. Bir Notepad.exe neden PowerShell çalıştırıyor? EDR bunu yakalar.
  2. LUA (Least User Privilege): Kullanıcılara her zaman en düşük yetkiyi verin. Eğer o gün o malware'i admin yetkisiyle çalıştırmasaydım, sistem dosyalarıma dokunamayacaktı.
  3. Network Segmentation: Bir makine enfekte olsa bile, diğer departmanlara sıçrayamamalı. testCompany gibi yapılarda ağları birbirinden izole etmek hayat kurtarır.

Siber güvenlik bir maraton, dostum. Her gün yeni bir yöntem, yeni bir 'bypass' tekniği çıkıyor. Önemli olan o merakı canlı tutmak ve o şüpheli .exe dosyasına asla 'ne olacak ya' diyerek tıklamamak.

Bir sonraki teknik derinlikte görüşmek üzere, sistemlerinize iyi bakın!

İlgili yazılar