crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
Buffer Overflow: Belleğin Sınırlarını Zorlamak
Buffer Overflow, bir değişken için ayrılan belleğin (buffer) sınırları dışına veri taşırılarak komşu bellek alanlarının (örneğin fonksiyon dönüş adreslerinin) üzerine yazılması işlemidir. Bu durum, saldırganın programın akışını değiştirip kendi zararlı kodunu çalıştırmasına olanak tanır.
1. Zafiyet Nasıl Oluşur? (Yığın - Stack Yapısı)
C++'ta yerel değişkenler Stack (Yığın) adı verilen bir bölgede tutulur. Stack'te sadece değişkenler değil, fonksiyon bittiğinde programın kaldığı yerden devam etmesi için gerekli olan Return Address (Dönüş Adresi) de saklanır.
Saldırgan, bir değişkene kapasitesinden fazla veri göndererek bu "Dönüş Adresi"nin üzerine kendi istediği bir adresi yazarsa, program fonksiyon sonunda saldırganın işaret ettiği yere (genellikle zararlı bir Shellcode'a) gider.
C++:
#include <iostream>
#include <cstring>
void gizliFonksiyon() {
std::cout << "Sistem ele gecirildi!" << std::endl;
}
void girdiAl() {
char tampon[8]; // Sadece 8 karakterlik yer var
std::cin >> tampon; // Kullanıcı 20 karakter girerse ne olur?
}
int main() {
girdiAl();
return 0;
}
2. Korunma Yolları (Yazılımcı İçin)
Bu zafiyetten kaçınmanın en temel yolu, bellek sınırlarını kontrol etmeyen tehlikeli fonksiyonlardan uzak durmaktır.
[]Tehlikeli Fonksiyonlar:gets(),strcpy(),sprintf(),scanf("%s").
[]Güvenli Alternatifler:fgets(),strncpy(),snprintf()veya modern C++'ınstd::stringyapısı.
3. İşletim Sistemi ve Derleyici Korumaları
Modern sistemler, yazılımcı hata yapsa bile bu zafiyetin sömürülmesini zorlaştıran çeşitli mekanizmalara sahiptir:
| Mekanizma | Açıklama |
|---|---|
| ASLR | Bellek adreslerini her çalıştırmada rastgele değiştirir. Saldırgan hedef adresi bulamaz. |
| Stack Canary | Dönüş adresinden hemen önce "canary" (kanarya) adı verilen gizli bir değer koyar. Değer değişmişse program çöker. |
| DEP / NX | Veri bölgelerinin (Stack/Heap) kod olarak çalıştırılmasını engeller. |
Sonuç
Buffer Overflow, C++'ın sunduğu "donanıma yakınlık" gücünün bir bedelidir. Modern C++ (Smart Pointers,
std::vector, std::string) kullanarak bu hataların %99'undan kaçınabilirsiniz. Unutmayın; bir siber saldırganın ihtiyacı olan tek şey, sizin kontrol etmeyi unuttuğunuz tek bir index'tir.