Rust gerçekten güvenli mi?
C++ gerçekten o kadar güvensiz mi?
YouTube'da bu ilginç konuda yapılmış bir sunum vardı, ben de paylaşmak istedim.
Başlığı çevirecek olursak, "bellek güvenli bir dil kullanın demek o kadar basit bir mesele değil" gibi bir anlam taşıyor.
Konuşmacı, tek bir tarafa kaymadan, görece adil bir perspektiften kendi düşüncelerini aktarıyor.
- Rust, panic yoluyla bellek güvenli olmayan kodun çalıştırılmasını engeller; ancak
unsafe Rustbu korumaları aşabilir. - Ancak
unsafe Rustaçık bir opt-in gerektirdiği için, güvensiz C/C++ koduna göre daha görünürdür. Bu bölümler daha odaklı biçimde incelenebilir. - Rust crate'lerinin yaklaşık %30'u güvensiz kod kullanıyor; gömülü sistemlerde bu oran iki kat daha yüksektir.
- Sanitizer'lar (dinamik analiz araçları), hem Rust hem de C/C++ kodunda bellek hatalarını tespit edebilir.
- Rust geliştiricilerinin %70'i, C/C++ kütüphanelerine yönelik FFI (yabancı fonksiyon arayüzü) üzerinden güvensiz kod çağırıyor.
- Rust projelerinde kullanılan birçok önemli kütüphane de C/C++ ile yazılmıştır (SQLite, OPCUA kütüphanesi).
- Sanitizer'lar, kaynak kod mevcut olduğunda LLVM IR katmanında hem Rust hem de C/C++ kodunu analiz edebilir.
- Miri, Rust'taki tanımsız davranışı orta seviye gösterimde tespit etmeye yönelik tamamlayıcı bir araçtır.
- Miri'nin avantajları: net hatalar sunması ve tüm tanımsız davranışları aynı anda kontrol etmesi. Sınırlamaları: C/C++ kodunu yorumlayamaz.
- Rust standart kütüphanesi fonksiyonlarının yaklaşık %20'si güvensiz kod kullanır.
- Kritik altyapılar için yalnızca bellek güvenli kod değil, aynı zamanda maddi hasarı veya can güvenliği risklerini önleyecek şekilde doğru kod da gerekir.
- Güvenli Rust programları bile hatalı çalışabilir veya hizmet reddi saldırılarına açık olabilir.
- Özellik testi, sınır durumlarını bulmak için rastgele girdiler üreterek yardımcı olabilir; ancak imkânsız hatalarla baş etmekte zorlanır.
- Kani, kısıtlar içinde bir programın doğruluğunu matematik kullanarak kontrol eden bir model denetleyicisidir.
- Kani'nin avantajları: kısıtlar içindeki tüm girdileri matematiksel olarak değerlendirmesi. Sınırlamaları: döngülerin açılması gerekir ve eşzamanlılık ya da C/C++ FFI desteği yoktur.
- Rust için sonuç: Rust güvenlidir, ama düşünüldüğü kadar güvenli değildir.
- Bjarne Stroustrup, C ile C++ arasında ayrım yapıyor ve C++'ın daha güvenli kod için tasarlandığını belirtiyor.
- C++ Core Guidelines, tür güvenliği, sınır güvenliği ve ömür güvenliği için profiller sunarak Rust'ın sağladığı güvencelere yaklaşır.
- C++'ın en büyük sorunu, varsayılan olarak güvensiz kod yazmanın fazla kolay olmasıdır. Sorun geliştiricilerin çaba göstermemesi değil.
Henüz yorum yok.