Safety
Der Begriff der Safety [3] ist vor allem im Bereich von Softwarelösungen in Verbindung mit Maschinen, und damit in der Automatisierunstechnik, besonders wichtig. Er beschreibt den Schutz vor einer Fehlfunktion, hier eine Fehlfunktion, die durch Fehler der Entwickler entsteht und nicht durch Bösartigkeit anderer Menschen, der Software und/oder Maschine bei bestimmungsgemäßer Verwendung, welche zu einer Bedrohung von Menschen oder anderen physikalischen Objekten (anderen Maschinen zum Beispiel) führen könnte.
In der Automatisierungstechnik sind solche Funktionalitäten das Loslösen von menschengesteuerten Aktionen hin zu computergesteuerten Aktionen basierend auf gemessenen Daten.
So wird beispielsweise die Überprüfung einer Anlage in festen Intervallen ausgelagert, dass der Verschleiß der Anlage gemessen wird und die Anlage aufgrund dieser Daten entscheidet, wann gewartet werden muss.
Solche automatisierte Mechanismen müssen daraufhin überprüft und zertifiziert werden, dass sie bei korrekter Bedienung auch nur das machen, was spezifiziert und programmiert wurde.
Diese Überprüfung entspricht dann einer Überprüfung, ob die gegebene IST-Funktionalität der spezifizierten SOLL-Funktionalität entspricht. Dies erfordert damit allerdings, dass der gewünschte Zustand jeder Funktionalität auch spezifiziert und festgehalten wurde, damit dagegen geprüft werden kann.
Auch die Prüfung der Funktionalität muss ein solches Verfahren sein, welches alle benötigten Spezifikationen auf eine standardisierte (und eventuelle zertifizierte) Weise überprüfen kann und die Resultate auch replizieren kann.
Für die Softwarekomponenten haben sich schon verschiedene Normen [8] oder Verfahren etabliert (Test-Driven Development, Testautomatisierung, Pareto-Prinzipien im Testen, u.v.m.) welche auf eine standardisierte Weise vorschreiben, wie Softwareartefakte geprüft werden müssen, um die Safety [3] der Anwendung oder Maschine sicherzustellen. Durch systematische Testvorgänge können Fehler zwar erkannt und behoben werden, jedoch kann ein Test nur das Vorhandensein von Fehler feststellen, niemals die völlige Abwesenheit davon. Dennoch müssen unterschiedliche Testverfahren einen erheblichen Teil der Softwareentwicklung ausmachen, um die Safety [3] zu gewährleisten.
Security
Die Securtiy [2] definiert sich dazu als der Schutz von Software/Anlagen gegen absichtliche Angriffe auf die Vertraulichkeit, Integrität und Verfügbarkeit von Informationen, die von der Software/Anlage verwendet/verwaltet werden. Es wird also der Angriff durch einen anderen Menschen oder ein anderes System dadurch beschrieben, welche Schwachstellen in der Programmierung ausnutzen, um Schaden anzurichten oder den eigenen Vorteil unrechtmäßig zu erhöhen.
Auch für die Security [2] müssen die Schutzziele vorher definiert werden, damit gegen diese Ziele geprüft werden kann. Und auch hier gibt es schon bereits bestehende Verfahren (Functional Testing, Vulnerability Scanning, Systematic Fuzzing, Penetration Testing, CVE, CAPEC (siehe Grafik), CWE, u.v.m.), welche das Testen der Safety [3] erweitern, um Angriffsaspekte erkennen zu können, oder bereits definierte Standards (CERT, (MISRA C*, u.v.m.) sowie bestehende Risikomanagementanalysesysteme für Softwaresysteme.
Abbildung 2: CAPEC Angriffserkennung
Foto: (c) capec.mitre.org
Allerdings sind diese Standards nicht vollständig, da sie nicht alle Angriffsvektoren abdecken können.
In der Kryptographie gibt es mathematische Modelle (wie das Modell nach Dolev-Yao [5] zur Überprüfung von (Netzwerk)-Protokollen auf Angriffsmuster), welche dann für gegebene Umstände beweisen, dass eine Softwarelösung sicher ist.
Diese Modelle sind allerdings in der Realität nicht immer umzusetzen, da sie von Annahmen ausgehen können, welche auf Industrieanlagen nicht gegeben sein müssen.
Standardisierte Protokolle können allerdings die Anlage vor einer Manipulation schützen, wenn sie denn korrekt umgesetzt und betrieben werden.
Privacy
Der Begriff der Privacy [1] beschreibt, dass die Daten, die in einem System erstellt werden (Benutzungsdaten von Nutzern oder Geschäftsdaten der Anlage/Firma), nicht in die Hände Unbefugter gelangen, die die Sensordaten einer Anlage an den Endpunkt der Konkurrenz weiterleiten.
Dies kann bei der Entwicklung der Software durch die Verwendung von standardisierten Designentscheidungen [7] und Techniken, die die Daten schützen (Authentifizierung, Zero-Knowlegde-Beweise („Beweise dass ich ich bin oder ein Geheimnis weiß, ohne zu zeigen, dass ich ich bin oder das Geheimnis zu zeigen“) [6], korrekte Anonymisierung und Pseudonymisierung, u.v.m.), erreicht werden.