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. über JobLeads GmbH, München
  2. Walbusch Walter Busch GmbH & Co. KG, Solingen
  3. Power Service GmbH, Köln
  4. REGUMED Regulative Medizintechnik GmbH, Planegg Raum München


Anzeige
Top-Angebote
  1. (u. a. Dark Souls III für 24,99€, Darkosuls II: Scholar of the First Sin für 8,99€, Bioshock...
  2. 329,00€
  3. 283,88€ + 5,00€ Versand (USK 18)

Folgen Sie uns
       

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


  1. Hardlight VR Suit

    Vibrations-Weste soll VR-Erlebnis realistischer machen

  2. Autonomes Fahren

    Der Truck lernt beim Fahren

  3. Selektorenaffäre

    BND soll ausländische Journalisten ausspioniert haben

  4. Kursanstieg

    Bitcoin auf neuem Rekordhoch

  5. Google-Steuer

    EU-Verbraucherausschuss lehnt Leistungsschutzrecht ab

  6. Linux-Kernel

    Torvalds droht mit Nicht-Aufnahme von Treibercode

  7. Airbus A320

    In Flugzeugen wird der Platz selbst für kleine Laptops knapp

  8. Urheberrecht

    Marketplace-Händler wegen Bildern von Amazon bestraft

  9. V8 Turbofan

    Neuer Javascript-Compiler für Chrome kommt im März

  10. Motion Control

    Kamerafahrten für die perfekte Illusion



Haben wir etwas übersehen?

E-Mail an news@golem.de


Anzeige
Limux: Die tragische Geschichte eines Leuchtturm-Projekts
Limux
Die tragische Geschichte eines Leuchtturm-Projekts
  1. Limux München prüft Rückkehr zu Windows
  2. Limux-Projekt Windows könnte München mehr als sechs Millionen Euro kosten
  3. Limux Münchner Stadtrat ignoriert selbst beauftragte Studie

Wacoms Intuos Pro Paper im Test: Weg mit digital, her mit Stift und Papier!
Wacoms Intuos Pro Paper im Test
Weg mit digital, her mit Stift und Papier!
  1. Wacom Brainwave Ein Graph sagt mehr als tausend Worte
  2. Canvas Dells Stift-Tablet bedient sich bei Microsoft und Wacom
  3. Intuos Pro Wacom verbindet Zeichentablet mit echtem Papier

Bundesnetzagentur: Puppenverbot gefährdet das Smart Home und Bastler
Bundesnetzagentur
Puppenverbot gefährdet das Smart Home und Bastler
  1. My Friend Cayla Eltern müssen Puppen ihrer Kinder zerstören
  2. Matoi Imagno Wenn die Holzklötzchen zu dir sprechen
  3. Smart Gurlz Programmieren lernen mit Puppen

  1. Re: Delays wegen Handgepäck, slightly OT

    ManuPhennic | 18:07

  2. Re: Viel Licht und Schatten

    JanZmus | 18:06

  3. Re: 16,2 kWh / 100 km

    Kondratieff | 18:06

  4. Klasse, wie "open" dieses Open Source doch ist.

    n0x30n | 18:02

  5. Re: 'And if the DRM "maintenance" is about...

    lear | 18:02


  1. 18:02

  2. 17:43

  3. 16:49

  4. 16:21

  5. 16:02

  6. 15:00

  7. 14:41

  8. 14:06


  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