next up previous contents
Next: 4.4 Probleme und Hindernisse Up: 4. Software- und Systemsicherheit Previous: 4.2 Begriffe

Unterabschnitte

4.3 Ansätze

4.3.1 Grundregeln

Es gibt eine Reihe von zentralen Erkenntnissen und Regeln für Systemsicherheit, die wir nun besprechen wollen:

1. Baue Sicherheit von vornherein ein. Versuche sie nicht erst nachzurüsten. Systeme, die nicht von Anfang an für Sicherheit entworfen werden, erreichen nur selten eine hohe Sicherheitsstufe, weil zu viele ihrer strukturellen Eigenschaften der Sicherheit entgegenstehen.

2. Betrachte das System als Ganzes, nicht seine Teile. Viele Sicherheitsprobleme ergeben sich erst durch das Zusammenwirken der Teile in unvorhergesehenen Weisen. Außerdem erzeugt eine separate Betrachtung der Teile die Tendenz, daß die jeweiligen Verantwortlichen der Teile die Verantwortung für die Sicherheitsprobleme hin- und herschieben.

3. Nicht nur Systemversagen ist eine Gefahr. Unfälle können auch dann geschehen, wenn das System sich genau gemäß seiner Spezifikation verhält. Zuverlässigkeit ist nicht gleich Sicherheit. Dies ist eine besonders wichtige Lehre für Softwarebauer.

4. Verlaß Dich nicht auf Erfahrungen und Standards. Für Systemsicherheit gibt es zwar viele vorgefertigte Regeln und Maßnahmen, diese können die Sicherheit aber nicht garantieren. Analysiere das System!

5. Verwende qualitative statt quantitative Methoden. Der Versuch, die Sicherheit zu quantifizieren führt dazu, die Kräfte auf das falsche Ziel zu konzentrieren. Sicherheit läßt sich nicht quantifizieren, aber sehr wohl läßt sich mit Augenmaß abschätzen, ob eine gewisse Maßnahme ein günstiges Verhältnis von Aufwand zu (möglicher) Wirkung hat oder nicht.

6. Erkenne, daß Abwägungen nötig sind und Konflikte auftreten. Sicherheit ist niemals total. Bei der Herstellung sicherer Systeme treten Beschränkungen aufgrund der Kosten oder der nötigen Eingriffe in die Umgebung auf, die gegen den möglichen Nutzen der Maßnahmen abgewogen werden müssen.

7. Beachte die Vorrangfolge beim Umgang mit Gefahren:

Alles in allem kann man sagen, daß die Herstellung von Systemsicherheit gleichermaßen Augenmaß, Sorgfalt und Kreativität erfordert und eine sehr schwierige und herausfordernde Aufgabe ist. Eine Aufgabe zudem, die aufgrund sozialer Effekte ziemlich schwierig gut zu erledigen ist, wie im nachfolgenden Abschnitt zu sehen sein wird.

4.3.2 Hierarchische Sicht von Unfällen

Zur Analyse von Unfällen empfiehlt sich eine dreischichtige, hierarchische Sichtweise:

1.
Mechanismen: konkreter Hergang beim Unfall, Ereignisse und ihr Zusammenwirken. Diese Ebene dient dazu, den Unfall zu beschreiben.
2.
Bedingungen: unfallrelevanter Zustand des Systems und seiner Umgebung bei Unfallbeginn. Diese Ebene dient dazu, den Unfall zu verstehen.
3.
Urgründe (root causes): allgemeine Umfeldbedingungen, die zu (2) geführt haben. Diese Ebene dient dazu, die Unfallklasse zukünftig vermeiden zu können.
Die Urgründe sind fast immer menschlicher Natur, meist eine Form von Nachlässigkeit oder, seltener, von Unwissen. Viele schwere Unfälle sind auf den Urgrund eines mangelnden Risikobewußtseins zurückzuführen. Das drastischste Beispiel hierfür ist wohl der Untergang der Titanic [Lev95, S.56f].

