Was ist Fuzz Testing?

Fuzz Testing, auch Fuzzing oder Monkey Testing genannt, ist eine Technik, mit der Software auf unbekannte Schwachstellen getestet wird. Der Fuzz-Testprozess wird durch ein als Fuzzer bezeichnetes Programm automatisiert, das eine große Datenmenge auffordert und als Eingabe an das Zielprogramm sendet. Wenn das Zielprogramm abstürzt oder sich unerwünscht verhält, protokolliert der Fuzzer die Eingabe, die den Fehler verursacht hat.

Hacker verwenden häufig Fuzzers, um nach Schwachstellen in Software zu suchen und sie auf Schwachstellen zu untersuchen, die sie ausnutzen können. Softwareentwickler können mit einem Fuzzer solche Angriffe vorhersehen und abwehren.

Ursprung

Der erste Fuzzer wurde in den frühen achtziger Jahren von Entwickler Steve Capps geschrieben, um auf Schwachstellen in Programmen für den Macintosh-Computer zu testen. Er nannte sein Programm "The Monkey" und bezog sich dabei auf das klassische Sprichwort eines Affen, der eine unendliche Zeit lang zufällige Tasten einer Schreibmaschine drückte. Die Theorie besagt, dass der Affe bei ausreichender Zeit die kompletten Werke von Shakespeare schreiben wird. Obwohl dieser Ansatz für das Testen von Software normalerweise als "Fuzzing" bezeichnet wird, wird er aufgrund des Capps-Programms auch als "Affentest" bezeichnet.

Liste der Fuzzers

Fuzzing-Techniken können zum Testen von Software verwendet werden, und viele Fuzzers existieren für bestimmte Zwecke.

Das Folgende ist eine Liste von Fuzzern, von denen die meisten Open Source sind und sich viele noch in der aktiven Entwicklung befinden.

Fuzzer Name / URLBeschreibung
Google-DesinfektionsmittelEine von Google entwickelte Gruppe von vier Datenentkeimern, die mithilfe von Fuzzing Programmfehler erkennt:
  • AddressSanitizer, der Speicheradressfehler in C- und C ++ - Programmen erkennt.
  • LeakSanitizer, der Speicherlecks erkennt.
  • ThreadSanitizer, der Racebedingungen in C ++ und Go erkennt.
  • Memory Sanitizer, der nicht initialisierten Speicher erkennt.
