Skip to main content

Warum Fuzzing-Tools zu Ihrem Security-Toolkit gehören sollten

Artikel von

Kuria Macharia

28. Oktober 2022

0 Min. Lesezeit

Fuzzing ist eine Software-Sicherheitstesttechnik, bei der einer Anwendung automatisch ungültige und zufällige Eingaben übermittelt werden, um Fehler aufzudecken. Ziel des Fuzzings ist es, die Anwendung zu belasten und dadurch unerwartetes Verhalten, Abstürze oder Ressourcenverluste auszulösen. So können wir als Entwickler das Verhalten und die Schwachstellen von Anwendungen umfassender verstehen. Für diese Art von Tests verwenden wir Fuzzing-Tools, sogenannte Fuzzer. Ein Fuzzer ist eine Anwendung, die zufällige Eingaben für die Zielsoftware erzeugt.

Der Begriff Fuzzing entstand in den 1980er-Jahren, als Professor Barton Miller untersuchte, warum sein UNIX-System ausfiel. Er ließ seine Studierenden sein Unix-System mit automatisch generierten Daten bombardieren, um besser zu verstehen, was den Ausfall verursachte.

So verbessern Fuzzing-Tools die Sicherheit

Um zu verstehen, wie Fuzzing-Tools die Sicherheit verbessern, sehen wir uns die Vorteile und einige Anwendungsfälle von Fuzzing an und betrachten ein Beispiel dafür, wie Fuzzing in einem Praxistest funktioniert.

Vorteile von Fuzzing

Fuzzing bietet zahlreiche Vorteile, darunter die folgenden:

  • Wenn wir die Sicherheit unserer Anwendung frühzeitig mit Fuzz-Tests überprüfen, können wir Zero-Day-Exploits verhindern, bei denen Angreifer unbekannte Schwachstellen ausnutzen. Der mehrdimensionale Ansatz des Fuzzings hilft, Fehler zu erkennen, die Angreifer ausnutzen könnten und die wir sonst nur schwer entdecken würden. Dazu zählen unter anderem fehlende Datenverschlüsselung, fehlerhafte Algorithmen und unzureichende Eingabevalidierung.

  • Fuzzing verursacht nur geringe Kosten in Zeit und Geld, da nach dem Start kein menschliches Eingreifen erforderlich ist.

  • Ein Fuzzer kann Grenzfälle erkennen, die bei manuellen Tests möglicherweise unentdeckt bleiben.

  • Neben dem Problem liefert er auch einen detaillierten Bericht darüber, wie ein Angreifer eine Schwachstelle ausnutzen könnte.

Anwendungsfälle für Fuzzing

Sie können einzelne Komponenten einer Anwendung separat mit Fuzz-Tests überprüfen. Im Folgenden finden Sie einige Anwendungsfälle für Fuzzing.

Fuzzing von Webanwendungen

