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. SIGNAL IDUNA Gruppe, Hamburg
  2. Groz-Beckert KG, Albstadt
  3. VDE Prüf- und Zertifizierungsinstitut GmbH über Eurosearch Consultants, Offenbach
  4. Bundesversicherungsamt Referat 811, Bonn


Anzeige
Blu-ray-Angebote
  1. 122,97€
  2. (u. a. 96 Hours Taken 3 6,97€, London Has Fallen 9,97€, Homefront 7,49€, Riddick 7,49€)
  3. (u. a. Interstellar, Maze Runner, Kingsman, 96 Hours)

Folgen Sie uns
       

Anzeige
Whitepaper
  1. Praxiseinsatz, Nutzen und Grenzen von Hadoop und Data Lakes
  2. Sicherheitskonzeption für das App-getriebene Geschäft
  3. Globale SAP-Anwendungsunterstützung durch Outsourcing


  1. Red Star OS

    Sicherheitslücke in Nordkoreas Staats-Linux

  2. Elektroauto

    Porsche will 20.000 Elektrosportwagen pro Jahr verkaufen

  3. TV-Kabelnetz

    Tele Columbus will Marken abschaffen

  4. Barrierefreiheit

    Microsofts KI hilft Blinden in Office

  5. AdvanceTV

    Tele Columbus führt neue Set-Top-Box für 4K vor

  6. Oculus Touch im Test

    Tolle Tracking-Controller für begrenzte Roomscale-Erfahrung

  7. 3D Xpoint

    Intels Optane-SSDs erscheinen nicht mehr 2016

  8. Webprogrammierung

    PHP 7.1 erweitert Nullen und das Nichts

  9. VSS Unity

    Virgin Galactic testet neues Raketenflugzeug

  10. Google, Apple und Mailaccounts

    Zwei-Faktor-Authentifizierung richtig nutzen



Haben wir etwas übersehen?

E-Mail an news@golem.de


Anzeige
Robot Operating System: Was Bratwurst-Bot und autonome Autos gemeinsam haben
Robot Operating System
Was Bratwurst-Bot und autonome Autos gemeinsam haben
  1. Roboterarm Dobot M1 - der Industrieroboter für daheim
  2. Roboter Laundroid faltet die Wäsche
  3. Fahrbare Roboter Japanische Firmen arbeiten an Transformers

Super Mario Bros. (1985): Fahrt ab auf den Bruder!
Super Mario Bros. (1985)
Fahrt ab auf den Bruder!
  1. Quake (1996) Urknall für Mouselook, Mods und moderne 3D-Grafik
  2. NES Classic Mini im Vergleichstest Technischer K.o.-Sieg für die Original-Hardware

HPE: Was The Machine ist und was nicht
HPE
Was The Machine ist und was nicht
  1. IaaS und PaaS Suse bekommt Cloudtechnik von HPE und wird Lieblings-Linux
  2. Memory-Driven Computing HPE zeigt Prototyp von The Machine
  3. Micro Focus HP Enterprise verkauft Software für 2,5 Milliarden Dollar

  1. Re: Sieht gut aus

    ChristianKG | 02:37

  2. Re: SMS unsicher?

    Proctrap | 02:28

  3. Re: Betrifft nur wenige

    HorkheimerAnders | 01:50

  4. Re: Audio?

    Pjörn | 01:48

  5. Re: Nächste Stufe ...

    NukeOperator | 01:35


  1. 17:25

  2. 17:06

  3. 16:53

  4. 16:15

  5. 16:02

  6. 16:00

  7. 15:00

  8. 14:14


  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