Softwarebasierte Systeme

Chris Hobbs und Malte Mundt | Inka Krischke,

Risikofaktor 'Design Safe State'

Über sichere Systeme nachzudenken, ohne die Umgebung zu berücksichtigen, in der sie betrieben werden, kann fatale Folgen haben - am Beispiel eines hypothetischen Steuerungssystems für Zugführerstände soll die Balance zwischen Verfügbarkeit und Zuverlässigkeit der Sicherheitskomponente des Systems betrachtet werden.

© QNX

Am 14. September 1993 rutschte der Lufthansa-Flug 2904 in Warschau über das Ende der Landebahn hinaus, weil das System zur Schubumkehr vollkommen spezifikationsgemäß gearbeitet hatte. Die Entwicklungsingenieure von Airbus hatten bestimmte Bedingungen nicht vorhergesehen, die bei einer Landung mit Scherwinden in Bodennähe auftreten können. Bei einem ähnlich gelagerten Vorfall fuhr am 11. Juli 2011 ein U-Bahn-Zug der Victoria Line in London mit offenen Türen ab. Alle Systeme arbeiteten korrekt, doch der Zugführer hatte die Systeme in einer Weise bedient, die die Entwickler nicht vorhergesehen hatten.

Jedes System interagiert auf zweierlei Art und Weise mit seiner Umgebung: Die Umgebung belastet das System mit unvorhergesehenen Anforderungen und das System belastet seine Umgebung mit seiner Reaktion. Dieser Artikel untersucht solche Interaktionen und betrachtet die gegensätzlichen Ziele Zuverlässigkeit und Verfügbarkeit beim Systemdesign.

Der Status „Design Safe“

Verlässlichkeit ist bei einem software­basierten System eine Kombination aus Verfügbarkeit (wie oft das System rechtzeitig auf einen Reiz reagiert) und Zuverlässigkeit (wie oft die Reaktion korrekt ist). Bei manchen Systemen ist Zuverlässigkeit wichtiger als Verfügbarkeit – keine Aktion ist besser als die falsche Aktion –, während bei anderen Systemen Verfügbarkeit wichtiger ist – jede plausible Reaktion ist besser als gar keine Reaktion.

Unabhängig davon, ob für ein gegebenes System Verfügbarkeit oder Zuverlässigkeit wichtiger ist: In gefährlichen Situationen muss das System auf jeden Fall auf definierte Weise agieren – in der Regel also in seinen „Design Safe State“ wechseln. Dies ist ein klar definierter Zustand eines Systems, in den es wechselt, wenn es seine vorgesehenen normalen Funktionen nicht mehr korrekt ausführen kann oder nicht bestätigen kann, dass es dies gerade tut. Für die Sicherheit ist der Design Safe State ergo enorm wichtig. Oft vernachlässigen Entwickler jedoch die Auswirkungen, die ein Wechsel ihres Systems in den Design Safe State auf die weitere Umgebung hat, in der ihr System betrieben wird.

Die meisten komplexen Systeme sind aus integrierten Subsystemen aufgebaut. Dabei entstanden die einzelnen Sub­systeme jeweils ohne tiefere Kenntnis der übergeordneten Systeme, in die sie später integriert werden. Datenbanken, Betriebssysteme, Protokoll-Stacks und ähnliche Komponenten werden nicht im Hinblick auf ein konkretes System entwickelt, sondern sind vielmehr für den Betrieb in Umgebungen ausgelegt, die bestimmten Bedingungen genügen, wie sie in den Sicherheitshandbüchern der Komponenten dokumentiert sind. Solche Komponenten bezeichnet zum Beispiel die Medizingeräte-Norm IEC 62304 als SOUP (Software of Unknown Provenance – Software unbekannter Herkunft); in der ISO 26262 für Automobilsysteme werden sie SEooCs (Safe­ty Elements out of Context – Sicherheitselemente ohne Kontext) genannt. Sogenannte Accidental Systems sind Systeme, deren Entwickler sich nicht über versteckte Abhängigkeiten zwischen Komponenten aus unterschiedlichen Quellen bewusst waren, bei denen diese Abhängigkeiten also unbeabsichtigt (accidentally) entstanden sind.

