Yığın Tamponu Taşmaları
Yığın düzenini, EIP/RIP taşmasını anlayın ve güvenlik açığı bulunan bir C ikilisi için çalışan bir istismar yazın.
Yığın Tamponu Taşmaları, CoddyKit'te ücretsiz bir Cyber Security Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Cyber Security Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Cyber Security Academy kursu toplamda 4 dersten oluşur.
Arabellek Taşması Nedir?
Arabellek taşması, bir arabelleğe tutabileceğinden daha fazla veri yazıldığında meydana gelir. Fazla veri bitişik belleğin üzerine yazar; bu da denetim yapılarını bozabilir ve programın yürütülmesini başka bir yöne yönlendirebilir.
Yığın Belleği Düzeni
Çağrı yığını şunları içerir: yerel değişkenler (arabellekler), kaydedilmiş çerçeve işaretçisi (SFP) ve dönüş adresi (RIP/EIP) — işlev döndükten sonra yürütmenin devam edeceği yer. Yerel bir arabelleğin taşırılması, dönüş adresinin üzerine yazabilir.
Klasik Yığın Ezme
Bir program gets() veya strcpy() işlevini uzunluk denetimi yapmadan çağırırsa saldırgan, arabelleği doldurup dönüş adresinin üzerine kabuk kodunun veya yararlı bir kod parçasının adresini yazmaya yetecek kadar bayt girebilir.
// Vulnerable C code:
void vuln() {
char buf[64];
gets(buf); // No bounds checking!
}Ofseti Bulma
Dönüş adresine ulaşan bayt sayısını örüntü oluşturarak belirleyin:
# Generate a cyclic pattern:
python3 -c "from pwn import *; print(cyclic(200))" | ./vuln
# After crash, find offset:
python3 -c "from pwn import *; print(cyclic_find(0x61616166))"Korumalar: Yığın Bekçileri
Yığın bekçisi, yerel değişkenlerle kaydedilmiş dönüş adresi arasına yerleştirilen rastgele bir değerdir. Dönüşten önce bekçi denetlenir; üzerine yazılmışsa program sonlandırılır. Klasik taşma istismarının gerçekleştirilebilmesi için bu korumanın aşılması gerekir.
Koruma Önlemleri: ASLR
Adres Alanı Düzeninin Rastgeleleştirilmesi (ASLR), her çalıştırmada yığının, öbeğin ve kitaplıkların başlangıç adresini rastgeleleştirir. Güncel bir adres sızdırılmadığı sürece, nereye atlanacağını tahmin etmek 64 bit sistemlerde uygulanabilir değildir.
Koruma Önlemleri: NX/DEP
NX (Yürütme Yok) / DEP (Veri Yürütme Önleme), yığını yürütülemez olarak işaretler. Arabelleğe enjekte edilen kabuk kodu doğrudan çalıştırılamaz. Bu, saldırganları Dönüş Odaklı Programlama (ROP) kullanmaya zorlar.
Adresleri Sızdırma
ASLR'yi aşmak için saldırganların bir bilgi sızıntısına ihtiyacı vardır: biçim dizesi güvenlik açıkları, öbekte sınırların ötesinde okuma (Heartbleed gibi) veya istismar edilen işlevde okunabilir bir işaretçi. Sızdırılan tek bir adres uzaklığı ortaya çıkarır ve diğer adreslerin hesaplanmasını sağlar.
Temel Bir İstismar Yazma
Koruma önlemi olmayan temel bir 32 bitlik yığın taşması:
# Python exploit skeleton (pwntools):
from pwn import *
p = process("./vuln")
offset = 76
shellcode = asm(shellcraft.sh())
payload = shellcode + b"A" * (offset - len(shellcode)) + p32(stack_addr)
p.sendline(payload)
p.interactive()ret2libc Tekniği
ret2libc, kabuk kodu yerine libc işlevlerine (örneğin system()) dönerek NX'i aşar. Saldırgan, dönüş adresinin üzerine system adresini yazar ve "/bin/sh" değerini bağımsız değişken olarak geçirir.
İstismar Geliştirme Araçları
Temel araçlar:
- pwntools — Python istismar kitaplığı
- GDB + pwndbg/peda — istismar yardımcılarına sahip hata ayıklayıcı
- checksec — ikili dosya korumalarını gösterir
- ROPgadget / ropper — ROP zincirlerini bulur
checksec --file=./vulnHızlı Kontrol: Yığın Taşması
Yerel değişkenler ile kaydedilmiş dönüş adresi arasına rastgele bir değer yerleştirip, bu değer üzerine yazılırsa programı sonlandıran koruma önlemi hangisidir?
Ders Özeti
Yığın arabellek taşmaları, arabelleğin sınırlarını aşacak şekilde doldurulmasıyla dönüş adresinin üzerine yazar. Koruma önlemleri arasında yığın kanaryaları (üzerine yazma işlemlerini algılar), ASLR (adresleri rastgeleleştirir) ve NX/DEP (yürütülemeyen yığın) bulunur. ret2libc, NX'i aşar. Bilgi sızıntıları ASLR'yi etkisiz kılar. pwntools, istismar geliştirmeyi kolaylaştırır.
Sıkça Sorulan Sorular
“Yığın Tamponu Taşmaları” dersi ücretsiz mi?
Evet — “Yığın Tamponu Taşmaları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Cyber Security Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Cyber Security Academy kursu toplamda 4 dersten oluşur.
“Yığın Tamponu Taşmaları” dersinde ne öğreneceğim?
Yığın düzenini, EIP/RIP taşmasını anlayın ve güvenlik açığı bulunan bir C ikilisi için çalışan bir istismar yazın. Cyber Security Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Cyber Security Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Cyber Security Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Yığın Tamponu Taşmaları” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Cyber Security Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Cyber Security Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Yığın Tamponu Taşmaları
- Return-Oriented Programming (ROP)
- Biçim Dizesi Güvenlik Açıkları
- Heap İstismarı: Use-After-Free ve Heap Spraying