Fuzzing reloaded: Mit gezielter Manipulation zu mehr Sicherheit im Netz
Sogenannte Fuzzer kommen beim Testen von Software ständig zum Einsatz: Es handelt sich dabei um automatisierte Testwerkzeuge, die Programme mit zufälligen oder speziell erzeugten Eingaben füttern, um so unerwartetes Verhalten, Abstürze oder Sicherheitslücken zu finden. Sie sind vor allem auch bei der Suche nach Fehlern nützlich, die durch eher ungewöhnliche Eingaben entstehen – also Dinge, die bei normalen Tests oft übersehen werden. „Bei Programmen, die sehr klar strukturiert Eingaben verarbeiten oder Dateien einlesen, funktioniert das auch schon ganz gut. Aber Netzwerkprogramme mit Fuzzern zu testen, ist viel komplizierter“, sagt Bars.
Woran liegt das? „Klassische Fuzzer versuchen einen der Gesprächspartner im Netzwerk zu ersetzen, stellen sich dabei aber sehr ungeschickt an: Sie haben kein echtes Verständnis davon, wie sie vorgehen müssen. Sie verstehen weder, wann sie welche Nachrichten senden müssen, noch welche Schlüssel oder Sitzungsdaten gebraucht werden und sie können sich auch nicht an frühere Nachrichten erinnern. Das Gegenüber, also entweder Client oder Server, merkt das früher oder später und bricht die Kommunikation ab, bevor die Nachrichten einen Fehler oder eine Sicherheitslücke aufdecken können“, so der Forscher.
Sein Ansatz ist daher nicht wie bei klassischen Fuzzern einen der Gesprächspartner zu ersetzen, sondern ihn stattdessen so geschickt zu manipulieren, dass er sinnvolle, richtig verschlüsselte, aber eben unerwartete Nachrichten produziert. Dieser Trick nennt sich „fault injection“, dabei werden gezielt Fehler in den Programmablauf des Gespächspartners eingebaut. „Das Beste ist, dass wir damit sowohl Server als auch Clients testen können. Fuzzstruction-Net ist damit der erste Netzwerk-Fuzzer, der das kann. Bisher gibt es solche Fuzzer im Prinzip nur für Server“, sagt Bars.
In Tests zeigte der Prototyp von Fuzztruction-Net beeindruckende Ergebnisse: Im Vergleich zu bisherigen Methoden deckte das neue Verfahren im Schnitt 16 Prozent mehr Programmcode ab – ein wichtiges Maß für Testtiefe – und entdeckte dabei dreimal so viele Fehler wie der bisher beste Netzwerk-Fuzzer. Fuzztruction-Net fand dabei auch Schwachstellen in gut getesteten Programmen wie Nginx, dem OpenSSH-Client und cURL. „Wir haben eine bestimmte Art von Fehlern in den Fokus genommen, sogenannte „Memory Corruption“. Das sind Programmfehler, bei dem ein Programm Daten in einem Speicherbereich verändert, auf den es gar nicht zugreifen sollte. Das kann zu Abstürzen, Datenverlusten und kritischen Sicherheitslücken führen“, so Bars. Insgesamt entdeckte das Forschungsteam 23 neue, auch über das Netzwerk ausnutzbare Sicherheitslücken in verbreiteter Netzwerkinfrastruktur – ein starkes Signal für die Relevanz des neuen Ansatzes.
Selbst beheben können die Fuzzer die Fehler leider noch nicht. Es braucht also weiterhin die Arbeit von Entwickler:innen, die diesen Fehlern dann nachspüren müssen. „Das Wesentliche ist aber, dass die Fehler reproduzierbar sind. Damit haben Entwickler:innen einen klaren Anhaltspunkt, wo das Problem entsteht und können es dann beheben“, erklärt Bars. Nginx hat bereits Interesse an der Verwendung von Fuzzstruction-Net gezeigt. „Unser Prototyp funktioniert gut. Für den dauerhaften Einsatz lässt er sich aber sicher noch optimieren“, so Bars. Der Prototyp steht jetzt schon allen Interessierten open source zur Verfügung.