EXP-101: 7-Exploit Geliştirme Sırasında Karşılaşılan Güvenlik Önlemleri ve Bypass Teknikleri

Güvenlik Önlemleri: Genel Özet Tablosu

Güvenlik ÖnlemiAmacıBypass Teknikleri
Stack CanaryStack overflow algılamaCanary leak, stack dışı saldırılar
ASLRAdresleri rastgeleleştirirInfo leak, ret2plt
DEP / NXVeri bölgesinde kod çalışmasını engellerROP, ret2libc
RELROGOT overwrite engellemeROP, partial RELRO zafiyetleri
PIEKod segmenti adreslerini rastgeleleştirirBase leak, offset hesaplama
Fortify SourceGüvensiz fonksiyonları engellerHeap overflow, alternatif binary
NX HeapHeap’te shellcode çalışmasını engellerHeap grooming, use-after-free

Güvenlik Önlemleri: Teknik Ayrıntılar

Güvenlik ÖnlemiAçıklamaBypass Tekniği
DEP (NX bit)Bellek alanlarının yürütülmesini engellerROP ile bypass, VirtualProtect veya mprotect çağırmak
ASLRBellek adreslerini rastgeleleştirirBilinen modül (non-ASLR), bilgi sızdırma (info leak)
Stack CanariesStack’e overflow olmaması için “canary” değeri yerleştirirFormat string bug’larıyla canary’i öğrenmek, stack leak
SafeSEH / SEHOPYalnızca güvenli SEH handler’larını kabul ederSafeSEH olmayan modül kullanmak, SEH zinciri taklidi
RELRO (Linux)GOT overwrite engellenirPartial RELRO varsa overwrite hâlâ mümkün
PIEKodun belleğe rastgele yerleştirilmesini sağlarInfo leak, GOT hijacking
Fortify SourceDerleme zamanı buffer overflow tespitiStack smashing olmadığında işe yaramaz
Stack ProtectionsFonksiyonlara stack canary eklenirCanary bypass ya da overwrite edilmeyen başka alanları kullanmak

Senaryo Bazlı Teknikler

SenaryoTeknik
Yürütme engeli var (DEP)ROP
Bellek alanı çok küçükEgg Hunter
SEH zinciri overwrite edilebiliyorSEH Exploitation
ASLR yok / modül ASLR’sizROP, Shellcode direkt
Shellcode için yer tahmin edilemiyorEgg Hunter
GOT / IAT overwrite yapılabiliyorsaFunction 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, scanf gibi 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:

https://www.corelan.be

Exploit Geliştirme 101 (2. Baskı) – M. ALPARSLAN AKYILDIZ

Hacking: The Art of Exploitation, 2nd Edition