Fuzzing

Die 10 besten Fuzz-Testing Tools

10.11.2022 von John  Breeden II
Fuzzing Tools finden Programmierfehler, die zu unerwarteten und ausnutzbaren Sicherheitslücken führen können. Das sind die besten Lösungen in diesem Bereich.
Fuzz-Testing-Tools spüren Code-Fehler auf und erhöhen das Sicherheitsniveau von Applikationen. Wir zeigen Ihnen die zehn besten - kommerziellen und quelloffenen - Tools.
Foto: Brian A Jackson - shutterstock.com

Wenn sie eine Applikation erstellen, verbringen Programmierer eine ganze Menge Zeit damit, vorherzusehen, wie die Nutzerbedürfnisse aussehen und wie ihre Anwendung reagieren soll. Gute Softwareentwickler behalten mit einem "straffen" Code die Kontrolle und planen parallel für alle Eventualitäten. Dennoch ist es für Menschen nicht möglich, jede erdenkliche Benutzeraktion dabei mit einzubeziehen. An dieser Stelle kommen Fuzzing-Tools ins Spiel.

Was ist Fuzz-Testing?

Fuzz-Testing beschreibt einen automatisierten Prozess, bei dem eine Software große Mengen unerwarteter, fehlerhafter oder einfach nur zufälliger Eingaben an eine Applikation sendet. So können die Entwickler überprüfen, wie die Anwendung darauf reagiert und geeignete Antworten programmieren. Diese stützen die Integrität und Sicherheit der Applikation - und zwar, bevor diese ausgeliefert wird.

Fuzzing-Tools sind wertvoll, weil sie in relativ kurzer Zeit Tausende von "Was-wäre-wenn"-Fragen zum Anwendungsverhalten beantworten können. Zum Beispiel:

Eine gute Fuzzing-Engine kann all diese Fragen - und viele weitere - beantworten.

Wie funktionieren Fuzzing-Tools?

Es gibt eine ganze Reihe kommerzieller Fuzzing-Engines - und Hunderte weitere, die auf Plattformen wie GitHub kostenlos zur Verfügung stehen. Einige Fuzzing-Engines senden Unmengen von Zufallsinformationen, während andere die Anwendung sorgfältig untersuchen, um dann kontextbezogene, aber unerwartete Inputs zu senden. Darüber hinaus geht es beim Fuzz-Testing nicht nur um Eingaben der User, sondern auch darum, programmierbare Interfaces wie beispielsweise REST-APIs zu testen.

Fuzzing-Tools arbeiten mit verschiedenen Programmiersprachen: Einige können mit allen gängigen Sprachen umgehen, andere funktionieren nur mit Anwendungen, die in einer bestimmten Programmiersprache geschrieben sind. Dabei ist Fuzz-Testing nicht mehr nur eine verrückte Option für fortgeschrittene Entwickler. Viele wichtige Normen von ISO und anderen prominenten Gremien empfehlen den Einsatz solcher Tools inzwischen. Es empfiehlt sich für Unternehmen, Fuzzing-Tools in ihre Testing-Prozesse zu integrieren.

Die besten Fuzzing-Tools: Kommerziell und Open Source

Im Folgenden haben wir die unserer Meinung nach zehn besten kommerziellen und kostenlosen Fuzzing-Tools zusammengestellt.

Kommerzielle Fuzzing-Tools - Top 4

1. Beyond Security beStorm

Die Fuzzing-Lösung beStorm von Beyond Security ist eine der vielseitigsten auf dem Markt. Sie wurde entwickelt, um sowohl Hardware als auch Software zu testen, und benötigt keinen Zugriff auf den Quellcode, um zu funktionieren. Deshalb ist das Tool auch für so gut wie jede Anwendung, jedes Protokoll, jede Sprache und sogar jede Hardware geeignet. beStorm ist sogar mit spezialisierten Devices und Applikationen kompatibel, zum Beispiel IoT-Geräten, CANBus-Apps oder Bluetooth-LE-Devices.

Die Vielseitigkeit von beStorm bringt Vorteile für Programmierer, da sie sich nur mit einem Interface beschäftigen müssen, um eine nahezu unbegrenzte Zahl von Devices oder Applikationen Fuzz-Testing zu unterziehen. Die Plattform von Beyond Security enthält dazu 250 vorgefertigte Testing-Module. Darüber hinaus können die User auch relativ einfach eigene, neue hinzufügen - etwa für ungewöhnliche oder proprietäre Anwendungen. Diese Fuzzing-Tests können ebenfalls über das gleiche Interface gemanagt werden.

