Login
Newsletter
Werbung

Fr, 4. März 2016, 14:47

Software::Kernel

Syzkaller: Neuer Fuzz-Tester für den Kernel

Dmitry Vyukov und Google arbeiten seit einigen Monaten an Syzkaller, einem weiteren Fuzz-Tester für den Linux-Kernel. Syzkaller funktioniert etwas anders als Trinity und ist eine willkommene Ergänzung dazu.

Larry Ewing

Fuzzing oder Fuzz Testing ist eine Methode, bei der Programme mit Eingaben konfrontiert werden, auf die sie möglicherweise nicht vorbereitet sind, worauf sie fehlerhaft oder mit einem Absturz reagieren.

Vor rund fünf Jahren hatte Kernel-Hacker Dave Jones ein solches Werkzeug erstmals für den Kernel implementiert. Sein Programm »Trinity« testet seither die Systemaufrufe des Linux-Kernels. Der Anlass für die Entstehung von Trinity waren Anwenderberichte von Abstürzen, die von den Kernel-Entwicklern nicht reproduziert werden konnten. Jones erhoffte sich von dem Werkzeug, bei entsprechend langen Laufzeiten solche Fehler zu finden und letztlich auch ihre Ursache entdecken zu können.

Die Erfolge von Trinity waren anfangs spektakulär. Nicht weniger spektakulär sind die Erfolge, die Syzkaller bisher vorzuweisen hat. Das noch junge Programm von Dmitry Vyukov hat bereits über 150 Fehler im Kernel gefunden. Was sich nach einer großen, Besorgnis erregenden Zahl anhört, ist aber für ein Projekt dieser Größe wenig und entspricht etwa der Zahl der alle zwei Wochen korrigierten Fehler in veröffentlichten Kernel-Versionen.

Was Syzkaller wesentlich von Trinity unterscheidet, ist die Steuerung der Systemaufrufe durch Codeabdeckungsinformationen. Schon Trinity erzeugte keine rein zufälligen Eingaben für die Systemaufrufe, sondern für jeden Aufruf spezifische Eingaben. Bei Trinity werden die Werte und Aufrufe auf das begrenzt, was der Entwickler aufgrund seines Wissens für sinnvoll erachtet. Bei Syzkaller hingegen fließt neben solchem Wissen auch das Ergebnis von Werkzeugen ein, die die Codeabdeckung ermitteln. Das ist möglich, weil der Quellcode des Kernels verfügbar ist und entsprechend instrumentiert werden kann. Das macht das Loslegen mit Syzkaller komplizierter, verspricht aber langfristig bessere Ergebnisse, da so gezielt Code getestet werden kann, der sonst kaum durchlaufen wird. Erfahrungsgemäß schlummern in solchem Code die meisten Fehler.

Hat Syzkaller einen Fehler entdeckt, so kann es ein C-Programm generieren, das den Fehler in möglichst wenigen Schritten zu reproduzieren versucht. Dieses Programm kann noch unnötige Aufrufe enthalten, die ein Entwickler aber erkennen und entfernen kann. Das Programm ist eine gute Ergänzung zu dem dann fälligen Fehlerbericht.

Derzeit ist für Syzkaller ein Kernel-Patch nötig, aber es wird bereits diskutiert, diesen Patch in den Kernel aufzunehmen. Neben dem Patch ist es auch sinnvoll, verschiedene Kernel-Debug-Optionen einzuschalten, wie in diesem Artikel beschrieben. Dadurch werden von Syzkaller ausgelöste Fehler besser erfasst oder früher sichtbar. Eine weitere Einschränkung von Syzkaller ist, dass es sich weitgehend auf die x86_64-Architektur konzentriert. Diese Limitierung liegt am frühen Entwicklungsstand des Werkzeugs und soll bald entfallen.

Werbung
Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung