EMZETT.
Login

Fuzzing und automatisiertes Testen

Kurz: Beim Fuzzing füttert man ein Programm automatisch mit riesigen Mengen zufälliger oder halb zufälliger Eingaben, um Abstürze und Sicherheitslücken zu finden.

Genauer: Ein Fuzzer erzeugt Eingaben, startet das Ziel und beobachtet. Coverage-geführte Fuzzer (AFL++, libFuzzer) merken, welche Eingaben neue Codepfade erreichen, und mutieren genau diese weiter. Mit Sanitizern (AddressSanitizer) fallen auch stille Speicherfehler auf.

Im Detail

  • Arten: Blind (zufällig), mutationsbasiert, grammatikbasiert, coverage-geführt.
  • Sanitizer: ASan (Speicherfehler), UBSan (undefiniertes Verhalten), TSan (Datenrennen).
  • Harness: Kleine Funktion, die Fuzz-Daten an die zu testende Funktion übergibt.
  • Property-based Testing: Eigenschaften statt Beispiele (z. B. decode(encode(x)) == x), mit Bibliotheken wie Hypothesis, fast-check.
  • Corpus: Sammlung interessanter Eingaben, wird mitgepflegt.
  • CI-Fuzzing: OSS-Fuzz, ClusterFuzz.
  • Findet: Pufferüberläufe, Abstürze, Endlosschleifen, Parser-Fehler.

Siehe auch: OWASP Top 10, Lexer, Parser und Syntaxbaum