Siber Güvenlik: Buffer Overflow Zafiyeti ve Korunma Yolları

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++'ın std::string yapı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:

MekanizmaAçıklama
ASLRBellek adreslerini her çalıştırmada rastgele değiştirir. Saldırgan hedef adresi bulamaz.
Stack CanaryDönüş adresinden hemen önce "canary" (kanarya) adı verilen gizli bir değer koyar. Değer değişmişse program çöker.
DEP / NXVeri 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.
 
Geri
Üst