Mastodon Mastodon Mastodon Mastodon

Fuzzing

Aktualisiert: · CyberSecureFox Editorial Team

Fuzzing (Fuzz-Testing) ist ein automatisiertes Testverfahren, das ein Programm mit großen Mengen ungültiger, unerwarteter oder zufälliger Eingaben füttert, um Abstürze, Speicherfehler und Sicherheitslücken zu finden.

Wie Fuzzing funktioniert

Ein Fuzzer erzeugt fortlaufend Eingaben, startet das Zielprogramm damit und achtet auf Abstürze, Hänger oder fehlgeschlagene Assertions. Auffällige Eingaben werden gespeichert, damit Entwickler den Fehler reproduzieren können. Die Idee stammt aus dem Jahr 1988, als Studierende von Barton Miller an der University of Wisconsin viele Unix-Werkzeuge mit Zufallseingaben zum Absturz brachten. Die wichtigsten Ansätze:

  • Mutationsbasiert – Beispieldateien oder Nachrichten werden verändert, indem Bits gekippt, Bytes eingefügt und Eingaben kombiniert werden.
  • Generierungsbasiert – Eingaben werden aus einer Grammatik oder Protokollspezifikation erzeugt, nützlich für komplexe Formate.
  • Coverage-guided – das Programm wird instrumentiert, und Eingaben, die neue Codepfade erreichen, werden behalten. American Fuzzy Lop (AFL, 2013) und libFuzzer aus dem LLVM-Projekt machten diesen Ansatz populär.

Fuzzer werden meist mit Sanitizern wie AddressSanitizer kombiniert, die stille Speicherfehler in sofortige, meldbare Abstürze verwandeln.

Warum Fuzzing wichtig ist

Fuzzing ist einer der wirksamsten Wege, Pufferüberläufe, Use-after-free-Fehler und Parser-Bugs in C- und C++-Code aufzuspüren. Googles 2016 gestarteter Dienst OSS-Fuzz testet Hunderte Open-Source-Projekte kontinuierlich und hat viele Tausend Fehler gefunden, darunter zahlreiche Sicherheitslücken. Auch Angreifer und Exploit-Händler fuzzen populäre Software, und Forschende nutzen Fuzzing in Bug-Bounty-Programmen, um Fehler in Browsern, Betriebssystemen und Netzwerkprotokollen zu finden.

Wie Fuzzing in der Praxis eingesetzt wird

  • Fuzz-Targets in die CI/CD-Pipeline integrieren, damit jede Änderung laufend getestet wird.
  • Code priorisieren, der nicht vertrauenswürdige Eingaben verarbeitet: Dateiformate, Netzwerkprotokolle, Bild- und Schriftbibliotheken.
  • Fuzzer mit Sanitizern betreiben und einen Korpus guter Seed-Eingaben pflegen.
  • Fuzzing mit Code-Reviews, statischer Analyse und speichersicheren Sprachen kombinieren.
Synonyme:
Fuzz-Testing, Fuzz Testing, Fuzz-Tests