Das Verhalten eines solchen Gesamtsystems in unvorhergesehenen Situationen lässt sich schwer berechnen, da es von vielen, größtenteils voneinander unabhängigen Komponenten abhängig ist, die in ihren jeweiligen Design Safe State wechseln. Und auch wenn das komplette System reibungslos in seinen Design Safe State wechselt, ist es doch wahrscheinlich Teil eines übergeordneten Systems, das nun zusätzlich belastet wird.

Anzeige

Die Umgebung

Ein System ist eine frei gewählte Gruppierung von Komponenten. Doch was für einen Entwickler ein System ist, kann für den anderen eine Komponente sein. Ein Beispiel: Hersteller A baut Komponenten zu einem System zusammen: ein Doppler-Radar zur Messung der Geschwindigkeit eines Zuges. Für Hersteller B stellt dieses System eine Komponente eines Zugsicherungssystems dar, das den Zug bremst, wenn er ein zulässiges Limit überschreitet.

Trifft nun das Doppler-Radar im Zug auf Bedingungen, für die es nicht ausgelegt ist, wechselt es in seinen Design Safe State und sendet ein Störungssignal an das Zugsicherungssystem. Das Zugsicherungssystem ist so programmiert, dass es mit dieser Situation umgehen kann, und versucht zum Beispiel, auf eine GPS-Quelle umzuschalten und von dieser die nötigen Geschwindigkeitsinformationen zu beziehen. Das Umschalten auf die GPS-Quelle verursacht eine zusätzliche Belastung, weil das System Ausführungspfade durchlaufen muss, die weniger gut erprobt sind.

Wenn es sich bei dem Zugsicherungssystem nun um ein System mit unbe-absichtigten Abhängigkeiten handelt, könnte zum Beispiel das Doppler-Radar intern seinen Zeittakt aus einem GPS-Signal ableiten. Möglicherweise war eine Störung des GPS-Signals Grund für seinen Ausfall. In diesem Fall hilft es also nicht, wenn das Zugsicherungssystem vom Doppler-Radar auf eine GPS-Quelle umschaltet – zwei Ausfälle, die der Systementwickler bei seinen Wahrscheinlichkeitsberechnungen als unabhängig betrachtet hat, sind in Wirklichkeit stark korreliert.

Wenn nun das Zugsicherungssystem ausfällt, wechselt es seinerseits in seinen Design Safe State und veranlasst wahrscheinlich eine Bremsung des Zuges. Dadurch wird der Zug gesichert, doch es entsteht eine zusätzliche Belastung für das Bahnsignalsystem. Bei der Planung des Signalsystems muss zwar eine unvorhergesehene Vollbremsung eines Zugs auf einer Hochgeschwindigkeitsstrecke berücksichtigt worden sein, aber der Umgang mit diesem Ereignis führt wiederum über einen Ausführungspfad, der im Feld nur selten durchlaufen wird.

Weniger Belastung für die Umgebung

Grundsätzlich treten Probleme häufiger auf, wenn ein System eine zusätzliche Belastung für das übergeordnete System erzeugt, in dem es betrieben wird. Das Beispiel der Victoria Line der Londoner U-Bahn zeigt dies exemplarisch: Auf dieser Linie sind in der Regel mehr Züge unterwegs, als Sta-tionen vorhanden sind. So könnte der Design Safe State jedes einzelnen Zugs zum Beispiel ein Halt an der nächsten Station sein – doch systemweit ist dieser Zustand nicht realisierbar, weil nicht genügend Stationen vorhanden sind.

Soll das Verhalten eines Systems auf seine Umgebung strukturiert erfasst werden, sind vier Zustände zu berücksichtigen, in denen sich das System zu jedem möglichen Zeitpunkt befinden kann

