Abo
  • Services:
Anzeige
American Fuzzy Lop kann Bugs wie Heartbleed finden.
American Fuzzy Lop kann Bugs wie Heartbleed finden. (Bild: Screenshot)

Fuzzing des TLS-Handshakes

Damit kann der Fuzzing-Vorgang beginnen. Die letzte für Heartbleed anfällige OpenSSL-Version ist 1.0.1f. Diese muss mit Hilfe von American Fuzzy Lop kompiliert werden; dafür müssem in der Makefile die Aufrufe von gcc durch afl-gcc ersetzt werden. Um Address Sanitizer zu aktivieren, muss vorher die Umgebungsvariable AFL_USE_ASAN auf 1 gesetzt werden (AFL_USE_ASAN=1; export AFL_USE_ASAN).

Anschließend wird das Test-Tool selftls mit American Fuzzy Lop kompiliert und statisch gegen OpenSSL gelinkt. Der OpenSSL-Compile erzeugt hierfür zwei Dateien libssl.a und libcrypto.a, die wir dafür nutzen:

Anzeige

afl-gcc selftls.c -o selftls libssl.a libcrypto.a -ldl

Ein einfacher Aufruf des Test-Tools führt dazu, dass sechs Dateien mit den Namen packet-1 bis packet-6 erstellt werden. Nur die Pakete eins bis vier enthalten Daten, die letzten beiden sind leer. Nur der initiale Teil des Handshakes soll gefuzzt werden. Durch den Aufruf von ./selftls 1 packet-1 kann ein Handshake mit dem ausgegebenen Paket simuliert werden. Die Datei packet-1 wird nun in einem Verzeichnis abgelegt, in unserem Beispiel das Verzeichnis in. Nun kann der eigentliche Fuzzing-Vorgang gestartet werden:

afl-fuzz -i in -o out -m -1 -t 5000 ./selftls 1 @@

Mit -i und -o werden das Ein- und das Ausgabeverzeichnis definiert, -m -1 schaltet das Speicherlimit ab und -t 5000 erhöht den Timeout, da ein TLS-Handshake vergleichsweise langsam abläuft. Beim Programmaufruf von selftls wird das @@ von American Fuzzy Lop durch die jeweilige Eingabedatei ersetzt.

Nach sechs Stunden ein Treffer

In unseren Tests lieferte American Fuzzy Lop circa sechs Stunden später das erste Ergebnis: Ein manueller Aufruf von selftls mit der Ausgabedatei ergibt einen Stack Trace und weitere Informationen von Address Sanitizer - ein Buffer Overflow, verursacht durch einen fehlerhaften Aufruf von memcpy() in der Funktion tls1_process-heartbeat(). Es ist der Heartbleed-Bug.

Einige erwähnenswerte Dinge sind beim Testen aufgefallen: Nach der Entdeckung von Heartbleed wurde mehrfach erwähnt, dass OpenSSL ein eigenes Speichermanagement nutzt, das angeblich dazu führte, dass Schutztechnologien ausgehebelt würden. Insbesondere eine E-Mail von OpenBSD-Entwickler Theo de Raadt wurde viel zitiert, in der dieser schrieb, dass OpenSSL "Umgebungstechnologien für Exploit-Schutzmechanismen" habe. Das OpenSSL-eigene Speichermanagement lässt sich beim Kompilieren durch den Parameter no-buf-freelist deaktivieren.

Zunächst sind wir davon ausgegangen, dass dies notwendig ist, damit Address Sanitizer korrekt funktioniert. Es stellte sich aber heraus, dass auch ohne diese Option Address Sanitizer den Bug erkennt. Zwar besitzt OpenSSL ein eigenes Speichermanagement, aber trotzdem wird offenbar für jeden zugewiesenen Puffer ein eigener Speicherbereich alloziert. Die Details des OpenSSL-Speichermanagements sind in einem Blogbeitrag von Chris Rohlf erläutert.

Randomisierung abzuschalten war nicht notwendig

American Fuzzy Lop wird beim Fuzzen des Test-Tools mit einer roten Zahl vor variablen Programmaufrufen warnen. Das bedeutet, dass das Programm sich manchmal bei identischen Eingabedaten unterschiedlich verhält. Der Grund dafür ist, dass der TLS-Handshake bei der Erstellung des sogenannten Master Secrets und in der RSA-Funktion Zufallszahlen nutzt. Um dies zu verhindern und den Handshake deterministisch ablaufen zu lassen, kann die Zufallszahlenfunktion von OpenSSL gepatcht werden und permanent lediglich den Wert Eins ausgeben. In unseren Tests benötigte American Fuzzy Lop etwa gleich lang zum Finden von Heartbleed, unabhängig davon, ob der Zufallszahlengenerator deaktiviert wurde oder nicht. Trotzdem erscheint es generell sinnvoll, zum Fuzzen von kryptographischen Anwendungen den Zufallszahlengenerator zu deaktivieren und keine echten Zufallszahlen ausgeben zu lassen.

Erwähnenswert ist außerdem, dass American Fuzzy Lop ein relativ neues Tool ist. Zum Zeitpunkt als Heartbleed gefunden wurde, war es zwar bereits verfügbar, allerdings kannte es kaum jemand. Die frühen Versionen waren zudem deutlich komplexer zu bedienen und hatten einige Fallstricke, insbesondere die Zusammenarbeit mit Address Sanitizer funktionierte nicht problemlos. Mit der damaligen Version hätte sich Heartbleed also nicht so einfach finden lassen.

Lernen für die Zukunft

Einen direkten Nutzen hat unser Experiment natürlich nicht, denn Heartbleed wurde längst gefunden und umfangreich analysiert, der OpenSSL-Code wurde gefixt und die meisten Systeme sind heute nicht mehr verwundbar. Allerdings lässt sich aus dem Experiment einiges lernen. Mit ähnlichen Strategien sollte es möglich sein, in Zukunft Heartbleed-ähnliche Bugs in anderer Software zu finden. Address Sanitizer und American Fuzzy Lop sind sehr mächtige Tools, die jeder Softwareentwickler kennen und nutzen sollte.

Eine ausführlichere englischsprachige Beschreibung des Fuzzing-Experiments hat der Autor in seinem Blog veröffentlicht. Außerdem hat er im vergangenen Jahr das Fuzzing Project mit dem Ziel gestartet, mehr Bugs in freier Software mittels Fuzzing zu finden. Dort gibt es auch ein Einsteiger-Tutorial.

Nachtrag vom 8. April 2015, 15:30 Uhr

Wir sind darauf hingewiesen worden, dass die Firma Codenomicon ebenfalls Heartbleed mit Hilfe eines Fuzzing-Tools gefunden hat. Das ist zwar korrekt, aber die dabei verwendete Strategie unterscheidet sich deutlich von der, die hier im Artikel beschrieben wurde. Zum Hintergrund: Heartbleed wurde ursprünglich von Neel Mehta von Google bei einer Analyse des OpenSSL-Codes entdeckt. Wenige Tage später wurde Heartbleed unabhängig davon von Entwicklern der Firma Codenomicon ebenfalls entdeckt. Die Details dazu hat Codenomicon-Mitarbeiter Antti Karjalainen in einem Vortrag erklärt, der auf Youtube zu finden ist;.

Codenomicon nutzte ein Fuzzing-Tool, das spezifisch auf TLS zugeschnitten war und spezielle Funktionen beinhaltete, die Anomalien entdeckten. Auch enthielt das Tool spezielle Mechanismen, um die Heartbeat-Erweiterung von TLS zu erkennen und zu prüfen. Derartige protokollbasierte Fuzzer können zwar Bugs wie Heartbleed finden, sie sind aber sehr aufwendig zu erstellen, da für jedes Format oder Protokoll, das gefuzzt werden soll, der Fuzzer angepasst werden muss.

Damit unterscheidet sich diese Vorgehensweise deutlich von der im Artikel vorgestellten Methode: Das Bemerkenswerte am Tool American Fuzzy Lop ist, dass es keinerlei Informationen über das verwendete Format oder Protokoll benötigt.

 Address Sanitizer und American Fuzzy Lop

eye home zur Startseite
Manga 27. Apr 2015

Ja stimmt... Du hast vollkommen recht... Es ist in der Größenordnung wie Native code...

olleIcke 16. Apr 2015

