1 Punkte von GN⁺ 2024-10-07 | 1 Kommentare | Auf WhatsApp teilen

Fuzzing-101

Aufbau

  • Übung 1: Xpdf, CVE-2019-13288, 120 Minuten, Afl-clang-fast, Afl-fuzz, GDB
  • Übung 2: libexif, CVE-2009-3895, CVE-2012-2836, 6 Stunden, Afl-clang-lto, Fuzz-Bibliothek, Eclipse IDE
  • Übung 3: TCPdump, CVE-2017-13028, 4 Stunden, ASan, Sanitizers
  • Übung 4: LibTIFF, CVE-2016-9297, 3 Stunden, Code Coverage, LCOV
  • Übung 5: Libxml2, CVE-2017-9048, 3 Stunden, Wörterbuch, grundlegende Parallelisierung, Fuzzing von Kommandozeilenargumenten
  • Übung 6: GIMP, CVE-2016-4994, Bonus-Bug, 7 Stunden, persistentes Fuzzing, Fuzzing interaktiver Anwendungen
  • Übung 7: VLC Media Player, CVE-2019-14776, 6 Stunden, partielle Instrumentierung, Fuzzing-Harness
  • Übung 8: Adobe Reader, 8 Stunden, Fuzzing von Closed-Source-Anwendungen, QEMU-Instrumentierung
  • Übung 9: 7-Zip, CVE-2016-2334, 8 Stunden, WinAFL, Fuzzing von Windows-Anwendungen
  • Übung 10 (abschließende Herausforderung): Google Chrome / V8, CVE-2019-5847, 8 Stunden, Fuzzilli, Fuzzing von JavaScript-Engines

Änderungsprotokoll

    1. Februar 2022: Tippfehler bei wget in Übung 5 korrigiert
    1. November 2021: Übung 3 aktualisiert und korrigiert

Für wen ist dieser Kurs?

  • Für Menschen, die die Grundlagen des Fuzzing lernen möchten
  • Für Menschen, die Schwachstellen in realen Softwareprojekten finden möchten

Voraussetzungen

  • Ein Linux-System und Internetverbindung sind erforderlich
  • Grundlegende Linux-Kenntnisse werden empfohlen
  • Alle Übungen wurden unter Ubuntu 20.04.2 LTS getestet
  • In diesem Kurs wird AFL++ verwendet, ein neuer Fork von AFL von Michał "lcamtuf" Zalewski

Was ist Fuzzing?

  • Fuzz-Testing (oder Fuzzing): eine automatisierte Software-Testtechnik, bei der Programme mit zufälligen/manipulierten Eingaben versorgt und Ausnahmen/Abstürze überwacht werden
  • AFL, libFuzzer und HonggFuzz sind Beispiele für erfolgreiche Fuzzer in realen Anwendungen
  • Coverage-basierter evolutionärer Fuzzer: sammelt und vergleicht Code-Coverage-Daten, um Eingaben auszuwählen, die neue Ausführungspfade finden

Coverage-basierter evolutionärer Fuzzer

  • Evolutionär: ein metaheuristischer Ansatz, der von evolutionären Algorithmen inspiriert ist und durch die Evolution und Mutation einer anfänglichen Teilmenge (Seeds) neue Abstürze findet
  • Coverage-basiert: sammelt und vergleicht Code-Coverage-Daten, um Eingaben auszuwählen, die neue Ausführungspfade finden

Danksagung

  • Personen, die geholfen haben: Xavier RENE-CORAIL, Alan Vivona, Jason White, Octavio Gianatiempo, van Hauser, Marc Poulhiès, Xu Hanyu, tclan126, epi052, Jeremias Gomes

Kontakt

  • Wenn du Hilfe brauchst oder Vorschläge hast, tritt dem #fuzzing-Kanal im GitHub Security Lab Slack bei

Zusammenfassung von GN⁺

  • Dieser Kurs ist nützlich, um die Grundkonzepte des Fuzzing zu lernen und Schwachstellen in realer Software zu finden
  • Mit Tools wie AFL++ lassen sich Fuzzing-Techniken anhand verschiedener Praxisfälle erlernen
  • Fuzzing spielt eine wichtige Rolle bei der Verbesserung von Stabilität und Sicherheit von Software, und dieser Kurs bietet dafür einen praxisnahen Ansatz
  • Ähnliche Tools mit vergleichbaren Funktionen sind libFuzzer und HonggFuzz

1 Kommentare

 
GN⁺ 2024-10-07
Hacker-News-Kommentare
  • Der verlinkte Artikel ist eine etwa 11-minütige Lektüre, und die Unterschiede zum Ansatz von golang sind interessant.

    • In golang lässt sich Fuzzing so einfach ausführen wie das Starten von Tests, sodass sich Teile einer bestimmten Anwendung oder Bibliothek leicht gezielt ansprechen lassen.
    • Dieser Ansatz macht viele bestehende Techniken überflüssig.
  • Es besteht Neugier auf Techniken, mit denen sich Fuzzing effektiver steuern lässt.

    • Die beste Methode scheint zu sein, einen Seed-Korpus bereitzustellen und auf die bestmöglichen Ergebnisse zu hoffen.
  • Es ist überraschend, dass Heartbleed nicht auf der Liste steht.

    • Heartbleed lässt sich sehr leicht reproduzieren.
  • Eine Meinung bedankt sich fürs Teilen.

    • Das wird als sehr nützlich angesehen.