Statische Analyse

Sicherheitskritische Software bezahlbar

21. Juni 2016, 9:52 Uhr | Von Dr. Paul Anderson
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 1

Normen fürs Funktionale

Die funktionale Sicherheit muss ganzheitlich betrachtet werden. Die Sicherheit einer Komponente oder eines Subsystems wird also bezogen auf das gesamte System, einschließlich Hard- und Software, evaluiert. Dies ist ein durchaus wichtiger Aspekt vor dem Hintergrund der Tatsache, dass man die Software einst als unabhängigen oder gar unbedeutenden Bestandteil eines Systems ansah. Der zu trauriger Berühmtheit gelangte Fall Therac-25 [7] machte auf fatale Weise deutlich, dass diese Betrachtungsweise falsch war. Der Aerospace-Sektor wurde mit Normen wie z.B. DO-178 zum Vorreiter, was sowohl der Komplexität der verwendeten Software als auch der Sicherheitsrelevanz der entwickelten Systeme zuzuschreiben ist. Die Indus­trie, der Transportsektor, die Schienenverkehrstechnik und die Automobilbranche folgten im Lauf der Jahre mit Normen, die meist von der EN/ISO 61508 abgeleitet wurden.

Die verstärkte Fokussierung auf die funktionale Sicherheit hat außerdem die positive Konsequenz, dass man vermehrt die Auswirkungen der Software-Steuerung auf das gesamte System im Blick behält und dem Thema Risikoanalyse und -management auf der System­ebene mehr Bedeutung beimisst. Die Konzentration auf reproduzierbare, dokumentierte Abläufe und rigorose Tests hat zu einer gravierenden Verbesserung der Software-Sicherheit beigetragen. Dennoch sind nach wie vor Verbesserungen nötig, wie das Problem mit den ungewollt beschleunigenden Fahrzeugen von Toyota zeigt.

Codierungsstandards und mehr

Normen der funktionalen Sicherheit verlangen nicht gezielt nach automatisierten Tools. Bei der effizienten Einhaltung der Zertifizierungs-Anforderungen bieten Tools jedoch hervorragenden Nutzen. Zum Beispiel gibt die Norm ISO 26262 (Funktionale Sicherheit für Straßenfahrzeuge) Design- und Implementierungsprinzipien und Codierrichtlinien für Software-Module vor. Besonders nützlich sind Statische-Analyse-Tools bei der Durchsetzung von Codierungsstandards wie MISRA C.

So sinnvoll die Hilfestellung bei Codierungsstandards auch ist, stellt sie doch nur einen Bruchteil der Fähigkeiten eines Produkts wie CodeSonar von GrammaTech dar. Zertifizierungs-Standards verlangen nach Robustheit, Korrektheit und Folgerichtigkeit. Dies wiederum bedingt, dass beim Design, der Codierung und dem Testen eine über die Codierungs-Standards hinausgehende Stringenz angewendet werden muss. Statische-Analyse-Tools können Fehler im Quellcode vor und nach dessen Eingliederung in das Projekt entdecken. Ebenso können die Tools Fehler detektieren, die bei Tests schwierig zu finden und nur mit hohem Kostenaufwand zu beseitigen sind. Außerdem lässt sich auf manuellem Weg nur schwierig gewährleisten, dass Komplexität vermieden und die Pflegbarkeit verbessert wird. Tools wie GrammaTechs Code Browser CodeSurfer aber leisten äußerst wirksame Hilfestellung beim Management der Codestruktur.

Um Software zu zertifizieren, sind Nachweise nötig, dass die Implementierung gemäß dem jeweiligen Standard erfolgt ist. Häufig werden diese Nachweise manuell generiert, doch die Automatisierung verringert den daraus resultierenden Arbeitsaufwand. Damit die Resultate eines automatisierten Tools als Zertifizierungsnachweis akzeptiert werden können, muss man diesen Ergebnissen vertrauen. Zu diesem Zweck können die Tool-Anbieter auch ihre eigenen Produkte zertifizieren lassen. Angesichts dieser Notwendigkeit wurde CodeSonar unabhängig gemäß ISO 26262, IEC 61508 und EN 50128 zertifiziert. Entwickler können die Tools somit im Vertrauen darauf verwenden, dass die produzierten Resultate für die Zertifizierungsstellen akzeptabel sind. Die Verwendung nicht qualifizierter Tools hingegen ist schlicht zu riskant, denn sie macht weitere Tests und Dokumentationen erforderlich und lässt die Zertifizierungskosten ansteigen.

