Abo
  • Services:
Anzeige
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)

Fuzzing: Auf Fehlersuche mit American Fuzzy Lop

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)

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.

Anzeige

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

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.


eye home zur Startseite
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...



Anzeige

Stellenmarkt
  1. SICK AG, Waldkirch bei Freiburg im Breisgau
  2. PSI Logistics GmbH, Aschaffenburg
  3. TQ-SYSTEMS GMBH, Seefeld nahe München
  4. Daimler AG, Immendingen


Anzeige
Blu-ray-Angebote
  1. 23,99€ (Vorbesteller-Preisgarantie)
  2. (u. a. Reign, Person of Interest, Gossip Girl, The Clone Wars)
  3. (u. a. Hobbit Trilogie Blu-ray 44,97€, Batman Dark Knight Trilogy Blu-ray 17,99€)

Folgen Sie uns
       

Anzeige
Whitepaper
  1. Globale SAP-Anwendungsunterstützung durch Outsourcing


  1. Apple

    MacOS Sierra 10.12.4 mit Nachtschicht-Modus

  2. Apple

    iOS 10.3 in finaler Version erschienen

  3. Videoüberwachung

    Erster Feldversuch mit Gesichtserkennung geplant

  4. Optane Memory

    Intel lässt den Festplatten-Beschleuniger wieder aufleben

  5. Cryptowars

    "Kein geheimer Ort für Terroristen"

  6. Trello

    Atlassian setzt alles auf eine Karte

  7. Endless Runway

    Der Flughafen wird rund

  8. Square Enix

    Gladiolus startet ohne die anderen Jungs in Final Fantasy 15

  9. All Walls Must Fall

    Strategie und Zeitreisen in Berlin

  10. Breitbandmessung

    Nutzer erhalten meist nicht versprochene Datenrate



Haben wir etwas übersehen?

E-Mail an news@golem.de


Anzeige
Mobile-Games-Auslese: Würfelkrieger und Kartendiebe für mobile Spieler
Mobile-Games-Auslese
Würfelkrieger und Kartendiebe für mobile Spieler

Synlight: Wie der Wasserstoff aus dem Sonnenlicht kommen soll
Synlight
Wie der Wasserstoff aus dem Sonnenlicht kommen soll
  1. Energieversorgung Tesla nimmt eigenes Solarkraftwerk in Hawaii in Betrieb

Android O im Test: Oreo, Ovomaltine, Orange
Android O im Test
Oreo, Ovomaltine, Orange
  1. Android O Alte Crypto raus und neuer Datenschutz rein
  2. Developer Preview Google veröffentlicht erste Vorschau von Android O
  3. Android O Google will Android intelligenter machen

  1. Re: Man schenkt der Telekom Leitungen, die sie...

    Ovaron | 06:13

  2. Re: Wie soll das bei dem aktuellen Ausbau auch...

    Ovaron | 06:10

  3. Re: Curie-Temperatur?

    xammu | 05:53

  4. APFS und iPod Touch (6. Gen)

    LeCaNo | 04:58

  5. Re: Sand einfüllen

    amagol | 03:29


  1. 00:28

  2. 00:05

  3. 18:55

  4. 18:18

  5. 18:08

  6. 17:48

  7. 17:23

  8. 17:07


  1. Themen
  2. A
  3. B
  4. C
  5. D
  6. E
  7. F
  8. G
  9. H
  10. I
  11. J
  12. K
  13. L
  14. M
  15. N
  16. O
  17. P
  18. Q
  19. R
  20. S
  21. T
  22. U
  23. V
  24. W
  25. X
  26. Y
  27. Z
  28. #
 
    •  / 
    Zum Artikel