Rück-Sicht 45/17

Im USB-Subsystem des Linux-Kernel wurden zahlreiche Schwachstellen entdeckt. Interessant ist wie.

Gefunden wurden die rund 70 Fehler – Linux-Magazin Online berichtet davon – nämlich quasi mit Hilfe des Zufalls.

Überall herrschet der Zufall. Laß deine Angel nur hängen; wo du’s am wenigsten glaubst, sitzt im Strudel der Fisch. [1]

Genauer gesagt, mit Hilfe eines Fuzzers. Das ist ein Tool, das kleine zufällige Fehler in Eingabedaten einbaut und dann damit die zu testende Software so lange füttert, bis sie entweder abstürzt oder sonst einen erkennbaren Fehler zeigt. Die zufälligen Mutationen erzeugen auch solche Testdaten, an die der Entwickler nicht gedacht hat und die er nicht mit anderen Testszenarien abdeckte.

Die Strategie ist nicht neu, erstmals wurde sie bereits 1988 von Barton Miller beschrieben, aber sie wurde seitdem kontinuierlich erweitert und verfeinert. Heute ist es eine sehr effektive Technik, mit der bereits viele Schwachstellen gefunden wurden. Nicht nur im Kernel, sondern auch in Anwendungssoftware. So konnte beispielsweise im Nachhinein gezeigt werden, dass man auch die verheerende Heartbleed-Lücke in OpenSSL so hätte finden können. Ein Allheilmittel ist Fuzzing allerdings dennoch nicht. Es kann nur bestimmte Fehler finden, vorzugsweise Speicherzugriffsfehler und Verwandtes. Und es kann nur erfolgreich sein, wenn sich automatisch erkennen lässt, dass es überhaupt zu einem Fehler gekommen ist. Das ist beispielsweise bei Logikfehlern häufig nicht der Fall.

Im Fall des USB-Subsystems kam ein Fuzzing-Tool namens Syzkaller zum Einsatz, das Dmitry Vyukov von Google geschaffen hat. Es erzeugt nicht allein zufällige Eingabedaten für Syscalls, sondern greift zu raffinierteren Techniken. So arbeitet es einerseits mit instrumentierten Builds des zu testenden Kernels, die reportieren können, welche Codeteile an der Verarbeitung der Eingaben beteiligt waren. Das Fuzzing-Tool versucht damit, solche Eingabedaten zu erzeugen, die besonders große Bereiche des zu testenden Codes abdecken, indem es sich diejenigen Versuche merkt und aufhebt, die neue Codeteile einbezogen haben. Andererseits arbeitet Syzkaller auch mit Templates, also Mustern für die Eingabedaten anstelle blanker Zufallseingaben.

Auf diese Weise fand Syzkaller zahlreiche  Use-after-free-Lücken,  Out-of-Bounds-Fehler, ungeprüfte Typen, unsauber implementierte Timeouts sowie Null-Pointer-Dereference-Probleme. Etliche dieser Fehler waren für Hackerangriffe ausnutzbar, bedrohten also die Sicherheit. Inzwischen arbeiten Security-Experten an ihrer Behebung.

Rück-Sichts-voll

Jens-Christoph Brendel

[1] Ovid: aus Liebeskunst 3, 425

E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben