Was ist Fuzz-Testing?
Wie kannst du Sicherheitslücken finden, wenn du nicht genau weißt, wonach du suchst? Erfahre, wie Fuzz-Testing oder Fuzz dazu beitragen kann, Zero-Day-Sicherheitslücken zu finden.
Fuzz-Testing oder Anwendungsfuzzing ist eine Softwaretesttechnik, mit der Sicherheitslücken oder Bugs im Quellcode von Softwareanwendungen gefunden werden können. Im Gegensatz zu herkömmlichen Softwaretestmethoden wie SAST, DAST oder IAST stört der Fuzz-Test den Code mit zufälligen Eingaben an, um ihn zu crashen und so Fehler aufzudecken, die sonst nicht offensichtlich erkannt worden wären. Diese Codefehler (oder Probleme mit der Geschäftslogik) sind Bereiche, die ein hohes Risiko für Sicherheitsbedrohungen darstellen können.
Wenn ein Fehler oder eine Sicherheitslücke gefunden wird, kann ein Fuzzer – ein Tool, das die potenzielle Ursache für den Crash herausfindet – eingesetzt werden, um die spezifischen Sicherheitslücken im Quellcode einzugrenzen. Fuzzer sind am effektivsten, um Sicherheitslücken aufzudecken, die durch Angriffe wie SQL Injection und Cross-Site-Scripting ausgenutzt werden können, bei denen Hacker(innen) die Sicherheitsmechanismen deaktivieren, um Daten zu stehlen oder ein System lahmzulegen. Fuzzer sind weniger effektiv bei der Identifizierung von Sicherheitslücken, die nichts mit Systemabstürzen zu tun haben, wie z. B. Spyware oder Trojaner.
Die Befürworter(innen) des Fuzz-Testing loben es dafür, dass es vollständig automatisiert ist und in der Lage ist, obskure Sicherheitslücken zu finden, während seine Kritiker(innen) sich darüber beschweren, dass es schwierig sein kann, es einzurichten, und es dazu neigt, unzuverlässige Ergebnisse zu liefern.
Fuzz-Testing hebt sich auch auf andere Weise ab: Es gibt tatsächlich eine Geschichte darüber, wie das Konzept entdeckt wurde. 1988 versuchte Professor Barton Miller von der University of Wisconsin – Madison, über ein Einwahlsystem aus der Ferne auf den Code zuzugreifen, aber die Rückkoppelung eines Gewitters verursachte immer wieder einen Absturz des Programms. Die Idee, dass externes „Rauschen“ nicht durch Code toleriert werden konnte, wurde zur Inspiration für Miller und die Arbeit seiner Studierenden. Sie entdeckten, dass Unix-, Mac- und Windows-Programme routinemäßig abstürzen, wenn sie von zufälligen unerwarteten Eingaben gestört werden. Miller ist einer der Autoren von Fuzzing for Software Security Testing and Quality Assurance.
Es gibt zwei Haupttypen von Fuzz: abdeckungsgesteuertes Fuzzing und Verhaltens-Fuzzing.
Abdeckungsgesteuertes Fuzzing konzentriert sich auf den Quellcode, während die App läuft, und fordert ihn mit zufälligen Eingaben auf, um Fehler aufzudecken. Es werden ständig neue Tests generiert und das Ziel ist es, die App zum Absturz zu bringen. Ein Absturz bedeutet ein potenzielles Problem, und Daten aus dem Abdeckungs-Fuzzing ermöglichen es einem Tester oder einer Testerin, den Absturz zu reproduzieren, was hilfreich ist, wenn versucht wird, gefährdeten Code zu identifizieren.
Verhaltens-Fuzz funktioniert anders. Mithilfe von Spezifikationen wird gezeigt, wie eine Anwendung funktionieren sollte, und es werden zufällige Eingaben verwendet, um zu beurteilen, wie die App wirklich funktioniert. Der Unterschied zwischen dem erwarteten Ergebnis und der Realität besteht im Allgemeinen darin, wo Fehler oder andere potenzielle Sicherheitsrisiken gefunden werden können.
Warum ist Fuzz-Testing für DevSecOps wichtig? Da Fuzz-Tests zufällig sind, sagen Expert(inn)en, dass mit dieser Methode Fehler, die in anderen Tests nicht aufgedeckt wurden, am ehesten gefunden werden. Es wird auch als unglaublich aufwandsarme Testmethodik angesehen, oder wie manche es gerne nennen: „Richte sie ein und vergiss sie.“ Sobald der Testablauf erstellt wurde, ist Fuzz-Testing vollständig automatisiert und läuft auf unbestimmte Zeit. Es kann leicht skaliert werden, indem mehr Computer hochgefahren werden, und ist eine gute Wahl für Regressionstests. Fuzz beschleunigt auch den Entwicklungsprozess, indem es die Testabdeckung maximiert – wie viel des Codes wurde vom Fuzzer getestet werden – ohne Falschmeldungen einzuführen. Eine höhere Testabdeckung bedeutet gründlichere Tests.
Fuzz-Testing ist auch ideal, um zusätzich zu einem manuellen Testteam ausgeführt zu werden, da diese sich gegenseitig ergänzen.
In der Praxis gibt es zwei große Herausforderungen bei der Einführung von Fuzz-Testing: die Einrichtung und die Datenanalyse. Fuzz-Testing ist nicht unbedingt einfach einzurichten, denn es erfordert einen komplexen Testablauf, der noch schwieriger zu erstellen sein kann, wenn sich das Fuzz-Testing nicht innerhalb einer bestehenden Toolchain befindet. Außerdem können Fuzz-Tests viele Daten generieren, einschließlich potenziell falsch positiver Ergebnisse. Es muss also sichergestellt werden, dass das Testteam bereit ist, mit der Vielzahl an Informationen umzugehen.
Auch wenn dies weniger einfach zu dokumentieren ist, bestehen in der QA-Community weiterhin negative Einstellungen gegenüber der „vagen“ Natur von Fuzz-Testing.
Mehr über DevSecOps erfahren
Video
Video zum Fuzz-Testing ansehen
Bist du bereit?
Erfahre mehr darüber, was dein Team mit der umfassendsten KI-gestützten DevSecOps-Plattform erreichen kann.