Ein weiterer Vorteil für größere Unternehmen: Die beStorm-Plattform ist auch als Cloud-Service verfügbar. So können Organisationen mehreren (Remote-)Benutzern Zugang zu den Fuzzing-Tools ermöglichen.

2. Code Intelligence Fuzz

Die Code Intelligence Fuzz-Engine (CI Fuzz) wird als vorkonfigurierte Ubuntu-VM geliefert, um sie lokal oder in einer Cloud bereitzustellen. Sobald CI Fuzz in Ihre CI/CD-Pipeline integriert ist, kann das Tool automatisch mit jeder Pull-Anforderung ausgeführt werden. So stellt die Software sicher, dass Änderungen an einer Applikation nicht unbeabsichtigt neue Schwachstellen schaffen oder anderweitig für Probleme sorgen. Da das Tool in den CI/CD-Prozesses integriert ist, läuft dieser Erkennungsprozess relativ schnell ab, so dass sich einfach nachvollziehen lässt, wann sich Programmfehler eingeschlichen haben.

Entdeckt CI Fuzz einen Fehler, sendet es verschiedene Permutationen dieser Eingabe, um den Umfang des Problems zu ermitteln. Auf dieser Grundlage entsteht ein detailliertes Reporting, um Fehlalarme auszuschließen und den Entwicklern die Möglichkeit zu geben, die gefundenen Fehler zu reproduzieren, während sie den Code manuell fixen.

Die CI-Fuzz-Engine greift direkt auf den Quellcode der zu testenden Anwendung zu und unterstützt daher nur bestimmte Sprachen und Frameworks (derzeit C, C++, Java und Go). Andere Frameworks wie .Net Core und Python sollen folgen.

3. Synopsys Fuzzing Test Suite

Das Angebot von Synopsys im Bereich Fuzzing verfolgt im Vergleich zur Konkurrenz einen eigenen Ansatz: Statt ein Fuzzing-Tool zu entwickeln, das mit mehreren Anwendungen arbeiten kann, bietet Synopsys eine ganze Suite, deren Tools jeweils für eine bestimmte Sprache, ein bestimmtes Protokoll oder einen bestimmten Anwendungsfall entwickelt wurden. Dieser "A la carte"-Ansatz ermöglicht es den Endanwendern, genau das Fuzzing-Tool zu kaufen, das sie benötigen - ohne dabei Geld für zusätzliche Kapazitäten oder Funktionen auszugeben, die sie sehr wahrscheinlich niemals brauchen werden.

Jedes Tool der Synopsis Suite verfügt über eine Reihe von Standardfunktionen, zum Beispiel eine Sammlung vorgefertigter, relevanter Test-Cases, eine Reporting- und Analytics-Komponente, eine grafische Benutzeroberfläche für die Konfiguration oder eine umfassende Dokumentation. Dabei lässt sich jedes Tool auch mit einer Support-Level kombinieren.

Die Synopsys Tools arbeiten mit allen gängigen Komponenten - von DNS-Servern bis hin zu weniger bekannten und spezialisierten Anwendungen wie CANBus oder IKEv2.

4. ForAllSecure Mayhem for Code

Das Fuzzing-Tool Mayhem for Code bietet alle Vorteile moderner Fuzzing-Engines und kombiniert sie mit der Fähigkeit, im Laufe der Zeit effizienter zu werden. Dabei arbeitet die Plattform unabhängig und erfordert nur minimale manuelle Eingriffe.

Die Engine des Tools arbeitet kontinuierlich und nutzt detaillierte Systeminformationen, um ihre Umgebung "kennenzulernen" und die Fuzzing-Aktivitäten mit zunehmender Erfahrung zu beschleunigen. Mayhem for Code ist sogar in der Lage, auf Grundlage der gewonnenen Erkenntnisse "on the fly" Test-Cases zu generieren. Kurz gesagt: Je ausgiebiger Sie das Tool verwenden, desto besser wird es.

Die Plattform arbeitet derzeit mit einer Vielzahl von Programmierprachen (beispielsweise Java, Python, Ada, OCaml, Fortran, Jovial, C, C++, Go und Rust). Um Fuzzing-Tests anzustoßen, ist kein Zugriff auf den Applikations-Quellcode nötig.

Kostenlose oder quelloffene Fuzzing-Tools - Top 6

1. PeachTech Peach-Fuzzer

Der Protocol Fuzzer von PeachTec war viele Jahre lang eine beliebte, kommerzielle Fuzzing-Engine. So beliebt, dass der Hersteller PeachTec im Jahr 2020 von GitLab übernommen wurde. Die kostenlose Version der Fuzzing-Engine ist inzwischen zwar immer noch über GitLab erhältlich, wird aber nicht mehr unterstützt oder aktualisiert. Die Idee hinter dem PeachTech-Programm war, ein hochgradig konfigurierbares Tool zu entwickeln, dass mit nahezu jeder Programmiersprache und jedem Betriebssystem arbeiten kann. Alle bisherigen Funktionen sind weiterhin in der kostenlosen Version von GitLab enthalten. Allerdings ist die Dokumentation relativ komplex, dafür ist das Tool kostenlos.

