Was macht Software sicher? Was man von der Luftfahrt für

Was macht Software sicher? Was man von der
Luftfahrt für Bildverarbeitungssysteme lernen
kann
Dr. Thomas Münsterer, Airbus Defence and Space, Friedrichshafen
Die Softwareentwicklung für Anwendungen in Luftfahrzeugen unterliegt seit vielen Jahren strengen
Entwicklungsstandards, die die Sicherheit und Zuverlässigkeit von Software in Flugzeugen und
Hubschraubern sicherstellen sollen. Der aktuell gültige Entwicklungsstandard für die Zulassung von
Software in Luftfahrzeugen ist die RTCA/DO-178C. Diese definiert je nach Auswirkung von
auftretenden Fehlern unterschiedliche Sicherheitsklassen, sogenannte Design Assurance Level (DAL),
die anzuwenden und für eine Luftfahrtzulassung zu erfüllen sind. . Beispiele für unterschiedlich
sicherheitskritische Software sind dabei aktive Fluglageregelungen und Autopilotenfunktionen und
andererseits Pilotenassistenzsysteme. Während dieser rigide Prozess für die Luftfahrt fraglos
anzuwenden ist, stellt sich die Frage, was von der Erfahrungen der Luftfahrt effektiv auch in anderen
Bereichen angewandt werden kann, in denen komplexe Algorithmen in Software realisiert werden.
Das Verfahren in der Luftfahrt erkennt klar eine Analyse der möglichen Sicherheitsrisiken der
jeweiligen Softwareanwendung. Diese Analyse betrachtet neben der detaillierten Anwendung auch
mögliche Fehlerbäume. Sicherheit wird dabei immer durch das schwächste Glied in der Prozesskette
bestimmt. Es macht wenig Sinn die in Software umgesetzten Algorithmen extrem sicher zu machen,
wenn z.B. die Hardware oder das Betriebssystem sicherheitskritische Schwächen haben. Ist eine
bestimmte notwendige Sicherheitsklasse festgelegt beginnt der eigentliche Entwicklungsprozess.
Dabei ist vor allem der Bereich der lückenlosen Dokumentation der Algorithmen und der SoftwareEntwicklung zu nennen. Sicherheitskritische aber auch hoch zuverlässige Software muss bestimmte,
wohl definierte Anforderungen, sogenannte Requirements erfüllen. Diese müssen vor dem Design
und der Realisierung der Software aufgestellt und dokumentiert werden. Gegen diese Requirements
wird die realisierte Software dann abgenommen. Das heißt, dass die korrekte Funktion jedes
Requirements durch einen Prüffall nachgewiesen werden muss. Diese Abnahme der SW geschieht
auf allen Ebenen der SW und selbstverständlich auf der operationellen HW.
In der Luftfahrt haben sich aber auch bestimmte andere Praktiken bewährt, z.B. die Trennung der
unterschiedlichen Ebenen der Software, wie z.B. Betriebssystem, Board Support Package, Low Level
Softaware, Applikationssoftware usw. Dies soll zum Beispiel sicherstellen, dass nur wohl definierte
und getestete Hardwarezugriffe und Hardwarefunktionen genutzt werden. Ein anderes Prinzip ist die
fachliche Trennung zwischen Algorithmenentwicklung und Softwareumsetzung. Algorithmen werden
zunächst in eigenen Entwicklungs- und Testumgebungen entwickelt und lückenlos dokumentiert.
Diese Dokumentation dient wiederum als Basis für die Umsetzung in die eigentliche Software. Ein
Nachweis hoher Software Sicherheit, d.h. Zuverlässigkeit kann in Einzelfällen auch über den
Nachweis der Fehlerfreiheit über eine bestimmte Anwendungszeit in einer Vielzeit von Systemen
stattfinden. Dies setzt allerdings eine lückenlose Dokumentation der Anwendungszeiten und eine
rigides Fehlermanagement voraus. Auch die Anwendung von Design und Coding-Regeln hat sich
bewährt. Zum Beispiel ist die Nutzung von dynamischer Speicherallokierung für
Luftfahrtanwendungen grundsätzlich untersagt. Ebenfalls vermieden werden sollte das
Vorhandensein von ungenutzten Codefragmenten. Diese und auch die Abdeckung von allen
Codeteilen lässt sich mit Toolunterstützung verifizieren.
© Dr. Thomas Münsterer, Airbus Defence and Space, Friedrichshafen
Kurzfassung für 56. Heidelberger Bildverarbeitungsforum am 07.10.2014