btw: bei xkcd wurde es auch schön anschaulich erklärt wie ich finde: xkcd.com/1354...

EvilSheep 09. Apr 2015

dem wunsch schliese ich mich an!

estev 09. Apr 2015

Made my day.

heftig 09. Apr 2015

Verdammt... zu spät :D



Anzeige

Stellenmarkt
  1. über Baumann Unternehmensberatung AG, Raum Stuttgart
  2. Haufe Gruppe, Freiburg im Breisgau
  3. Katholische Universität Eichstätt-Ingolstadt, Eichstätt
  4. Sparda-Bank Ostbayern eG, Regensburg


Anzeige
Blu-ray-Angebote
  1. (u. a. John Wick, Leon der Profi, Auf der Flucht, Das Schweigen der Lämmer)
  2. (u. a. 96 Hours Taken 3 6,97€, London Has Fallen 9,97€, Homefront 7,49€, Riddick 7,49€)
  3. (u. a. Apollo 13, Insidious, Horns, King Kong, E.T. The Untouchables, Der Sternwanderer)

Folgen Sie uns
       

Anzeige
Whitepaper
  1. Praxiseinsatz, Nutzen und Grenzen von Hadoop und Data Lakes
  2. Mit digitalen Workflows Geschäftsprozesse agiler machen
  3. Potenzialanalyse für eine effiziente DMS- und ECM-Strategie


  1. USA

    Samsung will Note 7 in Backsteine verwandeln

  2. Hackerangriffe

    Obama will Einfluss Russlands auf US-Wahl untersuchen lassen

  3. Free 2 Play

    US-Amerikaner verzockte 1 Million US-Dollar in Game of War

  4. Die Woche im Video

    Bei den Abmahnanwälten knallen wohl schon die Sektkorken

  5. DNS NET

    Erste Kunden in Sachsen-Anhalt erhalten 500 MBit/s

  6. Netzwerk

    EWE reduziert FTTH auf 40 MBit/s im Upload

  7. Rahmenvertrag

    VG Wort will mit Unis neue Zwischenlösung für 2017 finden

  8. Industriespionage

    Wie Thyssenkrupp seine Angreifer fand

  9. Kein Internet

    Nach Windows-Update weltweit Computer offline

  10. Display Core

    Kernel-Community lehnt AMDs Linux-Treiber weiter ab



Haben wir etwas übersehen?

E-Mail an news@golem.de


Anzeige
Großbatterien: Sechs 15-Megawatt-Anlagen sollen deutsches Stromnetz sichern
Großbatterien
Sechs 15-Megawatt-Anlagen sollen deutsches Stromnetz sichern
  1. HPE Hikari Dieser Supercomputer wird von Solarenergie versorgt
  2. Tesla Desperate Housewives erzeugen Strom mit Solarschindeln
  3. Solar Roadways Erste Solarzellen auf der Straße verlegt

Google, Apple und Mailaccounts: Zwei-Faktor-Authentifizierung richtig nutzen
Google, Apple und Mailaccounts
Zwei-Faktor-Authentifizierung richtig nutzen
  1. Bugs in Encase Mit dem Forensik-Tool die Polizei hacken
  2. Red Star OS Sicherheitslücke in Nordkoreas Staats-Linux
  3. 0-Day Tor und Firefox patchen ausgenutzten Javascript-Exploit

Steep im Test: Frei und einsam beim Bergsport
Steep im Test
Frei und einsam beim Bergsport
  1. PES 2017 Update mit Stadion und Hymnen von Borussia Dortmund
  2. Motorsport Manager im Kurztest Neustart für Sportmanager
  3. NBA 2K17 10.000 Schritte für Ingame-Boost

  1. Re: Class Action Suit...

    Richtig Steller | 15:40

  2. Re: Ganz schön armseelig Telekom

    Opferwurst | 15:36

  3. Re: Die Darstellung ist etwas einseitig

    Dullahan | 15:30

  4. Wird hier ein "Narrative" vorbereitet?

    Sinnfrei | 15:28

  5. Re: Diese ganzen angeblichen F2P sollte man...

    DetlevCM | 15:26


  1. 12:53

  2. 12:14

  3. 11:07

  4. 09:01

  5. 18:40

  6. 17:30

  7. 17:13

  8. 16:03


  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