afl-fuzzAmerican Fuzzy Lop, ein Tool, das genetische Algorithmen verwendet, um die Sicherheit von kompilierten Programmen zu testen.
BackfuzzEin Protokoll-Fuzzing-Toolkit.
BrundleFuzzEin verteilter Fuzzer für Windows und Linux.
CERT FOEFailure Observation Engine, ein von CERT entwickeltes Tool, das mithilfe von Mutations-Fuzzing Schwachstellen in Windows-Programmen erkennt.
CERTfuzzDer Quellcode von CERT FOE.
ChoronzonEin evolutionärer wissensbasierter Fuzzer.
DiffyEin von Twitter entwickeltes Tool zur Erkennung von Schwachstellen in Web-Services.
SchwindligEine fuzzing-Bibliothek für Python
dfuzzerEin Fuzzing-Tool zum Testen von Prozessen, die über den D-Bus-IPC- und RPC-Mechanismus kommunizieren.
dotdotpwnEin Tool zum Testen von Webanwendungen auf Schwachstellen bei der Pfaddurchquerung.
DranzerEin Fuzz-Tester für ActiveX-Steuerelemente.
EMFFuzzerEin Enhanced Metafile-Fuzz-Tester.
AusnutzbarEine Erweiterung für GDB (der GNU-Debugger), die ausführbare Linux-Dateien analysiert und ihre Fehler nach Schweregrad nach bekannten Exploits klassifiziert. Ursprünglich im CERT entwickelt.
Go-FuzzEin Fuzz-Tester für Go-Programme, der Objekte mit zufälligen Werten auffüllt.
grrKonvertiert 32-Bit-Binärdateien in 64-Bit und fuzzing sie als Teil des Prozesses.
honggfuzzEvolutionärer, feedbackgesteuerter Fuzzer für Hardware und Software.
HTTP / 2-FuzzerEin Fuzzer für HTTP / 2-Anwendungen, der weiterhin zum Download zur Verfügung steht, jedoch nicht mehr aktiv entwickelt wird.
HodorEin "etwas mehr als total dummer" Fuzzer.
iFuzzerEin in Python geschriebener Fuzzer, der Mercurial und Valgrind verwendet.
KEMUfuzzerEin Fuzzer für virtuelle Maschinen, die auf QEMU-, VMware-, VirtualBox- oder BHOCS-Emulationsplattformen ausgeführt werden.
KernelFuzzerEin Fuzzer für Kernel-Systemaufrufe
LibFuzzerEine Bibliothek für prozessuale, evolutionäre, feldbasierte Fuzz-Tests.
NetzobEin Fuzzer für Reverse-Engineering-Kommunikationsprotokolle.
Neuraler FuzzerEin Fuzzer, der für das Testen maschinelles Lernen (neuronale Netzwerke) verwendet.
AlbtraumEin verteilter Fuzzer mit webbasierten Verwaltungstools.
PathgrindPfadbasierte dynamische Analyse für 32-Bit-Anwendungen.
Perf-FuzzerEin Fuzzer, der speziell zum Testen des Systemaufrufs perf_event_open () im Linux-Kernel entwickelt wurde.
PulsarEin Fuzzer, der Protokolle "lernt".
PyJFuzzEin Python-JSON-Fuzzer.
QuickFuzzEin experimenteller Grammatikfuzzer, geschrieben in Haskell.
RadamsaEin Fuzzer für allgemeine Zwecke.
GeilEin einfacher Python-Fuzzer, der eine zufällige Eingabe für das getestete Programm generiert.
sfuzzEinfacher Flaum. "Genau wie es sich anhört - ein einfacher Fuzzer." Bestandteil des Kali Linux-Toolsets.
SkifischEin bei Google entwickelter Sicherheitsscanner für Webanwendungen.
SyntribiosEin automatisierter Fuzz-Tester für Web-APIs, der in Python geschrieben und von der OpenStack Security Group verwaltet wird.
TriforceAFLEin Full-System-Fuzzer, der QEMU verwendet.
WapitiEin Scanner für Webanwendungs-Schwachstellen.
WfuzzEin Brute-Force-Fuzzer für Webanwendungen.
zzufEin deterministischer, transparenter Anwendungseingabefuzzer, der Bits in den Eingabeoperationen einer Datei zufällig ändert.

Das Folgende sind unscharfe Kabelbäume oder Frameworks, die Ihnen beim Verwalten Ihres Fuzz-Tests helfen können.

Fuzzing FrameworkBeschreibung
CERT BFFDas von CERT entwickelte BFF (Basic Fuzzing Framework) wurde entwickelt, um Schwachstellen in Windows-, MacOS- und Linux-Anwendungen zu finden.
FuzzFlowEin Fuzzing-Framework in AngularJS.
FuzzinatorEin Framework für zufällige Fuzz-Tests.
FuzzLabsEin allgemeines Fuzz-Test-Framework.
SchleiferEin Fuzz Testing Automator / Framework zum Testen von Webbrowsern.
KittyEin in Python geschriebenes Fuzz-Test-Framework.
ofuzzEin in OCaml geschriebenes Fuzzing-Framework.
NodefuzzEin Fuzz-Test-Framework für Webbrowser, geschrieben in nodejs.
PassiveFuzzFrameworkOSXEin Fuzzer zum Testen von Schwachstellen im macOS-Kernel.
Pfirsich FuzzerEine Plattform für Fuzz-Tests, mit der praktisch jedes System auf unbekannte Schwachstellen getestet werden kann.
RamFuzzEin Fuzzer zum Testen der einzelnen Parameter von Objektmethoden.
SulleyEin "vollautomatisches und unbeaufsichtigtes, reines Python" Fuzzing-Framework.
FunFuzzerEin Python-Fuzzing-Harness für JavaScript-Engines und DOM-Renderer von Mozilla.

Fehler, Programmierbegriffe, Sicherheitsbegriffe, Softwaretest