Abo
  • Services:

Fuzzing: Auf Fehlersuche mit American Fuzzy Lop

Programme testweise mit massenhaft fehlerhaften Daten zu füttern, ist eine effektive Methode, um Fehler zu finden. Das sogenannte Fuzzing ist schon seit Jahrzehnten bekannt, doch bessere Tools und einige spektakuläre Funde von Sicherheitslücken haben zuletzt das Interesse daran erneut geweckt.

Artikel veröffentlicht am , Hanno Böck
American Fuzzy Lop ist der Name dieser Kaninchenart - und außerdem der Name eines sehr effektiven Fuzzing-Tools.
American Fuzzy Lop ist der Name dieser Kaninchenart - und außerdem der Name eines sehr effektiven Fuzzing-Tools. (Bild: Lithonius/Wikimedia Commons)

Im September 2014, wenige Tage, nachdem der sogenannte Shellshock-Bug in der Unix-Kommandozeile Bash Unruhe entfacht hatte, fand der Google-Entwickler Michal Zalewski weitere Bugs in Bash, die ebenfalls zur Ausführung von Code geeignet waren. Zalewski erwähnte in seinem Blogeintrag damals ein Fuzzing-Tool mit dem Namen American Fuzzy Lop, das er selbst entwickelt hatte und das bis dahin kaum jemand kannte. In der Zwischenzeit sind Hunderte von Bugs mit Hilfe von American Fuzzy Lop gefunden worden.

Fehlerhafte Eingabedaten testen

Stellenmarkt
  1. Bosch Gruppe, Stuttgart
  2. Hays AG, Hessen

Fuzzing ist eine sehr alte und eigentlich simple Strategie, um Fehler in Software zu finden. Zum ersten Mal tauchte der Begriff 1988 in einer Übungsaufgabe des Informatikers Barton Miller auf. Die Idee: Man erzeugt massenhaft Eingabedaten, die kleine, zufällige Fehler enthalten, und testet eine Software damit. Anschließend wird geprüft, ob die getestete Software unerwünschte Verhaltensweisen zeigt.

Im einfachsten Fall prüft man schlicht auf Abstürze, denn diese sind häufig ein Hinweis auf ungültige Speicherzugriffe wie Buffer Overflows oder Use-after-free-Fehler, die von Angreifern ausgenutzt werden können. Je komplexer ein Eingabeformat ist, desto wahrscheinlicher sind derartige Speicherzugriffsfehler, vor allem bei Programmen, die in C oder C++ geschrieben sind. Typische Fehlerquellen sind etwa die Parser für Bildformate, Videos oder auch TLS-Zertifikate.

Klassischerweise gab es beim Fuzzing zwei Ansätze: zum einen dumme Fuzzing-Tools, die lediglich zufällig Bitfehler in Dokumente einfügten, Bereiche herausschnitten oder Ähnliches. Ein Beispiel dafür ist das Programm Zzuf. Daneben gibt es Tools, die Informationen über die verwendeten Eingabedaten kennen. So kann ein Tool beispielsweise bestimmte Felder in einer Datenstruktur mit dem Maximal- oder Minimalwert füllen oder bestimmte Grenzfälle erzeugen.

Beide Vorgehensweisen haben ihre Nachteile. Einfaches Fuzzing findet nur sehr offensichtliche Bugs. Das ist kein Grund, solche Werkzeuge nicht trotzdem einzusetzen - in vielen Fällen reicht ein Tool wie Zzuf bereits, um Fehler zu finden. Fuzzing-Tools mit Formatinformationen haben wiederum den Nachteil, dass sie immer für bestimmte Eingabedaten angepasst werden müssen, was relativ aufwendig ist.

Untersuchung von Codepfaden als neuer Ansatz

American Fuzzy Lop geht hierbei einen neuen Weg: Das Tool hat keinerlei Informationen über die verwendeten Eingabedaten, es beobachtet aber, welche Codepfade in einem Programm durch eine Eingabedatei genutzt werden. Wird ein neuer Codepfad gefunden, nutzt der Fuzzer diese Eingabedatei bevorzugt für weitere Fuzzing-Vorgänge. Damit das funktioniert, greift American Fuzzy Loop bereits beim Kompilierungsvorgang ein. Zu testende Programme müssen mit einem Wrapper-Script neu kompiliert werden.

