Güvenlik Önlemleri: Genel Özet Tablosu
| Güvenlik Önlemi | Amacı | Bypass Teknikleri |
|---|---|---|
| Stack Canary | Stack overflow algılama | Canary leak, stack dışı saldırılar |
| ASLR | Adresleri rastgeleleştirir | Info leak, ret2plt |
| DEP / NX | Veri bölgesinde kod çalışmasını engeller | ROP, ret2libc |
| RELRO | GOT overwrite engelleme | ROP, partial RELRO zafiyetleri |
| PIE | Kod segmenti adreslerini rastgeleleştirir | Base leak, offset hesaplama |
| Fortify Source | Güvensiz fonksiyonları engeller | Heap overflow, alternatif binary |
| NX Heap | Heap’te shellcode çalışmasını engeller | Heap grooming, use-after-free |
Güvenlik Önlemleri: Teknik Ayrıntılar
| Güvenlik Önlemi | Açıklama | Bypass Tekniği |
| DEP (NX bit) | Bellek alanlarının yürütülmesini engeller | ROP ile bypass, VirtualProtect veya mprotect çağırmak |
| ASLR | Bellek adreslerini rastgeleleştirir | Bilinen modül (non-ASLR), bilgi sızdırma (info leak) |
| Stack Canaries | Stack’e overflow olmaması için “canary” değeri yerleştirir | Format string bug’larıyla canary’i öğrenmek, stack leak |
| SafeSEH / SEHOP | Yalnızca güvenli SEH handler’larını kabul eder | SafeSEH olmayan modül kullanmak, SEH zinciri taklidi |
| RELRO (Linux) | GOT overwrite engellenir | Partial RELRO varsa overwrite hâlâ mümkün |
| PIE | Kodun belleğe rastgele yerleştirilmesini sağlar | Info leak, GOT hijacking |
| Fortify Source | Derleme zamanı buffer overflow tespiti | Stack smashing olmadığında işe yaramaz |
| Stack Protections | Fonksiyonlara stack canary eklenir | Canary bypass ya da overwrite edilmeyen başka alanları kullanmak |
Senaryo Bazlı Teknikler
| Senaryo | Teknik |
| Yürütme engeli var (DEP) | ROP |
| Bellek alanı çok küçük | Egg Hunter |
| SEH zinciri overwrite edilebiliyor | SEH Exploitation |
| ASLR yok / modül ASLR’siz | ROP, Shellcode direkt |
| Shellcode için yer tahmin edilemiyor | Egg Hunter |
| GOT / IAT overwrite yapılabiliyorsa | Function Hijack |
Güvenlik Önlemleri Detaylı Açıklamalar
● Stack Canary
- Amaç: Stack overflow sırasında return adresinden önceki “canary” değeri çarpıtılırsa, program bunu fark eder ve sonlandırır.
- Bypass: Format string veya stack leak ile canary değeri öğrenilir. Canary dışı alanlara (heap, GOT) yapılan saldırılarla atlanabilir.
● ASLR (Address Space Layout Randomization)
- Amaç: Kod, stack, heap gibi segmentlerin adresleri rastgeleleştirilerek exploitlerin tahmin etmesini zorlaştırmak.
- Bypass: Bilinen modül adresleri kullanmak (non-ASLR library). Programdan leak elde edip adres hesaplamak.
● DEP / NX Bit (Data Execution Prevention)
- Amaç: Stack, heap gibi veri segmentlerinin çalıştırılmasını engellemek.
- Bypass: ROP chain ile
VirtualProtect,mprotect,NtProtectVirtualMemoryçağırılabilir. Ret2libc gibi tekniklerle shellcode yerine sistem fonksiyonları çağırılabilir.
● RELRO (Full / Partial)
- Amaç: Global Offset Table (GOT) overwrite saldırılarını engellemek.
- Bypass: Full RELRO olmayan sistemlerde, program çalışırken GOT overwrite mümkün olur. Alternatif tekniklerle (ROP, IAT overwrite) saldırı gerçekleştirilebilir.
● PIE (Position Independent Executable)
- Amaç: Kod segmentini her çalıştırmada farklı adrese yerleştirerek exploit yazımını zorlaştırmak.
- Bypass: Base address leak edilip offset ile ROP veya shellcode konumlandırılabilir.
● Fortify Source
- Amaç:
gets,strcpy,scanfgibi güvensiz fonksiyonları derleme zamanında engellemek. - Bypass: Binary’nin stack veya heap açıklarını kullanan alternatif exploit yolları aranabilir.
● NX Heap
- Amaç: Heap segmentini non-executable yaparak shellcode yerleştirilmesini engellemek.
- Bypass: Heap grooming ile istenen yapı oluşturulur, use-after-free veya tcache poisoning gibi tekniklerle shellcode çalıştırılabilir.
Kaynakça:
Exploit Geliştirme 101 (2. Baskı) – M. ALPARSLAN AKYILDIZ
Hacking: The Art of Exploitation, 2nd Edition