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.

Fuzz-Tests

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 Testen, 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:

  1. Die Tests können erst fortgesetzt werden, wenn die Spezifikation ausgereift ist.
  2. 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.