Home / Allgemein / IoT braucht sichere Software

IoT braucht sichere Software

Mit dem Internet of Things (IoT) entstehen nicht nur viele neue Geschäftsmodelle, sondern auch unzählige neue Sicherheitslücken. Zumindest, wenn die Hersteller und Anwender die IoT-Sicherheit mit denselben Methoden sicherstellen wollen, wie es in der IT heute üblich ist. Nur mit besserer Software-Qualität und sicherem Code kann IoT eine Erfolgsgeschichte werden.

Von Jan Schulze, freier Journalist

Kaum eine Woche vergeht, ohne dass Unternehmen Opfer von Cyber-Kriminalität werden. Allen Anstrengungen, Schutztechnologien und organisatorischen Maßnahmen zum Trotz haben die Hacker meist die Nase vorne. Mit dem Internet of Things bekommt dieses Problem eine neue Dimension: Es ist schon in der heutigen IT nur mit massivem Aufwand möglich, den sicheren und rechtskonformen Betrieb zu gewährleisten. Nun wächst die Zahl der Clients ins fast Unermessliche. Im Laufe dieses Jahres sollen laut den Marktforschern von Gartner 8,4 Milliarden IoT-Geräte in Betrieb gehen – ein Zuwachs von fast 30 Prozent im Vergleich zum Vorjahr. Und jedes IoT-Gerät ist zunächst einmal ein Client, der über Standard-Internettechnologien mit anderen Geräten kommuniziert. Jedes IoT-Gerät ist damit aber auch ein potenzielles Angriffsziel.

Die meisten Angriffe in der IT-Welt versuchen, Software-Fehler auszunutzen. Buffer Overflows werden besonders häufig genutzt, um Schadcode einzuschleusen und auszuführen. Besonders Sprachen der C-Familie wie C++ oder C# sind konzeptbedingt anfällig für dieses Problem. Seitens der Prozessoren sind es vor allem die Architekturen der x86-Gruppe und ARM. Aber auch andere Basistechnologien wie Java sind über Programmierfehler angreifbar. Zudem muss davon ausgegangen werden, dass ab einer gewissen Komplexität jedes Programm auch ein Minimum Fehler enthält. Zumindest ist es heute nicht mit einem wirtschaftlich sinnvollen Aufwand möglich, absolute Fehlerfreiheit bei Software-Projekten zu gewährleisten. So betont zum Beispiel die Norm IEC 62304:2015 für Medizingeräte-Software, dass es keine bekannte Methode gibt, um die Fehlerfreiheit einer Software zu 100 Prozent zu garantieren.

IoT-Geräte müssen sicher sein

Bei herkömmlicher Software haben sich die Anwender schon daran gewöhnt, dass fehlerhafter Code mit Buffer Overruns oder Null Pointer Dereferences ausgeliefert wird. Immerhin lebt ein ganzes Marktsegment der IT-Branche gut davon, diese Schwachstellen zu überdecken, bis ein Update vorliegt. Beim Internet der Dinge wird das jedoch nicht funktionieren. IoT-Geräte mittels Firewalls oder Malware-Schutz absichern zu wollen, ist schlicht nicht möglich. Die Anzahl der Geräte wird mittelfristig zu groß sein. Zudem sind viele IoT-Devices schmalbandig mit dem Internet verbunden, weltweit verteilt und mobil. Das Verteilen von Updates, um Sicherheitslücken zu schließen, dürfte logistisch kaum in der erforderlichen Geschwindigkeit möglich sein.

Statische Analyse als Teil der Entwicklung

Paul Anderson, Vice President of Engineering des amerikanischen Anbieters GrammaTech

Die Alternative dazu: Security by Design. Dabei spielt neben zahlreichen anderen Faktoren wie Architektur oder gewählte Plattform die Software-Entwicklung eine wichtige Rolle. Innerhalb des gesamten Software Development Lifecycles (SDLC) muss die Sicherheit höchste Priorität genießen, um die Gefahr von späteren Sicherheitslücken so gering wie möglich zu halten. Das beginnt bereits bei der Definition der Anforderungen, die an die Software gestellt werden. Bereits hier sollten sicherheitsspezifische Notwendigkeiten festgelegt und eine Risikoanalyse vorgenommen werden. Beim Design der Software ist es sinnvoll, mögliche Missbrauchsfälle zu berücksichtigen und entsprechende Testpläne zu erstellen. Während der eigentlichen Entwicklung schließlich ist es wichtig, dass der Code durch statische Analyse fortlaufend auf Fehler und mögliche Probleme geprüft wird. „Statische Analyse überprüft alle Möglichkeiten, die bei der Ausführung eines Programmcodes auftreten können“, so Paul Anderson, Vice President of Engineering des amerikanischen Anbieters GrammaTech. „Dynamische Testwerkzeuge produzieren nur über das Ausführen des Programms im Rahmen konstruierter Testfälle aussagefähige Ergebnisse. Diese Testfälle decken unter Umständen nicht alle Zustände ab, bei denen sich Fehler zeigen könnten. Statische Analysetools analysieren Quellcode, Bytecode und ausführbaren Binärcode.“ Der Code wird also bei der statischen Analyse nicht ausgeführt. Die Analyse erfolgt, indem Schlussfolgerungen über das potenzielle Verhalten des Codes gezogen werden. Damit können auch potenzielle Error Conditions erkannt werden, die durch normale Testfälle zur Laufzeit nicht auftreten. „Anders als die dynamische Analyse kann die statische Analyse einen Codebestand sehr effizient auswerten“, erläutert Anderson. „Statische Analysetools untersuchen auch Codepfade, die mit anderen Methoden ungeprüft bleiben, und können Verarbeitungs- und Datenpfade durch den Code verfolgen.“

Bei der statischen Analyse wird der Code nicht ausgeführt, sondern alle möglichen Zustände in einem Modell überprüft. Quelle: GrammaTech

Für den Erfolg entscheidend ist, dass Tests und Analysen ein integraler Bestandteil des Entwicklungsprozesses sind. Fehler, die sich erst im fertigen Release zeigen, können nur mit großem Aufwand beseitigt werden. Zudem sollte ein Review-Prozess implementiert werden, den alle Veränderungen des Codes durchlaufen müssen. Doch bei aller organisatorischer und technologischer Unterstützung: Tools können dem Entwickler nur Hinweise liefern, wo mögliche Fehler liegen. Ohne manuelle Prüfung und Tests durch erfahrene Programmierer wird es keine sichere Software geben, die den Anforderungen eines Internet of Everything gerecht werden.

 

 

Share

About Christoph Witte

Christoph Witte arbeitet als IT-Publizist und Kommunikationsberater in München. Seit langem ist er fester Bestandteil der IT-, TK und Online-Community in Deutschland.

Leave a Reply