Schwachstellen finden mittels Fuzzing

Schwachstellen finden mittels Fuzzing

Marc Ruef
by Marc Ruef
time to read: 4 minutes

Bei Fuzzing handelt es sich um eine Technik im Bereich des Software-Testing. Dabei werden in semi-automatisierter oder automatisierter Weise Eingaben getätigt, um mittels fehlerhafter Zugriffe unerwartete Reaktionen zu provozieren.

Die Geburt des Begriffs wird Barton Miller zugeschrieben, der 1988 an der University of Winsconsin eine entsprechende Arbeit mit dem Titel Operating System Utility Program Reliability – The Fuzz Generator durchgeführt hat. Doch schon 1983 wurde für den Macintosh durch Steve Capps eine Applikation namens The Monkey entwickelt, mit der entsprechendes Fuzz Testing in der Software MacPaint umgesetzt werden konnten.

Fuzzing ist damit eigentlich eine relativ alte Technik, die aber erst ab ca. 2005 den zaghaften Durchbruch in der IT-Security Branche geschafft hat. Heutzutage gilt es als fester Bestandteil systematischer Sicherheitsüberprüfungen.

Ein System erwartet immer irgendwelche Eingaben. Diese haben eine bestimmte Struktur. Zum Beispiel erwartet in einem Formular das Feld Postleitzahl für Schweizer Adressen stets vier Ziffern der folgenden Form (als regulärer Ausdruck):

([0-9]{4}) = { 0000, 0001, ..., 9999 }

Beim Fuzzing werden nun Eingaben getätigt, die gezielt diese Anforderungen verletzen. In diesem Beispiel bieten sich an:

Test Beispiel
kürzer als 4 Zeichen 111_
länger als 4 Zeichen 1234567890(...)
Buchstaben 123A
Sonderzeichen 123*
Minuswerte -123
konstruierte Werte 1+23 (wird nach Berechnung als 24 gehandelt)
leere Eingabe ____
nicht abgeschlossene Eingaben (gibts in diesem Beispiel nicht)
reservierten Mustern HTML-Anweisungen, SQL-Abfragen, …
alternative Codierungen UTF-8, Unicode, …

Dadurch soll ein Verhalten provoziert werden, auf das das Zielsystem nicht ausgelegt ist. Wenn zum Beispiel die PLZ eingegeben und das Formular abgeschickt wurde, dann soll direkt die Ortschaft aus einer Datenbank geholt und dargestellt werden. Doch was wird geholt, wenn 123* eingegeben wird? Mögliche Resultate, denen eine generische Kritikalität beigemessen wird, sind:

Sicherheitstechnisch Positiv
passed allgemeine Fehlermeldung (bevorzugte Lösung)
low es passiert gar nichts (vom Betrieb her aber unerwünscht)
Sicherheitstechnisch Negativ
medium technische Fehlermeldung (z.B. Informationen zur internen Verarbeitung)
medium erster Treffer wird geladen
medium letzter Treffer wird geladen
medium “zufälliger” Treffer wird geladen (z.B. je nach Sortierung)
high alle Treffer werden geladen (erweiterte Zugriffsrechte)
high auf geschützte Daten zugreifen (erweiterte Zugriffsrechte)
high geschützte Funktionen benutzen (z.B. Code ausführen)
high Datenverarbeitung blockieren (Denial of Service)

In einer guten Sicherheitsüberprüfung wird mit intelligentem Fuzzing gearbeitet. Dies erfordert aber viel Verständnis für die eingesetzten Technologien. Das simple Abstützen auf irgendwelche Vulnerability Scanner gewährleistet nicht, dass derlei Tests mitberücksichtigt werden. Gerade wenn individuelle Software-Lösungen zum Tragen kommen, muss ein zielgerichtetes Fuzzing angestrebt werden.

About the Author

Marc Ruef

Marc Ruef has been working in information security since the late 1990s. He is well-known for his many publications and books. The last one called The Art of Penetration Testing is discussing security testing in detail. He is a lecturer at several universities, like ETH, HWZ, HSLU and IKF. (ORCID 0000-0002-1328-6357)

Links

You need support in such a project?

Our experts will get in contact with you!

×
Ransomware Detection, Defense, and Analysis

Ransomware Detection, Defense, and Analysis

Marc Ruef

Data Markets

Data Markets

Marc Ruef

Password Leak Analysis

Password Leak Analysis

Marc Ruef

MITRE ATT&CK

MITRE ATT&CK

Marc Ruef

You want more?

Further articles available here

You need support in such a project?

Our experts will get in contact with you!

You want more?

Further articles available here