Die Strategie, Eingabedaten anhand der Codepfade zu priorisieren, führt zu teilweise faszinierenden Ergebnissen. In einem Experiment startete Zalewski einen Fuzzing-Vorgang mit der Standard-JPEG-Bibliothek. Als Eingabe nutzte er dabei eine sinnlose Datei. Nach einigen Stunden erzeugte der Fuzzer daraus gültige JPEG-Bilder. Das Experiment als solches hat natürlich keinen praktischen Nutzen, es ist sinnvoller und schneller, einen Fuzzing-Vorgang mit gültigen Eingabedaten zu starten. Aber da American Fuzzy Lop praktisch ohne Wissen über das Eingabeformat gültige Daten erzeugen kann, ist es auch in vielen anderen Situationen sehr effektiv. So können etwa bestimmte Features eines Dateiformats zufällig erzeugt werden.

American Fuzzy Lop arbeitet im Vergleich zu vielen bisher verfügbaren Tools sehr effektiv. Dazu kommt: Das Programm ist im Quellcode verfügbar und steht unter der freien MIT-Lizenz. Viele andere Tools zur Fehlersuche sind nur kommerziell verfügbar, was ihren Nutzen deutlich einschränkt.

Inzwischen gibt es eine ganze Reihe von Zusatzwerkzeugen und Erweiterungen zu American Fuzzy Lop. So gibt es beispielsweise einen Modus, der mit Hilfe des QEMU-Emulators auch das Fuzzen von Binärsoftware erlaubt. Ein Tool namens Preeny ermöglicht mit Einschränkungen auch das Fuzzen von Netzwerkeingaben.

Kommandozeilentool Strings erweist sich als problematisch

Selbst an völlig unerwarteten Stellen finden Fuzzer manchmal Fehler in der Eingabeverarbeitung. Linux-Systeme liefern ein Werkzeug namens Strings mit, das aus Binärdateien anzeigbare Zeichenketten extrahiert. Dabei kann eigentlich nicht viel schiefgehen, doch Strings macht noch mehr: Trifft es auf eine ausführbare ELF-Datei, versucht es, die Datenstrukturen aus den Sektionsheadern der ELF-Datei anzuzeigen. Michal Zalewski fand einen exploitbaren Fehler in Strings. Er war nicht der Erste: Bereits vor neun Jahren fand Tavis Ormandy ein ähnliches Problem in Strings.

Das Strings-Tool ist Teil des Binutils-Pakets, das Teil einer üblichen Linux-Entwicklungsumgebung ist. Motiviert durch die Funde versuchten nun andere, weitere Bugs in Strings und den anderen Binutils-Kommandozeilen-Tools zu finden. Unzählige Speicherzugriffsfehler wurden daraufhin im Binutils-Paket identifiziert und behoben.

Binutils war zwar ein Extremfall, doch dass sich mit Hilfe von Fuzzing relativ einfach Bugs finden lassen, trifft für sehr viele Programme zu. Die Webseite von American Fuzzy Lop listet eine Trophäensammlung - nahezu alle relevanten Open-Source-Bibliotheken finden sich dort.

Der Autor dieses Artikels konnte kürzlich zeigen, dass man mit Hilfe von Fuzzing auch den Heartbleed-Bug in OpenSSL hätte finden können. Neben American Fuzzy Lop kam dabei der sogenannte Address Sanitizer zum Einsatz. Address Sanitizer ist Teil der LLVM- und GCC-Compiler. Anschalten lässt es sich einfach durch einen Parameter beim Kompilieren (-fsanitize=address).

Address Sanitizer findet zusätzliche Speicherzugriffsfehler

Bei Heartbleed handelte es sich um einen fehlerhaften Speicherzugriff. Allerdings bringt Heartbleed OpenSSL in aller Regel nicht zum Absturz. Der Grund: Es ist lediglich ein lesender Speicherzugriff. Während zufällig gefundene fehlerhafte Schreibzugriffe ein Programm meistens zum Absturz bringen, ist das bei Lesezugriffen üblicherweise nicht der Fall, das Programm läuft anschließend einfach weiter. Address Sanitizer fügt einem Programm zusätzliche Checks hinzu, die derartige Fehler erkennen und das Programm anschließend mit einer ausführlichen Fehlermeldung beenden. Durch die Kombination von Fuzzing und Address Sanitizer lassen sich somit deutlich mehr Speicherzugriffsfehler in Programmen finden.