Tools steigern Produktivität

Statische-Analyse-Tools ergeben greifbare Produktivitätssteigerungen für Software Teams, die eine Software-Sicherheits-Zertifizierung anstreben. Es hat entscheidende Vorteile, wenn man beginnend mit den ersten Entwicklungsphasen ein qualifiziertes Tool in den Software-Entwicklungsprozess einbezieht:

Die Codeabdeckung ist nicht alles:
Viele Sicherheitsnormen verlangen nach einem hohen Grad an Codeabdeckung, also dem Nachweis, dass die meisten oder möglichst alle Anweisungen und Bedingungen geprüft wurden. Dies ist zwar sehr gründlich, aber auch sehr teuer und muss in jeder größeren Entwicklungsphase wiederholt werden (Modul-, Integrations- und Systemtest). Der Abdeckungsgrad wird davon bestimmt, wie kritisch die jeweilige Software ist. So kann weniger kritische Software (z.B. für das Bordunterhaltungssystem in einem Flugzeug) völlig ohne formelle Testabdeckung auskommen. Die Codeabdeckung ist eine Maßzahl, an der sich die Software-Qualität beurteilen lässt, doch es gibt Fälle, in denen hiermit nicht alles erfasst werden kann.

Fehler, die durch die Codeabdeckungs-Tests nicht erkannt werden: Nebenläufigkeitsfehler und Sicherheitslücken sind zwei wichtige Beispiele für Defekte, die auch von rigorosen Codeabdeckungs-Tests übersehen werden können. Die Nebenläufigkeit erweist sich häufig als schwierig zu programmieren und kann Fehler wie z.B. Race Conditions generieren, die so lange unentdeckt bleiben, bis während des Betriebs eine ganz bestimmte Bedingung vorliegt. Sicherheitslücken manifestieren sich als Fehler im Code. Die Bedingungen, die den Fehler hervorrufen, resultieren dagegen oft aus Eingaben, die während der Tests nicht berücksichtigt wurden.

Die statische Analyse kann derartige Fehler frühzeitig aufdecken und dadurch verhindern, dass sie in einer späten Entwicklungsphase zum Pro­blem werden.

Frühzeitige Defekterkennung:
Rigorose Tests können die meisten Defekte erkennen; sie sind aber teuer und äußerst zeitaufwändig. Das Erkennen und Vermeiden dieser Fehler gleich beim Schreiben des Codes ist bedeutend billiger als in einer späteren Entwicklungsphase. Die Kosten der Fehlerdetektierung nehmen mit der Zeit exponentiell zu. Die statische Analyse ist in der Lage, Bugs im Code als Bestandteil der Entwicklungsumgebung des Entwicklers sofort während des Programmierens zu entdecken, wodurch die fehlerbedingten Kosten in späteren Phasen drastisch gesenkt werden.

Analyse von zugelieferter Software:
Dass bei der Entwicklung von Embedded Software auf kommerzielle und Open-Source Software zurückgegriffen wird, ist ein Fakt. Einige Sicherheitsstandards stufen jede Software, die nicht gemäß dem jeweiligen Standard entwickelt wurde, als SOUP (Software Of Unknown Pedigree), also als Software unbekannter Herkunft ein, die vor der Einbindung in das System genau untersucht werden muss. Statische-Analyse-Tools können zugelieferte Software und Binarys analysieren, um Defekte und Sicherheitslücken zu entdecken, die sich mit andersartigen Tests nicht würden detektieren lassen – sondern nur durch Einbinden und Ausführen, was eine teure Option ist.

Beschleunigte Zertifizierungsnachweise:
Statische Analysen – ebenso wie viele weitere Test- und Lifecycle Management Tools – sorgen für eine automatisierte Dokumentation zur Unterstützung von Tests, Codierungsstandards und Qualitäts- bzw. Robustheitsnachweisen. Ein Großteil der Arbeitszeit bei der Sicherheits-Zertifizierung geht auf das Konto der Dokumentation und des Erbringens von Nachweisen. Die Automatisierung und speziell die statische Analyse reduzieren diesen Aufwand deutlich.

passend zum Thema


  1. Sicherheitskritische Software bezahlbar
  2. Normen fürs Funktionale
  3. Statische Analyse zahlt sich aus

Lesen Sie mehr zum Thema


Das könnte Sie auch interessieren

Jetzt kostenfreie Newsletter bestellen!

Weitere Artikel zu GrammaTEch

Weitere Artikel zu Entwicklungswerkzeuge