Internet der Dinge Sicherheitslücken im vernetzten Haushalt schließen
Auto, Kühlschrank, Haustechnik – viele Alltagsgegenstände werden in Zukunft online sein. Das eröffnet zahlreiche neue Angriffsziele. So wollen Bochumer Forscher uns schützen.
Mit manipulierten Abgaswerten von Dieselfahrzeugen hat Volkswagen monatelang Schlagzeilen gemacht. Emissionstests in den Vereinigten Staaten deckten den Skandal auf. Allerdings muss man keine Schadstoffe messen, um festzustellen, dass es bei dem Autohersteller nicht mit rechten Dingen zugeht. Ein IT-Spezialist aus Hamburg und IT-Sicherheitsexperten aus Bochum analysierten die Software für die Motorsteuerung und konnten so genau nachvollziehen, wie der Konzern bei seinem Betrug vorgegangen ist.
Dafür hatten sie noch nicht einmal den Original-Quellcode zur Verfügung, da dieser ein Betriebsgeheimnis des Herstellers ist. Stattdessen lag die Software als Binärcode aus Nullen und Einsen vor – ein Format, das ein Prozessor direkt verwerten kann, aber für Menschen nicht lesbar ist.
Wie man in solch einem Binärcode Auffälligkeiten findet, weiß Prof. Dr. Thorsten Holz vom RUB-Lehrstuhl für Systemsicherheit. Mit seinem Team entwickelt er Methoden für die automatische Analyse von Software. Das Primärziel der Forscher ist dabei nicht, die Betrügereien von Volkswagen oder anderer Konzerne zu enttarnen. Die IT-Experten spüren Schwachstellen in unterschiedlichen Programmen auf, um das Internet der Dinge sicherer zu machen.
Durchschnittlich finden sich in einer gut gepflegten Software ein bis zwei sicherheitskritische Schwachstellen pro 20.000 Zeilen Code.
Immer mehr Gegenstände sind mit dem Internet verbunden; schon bald wird es normal sein, dass nicht nur Drucker, Computer und Telefone online sind, sondern auch Autos, Kühlschränke und vieles mehr. Auf allen vernetzten Geräten läuft Software, die in der Regel Sicherheitslücken aufweist.
„Durchschnittlich finden sich in einer gut gepflegten Software ein bis zwei sicherheitskritische Schwachstellen pro 20.000 Zeilen Code“, sagt Thorsten Holz. Das Betriebssystem Windows besteht beispielsweise aus 40 bis 50 Millionen Zeilen, die demnach Tausende von Sicherheitslücken enthalten müssten. Ein Drucker hat immerhin noch mehrere Hunderttausend Zeilen Code.
Mit dem Internet der Dinge dringt die vernetzte Welt in alle Bereiche des Alltags vor – umso wichtiger wird der Schutz vor Angriffen. Aber woher sollen die Sicherheitslösungen für so viele verschiedene Geräte kommen?
Eine Herausforderung für IT-Experten ist es, dass die Geräte im Internet der Dinge verschiedene Prozessoren beinhalten. Bisherige Sicherheitslösungen funktionieren meist nur für einen bestimmten Typ. Ideal wäre aber ein einziges Tool, das Schwachstellen in vielen verschiedenen Gegenständen aufdeckt, egal welcher Prozessor eingebaut ist. Das Tool sollte dabei nicht auf den Quellcode der Originalsoftware angewiesen sein. Denn die ist häufig Betriebsgeheimnis des Herstellers.
Schwachstellen in Software automatisch erkennen
Für genau solch ein Werkzeug wollen die RUB-Forscher die Basis schaffen. Der Europäische Forschungsrat unterstützt sie dabei im Projekt „Leveraging Binary Analysis to Secure the Internet of Things“, kurz Bastion. Der Clou der Bastion-Methode: Sie braucht keinen Quellcode, sondern nur den Binärcode, der aus jedem Gerät ausgelesen werden kann. Darin soll das Tool automatisch Schwachstellen erkennen, unabhängig davon für welchen Prozessor die Software geschrieben ist.
Geräte benötigen für ihre Aufgaben unterschiedlich komplexe Prozessoren. Elektronische Türschlüssel besitzen zum Beispiel Mikrocontroller, die klein und billig sind und nicht viel Strom verbrauchen. Sie können gerade einmal rund 20 Befehle ausführen, darunter arithmetische Operationen wie Addition und Subtraktion oder Befehle wie „Springe an eine bestimmte Stelle des Codes“.
Intel-Prozessoren in Computern hingegen müssen vor allem schnell sein. Sie sind wesentlich komplexer und verstehen rund 500 Befehle, auch arithmetische Operationen und Sprungbefehle. Sie können aber noch viel mehr. Etwa mit einem einzigen Befehl eine Verschlüsselung ausführen, die eigentlich aus hunderten Einzelschritten besteht.
Unabhängig vom Prozessor
Ein einfacher Mikrocontroller könnte also ein Programm, das auf einem Intel-Prozessor läuft, niemals verstehen. Hinzu kommt, dass die Prozessoren unterschiedliche Sprachen nutzen. Sie arbeiten zwar alle mit dem Binärcode, verarbeiten also Befehle in Form von Nullen und Einsen. Aber ein identischer Befehl – etwa „Addiere zwei Zahlen“ – kann auf einem Mikrocontroller durch eine andere Folge von Nullen und Einsen dargestellt sein als auf einem Intel-Prozessor, obwohl beide das Gleiche meinen.
Damit ihre Sicherheitsanalysen unabhängig vom Prozessor sind, übersetzen die Bochumer Forscher die Binärcodes zunächst in eine Zwischensprache. Ein Additionsbefehl eines Mikrocontrollers sieht in der Zwischensprache dann genauso aus wie ein Additionsbefehl eines Intel-Prozessors.
Das ist Fleißarbeit.
„Das ist Fleißarbeit“, erzählt Holz, denn es gilt, viele verschiedene Instruktionen zu übersetzen. „Unsere Zwischensprache enthält weniger als zwei Dutzend Befehle. Was komplexe Prozessoren in einem einzigen Schritt tun, müssen wir in vielen kleinen Einzelschritten machen.“ Den Verschlüsselungsbefehl eines Intel-Prozessors würden die Wissenschaftler zum Beispiel in eine lange Folge von arithmetischen und logischen Operationen sowie Sprungbefehlen zerlegen.
Ist ein Programm in die Zwischensprache übersetzt, kann Thorsten Holz’ Team es automatisch analysieren, um Schwachstellen aufzudecken. Die Forscher suchen nach Programmierfehlern, über die Angreifer die Software unter ihre Kontrolle bringen können.
Kritisch sind etwa Stellen im Code, an denen eine Variable eigentlich nur eine bestimmte Länge haben darf, aber Angreifer über diese Grenze hinausschreiben können. Oder logische Fehler: Sie können auftreten, wenn das Programm prüft, ob eine Variable einer bestimmten Bedingung entspricht, etwa kleiner, größer oder gleich null ist. Vergisst der Programmierer, eine dieser Bedingungen abzufragen, können Angreifer sich unter Umständen über die Lücke Zugang verschaffen.
Haben die Forscher Programmierfehler aufgespürt, untersuchen sie im nächsten Schritt, ob diese sicherheitskritisch sind. Denn nicht jede Lücke hat Folgen in der Praxis. „Manchmal gibt es zwar Programmierfehler in der Software“, erklärt Thorsten Holz, „aber nicht alle Fehler können von einem Angreifer ausgenutzt werden.“
In ihrer Analyse ermitteln die Forscher, unter welchen Bedingungen eine bestimmte Stelle des Codes aufgerufen wird. Dazu verwenden sie Standardverfahren wie die symbolische Ausführung. Sie füttern das zu untersuchende Programm, etwa eine Taschenrechner-App, mit Variablen statt konkreten Zahlen. Ein Beispiel: Statt fünf und acht bekommt die App als Input die Platzhalter Alpha und Beta. Ein Algorithmus berechnet dann, welche Werte die Variablen annehmen müssen, um einen gewissen Punkt im Programmcode zu erreichen. „Das Ergebnis könnte etwa lauten, dass Alpha zwischen 100 und 500 liegen muss, um an die sicherheitskritische Schwachstelle im Code zu gelangen“, veranschaulicht Holz.
Die Softwareanalyse besteht also aus drei Schritten: übersetzen in die Zwischensprache, aufspüren von Programmierfehlern und testen, unter welchen Bedingungen die Schwachstellen relevant werden.
Sicherheitslücken automatisch schließen
Thorsten Holz möchte aber nicht nur Sicherheitslücken automatisch finden, sondern Nutzerinnen und Nutzer auch vor diesen schützen. Mit seinem Team entwickelt er daher auch Methoden, die sicherheitsrelevante Schwachstellen automatisch schließen. Dazu muss der Code der Originalsoftware verändert werden. Da die Analysen auf Ebene der Zwischensprache erfolgen, fügen die Forscher die neuen Sicherheitslösungen ebenfalls in der Zwischensprache hinzu. Damit der Prozessor diese Instruktionen ausführen kann, muss der Befehl allerdings in seine Binärsprache zurückübersetzt werden.
Beim letzten Übersetzungsschritt hakt es derzeit noch.
„Es ist, als würde man einen deutschen Text ins Englische übersetzen, eine Passage hinzufügen, und dann zurück ins Deutsche übersetzen“, verdeutlicht Holz. „Beim letzten Übersetzungsschritt hakt es derzeit noch. Aber ich bin optimistisch, dass wir das hinbekommen.“
Dass die Methode im Prinzip funktioniert, haben er und seine Kollegen am Beispiel des Internet Explorers bereits gezeigt. 2015 spürten die IT-Experten eine Sicherheitslücke in dem Programm auf, die sie automatisch schließen konnten. „Natürlich haben wir auch den Hersteller kontaktiert und über die Schwachstellen informiert“, erklärt Holz das übliche Vorgehen. „Microsoft hat die Lücken inzwischen mit einem Update beseitigt.“
Machbarkeitsstudie erfolgreich abgeschlossen
Manchmal dauert es allerdings eine Weile, bis Sicherheitslücken auffliegen und Hersteller sie beheben. Genau hier sollen die Methoden helfen, die Thorsten Holz mit seinem Team entwickelt. Sie schützen Anwenderinnen und Anwender auch dann vor Angriffen, wenn Sicherheitslücken noch nicht offiziell geschlossen sind – und zwar egal, ob es sich um einen Internetbrowser, ein Telefon oder einen Kühlschrank handelt.
Derzeit ist das Bochumer Verfahren noch nicht komplett prozessorunabhängig. Aber bis zum Projektende 2020 ist noch jede Menge Zeit, um dieses Ziel zu realisieren. In einer Machbarkeitsstudie haben die Forscher schon gezeigt, wie man prinzipiell Schwachstellen unabhängig von der Prozessor-Architektur in Binärcode finden kann. Außerdem haben sie den Binärcode für drei Prozessortypen namens Intel, ARM und MIPS schon erfolgreich in die Zwischensprache übersetzt. Weitere Typen sollen folgen.