Die Erfahrungen mit Binutils und die Tatsache, dass die Situation bei vielen anderen Tools nicht viel besser war, hat den Autor dieses Artikels im vergangenen Jahr dazu veranlasst, das Fuzzing Project zu gründen. Das Ziel: Möglichst alle Tools, die auf einem gängigen Linux-System installiert sind, sollten mittels Fuzzing auf Fehler geprüft werden. Die Core Infrastructure Initiative der Linux Foundation hat vor kurzem beschlossen, das Fuzzing Project finanziell zu unterstützen.

Fuzzing ist eine sehr effektive Methode, um Speicherzugriffsfehler in Software zu finden, häufig handelt es sich dabei um Sicherheitslücken. Allerdings muss auch klar sein: Fuzzing ist kein Allheilmittel. Fuzzing findet prinzipienbedingt nur bestimmte Fehler. Es kann nie alle möglichen Eingaben testen und es funktioniert auch nur dann, wenn ein Fehler überhaupt automatisiert erkennbar ist. Für viele Logikfehler in Programmen gilt das nicht.



Anzeige
Hardware-Angebote
  1. 915€ + Versand
  2. ab 119,98€ (Release 04.10.)
  3. (reduzierte Überstände, Restposten & Co.)

Mimus Polyglottos 14. Jul 2015

Das würde für Adobe wahrscheinlich viel zu teuer ;-)

MagicT 10. Jul 2015

... Programmierer != Programmierer Generell stimme ich dir da zu - auch wenn du als...


Folgen Sie uns
       


Lenovo Yoga Book C930 mit E-Ink-Display ausprobiert (Ifa 2018)

Ein Convertible mit E-Ink-Display - das Yoga Book C930 ist ein Hingucker, aber wie bedient es sich? Wir haben es ausprobiert.

Lenovo Yoga Book C930 mit E-Ink-Display ausprobiert (Ifa 2018) Video aufrufen
Lenovo Thinkpad T480s im Test: Das trotzdem beste Business-Notebook
Lenovo Thinkpad T480s im Test
Das trotzdem beste Business-Notebook

Mit dem Thinkpad T480s verkauft Lenovo ein exzellentes 14-Zoll-Business-Notebook. Anschlüsse und Eingabegeräte überzeugen uns - leider ist aber die CPU konservativ eingestellt und ein gutes Display kostet extra.
Ein Test von Marc Sauter und Sebastian Grüner

  1. Thinkpad E480/E485 im Test AMD gegen Intel in Lenovos 14-Zoll-Notebook
  2. Lenovo Das Thinkpad P1 ist das X1 Carbon als Workstation
  3. Thinkpad Ultra Docking Station im Test Das USB-Typ-C-Dock mit robuster Mechanik

Segelflug: Die Höhenflieger
Segelflug
Die Höhenflieger

In einem Experimental-Segelflugzeug von Airbus wollen Flugenthusiasten auf gigantischen Luftwirbeln am Rande der Antarktis fast 30 Kilometer hoch aufsteigen - ganz ohne Motor. An Bord sind Messinstrumente, die neue und unverfälschte Daten für die Klimaforschung liefern.
Ein Bericht von Daniel Hautmann

  1. Luftfahrt Nasa testet leise Überschallflüge
  2. Low-Boom Flight Demonstrator Lockheed baut leises Überschallflugzeug
  3. Elektroflieger Norwegen will elektrisch fliegen

Amazon Alexa: Echo Sub verhilft Echo-Lautsprechern zu mehr Bass
Amazon Alexa
Echo Sub verhilft Echo-Lautsprechern zu mehr Bass

Amazon hat einen Subwoofer speziell für Echo-Lautsprecher vorgestellt. Damit sollen die eher bassarmen Lautsprecher mit einem ordentlichen Tiefbass ausgestattet werden. Zudem öffnet Amazon seine Multiroom-Musikfunktion für Alexa-Lautsprecher anderer Hersteller.

  1. Beosound 2 Bang & Olufsen bringt smarten Lautsprecher für 2.000 Euro
  2. Google und Amazon Markt für smarte Lautsprecher wächst weiter stark
  3. Alexa-Soundbars im Test Sonos' Beam und Polks Command Bar sind die Klangreferenz

    •  /