Fuzz-Testing, auch bekannt als Fuzzing oder Monkey-Testing, ist eine Technik zum Testen von Software auf unbekannte Schwachstellen. Der Fuzz-Testprozess wird durch ein Programm namens Fuzzer automatisiert. Dieses Programm liefert eine große Datenmenge, die als Eingabe an das Zielprogramm gesendet wird. Wenn das Zielprogramm abstürzt oder sich unerwünscht verhält, erstellt der Fuzzer ein Protokoll der Eingaben, die den Fehler verursacht haben.
Hacker verwenden häufig Fuzzer, um nach Schwachstellen in Software zu suchen und sie auf Schwachstellen zu untersuchen, die sie ausnutzen können. Softwareentwickler können einen Fuzzer verwenden, um diese Art von Angriffen zu antizipieren und sich dagegen zu wehren.
Herkunft
Der erste Fuzzer wurde Anfang der 1980er Jahre vom Entwickler Steve Capps geschrieben, um Programme für den Macintosh-Computer auf Schwachstellen zu testen. Er nannte sein Programm „The Monkey“ und bezog sich damit auf das klassische Sprichwort eines Affen, der unendlich lange zufällige Tasten auf einer Schreibmaschine drückt. Die Theorie besagt, dass der Affe, wenn er genügend Zeit hat, schließlich die gesamten Werke von Shakespeare schreiben wird. Obwohl dieser Ansatz zum Testen von Software oft als “Fuzzing” bezeichnet wird, wird er aufgrund des Capps-Programms auch als “Monkey-Testing” bezeichnet.
Liste der Fuzzer
Fuzzing-Techniken helfen beim Testen von Software, und es gibt viele Fuzzer für bestimmte Zwecke.
Das Folgende ist eine Liste von Fuzzern, von denen die meisten Open Source sind und viele sich noch in der aktiven Entwicklung befinden.
Fuzzer-Name/URL | Beschreibung |
---|---|
Google Desinfektionsmittel | Eine Gruppe von vier bei Google entwickelten Data Sanitizern, die Fuzzing verwenden, um Programmfehler zu erkennen:
|
afl-fuzz | American Fuzzy Lop, ein Tool, das genetische Algorithmen verwendet, um die Sicherheit kompilierter Programme zu testen. |
Backfuzz | Ein Protokoll-Fuzzing-Toolkit. |
BrundleFuzz | Ein verteilter Fuzzer für Windows und Linux. |
CERT-FEIND | Failure Observation Engine, ein vom CERT entwickeltes Tool, das Mutations-Fuzzing verwendet, um Schwachstellen in Windows-Programmen zu erkennen. |
CERTfuzz | Der Quellcode von CERT FOE. |
Choronzon | Ein evolutionärer wissensbasierter Fuzzer. |
Schwierig | Ein von Twitter entwickeltes Tool zur Erkennung von Schwachstellen in Webdiensten. |
Schwindlig | Eine Fuzzing-Bibliothek für Python |
dfuzzer | Ein Fuzzing-Tool zum Testen von Prozessen, die über den D-Bus IPC- und RPC-Mechanismus kommunizieren. |
dotdotpwn | Ein Tool zum Testen von Webanwendungen auf Path-Traversal-Schwachstellen. |
Dranzer | Ein Fuzz-Tester für ActiveX-Steuerelemente. |
EMFFuzzer | Ein erweiterter Metafile-Fuzz-Tester. |
Ausbeutbar | Eine Erweiterung für GDB (den GNU-Debugger), die ausführbare Linux-Dateien analysiert und ihre Fehler anhand bekannter Exploits nach Schweregrad klassifiziert. Ursprünglich am CERT entwickelt. |
Go-fuzz | Ein Fuzz-Tester für Go-Programme, der ihre Objekte mit zufälligen Werten füllt. |
grr | Übersetzt 32-Bit-Binärdateien in 64-Bit und fuzzt sie als Teil des Prozesses. |
honggfuzz | Evolutionärer, rückkopplungsgetriebener Fuzzer für Hard- und Software. |
HTTP/2-Fuzzer | Ein Fuzzer für HTTP/2-Anwendungen, noch zum Download verfügbar, aber nicht mehr aktiv entwickelt. |
Hodor | Ein “etwas mehr als total dummer” (Brute Force) Fuzzer. |
iFuzzer | Ein in Python geschriebener Fuzzer, der Mercurial und Valgrind verwendet. |
KEMUfuzzer | Ein Fuzzer für virtuelle Maschinen, die auf QEMU-, VMware-, VirtualBox- oder BHOCS-Emulationsplattformen ausgeführt werden. |
KernelFuzzer | Ein Fuzzer für Kernel-Systemaufrufe. |
LibFuzzer | Eine Bibliothek für prozessbegleitende, evolutionäre, abdeckungsgeführte Fuzz-Tests. |
Netzob | Ein Fuzzer zum Reverse-Engineering von Kommunikationsprotokollen. |
Neuraler Fuzzer | Ein Fuzzer, der maschinelles Lernen (neuronale Netze) verwendet, um seine Tests durchzuführen. |
Albtraum | Ein verteilter Fuzzer mit webbasierten Verwaltungstools. |
Pathgrind | Pfadbasierte dynamische Analyse für 32-Bit-Anwendungen. |
Perf-Fuzzer | Ein Fuzzer, der speziell zum Testen des Systemaufrufs perf_event_open() im Linux-Kernel entwickelt wurde. |
Pulsar | Ein Fuzzer, der Protokolle “lernt”. |
PyJFuzz | Ein Python-JSON-Fuzzer. |
QuickFuzz | Ein experimenteller Grammatik-Fuzzer, geschrieben in Haskell. |
Radamsa | Ein Allzweck-Fuzzer. |
Geil | Ein einfacher Python-Fuzzer, der zufällige Eingaben für das getestete Programm generiert. |
schnuppern | Einfacher Fuzz. „Genau das, wonach es sich anhört – ein einfacher Fuzzer.“ Als Teil des Kali Linux-Toolsets enthalten. |
Skipfish | Ein von Google entwickelter Sicherheitsscanner für Webanwendungen. |
syntribios | Ein automatisierter Fuzz-Tester für Web-APIs, geschrieben in Python und gepflegt von der OpenStack Security Group. |
TriforceAFL | Ein Full-System-Fuzzer, der QEMU verwendet. |
Wapiti | Ein Schwachstellenscanner für Webanwendungen. |
Wfuzz | Ein Brute-Force-Fuzzer für Webanwendungen. |
zzuf | Ein deterministischer, transparenter Anwendungseingabe-Fuzzer, der zufällig Bits in den Eingabeoperationen einer Datei ändert. |
Das Folgende sind Fuzzing-Harnesse oder Frameworks, die Ihnen bei der Verwaltung Ihrer Fuzz-Tests helfen.
Fuzzing-Framework | Beschreibung |
---|---|
ZERT BFF | Das vom CERT entwickelte BFF (Basic Fuzzing Framework) wurde entwickelt, um Schwachstellen in Windows-, macOS- und Linux-Anwendungen zu finden. |
FuzzFlow | Ein Fuzzing-Framework in AngularJS. |
Fuzzinator | Ein Framework für zufällige Fuzz-Tests. |
FuzzLabs | Ein Allzweck-Framework für Fuzz-Tests. |
Schleifer | Ein Fuzz-Testautomat/Framework zum Testen von Webbrowsern. |
Kätzchen | Ein in Python geschriebenes Fuzz-Test-Framework. |
ofuzz | Ein in OCaml geschriebenes Fuzzing-Framework. |
Nodefuzz | Ein Fuzz-Testing-Framework für Webbrowser, geschrieben in nodejs. |
PassiveFuzzFrameworkOSX | Ein Fuzzer zum Testen von Schwachstellen im macOS-Kernel. |
Pfirsich-Fuzzer | Eine Plattform für Fuzz-Tests, die „praktisch jedes System auf unbekannte Schwachstellen testen kann“. |
RamFuzz | Ein Fuzzer zum Testen der einzelnen Parameter von Objektmethoden. |
Sulley | Ein “vollautomatisches und unbeaufsichtigtes, reines Python”-Fuzzing-Framework. |
FunFuzzer | Ein Python-Fuzzing-Harness für JavaScript-Engines und DOM-Renderer von Mozilla. |
Fehler, Programmierbedingungen, Sicherheitsbedingungen, Softwaretests