1 puan yazan GN⁺ 2024-10-07 | 1 yorum | WhatsApp'ta paylaş

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

 
GN⁺ 2024-10-07
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

    • golang'da test çalıştırır gibi basitçe fuzzing çalıştırılabildiği için, belirli bir uygulama ya da kütüphanenin parçalarını kolayca hedeflemek mümkün
    • Bu yaklaşım, mevcut birçok tekniği gereksiz hale getiriyor
  • Fuzzing'i daha etkili yönlendiren teknikler merak ediliyor

    • En iyi yöntem, bir seed corpus sağlamak ve en iyi sonucu ummak gibi görünüyor
  • Heartbleed'in listede olmaması şaşırtıcı

    • Heartbleed'i yeniden üretmek çok kolay
  • Paylaştığın için teşekkür eden bir görüş

    • Bunun çok faydalı olduğu düşünülüyor