Beim Fuzzing von Webanwendungen werden Fehler aufgedeckt, durch die unsere Web-Apps anfällig für gängige Angriffe wie SQL-Injection (https://learn.snyk.io/lessons/sql-injection/javascript/) und Cross-Site-Request-Forgery (CSRF) (https://learn.snyk.io/lessons/csrf-attack/javascript/) werden könnten. Beim Fuzzing unserer Webanwendungen übermittelt der Test zufällige Daten an die Endpunkte und deckt so Fehler in der App auf. Wenn Sie die gemeldeten Fehler beheben, verbessern Sie die Sicherheitslage der Anwendung. Fuzzing kann beispielsweise helfen, die Seiten zu identifizieren, auf denen Sie die Eingabevalidierung im Frontend ergänzen müssen, um die Serverseite besser abzusichern.

API-Fuzzing

API-Fuzzing deckt Schwachstellen beim Datenbankzugriff auf. Dazu zählen beispielsweise offengelegte Passwörter und fehlende Parameter-Validierung. Mit API-Fuzzing können wir besser kontrollieren, wie die API mit den Backend-Servern interagiert. So können wir beispielsweise prüfen, ob eine Zahlungs-API Kreditkartennummern und Autorisierungssignaturen korrekt validiert.

URL-Fuzzing

Mit URL-Fuzzing können wir verborgene Dateien und Verzeichnisse auf einem Webserver finden. Dabei werden Dateien und Verzeichnisse aufgedeckt, die eigentlich verborgen sein sollten, aber öffentlich zugänglich sind. So lassen sich die Dateien und Verzeichnisse auf dem Webserver vor unbefugtem Zugriff schützen. URL-Fuzzing kann dazu beitragen, die Offenlegung vertraulicher Informationen wie Datenbank-Zugangsdaten und Abfrageformate zu verhindern, die Angreifer für gefälschte Anfragen bei einem CSRF-Angriff verwenden können.

Protokoll-Fuzzing

Beim Protokoll-Fuzzing werden gefälschte Pakete an eine Anwendung gesendet, um Fehler in ihrer Implementierung aufzudecken. Kennt ein Fuzzer beispielsweise die Länge einer Nachricht, kann er diese erhöhen und so testen, wie die Anwendung mit einer solchen Anfrage umgeht.

Dateiformat-Fuzzing

Dateiformat-Fuzzing ist ein einfaches und direktes Verfahren. Dabei wird eine gültige Beispieldatei verändert und die veränderte Version in der Zielanwendung geöffnet, um einen Absturz auszulösen. Dateiformat-Fuzzing deckt Fehler auf, die zum Absturz eines Systems führen können. Es zeigt Bereiche auf, in denen wir stärker kontrollieren können, welche Dateitypen eine Anwendung öffnen darf – und so ihre Sicherheit und Stabilität verbessern. Damit lassen sich Abstürze in Anwendungen verhindern, die das Hochladen und Öffnen gescannter Dokumente in bestimmten Formaten wie JPEG, PNG und PDF erfordern.

Einschränkungen von Fuzzing-Tools

Fuzzing-Tools sind zwar recht effektiv, haben aber einige Schwächen:

  • Der alleinige Einsatz von Fuzzing-Tools kann die umfassende Sicherheit einer Anwendung nicht gewährleisten.

  • Sie sind nicht besonders effektiv darin, Bedrohungen zu erkennen, die nicht zu Anwendungsabstürzen führen.

  • Für einen vollständigen Test benötigen sie relativ viel Zeit.

  • Komplexe Fehler und Bedrohungen können sie nicht erkennen.

Fuzzing im Vergleich zu Snyk-Schwachstellenscannern

Fuzzing ist wichtig, um die Sicherheitslage einer Anwendung zu verbessern, für sich allein genommen aber nicht vollständig wirksam. Denn damit lassen sich nur Fehler an den Endpunkten von Anwendungen finden.

Um eine Anwendung mit Fuzz-Tests zu überprüfen, müssen wir den Fuzzer konfigurieren und ihm ausreichend Zeit für den Fuzzing-Prozess geben. Das verlangsamt die Entwicklung und verlängert die Markteinführungszeit neuer Anwendungen.

In der heutigen Welt der kontinuierlichen Entwicklung und Bereitstellung (CI/CD) reicht das jedoch nicht aus. Sie müssen Ihre Anwendung bereits ab dem Schreiben des Codes auf Schwachstellen überwachen. Snyk scannt kontinuierlich nach Schwachstellen in Ihrem Code, in Git-Pull-Requests und in Containern. Sie können Snyk auch in eine CI/CD-Pipeline integrieren, um während des gesamten Lebenszyklus einer Anwendung kontinuierlich nach Schwachstellen zu suchen.

Ein weiteres Merkmal der Schwachstellenscanner von Snyk sind die konkreten Empfehlungen zur Behebung. Damit können Sie einige der gemeldeten Implementierungsfehler mit nur wenigen Klicks beheben.

Ein Beispiel für Fuzzing

Um zu verstehen, wie, wann und warum wir Fuzzing einsetzen, sehen wir uns das folgende Beispiel an.

Nehmen wir an, wir haben gerade einen Online-Essenslieferdienst unter HealthyTastyMeals.com gestartet. Während der Entwicklung haben wir jede Funktion mehrmals getestet und Freunde und Kollegen gebeten, die App auszuprobieren und ihre Benutzerfreundlichkeit zu testen.

Bei all unseren Tests haben wir jedoch nur Anfragen gestellt und Werte eingegeben, die dem erwarteten Format entsprechen. Wie bereiten wir uns also auf das Unerwartete vor?

Wenn wir verstehen möchten, wie sich unsere Website bei einer Flut unerwarteter Eingaben verhält, müssen wir sie mit Fuzz-Tests überprüfen. Da unsere Website REST-APIs verwendet, können wir dafür das Fuzzing-Tool RESTler einsetzen. Es handelt sich um ein Open-Source-Fuzzing-Tool für REST-APIs.

Wir führen RESTler im „Fuzz“-Modus aus, da wir nur wenige Endpunkte haben und der Test einfach durchzuführen ist. Der Test überprüft jeden Endpunkt unserer Web-App auf Fehler. Dabei werden den Endpunkten verschiedene Parameterkombinationen und Abfolgen von Anfragen übermittelt.

Jedes Mal, wenn ein Fehler gefunden wird, gibt RESTler in der Konsole eine Übersicht über die Art des Fehlers aus.

Zu den Schwachstellen, die unser Test aufdecken könnte, gehören die folgenden:

Unsichere Parameterkombinationen

REST-APIs verwenden verschiedene Parameter, etwa Request-URIs, Request-Methoden und Abfrageparameter. Diese Parameter lassen sich auf unterschiedliche Weise kombinieren. Um fehlerhafte Programmzustände zu vermeiden, müssen die Kombinationen getestet werden. Fuzzing hilft uns, unsichere Parameterkombinationen zu erkennen. Wir können sie beheben, indem wir alle Abfrageparameter validieren und die erforderlichen Parameter auf das Notwendige beschränken.

Abfrageparameter ohne Validierungsmechanismus

Eine strenge Eingabevalidierung auf Client- und Serverseite verbessert die Sicherheitslage einer Anwendung. Mit einem Fuzzing-Tool wie RESTler können wir dieses Problem in unserer Anwendung erkennen. Beheben lässt sich dieses Sicherheitsproblem durch eine strenge Eingabevalidierung auf Client- und Serverseite. Die Validierung auf der Clientseite verhindert, dass der Server mit ungültigen Daten überlastet wird. Durch die serverseitige Validierung verarbeitet der Server ausschließlich gültige Anfragen. Die Behebung dieses Problems trägt dazu bei, das Risiko eines Denial-of-Service-Angriffs (DoS) zu verringern.

Ungeschützte Passwörter

RESTler meldet auch Passwortparameter, die nicht gehasht werden. Dieses Problem lässt sich durch den Einsatz eines Hashing-Algorithmus beheben. Zu den verfügbaren Algorithmen zählen unter anderem bcrypt und PBKDF2. Wenn Sie diese Schwachstelle beheben, erschweren Sie es Angreifern, ein System zu übernehmen. Denn selbst wenn sie Zugriff auf das System erhalten, können sie dadurch nicht auf die Passwörter zugreifen.

Unsere Top 5 der Fuzzing-Tools

Auf dem Markt gibt es zahlreiche Open-Source-Fuzzing-Tools. Im Folgenden finden Sie fünf kostenlose und effektive Fuzzing-Tools, mit denen Sie die Sicherheit Ihrer Anwendungen ganz einfach verbessern können.

1. OSS-Fuzz

OSS-Fuzz ist ein von Google entwickeltes Open-Source-Fuzzing-Tool. Es kombiniert moderne Fuzzing-Techniken mit einer skalierbaren, verteilten Ausführung. Google hat es entwickelt, um Open-Source-Software sicher und stabil zu machen. OSS-Fuzz überprüft das Zielprogramm kontinuierlich mit Fuzz-Tests.

2. ClusterFuzz

ClusterFuzz ist eine skalierbare Open-Source-Infrastruktur, die Sicherheitslücken und Stabilitätsprobleme aufdeckt. Google nutzt sie, um den Chrome-Browser auf Fehler zu überprüfen. Im Gegensatz zu OSS-Fuzz funktioniert ClusterFuzz mit beliebigen Anwendungen, nicht nur mit Open-Source-Anwendungen. Das Tool ist hochgradig skalierbar und kann auf Clustern jeder Größe ausgeführt werden.

3. go-fuzz

go-fuzz ist ein Open-Source-Fuzzer zum Testen von Golang-Paketen. Er konzentriert sich auf Pakete mit komplexen Eingaben, die für böswillige Angreifer ein attraktives Ziel darstellen. Das Tool ist unverzichtbar, wenn Sie die Sicherheit von Go-Programmen mit Eingabeparsern verbessern möchten. Im Gegensatz zu den beiden oben genannten Fuzzern funktioniert go-fuzz nur mit Go-Paketen.

4. Peach Fuzzer

Peach Fuzzer ist ein von PeachTech entwickeltes Tool, das später von GitLab übernommen wurde. Das Tool lässt sich umfassend konfigurieren und eignet sich für alle, die maßgeschneiderte Tests durchführen möchten. Im Gegensatz zu go-fuzz können wir diese Lösung so konfigurieren, dass sie mit jeder Programmiersprache funktioniert. PeachTech bietet jedoch keinen Support und keine Updates mehr für das Tool.

5. ffuf

ffuf ist ein kostenloser, schneller Web-Fuzzer, der in Go geschrieben wurde. Mit dieser leistungsstarken Lösung können Sie eine Anwendung gründlich mit unbekannten POST- und GET-Anfragen testen. Als Entwickler bedienen wir dieses Tool über die Kommandozeile, da es keine Benutzeroberfläche hat.

Ihr Security-Toolkit

Fuzzing ist eine Softwaretesttechnik, bei der eine Anwendung mit ungültigen, zufälligen Eingaben versorgt wird, um Fehler aufzudecken. So können wir verstehen, wie sich eine Anwendung oder API bei unerwarteten Eingaben verhält. Es gibt zahlreiche Open-Source-Fuzzing-Tools für bestimmte Testszenarien. Fuzzer verursachen nur geringe Kosten in Zeit und Geld. Sie erkennen nicht nur Probleme, sondern liefern auch einen detaillierten Bericht darüber, wie ein Angreifer eine Schwachstelle ausnutzen könnte.

Ein korrekt ausgeführter Fuzz-Test kann die Sicherheitslage einer Anwendung verbessern, indem er Schwachstellen aufdeckt, die wir sonst nur schwer finden würden. Fuzzing kann Fehler wie fehlende Datenverschlüsselung, fehlerhafte Algorithmen und unzureichende Eingabevalidierung aufdecken. Es kann Probleme erkennen, die bei manuellen Tests unentdeckt blieben.

Mit einem Fuzzer können wir Zero-Day-Exploits verhindern, bei denen Angreifer unbekannte Schwachstellen ausnutzen. Die Ergebnisse des Fuzzings helfen, Sicherheitsangriffe wie CSRF, Injection-Angriffe und Denial-of-Service-Angriffe (DoS) einzudämmen.

Starten Sie mit Capture the Flag

Erfahren Sie in unserem virtuellen On-Demand-Workshop für Einsteiger, wie Sie Capture-the-Flag-Herausforderungen lösen.