Login


 
Newsletter
Werbung

Fr, 10. April 2015, 15:28

Software::Entwicklung

LLVM stellt LibFuzzer vor

Das LLVM-Projekt hat eine Bibliothek vorgestellt, die durch gezielt problematische Eingaben dabei helfen soll, Fehler in Programmen aufzudecken. Sie ist nicht nur für den C/C++-Compiler Clang, sondern auch für viele andere Programme von Interesse.

llvm.org

Fuzzing oder Fuzz Testing wird nach Angaben des LLVM-Projektes immer populärer unter Entwicklern. Fuzzer konfrontieren Programme mit Eingaben, auf die sie möglicherweise nicht vorbereitet sind, worauf sie fehlerhaft oder mit einem Absturz reagieren. Im LLVM-Projekt wurde im C/C++-Compiler Clang der sogenannte AddressSanitizer implementiert, der beispielsweise von Google regelmäßig genutzt wird, um Fehler in Chrome zu finden. Aber auch Clang selbst wird mit Fuzzing sehr intensiv getestet, unter anderem mit Csmith und in neuerer Zeit auch mit AFL.

Ein weiteres Fuzzing-Werkzeug ist jetzt bei LLVM selbst mit dem libFuzzer entstanden. Die Bibliothek kann zu dem zu testenden Programm gelinkt werden und generiert ihre Testeingaben mit Hilfe der Instrumentation der Sanitizer Coverage von Clang.

Das Projekt selbst hat zwei Fuzzing-Werkzeuge auf Basis dieser Bibliothek erstellt, die beide zum Testen von Clang dienen. clang-format-fuzzer testet Clang-format, ein Programm, das hauptsächlich eine lexikalische Analyse durchführt, also Eingabezeichen in Token zerlegt, und daher gut mit Zufallszeichenfolgen getestet werden kann. Dabei wurden bis jetzt über 20 Fehler entdeckt. komplizierter ist clang-fuzzer. Dieser füttert clang mit gültigen Tokens, um effektiv den Parser zu testen. Auch hier wurden prompt Fehler gefunden, darunter auch solche, die zuvor bereits von AFL entdeckt worden waren.

Da Fuzzing besonders effektiv ist, wenn es über längere Zeiträume läuft, hat das Projekt beide Fuzzer in seine Build-Infrastruktur aufgenommen, wo sie pausenlos laufen. Jetzt gibt es Überlegungen, die Tests auf weitere LLVM-Komponenten auszudehnen. Doch auch andere Projekte können LibFuzzer einsetzen. So hat das LLVM-Team LibFuzzer auf OpenSSL losgelassen und binnen einer Minute den Pufferüberlauf gefunden, der die Heartbleed-Sicherheitslücke auslöste. Auch Fehler in PCRE2, glibc und MUSL wurden entdeckt. Wie die Erfahrung zeigt, wäre es für die meisten Projekte sinnvoll, einen oder mehrere Fuzzer intensiv zu nutzen.

Werbung
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung