Rust: unsafe, FFI ve güvenlik incelemesi
unsafe kodun sınırlarını, C ile birlikte çalışmayı ve Rust projelerinde gerçek güvenlik hatalarını tanır; miri ve bulanık testle kodunu doğrularsın.
Seviye 501 · 17 ders · 18 pratik lab
Dersler
unsafe
- unsafe ne açar, ne açmaz
- Ham işaretçiler ve tanımsız davranış
- unsafe üzerine güvenli soyutlama kurmak
- miri ile tanımsız davranış yakalamak
- Kısa görev: hatalı unsafe bloğu bul ve düzelt
C ile birlikte çalışma
- Rust'tan C kütüphanesi çağırmak
- Rust'ı C'ye kütüphane olarak sunmak
- bindgen ve cbindgen
- Sınır ötesinde bellek sahipliği
- Kısa görev: C ayrıştırıcısını güvenli Rust arayüzüyle sar
Güvenlik incelemesi
- Rust'ta da olan hatalar: panik, taşma, mantık
- Sürüm derlemesinde tamsayı taşması
- Panik ve aşırı bellek ayırma ile hizmet engelleme
- cargo-fuzz ile bulanık test
- Crate tedarik zinciri: build.rs ve proc-macro riskleri
- Kısa görev: ayrıştırıcıyı bulanık test et ve düzelt
Bitirme
- Bitirme görevi: C ile yazılmış ayrıştırıcıyı güvenli Rust'a taşı
Pratik lablar
- unsafe bloklarına gerekçe yazmak: Küçük bir modüldeki üç unsafe bloğa SAFETY açıklaması ve debug_assert ekle; gerekçesi olmayan bloğu güvenli kodla değiştir.
- Ham işaretçilerle değer takası: İki değeri ham işaretçilerle takas eden unsafe fonksiyon yaz ve güvenlik koşullarını SAFETY yorumunda belgele.
- miri ile tanımsız davranışı yakalamak: Testleri geçen ama miri'nin hata bulduğu bir unsafe dilim kodunu incele, nedenini bul ve düzelt.
- unsafe üstüne güvenli halka tampon: MaybeUninit kullanan bir halka tamponun güvenli arayüzünü tamamla; miri ve sınır testleri temiz geçsin.
- Takma ad kuralını çiğneyen kodu onarmak: Aynı veriye iki &mut üreten unsafe yardımcıyı bul, API'yi değiştirerek güvenli hale getir ve miri ile kanıtla.
- Rust'tan bir C fonksiyonu çağırmak: Küçük bir C kütüphanesindeki checksum fonksiyonunu extern bildirimiyle çağır ve sonucu Rust uygulamasıyla karşılaştır.
- Sınırı geçen belleğin sahipliği: C'ye verilen CString belleğini sızdıran ya da iki kez serbest bırakan kodu düzelt; valgrind temiz rapor versin.
- Rust kodunu C kütüphanesi olarak sunmak: Bir doğrulama fonksiyonunu extern "C" ile dışa aç, cbindgen ile başlık üret ve C test programının panik görmeden çalıştığını göster.
- Release derlemede sessiz taşmayı yakalamak: Yalnızca release derlemede yanlış sonuç veren boyut hesabını checked_mul ile düzelt ve iki profilde de test et.
- Paniğe yol açan girdileri kapatmak: Bir paket ayrıştırıcısındaki unwrap ve doğrudan indeksleme noktalarını Result dönen kontrollerle değiştir.
- Aşırı bellek ayırmayı sınırlamak: Uzunluk alanına güvenip Vec::with_capacity çağıran çözücüye üst sınır koy ve dev uzunluklu girdilerle testi geçir.
- Derleyicinin yakalamadığı yetki hatası: Bulutsu Yazılım'ın rol kontrolündeki ters koşulu inceleme ile bul, düzelt ve regresyon testi ekle.
- TLV çözücüyü cargo-fuzz ile denemek: Hazır bir TLV çözücüsü için cargo-fuzz hedefi yaz ve ilk çökmeyi bulana dek çalıştır.
- Bulanık testin bulduğu çökmeyi kalıcı kapatmak: Fuzzer'ın bıraktığı çökme girdisini küçült, kök nedeni düzelt ve girdiyi kalıcı bir regresyon testine çevir.
- Şüpheli build.rs dosyasını incelemek: Bir bağımlılığın build.rs dosyasında ağa çıkan ve ortam değişkeni okuyan kodu tespit et, raporla ve bağımlılığı güvenli sürüme sabitle.
- Hatalı unsafe impl Sync bildirimini düzeltmek: Elle Sync olarak işaretlenmiş bir sayaç türünün iş parçacıkları arasında veri yarışına yol açtığını miri ile göster; bildirimi kaldırıp türü güvenli eşzamanlama araçlarıyla yeniden kur.
- Güvenilmeyen girdideki unwrap çağrılarını ayıklamak: Küçük bir servisin girdi yolundaki unwrap ve expect çağrılarını listele; dışarıdan tetiklenebilenleri hata döndürecek şekilde değiştir ve gerisi için kısa gerekçe yaz.
- Yapı bilen fuzzing ile iki ayrıştırıcıyı karşılaştırmak: Arbitrary ile üretilen komut yapılarını hem yeni hem başvuru ayrıştırıcısına ver ve sonuçlar ayrıştığında durduran bir fuzz hedefi yaz; bulunan farkı düzelt ve örneği teste ekle.
Kurs hakkında
unsafe kodun sınırlarını, C ile birlikte çalışmayı ve Rust projelerinde gerçek güvenlik hatalarını tanır; miri ve bulanık testle kodunu doğrularsın.
Ne öğreneceksin
- unsafe
- C ile birlikte çalışma
- Güvenlik incelemesi
- Bitirme
Ön koşullar
Aynı yolun 401 düzeyine kadar olan konularında deneyimli olmalısın.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde geçer. Kurulum gerekmez; lab her derste temiz başlar.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 501 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.