Hier ist die Geschichte dieses Untergangs; bitte Satz für Satz in Ruhe würdigen: Die Titanic war das größte und sicherste Passagierschiff, das je gebaut wurde. Es war so konstruiert, daß der Rumpf aus 16 Kompartments bestand, von denen bis zu 4 geflutet werden konnten, ohne daß das Schiff sinken würde. Ein gleichzeitiges Vollaufen von 4 unabhängigen Rumpfabteilungen hatte es in der Geschichte der Seefahrt noch niemals gegeben. Lloyds London stellte aus diesem Grund der Titanic ein Unsinkbarkeitszertifikat aus. Der Kapitän sagte einer ängstlichen Passagierin zu Beginn der Reise: ,,Nicht einmal Gott könnte dieses Schiff versenken.`` Die Jungfernfahrt des Schiffes war ein Versuch, den Geschwindigkeitsrekord für Atlantiküberquerungen zu brechen und das dafür ausgelobte ,,blaue Band`` zu erringen. Deshalb fuhr das Schiff trotz tiefer Nacht mit hoher Geschwindigkeit, obwohl mehrere unabhängige Nachrichten eingegangen waren, die vor Eisbergen um durchquerten Gebiet warnten. Bei der Kollision mit einem Eisberg wurde aufgrund der hohen Geschwindigkeit und eines spät eingeleiteten Ausweichmanövers der Rumpf auf einer Länge von fast 100 Metern aufgeschlitzt. Dabei wurden 5 der Rumpfabteilungen leckgeschlagen und liefen schnell voll. Nach der Kollision gab die Schiffsbesatzung zunächst Entwarnung und empfahl den Passagieren, in ihren Kabinen zu bleiben. Als etwas später die Evakuierung des Schiffes eingeleitet wurde, stellten sich zwei Probleme heraus. Erstens waren die normalerweise auf einem Schiff üblichen Sicherheitsübungen mit der Besatzung unterlassen worden, so daß die Besatzungmitglieder nicht wußten, wo ihr Platz und was ihre Aufgabe gewesen wäre, um das Schiff schnell zu evakuieren. Zweitens waren nicht genügend Rettungsboote vorhanden, um alle an Bord befindlichen Menschen aufzunehmen, weil die zu jener Zeit gültigen Sicherheitsvorschriften (die durchaus eingehalten worden waren) kein Schiff dieser Größe vorgesehen hatte und deshalb für die Titanic nicht angemessen waren. Bei der Evakuierung brach ein völliges Chaos aus und das Schiff sank schnell. Mehr als 1500 Menschen starben.

Ähnliche, wenn auch weniger dramatische Beispiele ließen sich zuhauf anführen. Wie wir daran lernen können, ist Risikobewußtsein manchmal paradox: Sein Vorhandensein führt quasi zu seiner eigenen Abschaffung; die Vorsicht und Aufmerksamkeit schläft auf dem Ruhekissen guter Sicherheitsvorkehrungen ein oder macht sogar entgegengesetztem Leichtsinn Platz.

Maßnahmen der Systemsicherheit sollten eigentlich immer auf den Ebenen 2 und 3 ergriffen werden. Ebene 2 umfaßt im weiteren Sinne technische Lösungen, Ebene 3 betrifft organisatorische und psychosoziale Vorkehrungen. Leider ist denjenigen, die die Risikoanalyse zur Steigerung der Systemsicherheit durchführen, der Zugriff auf die Ebene 3 oftmals weitgehend versperrt. Dies deutet auf eine ungünstige Organisationsform hin und sollte geändert werden.

4.3.3 Allgemeines Vorgehen

Leider kann man kein algorithmisches Verfahren angeben, wie es gelingt, ein System sicher zu konstruieren. Jedoch lassen sich einige grundlegende Arbeitsschritte identifizieren, die dazu betrieben werden sollten. Wir gehen davon aus, daß eine halbwegs konkrete Vorstellung davon vorliegt, was das zu konstruierende System tun soll.

Gefahrenbestimmung: Als erstes müssen mögliche Sicherheitsprobleme erkannt werden. Darüber gibt es unten einen eigenen Abschnitt.

Risikoanalyse: Nach Bestimmung der Gefahren muß zu jeder das entsprechende Risiko abgeschätzt werden. Zu jedem Risiko ist abzuwägen, ob überhaupt und in welchem Umfang Maßnahmen ergriffen werden sollen, um es zu vermindern oder zu beseitigen.

Entwurf: Dann müssen diese Gegenmaßnahmen erfunden und umgesetzt werden. Dabei gilt die oben bereits erwähnte Vorrangfolge von Beseitigung, Reduktion, Beherrschung und Schadensverminderung.

Entwurfssicherheitsprüfung: Das fertig entworfene Gesamtsystem sollte dann nochmals einer Sicherheitsanalyse unterzogen werden, die ähnlich vorgeht wie die ursprüngliche Gefahrenbestimmung. Diesmal jedoch können viele Überlegungen auf wesentlich konkreterem Grund vorgenommen werden. Werden dabei noch unzureichend beherrschte Risiken entdeckt, muß eine weitere Iteration von Entwurf und Prüfung vorgenommen werden.

Bau: Nun erst wird das System realisiert.

Abnahmesicherheitsprüfung: Am konkret realisierten System sollten abschließend noch alle jene Aspekte auf ihre Sicherheit geprüft werden, die im Entwurf aufgrund fehlender Information noch nicht vollständig analysiert werden konnten. Dies muß je nach System möglicherweise kontinuierlich oder periodisch im laufenden Systembetrieb wiederholt werden, weil sich die relevanten Bedingungen im Betrieb ändern können (z.B. durch Alterung oder durch Evolution des Betriebsumfelds).

4.3.4 Gefahrenbestimmung

Der kritischste Schritt bei der Verbesserung der Sicherheit ist die Bestimmung der Gefahren. Eine Gefahr die nicht erkannt wurde, kann auch nicht gezielt bekämpft werden. Es ist deshalb von außerordentlicher Bedeutung, möglichst viele gefährliche Situationen und Einflüsse auf ein geplantes System schon in der Konstruktionsphase zu erkennen und zu berücksichtigen.

Hier ist eine allgemeine Vorgehens- und Prüfliste zur Gefahrenidentifikation, siehe auch [Lev95, S. 296]:

1.
Nutze historische Daten von Beteiligten oder aus externen Quellen: Sicherheitserfahrungen, gelernte Lektionen, Problemberichte, Vorkommnisberichte, Unfallberichte.
2.
Nutze veröffentlichte Gefahrenchecklisten, Standards, Vorgehensbeschreibungen.
3.
Untersuche Energiequellen, Energieflüsse im System, gefährliche Materialien (brennbar, unter Druck, explosiv, giftig, Materialunverträglichkeiten) und die Maßnahmen zu ihrer Kontrolle.
4.
Untersuche die Mensch-Maschine-Schnittstelle.
5.
Untersuche die Systementwicklung (insbes. SW-System):
6.
Untersuche alle normalen und besonderen vorgesehenen Betriebszustände, insbesondere Übergangszustände wie Systemstart, -neustart, -stop, -test, -zusammenbruch, -wartung, -reparatur.
7.
Untersuche denkbare ungewöhnliche Umstände des Systembetriebs
8.
Beachte eine langfristige Perspektive: Änderungen am System, Weiterentwicklungen des technischen Umfelds, Änderungen im organisatorischen und im sozialen Umfeld.
9.
Gehe Schritt für Schritt durch den Gesamtprozeß des Systems und überlege, was schiefgehen könnte, wie man das grundsätzlich vermeiden kann und was zu tun ist, wenn der schlimmste Fall eintritt.


next up previous contents
Next: 4.4 Probleme und Hindernisse Up: 4. Software- und Systemsicherheit Previous: 4.2 Begriffe
Lutz Prechelt
1999-04-13