Benutzer sollten sich allerdings gut mit Fuzz-Testing auskennen, um echten Nutzen aus diesem Tool zu ziehen. Für Einsteiger eignet sich die PeachTec-Lösung weniger.

2. Google OSS-Fuzz

Auch Google setzt bei der Entwicklung neuer Komponenten für Chrome OS oder seinen Browser im Allgemeinen auf Fuzz-Testing. Nachdem der Konzern damit große Erfolge erzielen konnte, wurde das Google Tool zu einem Open-Source-Projekt - OSS-Fuzz.

OSS-Fuzz greift auf mehrere andere Fuzzing-Engines zurück, darunter AFL++, libFuzzer und Honggfuzz. Das Tool unterstützt mehrere Programmiersprachen (darunter C, C++, Rust, Go, Python und Java/JVM-Code) und funktioniert sowohl mit x86-64- als auch mit i386-Builds.

OSS-Fuzz kann einige gute Bewertungen auf GitHub sowie eine große Community vorweisen.

3. FuzzDB

Bei FuzzDB handelt es sich nicht um eine Fuzzing-Engine, sondern um eine komplexe Bibliothek von Angriffs-Payloads und bekannten Injection-Techniken. So können ungeschützte Programme und Applikationen angegriffen werden. Diese Angriffe lassen sich unterschiedlich kategorisieren, etwa nach Plattformtyp, Expositionspotenzial und vielen anderen Faktoren.

FuzzDB sollte idealerweise in Kombination mit einer programmierbaren Fuzzing-Engine verwendet werden, über die diese Angriffsmuster geladen und an eine Applikation gesendet werden können. Die Kombination mit einer Fuzzing-Engine, die zufällige Eingaben generiert, trägt so dazu bei, ein möglichst breites Spektrum - von bekannten Angriffen und Schwachstellen bis hin zu unbekannten, die für die zu testende Anwendung spezifisch sind - abzudecken.

4. Ffuf

Ffuf (Fuzz Faster U Fool) ist eine Fuzzing-Engine, die in Go geschrieben ist. Das kostenlose Tool deckt die meisten gängigen Fuzzing-Funktionen ab und überprüft zum Beispiel, wie Anwendungen auf unbekannte GET- und POST-Anfragen reagieren. Auf ein User Interface müssen Sie bei Ffuf verzichten, hier ist Kommandozeile angesagt.

Die GitHub-Seite von Ffuf führt diverse Beispiele für den Einsatz des Tools an. Darüber hinaus werden regelmäßig neue Funktionen und Features veröffentlicht. Das Tool ist zwar kostenlos, setzt jedoch auf ein Sponsoring-Modell: Neue Funktionen werden für Sponsoren direkt freigegeben, alle anderen Nutzer müssen 30 Tage warten.

5. Google ClusterFuzz

Google verwendet die Engine ClusterFuzz, um Fehler in Chrome aufzuspüren. Das Tool ist ebenfalls Teil des Backends für das oben erwähnte OSS-Fuzz-Projekt. Allerdings funktioniert ClusterFuzz mit jedem Programm oder jeder Anwendung, nicht nur mit solchen aus dem Open-Source-Bereich.

Laut der GitHub-Seite hat ClusterFuzz durch seine Integration in OSS-Fuzz bereits über 29.000 Fehler in Google-Produkten und 26.000 in Open-Source-Projekten aufgedeckt. Das Tool ist darauf konzipiert, hochskalierbar zu sein und kann in jeder Umgebung zum Einsatz kommen.

6. go-fuzz

Die go-fuzz-Plattform wurde entwickelt, um Pakete zu testen, die in der Programmiersprache Go geschrieben sind. Das Tool wird hauptsächlich für Pakete verwendet, die komplexe Text- und Binäreingaben parsen. Laut seinem Entwickler ist go-fuzz besonders gut dafür geeignet, Systeme abzusichern und Eingaben potentiell böswilliger Benutzer zu analysieren.

Die Dokumentation veranschaulicht gut, wie der Fuzzer zu nutzen ist. Ein begleitendes Repository enthält zudem zahlreiche Beispiele für Testfunktionen und Input Settings für verschiedene Anwendungen. (fm)

Dieser Beitrag basiert auf einem Artikel unserer US-Schwesterpublikation CSO Online.