Fehlersuche: LLVM integriert eigenes Fuzzing-Werkzeug
Die Idee, Software immer wieder mit Eingabedaten aufzurufen, die kleine Fehler enthalten, um Fehler aufzufinden, wird Fuzzing genannt. Der Compiler Clang unterstützt dies zum Teil bereits mit dem Address Sanitizer und anderen Werkzeugen. Mit der Bibliothek Libfuzzer vereinfacht das LLVM-Projekt(öffnet im neuen Fenster) nun das Erstellen verschiedenere Fuzzing-Test und nutzt diese bereits selbst erfolgreich.
So hat das Team zwei kleine Werkzeuge erstellt, die auf der Bibliothek aufbauen. Eines sorgt für die zufällige Sortierung von Bytes als Eingaben. Außerdem können aber auch Token, welche ebenfalls zufällig strukturiert werden, als Eingaben genutzt werden. Bei den Tokens handelt es sich um Einträge in einem Korpus, das sprachspezifische Anweisungen enthält, also zum Beispiel Teile von C++-Code.
Damit sind einige Fehler in Clang selbst aufgefunden worden. Um zu demonstrieren, dass Libfuzzer aber auch für andere Software als LLVM-Projekte genutzt werden kann, haben die Entwickler nach Fehlern in PCRE, Glibc sowie Musl gesucht und diese auch gefunden. Wir haben vor einigen Tagen beschrieben, wie der Heartbleed-Bug durch Fuzzing aufgefunden werden kann. Das LLVM-Team konnte den Fehler mit Libfuzzer und den gleichen Grundlagen, wie sie in dem Artikel beschrieben wurden, ebenfalls rekonstruieren(öffnet im neuen Fenster). Letzteres habe weniger als eine Minute gedauert.
Künftig soll das LLVM-Projekt auch von einem öffentlichen Build-Bot(öffnet im neuen Fenster) profitieren, der die Fuzzing-Werkzeuge benutzt. Auch damit sei bereits ein Fehler gefunden worden. Das Projekt ruft wegen dieser positiven Erfahrungen dazu auf, die Bibliothek selbst einzusetzen und damit gefundene Fehler, die wirklich aufregend seien, auch an LLVM zu melden.
- Anzeige Hier geht es zum Handbuch für Softwareentwickler bei Amazon Wenn Sie auf diesen Link klicken und darüber einkaufen, erhält Golem eine kleine Provision. Dies ändert nichts am Preis der Artikel.