Mögliche Systemzustände

© QNX

In Zustand I arbeitet das System korrekt, es ist keine gefährliche Situation eingetreten und es wird keine zusätzliche Belastung verursacht. In Zustand IV ist tatsächlich eine gefährliche Situa­tion eingetreten und das System hat korrekt in seinen Design Safe State gewechselt. Dies hat die Umgebung belastet, aber das System hatte keine andere Wahl. Zustand III, in dem das System eine gefährliche Bedingung nicht erkannt hat und einfach weiterläuft, ist nicht sicher. Beim Design ist darauf abzuzielen, die Wahrscheinlichkeit für das Eintreten dieses Zustands unter ein akzeptables Niveau zu senken (zum Beispiel unter 10–7 pro Betriebsstunde). Die wenigste Aufmerksamkeit wird in der Regel Zustand II zuteil. Hier hat das System fälschlicherweise eine gefährliche Bedingung erkannt, die in Wirklichkeit gar nicht existiert. Es wechselt unnötigerweise in seinen Design Safe State und belastet dadurch seine Umgebung.

System mit labilem Auslöser

Bild 1. Eine Sicherheitsfunktion überwacht die Plausibilität des Hauptsystems.

© QNX

Bei einem typischen Design für sicherheitskritische Systeme (Bild 1, S. 25) empfängt das Hauptsystem Sensordaten und führt eine systemabhängige Berechnung durch, um die erforderliche Aktion zu ermitteln. Sein Betrieb wird von einer Sicherheitsfunktion (im Sinne der IEC 61508) überwacht, die anhand einer viel einfacheren – und daher weniger störungsanfälligen – Berechnung ermittelt, ob das Hauptsystem plausibel arbeitet (Bild 2). Um die Zuverlässigkeit der Sicherheitsfunktion zu erhöhen, sind zwei Überwacher vorgesehen, die parallel arbeiten.

Gelangt einer der Überwacher zu dem Ergebnis, dass das Hauptsystem nicht plausibel arbeitet, meldet er dieses Ergebnis, und das System wird nicht mehr am Zurückfallen in seinen Safe State gehindert.

Bild 2. Das 1oo2-System: Solange eines der Sub­sys­teme keine Betriebsfreigabe erteilt, verbleibt das Steuerungssystem im Design Safe State.

© QNX

Es handelt sich um ein sogenanntes 1oo2-System (one out of two – einer von zwei): Jeder der Überwacher kann unabhängig vom anderen das System zum Wechsel in den Design Safe State veranlassen.

„Um die Zuverlässigkeit der Sicherheitsfunktion zu erhöhen...“ – dies ist ein entscheidender Punkt im vorigen Absatz. Das 1oo2-System erhöht zwar definitiv die Zuverlässigkeit – aber auf Kosten der Verfügbarkeit. Wenn auch nur einer der beiden Überwacher fehlerhaft arbeitet – etwa aufgrund eines Speicherfehlers, den der Zugführer mit einem Handy in der Nähe des Geräts ausgelöst hat – wechselt das System sofort in den Zustand II, reduziert dadurch seine Verfügbarkeit und erzeugt eine unnötige Belastung für seine Umgebung.

Eine zweite Meinung einholen

Es ist davon auszugehen, dass die meisten Ausfälle des hypothetischen Systems von nicht reproduzierbaren Heisenbugs ausgelöst werden, da die reproduzierbaren Bohrbugs beim Testen mit an Sicherheit grenzender Wahrscheinlichkeit bereits gefunden und beseitigt wurden. Ein Heisenbug kann seine Ursache in der Software selbst haben (zum Beispiel eine subtile und selten auftretende Race Condition) oder in einem transienten Speicherfehler (wie er etwa vom Handy des Zugführers ausgelöst werden kann). Unabhängig von seiner Ursache liegt es in der Natur eines Heisenbugs, dass eine Wiederholung der Berechnung zu einem anderen – und diesmal vermutlich korrekten – Ergebnis führt.

Aber bleibt genug Zeit für eine Wiederholung der Berechnung? Dies hängt vom betrachteten System ab. Ein Hochgeschwindigkeitszug etwa ist mit bis zu 100 m/s unterwegs. Ist es bei Nicht­übereinstimmung der beiden Überwacher akzeptabel, den Wechsel in den Design Safe State zu verzögern, bis die Berechnung wiederholt wurde?

Die Antwort ist natürlich in der Ausfall-Analyse des Systems zu suchen; in vielen Fällen lässt sich jedoch durch ein Design mit „zweiter Meinung“ die Verfügbarkeit eines Systems wesentlich verbessern, ohne dass die Zuverlässigkeit signifikant leidet. Bei einer Ausdehnung der Ausfall-Analyse auf die übergeordnete Umgebung lässt sich durch eine Steigerung der Systemverfügbarkeit (auf Kosten der Zuverlässigkeit) häufig insgesamt die Sicherheit verbessern.

Entwickler von Embedded-Software konzentrieren sich bei der Erstellung des Safety Case naturgemäß auf die Entwicklung und Validierung der Unternehmens-eigenen Software. Oft lässt sich nicht mehr tun, als Annahmen über die Umgebung explizit zu machen, da die Entwickler keine Kontrolle (oder auch gar keine Kenntnis) darüber haben, wie und wo die Software eingesetzt werden wird. Ist jedoch die Umgebung bekannt, ist es naheliegend, über den Tellerrand zu schauen und die Umgebung vom Standpunkt der Software aus zu betrachten. Dies ist aufgrund der Belastung, der die Umgebung unter Umständen ausgesetzt wird, auch wichtig. Sicherere Systeme können dann entstehen, wenn auch der Umkehrschritt vollzogen und die Software vom Standpunkt der Umgebung aus betrachtet wird.

Autoren: Chris Hobbs ist Senior Developer Safe Systems bei QNX in Ottawa/Kanada, Malte Mundt ist Field Application Engineer bei QNX in Hannover.

  • Xing Icon
  • LinkedIn Icon
Anzeige
Anzeige

Das könnte Sie auch interessieren

Anzeige
Anzeige
Anzeige

Synapticon

Funktionale Sicherheit für Humanoide

Fehlende Standards bremsen den Einsatz humanoider Roboter. Neue ISO-Normen wie ISO 25785-1 und ISO/IEC TS 22440 sollen Anforderungen an funktionale Sicherheit und KI definieren und damit die Grundlage für eine breitere industrielle Nutzung schaffen.

mehr...
Anzeige

Illumio

Warum IT/OT-Grenzen neu gedacht werden müssen

Smart Factories verbinden Produktionsanlagen, Steuerungen und IT-Systeme über gemeinsame Netzwerke – eine Entwicklung, die die Effizienz zwar steigert, aber auch zusätzliche Angriffsflächen schafft. Um diese Risiken zu beherrschen, müssen...

mehr...

Euchner

Sichere Intralogistik

Dank sich schnell durch die Gassen bewegender Regalbediengeräte und Shuttles ermöglichen automatisierte Lagersysteme eine effiziente Intralogistik. Doch hinter den Absperrungen droht durch diese Maschinen akute Gefahr für Leib und Leben der...

mehr...
Anzeige
Anzeige
Anzeige

Axians

Fünf unbequeme Wahrheiten über OT‑Security

Firewalls kaufen kann jeder. OT-Security machen die wenigsten wirklich. Timmi Hopf, Business Development Manager OT Cybersecurity bei Axians, benennt in seinem Kommentar fünf unbequeme Wahrheiten aus der Praxis und erklärt, warum der erste Schritt...

mehr...

Kaspersky

Einsparpotentiale erkennen

Mit dem 'Kaspersky OT Cybersecurity Savings Calculator' können Industrieunternehmen die potenziellen Kosten unzureichender OT-Sicherheit (Operational Technology) quantifizieren.

mehr...
Jetzt Newsletter abonnieren