LLVM libFuzzer: Eigenes Fuzzing findet Fehler in Clang und clang-format

Das LLVM Project hat am 9. April 2015 libFuzzer als eigenes Fuzzing-Werkzeug vorgestellt. Die Bibliothek arbeitet im Prozess der getesteten Anwendung und erzeugt Eingaben anhand der erreichten Codebereiche. LLVM setzte das Verfahren zunächst für Clang und clang-format ein.

Bei clang-format fanden die Entwickler mit zufällig erzeugten Eingaben bereits mehr als 20 Fehler. Für Clang kam zusätzlich ein token-bewusster Fuzzer zum Einsatz, der syntaktisch gezieltere C++-Fragmente erzeugt. Die Tests liefen mit AddressSanitizer, wodurch auch Fehler sichtbar wurden, die sich mit einfachen Zufallsdaten nicht zuverlässig auslösen ließen.

LibFuzzer als laufender Test im Buildprozess

LLVM betrieb einen öffentlichen Build-Bot, der clang-fuzzer und clang-format-fuzzer rund um die Uhr ausführte. Das Testkorpus wächst dadurch mit jeder gefundenen Eingabe weiter. Die Entwickler beschrieben Fuzzing als Ergänzung zu Unit-, Integrations- und Funktionstests, nicht als Ersatz für diese Verfahren.

Die Bibliothek ließ sich auch außerhalb von LLVM einsetzen. Im offiziellen LibFuzzer-Handbuch werden die Grundidee und die benötigte Testfunktion dokumentiert. Für Spiele- und Middleware-Teams ist der Ansatz besonders bei Parsern, Dateiformaten und anderen Schnittstellen mit nicht vertrauenswürdigen Eingaben interessant. Ein älterer Beitrag beschreibt bereits LLVM und Clang im Windows-Umfeld.

Weitere News

Weitere News

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein