Rust Programlama Dili: Daha İyi Standart Kütüphane Güvenliği için AWS Yarışması
Amazon Web Services (AWS), Rust standart kütüphanesinin güvenliğini test etmek için bir yarışma başlattı. Bireysel zorluklar Rust kütüphanelerinin farklı alanlarını test eder.
Duyuru
Programlama dilini geliştiren Rust Vakfı yarışmayı destekliyor.
Rust, özellikle hafıza güvenliği konseptleri nedeniyle popülerdir. Belirtim, çoğu yazılım güvenlik açığından sorumlu olan tipik bellek hatalarını önler.
Güvensiz Pasın tehlikeli olması gerekmez, ancak olabilir
Ancak Rust, düşük seviyeli programlamada, örneğin işletim sistemiyle doğrudan etkileşimlerde sınırlarına ulaşır. Anahtar kelime bir çıkış yolu olarak var unsafebu, diğer şeylerin yanı sıra, ham işaretçilerin referansının kaldırılmasına ilişkin yasağı ortadan kaldırır.
Güvensiz Pas, kodun güvensiz olduğu anlamına gelmez, ancak bazı bellek güvenliği kavramlarının çalışmadığı anlamına gelir. Ham bir işaretçinin referansının kaldırılması, kodun işaretçiyi önceden yeterince kontrol etmemesi durumunda tanımsız davranışa yol açabilir.
Ayrıca nasıl unsafe Rust, sözde güvenli soyutlamalar sunar: bir işlev, güvenli olsa bile güvenli kabul edilir. unsafekod içerir. Fonksiyonun kendisi iç mekanın güvenli olmasını sağlamaktan sorumludur. unsafeengelleme tanımsız davranışa yol açmaz. Ayrıntılı bir örneği Rust belgelerinde bulabilirsiniz.
Yapılacak çok şey var
AWS'ye göre Rust standart kütüphanesi yaklaşık 35.000 fonksiyona sahiptir ve bunların 7.500'ü unsafe işaretlenmiştir. Diğer 3.000 tanesi ise Güvenli Soyutlamalardır. Yaklaşık 21.000 işlev içeren ana Rust kütüphanesinde AWS'de 7000 işlev bulunur unsafe işaretlenmiş ve ek 1700 güvenli soyutlama.
Son üç yılda standart Rust kütüphanelerinin 57 güvenlik sorunu başlatıldı ve 20 CVE (Ortak Güvenlik Açıkları ve Etkilenmeler) girişi yapıldı.
AWS tarafından başlatılan yarışma, standart kitaplığın güvenliğini artırmak için kitle kaynak kullanımına odaklanıyor.
Zorlukları tamamlamanın ödülleri
Kütüphanenin bireysel alanlarını test etmek için bir dizi zorluk kullanılır. Başarıyla tamamlanan zorluklar için AWS, miktarı blog yazısında belirtilmeyen mali ödüller öder.
Örnek bir zorluk olarak makalede, güvenli soyutlamayı sağlamak için “Zorluk 10: Dize Bellek Güvenliği” listeleniyor insert-İşlev std::string::String kontrol etmek için:
pub fn insert(&mut self, idx: usize, ch: char) {
assert!(self.is_char_boundary(idx));
let mut bits = [0; 4];
let bits = ch.encode_utf8(&mut bits).as_bytes();
unsafe {
self.insert_bytes(idx, bits);
}
}
İm'i uygulamak önemlidir unsafe-Kullanılan işlevi kilitle insert_bytes kontrol etmek için:
unsafe fn insert_bytes(&mut self, idx: usize, bytes: &[u8]) {
let len = self.len();
let amt = bytes.len();
self.vec.reserve(amt);
unsafe {
ptr::copy(self.vec.as_ptr().add(idx), self.vec.as_mut_ptr().add(idx + amt), len - idx);
ptr::copy_nonoverlapping(bytes.as_ptr(), self.vec.as_mut_ptr().add(idx), amt);
self.vec.set_len(len + amt);
}
}
Her zorlukta güvenliği sağlamak için başarıyla kontrol edilmesi gereken kriterlerin bir listesi vardır. AWS, blog yazısında işlevleri farklı şekillerde test etmeye uygun bazı araçları listeliyor.
Test için bir Rust çatalı
AWS, yarışma için hem zorlukları hem de standart kütüphanenin bir çatalını içeren bir GitHub deposu oluşturdu. Bu çatal açıkça Rust'un resmi versiyonlarına bir alternatif olarak hizmet etmiyor, yalnızca zorlukları tamamlamaya hizmet ediyor.
Daha fazla ayrıntıyı AWS blogunda ve Rust Foundation'ın duyurusunda bulabilirsiniz.
(Ben)