Security: Rust Modellerinde Bellek Güvenliği Açıkları (Buffer Overflow vb.)

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Top Poster Of Month
Katılım
7 Ocak 2026
Mesajlar
290
Tepkime puanı
2
Puanları
18
Rust'ın varoluş amacı, C ve C++ gibi dillerde on yıllardır milyarlarca dolarlık zarara ve güvenlik açıklarına yol açan bellek hatalarını (memory safety issues) daha derleme aşamasında tamamen ortadan kaldırmaktır.
Rust, bu güvenliği "çöp toplayıcı" (Garbage Collector) kullanmadan, Ownership (Sahiplik) ve Borrow Checker (Ödünç Kontrolcüsü) mekanizmalarıyla sağlar.

1. Buffer Overflow (Tampon Taşması) Nedir?​

Bir programın, kendisi için ayrılan bellek alanının (buffer) dışına veri yazması durumudur. C dilinde bu, sınır kontrolü yapılmadığı için saldırganın bellekteki diğer verileri değiştirmesine veya kötü amaçlı kod çalıştırmasına (RCE) yol açar.

Rust Nasıl Engeller?​

Rust'ta bir diziye veya vektöre eriştiğinizde, derleyici ve çalışma zamanı her zaman sınır kontrolü (bounds checking) yapar.
Rust
Kod:
let dizi = [1, 2, 3];
// let hata = dizi[5]; // Bu kod Rust'ta 'panic' oluşturur ve programı güvenli şekilde durdurur.
C'de bu işlem sessizce yanlış belleğe yazar; Rust'ta ise programın tanımsız bir davranış sergilemesine (Undefined Behavior) asla izin verilmez.

2. Dangling Pointers (Sarkan İşaretçiler)​

Bir bellek adresi serbest bırakıldıktan sonra hala o adresi işaret eden bir işaretçinin kullanılmasıdır. Bu, verinin bozulmasına veya güvenlik açıklarına neden olur.

Rust Nasıl Engeller?​

Rust'ın Lifetimes (Yaşam Süreleri) sistemi, bir referansın işaret ettiği veriden daha uzun yaşayamayacağını garanti eder.
Rust
Kod:
let r;
{
    let x = 5;
    r = &x; // HATA! x burada ölür, r sarkan işaretçi olamaz.
}
// println!("{}", r); // Derleyici burada "x does not live long enough" hatası verir.

3. Use-After-Free ve Double Free​

Belleğin serbest bırakıldıktan sonra tekrar kullanılması (Use-after-free) veya aynı belleğin iki kez silinmeye çalışılması (Double free), en yaygın güvenlik açıklarındandır.

Rust Nasıl Engeller?​

Ownership (Sahiplik) kuralları gereği, bir veri kapsam dışına çıktığında sadece bir kez drop edilir. Veri bir kez "move" edildiğinde (taşındığında), eski sahibi artık o veriye erişemez.
Rust
Kod:
let s1 = String::from("Güvenlik");
let s2 = s1; // Sahiplik s2'ye geçti.

// println!("{}", s1); // HATA! s1 artık geçersiz, use-after-free imkansız.

4. Race Conditions (Veri Yarışları)​

İki veya daha fazla thread'in aynı bellek adresine aynı anda erişmesi ve en az birinin yazma işlemi yapmasıdır. Bu, tespit edilmesi en zor mantıksal hatalardan biridir.

Rust Nasıl Engeller?​

Rust'ın "Shared XOR Mutable" (Ya paylaşılabilir ya da değiştirilebilir, ama aynı anda ikisi birden değil) kuralı, veri yarışlarını imkansız kılar.
  • İstediğiniz kadar &T (read-only) referansa sahip olabilirsiniz.
  • Sadece bir tane &mut T (yazılabilir) referansa sahip olabilirsiniz.

Özet: Güvenlik Karşılaştırması​

Hata TürüC / C++Rust (Safe)
Buffer OverflowYaygın (Manuel kontrol şart)İmkansız (Sınır kontrolü var)
Dangling PointerYaygınDerleme hatası (Lifetimes)
Use-After-FreeYaygınDerleme hatası (Ownership)
Data RacesMümkünDerleme hatası (Sync/Send Traits)
 
Geri
Üst