Bellek ve Yığın
Taşmaların nasıl çalıştığı
Bellek ve Yığın, CoddyKit'te ücretsiz bir Ethical Hacking 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, Ethical Hacking Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Ethical Hacking Academy kursu toplamda 4 dersten oluşur.
İşlem Belleği Yerleşimi
Bir program çalıştığında işletim sistemi ona farklı bölgelerden oluşan bir bellek yerleşimi verir: text (kod), data/BSS (global değişkenler), heap (dinamik ayırma) ve stack.
Tampon taşmaları çoğunlukla stack'i kötüye kullanır; bu nedenle stack'i anlamak çok önemlidir.
Stack Nedir?
stack, işlev çağrıları için kullanılan bir bellek bölgesidir. Yerel değişkenleri, işlev bağımsız değişkenlerini ve dönüş adreslerini depolar.
x86'da downward yönde büyür: veri göndermek, stack işaretçisini daha düşük adreslere taşır. Taşma gerçekleştiğinde bu yön önem kazanır.
Stack Çerçeveleri
Her işlev çağrısı bir stack frame oluşturur. Bir çerçeve genellikle yerel değişkenleri, saved base pointer değerini (EBP) ve return address değerini (kaydedilmiş EIP) içerir.
Dönüş adresi, işlev tamamlandığında CPU'nun nereden devam edeceğini belirtir. Bu adresi denetlemek, stack taşması istismarının temelidir.
Temel Yazmaçlar
32 bit x86'da önemli yazmaçlar şunlardır:
- ESP: stack işaretçisi, stack'in tepesi.
- EBP: temel işaretçi, geçerli çerçevenin dayanağı.
- EIP: yönerge işaretçisi, sonraki yönergenin adresi.
EIP'yi denetliyorsanız yürütme akışını da denetliyorsunuz demektir.
Tampon Nedir?
buffer, yerel bir karakter dizisi gibi sabit boyutlu bir bellek bloğudur. Program, verilerin bu bloğa sığmasını bekler.
Program, uzunluğu denetlemeden tamponun alabileceğinden fazla veri kopyalarsa fazlalık bitişik belleğe taşar.
char buffer[64];
strcpy(buffer, user_input); // no bounds checkTaşma
Arabellek taşması, girdi arabelleğin boyutunu aştığında ve yığındaki komşu verilerin üzerine yazdığında oluşur.
Kaydedilmiş EBP ve dönüş adresi yerel arabelleklerin hemen sonrasında bulunduğundan, yeterince büyük bir girdi dönüş adresinin üzerine yazabilir ve denetim akışını ele geçirebilir.
Tehlikeli İşlevler
Taşmalar genellikle uzunluğu denetlemeyen güvenli olmayan C işlevlerinden kaynaklanır:
strcpy,strcat,sprintf,gets.
strncpy veya snprintf gibi daha güvenli seçenekler boyut sınırı alır; ancak eski kodlar tehlikeli olanlarla doludur.
gets(buffer); // never use: no length limit at allEIP'nin Üzerine Yazmak Size Ne Kazandırır
Güvenlik açığı bulunan işlev döndüğünde CPU, (artık saldırganın denetimindeki) dönüş adresini yığından EIP'ye çıkarır ve o adrese atlar.
EIP'yi kendi enjekte ettiğiniz makine kodunuza (kabuk koduna) yönlendirirseniz CPU bu kodu programın ayrıcalıklarıyla çalıştırır.
Little-Endian Adresleme
x86 little-endian kullanır: çok baytlı değerler en düşük anlamlı bayt önce gelecek şekilde saklanır. Dönüş adresinin üzerine 0x080414C3 yazmak için baytları ters sırayla yazarsınız.
Bayt sırasını yanlış anlamak, istismarların sessizce başarısız olmasına yol açan yaygın bir başlangıç hatasıdır.
address 0x080414C3 -> bytes \xc3\x14\x04\x08Modern Korumalar
Modern sistemler istismarı zorlaştıran savunmalar ekler:
- DEP/NX: yığını çalıştırılamaz olarak işaretler.
- ASLR: bellek adreslerini rastgeleleştirir.
- Yığın kanaryaları: dönüşten önce üzerine yazma işlemlerini algılar.
Bu kurs, temel kavramları öğretmek için klasik duruma (korumalar kapalıyken) odaklanır.
Bu Konu Neden Hâlâ Önemli
Modern savunmalar klasik yığın taşmalarını zorlaştırsa da temel bilgiler önemini korur. Gömülü sistemlerde, IoT'de ve eski yazılımlarda bu korumalar çoğu zaman hiç bulunmaz.
Temel duruma hâkim olmak, modern azaltımları aşan ROP gibi ileri teknikler için de ön koşuldur.
Hızlı Kontrol
Saldırganın sonunda denetlemek istediği değeri hatırlayın.
Özet
Artık temel bilgileri anlıyorsunuz:
- Yığın yerel değişkenleri, kaydedilmiş EBP'yi ve dönüş adresini saklar ve aşağı doğru büyür.
- ESP, EBP, EIP temel x86 yazmaçlarıdır; EIP'yi denetlemek yürütmeyi denetler.
strcpyvegetsgibi güvenli olmayan işlevler taşmalara yol açar.- x86 little-endian kullanır; modern savunmalar DEP, ASLR ve kanaryalardır.
Sonraki adımda çökme uzaklığını bulmak için bir programa fuzz testi uygulayacaksınız.
Sıkça Sorulan Sorular
“Bellek ve Yığın” dersi ücretsiz mi?
Evet — “Bellek ve Yığın” 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 Ethical Hacking Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Ethical Hacking Academy kursu toplamda 4 dersten oluşur.
“Bellek ve Yığın” dersinde ne öğreneceğim?
Taşmaların nasıl çalıştığı Ethical Hacking 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.
Ethical Hacking Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Ethical Hacking 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.
“Bellek ve Yığın” 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 Ethical Hacking Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Ethical Hacking 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.