Schwerpunkte

Software-Test

Mit statischer Code-Analyse zum Erfolg

18. August 2020, 09:00 Uhr   |  Von Klaus Lambertz

Mit statischer Code-Analyse zum Erfolg
© Shutterstock

IoT-Geräte geraten vermehrt in den Fokus von Cyber-Kriminellen. Der klassische IT-Ansatz, Schwachstellen erst im Feld zu beseitigen, kann fatal sein. Besser ist, den Fokus auf die Qualität und Sicherheit des Codes zu legen – bereits zu Beginn der Entwicklung.

Im medizinischen Imaging-Bereich laufen 83 Prozent aller Geräte mit Betriebssystemen, für die es keinen Support gibt. Gar 98 Prozent des Datenverkehrs von IoT-Geräten sind nicht verschlüsselt und 57 Prozent aller IoT-Geräte sind anfällig für schwerwiegende und mittelschwere Angriffe. Das ist das Ergebnis einer Analyse von 1,2 Millionen IoT-Geräten in IT-Abteilungen und Organisationen des Gesundheitswesens in den USA der Forschungsgruppe »Unit 42« von Palo Alto Networks. Ein Grund für die hohen Prozentsätze: Über die Hälfte der Geräte basiert noch immer auf Windows 7. Für Angreifer ist das ein gedeckter Tisch – und für Embedded-Entwickler herausfordernd. Sie können sich beim Entwickeln neuer Anwendungen und Systeme nicht darauf verlassen, dass die Best Practices bei Fragen der Sicherheit umfassend erfüllt sind. Somit müssen sie selbst ihre Systeme so sicher wie möglich machen.

Viele Angriffsvektoren in der IT und bei Embedded-Systemen machen sich klassische Schwachstellen wie Buffer Overruns oder Null-Pointer-Dereferenzierungen zunutze. Hierbei handelt es sich fast immer um Programmierfehler, die zwar schnell passieren, jedoch nur schwer aufzudecken sind.

Letztlich liegt das an strukturellen Schwächen der hauptsächlich eingesetzten Sprachen C und C++. Beim Entwickeln von Embedded-Software sind C und C++ immer noch die populärsten Programmiersprachen. Jedoch ist die Definition, woraus ein zulässiges C-Programm besteht, der Flexibilität zuliebe sehr liberal ausgelegt – die Compiler können viele Fehler nicht aufdecken. Zudem existieren zahlreiche Mehrdeutigkeiten, die die Compiler, basierend auf unterschiedlichen Interpretationen des Standards, auflösen müssen.

Updates nicht immer möglich

In der herkömmlichen IT sind es die Anwender gewohnt, dass Fehler fortlaufend mithilfe von Updates behoben werden oder Systeme mit separaten Security-Produkten zu schützen sind. In der Embedded-Welt ist die Situation jedoch eine andere. Zum einen reicht es nicht, zu gegebener Zeit ein Update auszurollen: Ein Buffer Overflow im Herzschrittmacher, unbefugter Fernzugriff auf ein fahrendes Auto oder eine Manipulation von Sensordaten in der Industrie können immense Schäden anrichten. In den letzten Jahren hat sich gezeigt, dass es sich hierbei nicht um Bedrohungen aus einem Science-Fiction-Roman handelt. So gab es etwa Rückrufaktionen bei einer Insulinpumpe und bei einem Herzschrittmacher, da sie Sicherheitslücken aufwiesen, die Angriffe möglich machten. Glücklicherweise wurden die Angriffsvektoren nicht genutzt. Zum anderen sind die Ansätze der traditionellen IT im Embedded-Bereich schlicht nicht praktikabel. Viele Geräte sind mit sehr geringen Übertragungskapazitäten mit dem Internet verbunden.

Um die Messdaten eines Sensors zu übertragen, sind wenige Kilobit pro Sekunde völlig ausreichend. Für umfassende Software-Updates sind die Kapazitäten jedoch zu gering, zumal in einigen der genutzten Funksegmenten regulatorisch festgelegte Zeitfenster zu berücksichtigen sind. Außerdem sind die meisten Embedded-Geräte weit verteilt oder mobil eingesetzt. Ebenso sind Firewalls zum Schutz vor unerwünschten Aktivitäten lediglich in sehr begrenztem Maße sinnvoll einsetzbar. Aus Kostengründen limitierte Hardware-Ressourcen erschweren Updates zusätzlich.

Ergänzung zum Softwaretest

Ziel muss also sein, die Systeme bereits mit einem Höchstmaß an Sicherheit zu entwickeln und Fehler bereits so früh wie möglich innerhalb des Software Development Lifecycles (SDLC) aufzuspüren. Ein Standardverfahren dazu ist der Softwaretest. Dynamische Tests sind unverzichtbar, um funktionale und strukturelle Schwierigkeiten eines Systems zu erkennen. Sie haben jedoch eine Einschränkung: Ein Test kann Fehler lediglich erkennen, wenn ein Testfall den fehlerhaften Code durchläuft, zu einer Fehlermeldung führt und diese wiederum ein von der Erwartung abweichendes Ergebnis erzeugt. Am Beispiel eines Buffer Overruns wird die Schwierigkeit deutlich. Ein einfacher Buffer Overrun in C könnte so aussehen:

char buf[10];

buf[10] = ‘a‘;


Hier wird Speicher für ein Array von zehn Zeichen allokiert, der Zugriff erfolgt auf den elften Index des Arrays. Das Ergebnis des Zugriffs ist nicht definiert. In den meisten Fällen wird das Zeichen »a« in irgendeinen Speicherbereich neben dem Puffer geschrieben und der vorherige Inhalt dabei überschrieben. Solche Fehler lassen sich recht einfach aufspüren, denn der Index-Wert ist in dem Beispiel hart codiert. In der Praxis jedoch stammen die Indizes meist aus unterschiedlichen Quellen wie Anwendereingaben, Dateien, Signalen von Sensoren und so weiter. Ob etwa ein Buffer Overrun im folgenden Beispiel auftritt, hängt von der Länge des Strings ab, auf den die Variable verweist:

int i;
char * s;
s = (char *) malloc(100);

i=0;
while (s[i] != ‘\0‘)
i++;

Ob sich Fehler wie ein Buffer Overrun beim dynamischen Softwaretest zeigen, hängt von zwei Faktoren ab: Löst der Testfall den Buffer Overrun als Zustandsverletzung aus? Falls ja: Verändert die Zustandsverletzung das erwartete Testergebnis? Der erste Punkt lässt sich mit sehr intensivem Testen erfassen, bei dem die Entwickler ebenso die Auswirkungen von fehlerhaftem Input und ungültigen Werten ausgiebig untersuchen. Bei der zweiten Bedingung wird es schwieriger. Testwerkzeuge sind nicht dazu gedacht, Zustandsverletzungen direkt zu entdecken. Unter Umständen erkennt das Testteam die einfachsten Buffer Overruns nicht, solange das Überschreiben des Puffers nicht zu einer falschen Ausgabe oder einem Programmabbruch führt.

Seite 1 von 2

1. Mit statischer Code-Analyse zum Erfolg
2. Schwachstellen erkennen

Auf Facebook teilen Auf Twitter teilen Auf Linkedin teilen Via Mail teilen

Das könnte Sie auch interessieren

Verwandte Artikel

Verifysoft Technology