Sektörde 'Red Team Lead' falan yazınca herkes sanıyor ki biz her zaman her şeyi süper kontrollü yapıyoruz. Hadi gelin size bir itirafla başlayayım: Mesleğimin ikinci yılıydı, elimde çok 'taze' bir RAT (Remote Access Trojan) örneği vardı. Sanal makine (VM) hazır, her şey kitabına uygun... Sanıyordum. Meğer o anki dalgınlığımla VM'in ağ ayarlarını 'Bridge' modunda unutmuşum ve host makinemle izole etmeyi atlamışım. Analiz ettiğim örnek, yerel ağdaki cihazlara yayılmaya çalışan bir solucan (worm) özelliği taşıyormuş. Beş dakika sonra evdeki akıllı televizyonun ekranında saçma sapan pikseller belirdiğinde alnımdan akan o soğuk teri hala hatırlarım. O gün anladım ki; malware analizi yaparken sadece kodu değil, kendi egonu da sandbox'a kapatman gerekiyor.
Bugün sizinle testCompany laboratuvarlarında bir zararlıyı incelerken izlediğimiz o 'vahşi' yolu ve bu süreçten savunma tarafı için nasıl dersler çıkardığımızı konuşacağız. Kahveler hazırsa, o şüpheli .exe'nin içine dalıyoruz.
İlk Adım: Gözle Muayene (Static Analysis)
Bir malware'i analiz ederken yaptığımız ilk hata, onu hemen çalıştırmak olur. Dur bi' sakin ol. Önce bir dışarıdan bakalım, neye benziyor? Statik analiz, zararlıyı koşturmadan (execution yapmadan) içindeki ipuçlarını toplama sanatıdır.
İlk baktığımız yer her zaman Strings (karakter dizileri) olur. Eğer saldırgan çok acemiyse veya bir 'script kiddie' ise, kodun içinde komut kontrol sunucusu (C2) adreslerini, hata mesajlarını veya hangi API'leri çağırdığını görebilirsiniz. Ama profesyonel dünyada genellikle karşımıza 'Packed' (paketlenmiş) veya 'Obfuscated' (karartılmış) yapılar çıkar.
Örneğin, basit bir Python tabanlı 'dropper' (asıl zararlıyı indiren küçük kod parçası) şu şekilde görünebilir (tabii ki zararsızlaştırılmış haliyle):
# testCompany Zararsızlaştırılmış Örnek
import base64
import os
def stage_2_loader():
# Karartılmış C2 adresi ve payload yolu
# Gerçekte bu kısım karmaşık algoritmalarla şifrelenir
encoded_data = "Y29ubmVjdF90b19leGFtcGxlLmNvbV9hbmRfZG93bmxvYWRfcGF5bG9hZA=="
decoded_instruction = base64.b64decode(encoded_data).decode('utf-8')
# Analizden kaçmak için basit bir kontrol
if os.path.exists("C:\\analysis_tools\\wireshark.exe"):
return "Hadi oradan, ben çalışmam!"
# Zararsız simülasyon: Aslında burada bir subprocess.call() olurdu
print(f"Simüle edilen işlem: {decoded_instruction}")
stage_2_loader()
Burada gördüğünüz os.path.exists kontrolü, malware yazarlarının en sevdiği 'Anti-Analysis' tekniklerinden biridir. Eğer sistemde yaygın analiz araçlarını görürse, kendini imha eder veya tamamen zararsız bir uygulama (hesap makinesi gibi) gibi davranır.
İkinci Adım: Dinamik Analiz ve 'Behavioral Analysis'
Statik analiz bizi bir yere kadar götürür. Bazı malware'ler o kadar iyi paketlenmiştir ki, statik olarak baktığınızda sadece anlamsız bir veri yığını görürsünüz. İşte burada 'Sandboxing' devreye girer.
Zararlıyı kontrollü bir ortamda çalıştırıp "Bu arkadaş ne yapıyor?" diye sorarız.
- Hangi dosyalara dokunuyor? (
File System Activity) - Kayıt defterinde (Registry) kalıcılık (persistence) sağlıyor mu?
- Hangi IP adreslerine 'Hello' diyor? (
Network Activity)
Özellikle Process Monitor (ProcMon) gibi araçlarla baktığımızda, bir svchost.exe kılığındaki zararlının aslında arka planda powershell.exe üzerinden şifreli bir komut çalıştırdığını yakalayabiliriz.
Defansif Bakış Açısı: Biz Ne Yapabiliriz?
Analiz yapmak sadece "Vay be, adamlar ne yazmış" demek için değildir. Buradan elde ettiğimiz her bilgi, savunma kalkanımızı güçlendirir. İşte sahada uygulayabileceğiniz birkaç 'hardening' (sıkılaştırma) ipucu:
LOLBins (Living Off The Land Binaries) Takibi: Saldırganlar kendi araçlarını getirmek yerine Windows'un kendi araçlarını (Certutil, PowerShell, WMI) kullanmayı severler. Eğer bir
word.exegidippowershell.exebaşlatıyorsa, orada bir sorun vardır. EDR (Endpoint Detection and Response) kurallarınızı bu 'Parent-Child' ilişkisine göre ayarlayın.Kritik Kayıt Defteri Anahtarları: Malware'lerin %90'ı bilgisayar her açıldığında çalışmak ister.
HKLM\Software\Microsoft\Windows\CurrentVersion\Rungibi anahtarlardaki her türlü değişikliği izlemek, birçok saldırıyı daha başlamadan bitirir.Network Isolation: Benim yaptığım o acemi hatasına düşmemek için, analiz ortamlarınızın internet çıkışını mutlaka bir 'FakeNet' veya 'INetSim' üzerinden geçirin. Zararlı dışarıyla konuştuğunu sanırken siz onun hangi URL'lere istek attığını bir log dosyasından izleyin.
Teknik Bir 'Trick': Entropy Analysis
Bir dosyanın paketlenip paketlenmediğini anlamanın en zekice yolu 'Entropy' (Entropi) değerine bakmaktır. Eğer bir dosyanın entropisi 7.5 ve üzerindeyse (0 ile 8 arası skalada), o dosya büyük ihtimalle şifrelenmiştir veya sıkıştırılmıştır. Standart bir .exe dosyasının entropisi genellikle daha düşüktür. Eğer testCompany içinde bir dosyadan şüpheleniyorsak, ilk baktığımız metriklerden biri budur.
# Pseudo-code entropi kontrolü
if file_entropy > 7.5:
print("Uyarı: Bu dosya yüksek ihtimalle paketlenmiş (Packed). Statik analiz zor olabilir.")
else:
print("Dosya normal görünüyor, string'leri incelemeye devam et.")
Kapanışa Doğru
Malware analizi bitmek bilmeyen bir kedi-fare oyunudur. Bugün bizim 'süper' dediğimiz analiz tekniklerini yarın saldırganlar bypass edecektir. Ama işin temeli hep aynı kalıyor: Merak ve şüphe.
Bir güvenlik uzmanı olarak en büyük tavsiyem; sadece araçlara güvenmeyin. Araçlar size veriyi sunar, ama o veriyi yorumlayacak olan sizin tecrübeniz ve mantığınızdır. Ve lütfen, ne yaparsanız yapın, o şüpheli dosyayı kendi ana makinenizde 'Acaba neymiş?' diye açmayın. Benim televizyonun başına gelenler sizin de başınıza gelmesin.
Terminaliniz temiz, loglarınız anlamlı olsun. Bir sonraki teknik derinlikte görüşmek üzere!
