Tutorial zum Fuzz-Testen (Fuzzing).
Was ist Fuzz-Test?
Fuzz-Tests oder Fuzzing ist eine Softwaretesttechnik, bei der ungรผltige oder zufรคllige Daten namens FUZZ in ein Softwaresystem eingefรผgt werden, um Codierungsfehler und Sicherheitslรผcken zu entdecken. Der Zweck von Fuzz-Tests besteht darin, Daten mithilfe automatisierter oder halbautomatischer Techniken einzufรผgen und das System auf verschiedene Ausnahmen wie Systemabstรผrze oder Fehler im integrierten Code usw. zu testen.
Fuzz-Tests wurden ursprรผnglich 1989 von Barton Miller an der University of Wisconsin entwickelt. Fuzz-Tests oder Fuzzing sind eine Software-Testtechnik und eine Art von Softwaretests Sicherheitstests.
Warum Fuzz-Tests durchfรผhren?
- Normalerweise findet der Fuzzy-Test den schwerwiegendsten Sicherheitsfehler oder -mangel.
- Fuzz-Tests liefern effektivere Ergebnisse, wenn sie mit verwendet werden Schwarz Box Tests, Betatests und andere Debugging-Methoden.
- Fuzz-Tests werden verwendet, um die Schwachstelle von Software zu รผberprรผfen. Es handelt sich um sehr kostengรผnstige Testtechniken.
- Fuzz-Tests sind eine Black-Box-Testtechnik. Fuzzing ist eine der gรคngigsten Methoden, mit denen Hacker Schwachstellen im System finden.
So fรผhren Sie Fuzz-Tests durch
Die Schritte fรผr Fuzzy-Tests umfassen die grundlegenden Testschritte:
Schritt 1) Identifizieren Sie das Zielsystem
Schritt 2) Identifizieren Sie Eingaben
Schritt 3) Generieren Sie Fuzzed-Daten
Schritt 4) Fรผhren Sie den Test mit Fuzzy-Daten aus
Schritt 5) รberwachen Sie das Systemverhalten
Schritt 6) Protokollfehler
Beispiele fรผr Fuzzer
- Mutationsbasierte Fuzzer รndern Sie vorhandene Datenproben, um neue Testdaten zu erstellen. Dies ist der sehr einfache und unkomplizierte Ansatz. Er beginnt mit gรผltigen Protokollbeispielen und verstรผmmelt jedes Byte oder jede Datei.
- Generationsbasierte Fuzzer Definieren Sie neue Daten basierend auf der Eingabe des Modells. Es beginnt mit der Generierung von Eingaben von Grund auf basierend auf der Spezifikation.
- PROTOKOLLBASIERTER FuzzerDer erfolgreichste Fuzzer besteht darin, รผber detaillierte Kenntnisse des zu testenden Protokollformats zu verfรผgen. Das Verstรคndnis hรคngt von der Spezifikation ab. Dabei wird ein Array der Spezifikation in das Tool geschrieben und dann mithilfe einer modellbasierten Testgenerierungstechnik die Spezifikation durchgegangen und Unregelmรครigkeiten im Dateninhalt, in der Reihenfolge usw. hinzugefรผgt. Dies wird auch als Syntaxtest, Grammatiktest, Robustheitstest bezeichnet. usw. Fuzzer kann Testfรคlle aus einem vorhandenen generieren oder gรผltige oder ungรผltige Eingaben verwenden.
Beim protokollbasierten Fuzzing gibt es zwei Einschrรคnkungen:
- Die Tests kรถnnen erst fortgesetzt werden, wenn die Spezifikation ausgereift ist.
- Viele nรผtzliche Protokolle sind eine Erweiterung verรถffentlichter Protokolle. Wenn Fuzz-Tests auf verรถffentlichten Spezifikationen basieren, Testabdeckung fรผr neue Protokolle wird begrenzt sein.
Die einfachste Form der Fuzzing-Technik besteht darin, zufรคllige Eingaben entweder als Protokollpakete oder als Ereignis an die Software zu senden. Diese Technik der Weitergabe zufรคlliger Eingaben ist sehr wirkungsvoll, um Fehler in vielen Anwendungen und Diensten zu finden. Es stehen auch andere Techniken zur Verfรผgung, die sehr einfach umzusetzen sind. Um diese Techniken zu implementieren, mรผssen wir lediglich die vorhandenen Eingaben รคndern. Wir kรถnnen die Eingabe รคndern, indem wir einfach die Eingabebits austauschen.
Von Fuzz Testing erkannte Fehlertypen
- Behauptungsfehler und Speicherlecks Diese Methode wird hรคufig fรผr groรe Anwendungen verwendet, bei denen Fehler die Sicherheit des Speichers beeintrรคchtigen, was eine schwerwiegende Schwachstelle darstellt.
- Ungรผltige Eingabe Beim Fuzz-Testen werden Fuzzer verwendet, um eine ungรผltige Eingabe zu generieren, die zum Testen von Fehlerbehandlungsroutinen verwendet wird. Dies ist wichtig fรผr die Software, die ihre Eingabe nicht kontrolliert. Einfaches Fuzzing ist als Mรถglichkeit bekannt, negative Tests zu automatisieren.
- Korrektheitsfehler Fuzzing kann auch verwendet werden, um einige Arten von โKorrektheitsfehlernโ zu erkennen. Zum Beispiel eine beschรคdigte Datenbank, schlechte Suchergebnisse usw.
Fuzz-Testtools
Tools, die in der Web-Sicherheit verwendet werden, kรถnnen hรคufig fรผr Fuzz-Tests verwendet werden, z Burp Suite, Peach Fuzzer usw.
- Pfirsich Fuzzer: Peach Fuzzer bietet eine robustere und sicherere Abdeckung als ein Scanner. Andere Testtools kรถnnen nur nach bekannten Threads suchen, wรคhrend Peach Fuzzer es Benutzern ermรถglicht, bekannte und unbekannte Threads zu finden.
- Spike-Proxy: Es handelt sich um ein professionelles Tool, das nach Schwachstellen auf Anwendungsebene in Webanwendungen sucht. SPIKE Proxy deckt die Grundlagen ab, wie z SQL Injektion und Cross-Site-Scripting, aber es ist vรถllig offen Python Infrastruktur. SPIKE Proxy ist verfรผgbar fรผr Linux und Windows.
- Netzskarabรคus: Webscarab ist eingeschrieben Java somit auf viele Plattformen portierbar. Zur Analyse der Anwendung wird das Webscarab-Framework verwendet, das รผber die Protokolle HTTP und HTTPS kommuniziert.Ex: Webscarab fungiert als abfangender Proxy und ermรถglicht dem Betreiber, vom Browser erstellte Anfragen zu รผberprรผfen und zu รคndern, bevor sie vom Server empfangen werden. Auรerdem kรถnnen vom Server generierte Antworten รผberprรผft und aktualisiert werden, bevor sie vom Browser empfangen werden. Wenn Webscarab also eine Lรผcke findet, erstellt es eine Liste der gemeldeten Probleme.
- OWASP WSFuzzer: WSFuzzer ist ein GPL-Programm, das in Python. GPL'd ein Programm zielt derzeit auf Web Services. In der aktuellen Version von OWASPWSFuzzer HTTP basiert SOAP-Dienste sind das Hauptziel.
Vorteile des Fuzz-Tests
- Fuzz-Tests verbessern Software Sicherheitstests.
- Beim Fuzzing gefundene Fehler sind manchmal schwerwiegend und werden meistens von Hackern ausgenutzt, einschlieรlich Abstรผrzen, Speicherverlust, unbehandelter Ausnahme usw.
- Wenn einer der Fehler von den Testern aufgrund der begrenzten Zeit und Ressourcen nicht bemerkt wird, werden diese Fehler auch beim Fuzz-Testen gefunden.
Nachteile des Fuzz-Tests
- Fuzz-Tests allein kรถnnen kein vollstรคndiges Bild einer gesamten Sicherheitsbedrohung oder von Fehlern liefern.
- Fuzz-Tests sind weniger effektiv fรผr den Umgang mit Sicherheitsbedrohungen, die keine Programmabstรผrze verursachen, wie etwa einige Viren, Wรผrmer, Trojaner usw.
- Fuzz-Tests kรถnnen nur einfache Fehler oder Bedrohungen erkennen.
- Um eine effektive Leistung zu erzielen, ist ein erheblicher Zeitaufwand erforderlich.
- Das Festlegen einer Randwertbedingung mit zufรคlligen Eingaben ist sehr problematisch, aber die meisten Tester lรถsen dieses Problem mittlerweile durch die Verwendung deterministischer Algorithmen auf Basis von Benutzereingaben.
Zusammenfassung
In der Softwareentwicklung zeigen Fuzz-Tests das Vorhandensein von Fehlern in einer Anwendung an. Fuzzing kann keine vollstรคndige Erkennung von Fehlern in einer Anwendung garantieren. Durch die Verwendung der Fuzz-Technik wird jedoch sichergestellt, dass die Anwendung robust und sicher ist, da diese Technik dazu beitrรคgt, die meisten hรคufigen Schwachstellen aufzudecken.

