1 puan yazan GN⁺ 2024-10-07 | 1 yorum | WhatsApp'ta paylaş
  • Fuzzing-101, fuzzing’i ilk kez öğrenen kişilerin gerçek yazılım hedeflerinde güvenlik açıkları bulma sürecini pratik etmesi için hazırlanmış bir kurstur
  • Kurs 10 gerçek hedef ve 10 alıştırmadan oluşur; Xpdf, libexif, TCPdump, LibTIFF, Libxml2, GIMP, VLC media player, Adobe Reader, 7-Zip ve Google Chrome/V8’i kapsar
  • Her alıştırma bir CVE’yi yeniden üretmeyi veya keşfetmeyi hedefler; CVE-2019-13288, CVE-2016-2334, CVE-2019-5847 gibi güvenlik açıklarıyla birlikte AFL++, ASan, LCOV, WinAFL, Fuzzilli vb. kullanılır
  • Katılım şartı internete bağlı bir Linux sistemidir; temel Linux kullanım becerisi önerilir ve tüm alıştırmalar Ubuntu 20.04.2 LTS üzerinde test edilmiştir
  • Fuzzing, bir programa rastgele veya değiştirilmiş girdiler verip istisnaları ya da çökmeleri izleyen otomatik bir test tekniğidir; bu kurs, kapsam güdümlü evrimsel fuzzer’ların temel çalışma mantığını öğrenme konusu yapar

Kursun amacı ve hedef kitlesi

  • Fuzzing-101, fuzzing’i uzman gibi öğrenmek isteyen ama nereden başlayacağını bilmeyen kişiler için hazırlanmış bir kurstur
  • Kurs 10 gerçek hedef ve 10 alıştırmadan oluşur
  • Hedef okuyucu kitlesi şunlardır
    • Fuzzing temellerini öğrenmek isteyenler
    • Gerçek yazılım projelerinde güvenlik açığı bulma yöntemini öğrenmek isteyenler

Alıştırma yapısı

  • Her alıştırma belirli bir yazılımı, bulunacak CVE’yi, tahmini süreyi ve ana konuları birlikte sunar
Alıştırma Hedef Bulunacak CVE Tahmini süre Ana konular
Exercise 1 Xpdf CVE-2019-13288 120 dakika Afl-clang-fast, Afl-fuzz, GDB
Exercise 2 libexif CVE-2009-3895, CVE-2012-2836 6 saat Afl-clang-lto, kütüphane fuzzing’i, Eclipse IDE
Exercise 3 TCPdump CVE-2017-13028 4 saat ASan, Sanitizers
Exercise 4 LibTIFF CVE-2016-9297 3 saat Kod kapsamı, LCOV
Exercise 5 Libxml2 CVE-2017-9048 3 saat Sözlükler, temel paralelleştirme, komut satırı argümanı fuzzing’i
Exercise 6 GIMP CVE-2016-4994, bonus hata 7 saat Sürekli fuzzing, etkileşimli uygulama fuzzing’i
Exercise 7 VLC media player CVE-2019-14776 6 saat Kısmi enstrümantasyon, fuzzing harness’i
Exercise 8 Adobe Reader Yok 8 saat Kapalı kaynak uygulama fuzzing’i, QEMU enstrümantasyonu
Exercise 9 7-Zip CVE-2016-2334 8 saat WinAFL, Windows uygulaması fuzzing’i
Exercise 10 Google Chrome / V8 CVE-2019-5847 8 saat Fuzzilli, JavaScript motoru fuzzing’i

Çalıştırma ortamı ve araçlar

  • Gereken tek şey internet bağlantısı olan bir Linux sistemidir
  • Alıştırmalarda kullanılabilecek bir VMware imajı sağlanır
  • Temel Linux kullanım becerisi kuvvetle önerilir
  • Tüm alıştırmalar Ubuntu 20.04.2 LTS üzerinde test edilmiştir
  • Kursta AFL++ kullanılır
    • AFL++, Michał “lcamtuf” Zalewski’nin AFL’inden ayrılmış daha yeni ve daha iyi bir fork olarak tanıtılır

