Fuzzing-101
Yapı
- Alıştırma 1: Xpdf, CVE-2019-13288, 120 dakika, Afl-clang-fast, Afl-fuzz, GDB
- Alıştırma 2: libexif, CVE-2009-3895, CVE-2012-2836, 6 saat, Afl-clang-lto, Fuzz kütüphanesi, Eclipse IDE
- Alıştırma 3: TCPdump, CVE-2017-13028, 4 saat, ASan, Sanitizers
- Alıştırma 4: LibTIFF, CVE-2016-9297, 3 saat, kod kapsamı, LCOV
- Alıştırma 5: Libxml2, CVE-2017-9048, 3 saat, sözlük, temel paralelleştirme, komut satırı argümanı fuzzing'i
- Alıştırma 6: GIMP, CVE-2016-4994, bonus hata, 7 saat, sürekli fuzzing, etkileşimli uygulama fuzzing'i
- Alıştırma 7: VLC medya oynatıcı, CVE-2019-14776, 6 saat, kısmi enstrümantasyon, fuzzing harness'i
- Alıştırma 8: Adobe Reader, 8 saat, kapalı kaynak uygulama fuzzing'i, QEMU enstrümantasyonu
- Alıştırma 9: 7-Zip, CVE-2016-2334, 8 saat, WinAFL, Windows uygulama fuzzing'i
- Alıştırma 10 (son meydan okuma): Google Chrome / V8, CVE-2019-5847, 8 saat, Fuzzilli, JavaScript motoru fuzzing'i
Değişiklik günlüğü
- 14 Şubat 2022: Alıştırma 5'teki
wget yazım hatası düzeltildi
- 25 Kasım 2021: Alıştırma 3 güncellendi ve düzeltildi
Bu kurs kimler için?
- Fuzzing temellerini öğrenmek isteyenler
- Gerçek yazılım projelerinde zafiyet bulmak isteyenler
Gereksinimler
- Linux sistemi ve internet bağlantısı gerekli
- Temel Linux bilgisi önerilir
- Tüm alıştırmalar Ubuntu 20.04.2 LTS üzerinde test edildi
- Bu kursta, Michał "lcamtuf" Zalewski'nin AFL'inin yeni bir fork'u olan AFL++ kullanılıyor
Fuzzing nedir?
- Fuzz testi (veya fuzzing): Bir programa rastgele/değiştirilmiş girdiler verip istisna/çökme durumlarını izleyen otomatik bir yazılım test tekniği
- AFL, libFuzzer, HonggFuzz; gerçek uygulamalarda başarılı fuzzing araçlarına örnektir
- Kapsam tabanlı evrimsel fuzzer: Kod kapsamı verilerini toplayıp karşılaştırarak yeni yürütme yolları bulan girdileri seçer
Kapsam tabanlı evrimsel fuzzer
- Evrimsel: Evrim algoritmalarından esinlenen bir meta-sezgisel yaklaşım olup, başlangıç alt kümesinin (seed) evrimi ve mutasyonu üzerinden yeni çökmeler bulur
- Kapsam tabanlı: Kod kapsamı verilerini toplayıp karşılaştırarak yeni yürütme yolları bulan girdileri seçer
Teşekkürler
- Yardım edenler: Xavier RENE-CORAIL, Alan Vivona, Jason White, Octavio Gianatiempo, van Hauser, Marc Poulhiès, Xu Hanyu, tclan126, epi052, Jeremias Gomes
İletişim
- Yardıma ihtiyacınız varsa veya önerileriniz varsa GitHub Security Lab Slack'teki
#fuzzing kanalına katılın
GN⁺ Özeti
- Bu kurs, fuzzing'in temel kavramlarını öğrenmek ve gerçek yazılımlarda zafiyet bulmak için faydalıdır
- AFL++ gibi araçları kullanarak çeşitli gerçek vaka örnekleri üzerinden fuzzing teknikleri öğrenilebilir
- Fuzzing, yazılımın kararlılığını ve güvenliğini güçlendirmede önemli bir rol oynar ve bu kurs bunun için pratik bir yaklaşım sunar
- Benzer işlevlere sahip araçlar arasında libFuzzer ve HonggFuzz bulunur
1 yorum
Hacker News görüşleri
Bağlantısı verilen yazı yaklaşık 11 dakikada okunuyor ve golang'ın yaklaşımıyla arasındaki fark ilgi çekici
Fuzzing'i daha etkili yönlendiren teknikler merak ediliyor
Heartbleed'in listede olmaması şaşırtıcı
Paylaştığın için teşekkür eden bir görüş