Fuzzing’in temel kavramı

  • Fuzz testi (fuzz testing) veya fuzzing, bir programa rastgele ya da değiştirilmiş girdiler verip istisnaları veya çökmeleri izleyen otomatik bir yazılım test tekniğidir
  • Gerçek uygulamalardaki başarılı fuzzer örnekleri olarak AFL, libFuzzer, HonggFuzz gösterilir
  • Bu üç aracın tamamı kapsam güdümlü evrimsel fuzzer örnekleridir

Kapsam güdümlü evrimsel fuzzer

  • Evrimsel (evolutionary) yaklaşım, evrimsel algoritmalardan ilham alan meta-sezgisel bir yöntemdir
    • Seed (seeds) adı verilen başlangıç girdi kümesini zaman içinde evrimleştirir ve değiştirir
    • Seçim ölçütüne örnek olarak kapsam kullanılır
  • Kapsam güdümlü (coverage-guided) fuzzer, yeni çökme bulma olasılığını artırmak için her girdi için kod kapsamı verilerini toplar ve karşılaştırır
    • Kapsam toplama genellikle enstrümantasyon (instrumentation) yoluyla yapılır
    • Yeni yürütme yollarına götüren girdileri seçer

Değişiklik geçmişi

  • 2022-02-14: Exercise 5’teki bazı wget yazım hataları düzeltildi
  • 2021-11-25: Exercise 3 bazı düzeltmelerle güncellendi

1 yorum

 
GN⁺ 2024-10-07
Hacker News görüşleri
  • Fuzzing’le ilgili bir anekdot: https://threadreaderapp.com/thread/1799457232607985698
    11 dakikanızı boşa harcamak istiyorsanız harika bir okuma

    • Google’da 2007 tarihli bir CNET haberi çıkıyor; muhtemelen eEye “basın bültenlerini dört bir yana saçtığı” içindir: https://www.cnet.com/news/privacy/flaw-found-in-office-2007/
      Başka şirketlerin ürünlerinde hata bulmak için yarışıp sonra da gidip Microsoft Publisher’da bir tane bulunca böbürlenerek Microsoft’u aşağılayan kültürü pek anlayamıyorum
      Kendi ürünümüzü test etmek için bütün hafta boyunca sabahlayan bir şirketimiz varsa, belki de hepimiz şanslıyızdır
    • Yazım tarzı kesinlikle eğlence katıyor
      Yazara bakınca IRC’den tanıdığım biri olabilir gibi geliyor; “Mantis” ve “infosec” tam oturuyor
  • İlginç olan, bunun Go’nun yaklaşımından belirgin biçimde farklı olması
    Go’da fuzzing’i test çalıştırır gibi kolayca çalıştırabiliyorsunuz; bu yüzden bir uygulamanın ya da kütüphanenin belirli bölümlerini hedeflemek çok kolay
    Bu yüzden bu tür tekniklerin önemli bir kısmı gereksiz hale geliyor
    Fuzzing’i daha iyi yönlendiren teknikleri merak ediyorum ama şu an için en iyi yöntem seed corpus verip iyi sonuç çıkmasını ummak gibi görünüyor

    • libFuzzer gibi bazı fuzzing araçları, kod kapsamı metrikleri oluşturmak için LLVM ara gösterimini kullanıyor ve bunu fuzzing algoritmasına geri besleyerek test kapsamını artırıyor
    • Kapsamı yönlendirmek için pekiştirmeli öğrenme kullanma fikrini doktora konusu olarak önermiştim ama aslında o yola hiç gitmedim; işe yarayıp yaramayacağını da bilmiyorum
  • Heartbleed’in listede olmamasına şaşırdım. Yeniden üretmesi çok kolay

    • Sanırım buradaki eğitimlerin hepsi yerel dosya veya yerel veri kullanıyor ve ağ tabanlı fuzzing’i ele almıyor, o yüzden dışarıda kalmış