Seien Sie am 30. April dabei: Vorstellung von Parasoft C/C++test CT für kontinuierliche Tests und Compliance-Exzellenz | Registrierung

Softwareentwicklungsprozess für sicherheitskritische Systeme

Kopfbild von Ricardo Camacho, Director of Safety & Security Compliance
13. September 2023
7 min lesen

Untersuchen Sie Best Practices für die Entwicklung sicherheitskritischer Software. Erfahren Sie mehr über wichtige Faktoren, fortschrittliche Technologien und Branchentrends für die Entwicklung sicherer, zuverlässiger und konformer Systeme.

Wenn es um die Entwicklung und Programmierung von Software für Dinge wie autonom fahrende Autos geht, muss die Sicherheit oberste Priorität haben. Das gilt nicht nur für futuristische Transportideen. Tatsächlich gilt dies für viele Gegenstände, die Millionen von Menschen jeden Tag verwenden. Flugzeuge und Bahnstrecken. Ein MRT-Gerät. Der Blinker oder Scheibenwischer Ihres eigenen Autos.

Alle diese komplexen Systeme (und viele mehr) sind auf sicherheitskritische Software angewiesen, die so entwickelt wurde, dass möglichst viele Fehlerszenarien berücksichtigt werden, um die Folgen abzumildern. Doch was unterscheidet diese Art der Entwicklung von anderen? Die Herausforderungen, Best Practices und Sicherheitsstandards, die damit verbunden sind, bringen weitaus größere Risiken und einige Reibungspunkte mit modernen Methoden mit sich. Was hat es also mit der sicherheitskritischen Softwareentwicklung auf sich?

Was ist sicherheitskritische Software?

Als sicherheitskritische Software gilt in der Regel eine eingebettete Softwareanwendung, die speziell für Systeme entwickelt wurde und im Falle eines Ausfalls Maßnahmen zur Verhinderung von Verletzungen und dem Verlust von Menschenleben vorsieht. Das bedeutet, dass für jede solche Software Verifizierung, Validierung und Zuverlässigkeit in jeden Schritt des Entwicklungslebenszyklus integriert werden müssen.

Was sind Beispiele für sicherheitskritische Geräte?

Ein Beispiel für ein sicherheitskritisches System wäre ein Herzschrittmacher oder andere Gesundheits- und Medizingeräte. Andere Typen umfassen erweiterte Fahrzeugsicherheitsfunktionen wie eine Rückfahrkamera oder Spurassistenzsysteme. Komplexere Beispiele sind Flugsteuerungen von Flugzeugen und Nuklearsysteme.

Wie unterscheidet sich die Entwicklung sicherheitskritischer Software?

Sicherheitskritische Systeme erfordern, dass die zugehörige Software während der Entwicklung strenge Sicherheitsstandards einhält. Auch die Sicherheitsstandards werden regelmäßig aktualisiert, um auftretende Probleme und Schwachstellen zu beheben. Dies erfordert von Softwareentwicklern sicherheitskritischer Systeme, bei der Entwicklung auf dem Laufenden zu bleiben und agil zu bleiben.

Darüber hinaus ist das Ziel einer solchen Entwicklung nicht die Geschwindigkeit oder gar die Funktionalität, sondern die Sicherheit. Während des Lebenszyklus müssen Entwickler neben der Einhaltung der Sicherheitsstandards in ihrer Branche so viele reale Fehlerszenarien wie möglich berücksichtigen. Dies erfordert auch robuste Tests, Validierung und Verifizierung.

Softwareentwicklung in Branchen mit hohen Sicherheitsanforderungen

Während mir vielleicht Branchen wie medizinische Geräte und Nuklearsysteme in den Sinn kommen, gelten in vielen anderen Branchen strenge Sicherheitsstandards. Branchen, in denen Ausfälle zu katastrophalen Verlusten führen können, müssen sich auf Sicherheitsstandards verlassen, die eine möglichst sichere Software ermöglichen. Dazu gehören natürlich auch die Automobil- und die Luft- und Raumfahrtindustrie. Dies gilt jedoch auch für Branchen wie den Schienenverkehr und sogar für Cybersicherheit oder Finanzsysteme.

In welchen Branchen wird sicherheitskritische Software häufig eingesetzt?

Wie bereits erwähnt, sind sowohl die Automobil- als auch die Luft- und Raumfahrtindustrie in hohem Maße auf den Betrieb sicherheitskritischer Systeme angewiesen. Dinge wie ABS-Bremsen, der sich ständig weiterentwickelnde autonome Fahrer und sogar einfache Lichter spielen bei der Softwareentwicklung alle eine Rolle bei der Sicherheit von Fahrzeugen. In der Luft- und Raumfahrt müssen Entwickler Sicherheitsstandards für eine Vielzahl von Systemen berücksichtigen, vom Sauerstoff- und Luftrecycling bis hin zur Motorverbrennung und Telemetriekommunikation.

Aber auch in anderen Branchen gelten hohe Sicherheitsanforderungen, beispielsweise im Gesundheitswesen, im Transportwesen, in der Kernenergie und im Verteidigungsbereich. Ein Ausfall könnte den Verlust von Menschenleben, Sachschäden oder Umweltschäden bedeuten – selbst in geringem Ausmaß. Das ist inakzeptabel, wenn es um die Softwareentwicklung in diesen Branchen geht.

Welche Standards und Vorschriften gelten für die Entwicklung sicherheitskritischer Software?

Die 1947 gegründete Internationale Organisation für Normung (ISO) legt Sicherheitsstandards für viele Branchen fest, wobei mehr als 160 Mitglieder aus vielen Ländern Beiträge leisten. Zusammen mit anderen Gremien arbeitet die ISO ständig daran, ihre Sicherheitsstandards für Tausende von Systemen in vielen Branchen weiterzuentwickeln und neu zu bewerten.

Jede Branche verfügt über eigene Gremien, die die Aufsicht und Regulierung sicherheitskritischer Geräte und Software ausüben. In der Automobilindustrie gibt es beispielsweise die internationale Norm ISO 26262 Funktionssicherheit und ISO/SAE 21434-Standard für Automobilsicherheit. Für medizinische Geräte gelten für die Sicherheit IEC 62304 und IEC 62443. Es gibt auch Codierungsstandards wie MISRA und AUTOSAR C++ 14, die bekanntermaßen auch in einer Vielzahl anderer Branchen wie der Luft- und Raumfahrt, dem Militär, dem Schienenverkehr und der Medizintechnik Anwendung finden. Weitere Sicherheitsstandards für verschiedene Arten von Anwendungen sind CERT, CWE und OWASP.

Im Wesentlichen gibt es unterschiedliche Goldstandards, die Entwickler innerhalb jeder Branche befolgen müssen – und einige, die branchenübergreifend gelten. Diese Standards werden ständig auf der Grundlage der neuesten Technologie und Möglichkeiten zur Nutzung dieser Technologie aktualisiert.

Best Practices für die Softwareentwicklung in sicherheitskritischen Systemen

Es gibt fünf wesentliche Säulen für Anforderungen in der sicherheitskritischen Softwareentwicklung.

  1. Eindeutig. Sowohl in der Dokumentation als auch im Code selbst muss eine Einigung darüber erzielt werden, was Anforderungen bedeuten, ohne Interpretation oder Vermutung.
  2. Rückverfolgbar. Programmierer und Manager sollten in der Lage sein, Anforderungen bei der Überprüfung des Codes oder während des Testprozesses nachzuverfolgen.
  3. Wiederholbar. Es ist das absolute Minimum, dass das Programm und die Software die erwarteten Anforderungsergebnisse zurückgeben. Die Geräte sollten den Anforderungen entsprechen und gleichzeitig bei Fehlern jeglicher Art die erwarteten Daten und Ausgaben zurückgeben.
  4. Konsistent. Es sollte keine widersprüchlichen Anforderungsmerkmale geben, wenn es um Timing, Leistung, Priorisierung usw. geht. Auch in der Dokumentation ist die Terminologie einheitlich und konsistent, um Verwirrung zu vermeiden.
  5. Testbar. Gut entwickelte sicherheitskritische Programme erfüllen die Anforderungen aller Testtypen.

Darüber hinaus gibt es fünf weitere Best Practices, die Sie bei der Entwicklung von Software für sicherheitskritische Systeme beachten sollten.

  1. Führen Sie genaue Aufzeichnungen und dokumentieren Sie den Verlauf oder die Rückverfolgbarkeit.
  2. Informieren Sie Programmierer über Best Practices, Methoden und die Bedeutung der Dokumentation.
  3. Arbeiten Sie mit den am besten geeigneten und besten Codierungsstandards für Ihr Projekt.
  4. Halten Sie die Komplexität des Codes niedrig, da komplexer Code in komplexen Systemen schwer zu testen ist, was zu mehr Fehlern führen kann.
  5. Entwickeln Sie die Software mit Blick auf den Endbenutzer.

Welche möglichen Folgen können Fehler im sicherheitskritischen Softwarebetrieb haben?

Die Folgen für sicherheitskritische Fehler sind nicht so einfach, dass eine Glühbirne nicht richtig funktioniert. Die Fehler können von einer Überhitzung der Batterie während des Betriebs bis hin zu einem katastrophalen Triebwerksausfall eines Flugzeugs reichen. Es kann auch zu menschlichen Opfern, Sach- und Umweltschäden, finanziellen Verlusten oder sogar Bedrohungen der nationalen Sicherheit kommen.

Aus diesem Grund ist die Befolgung der oben genannten Best Practices nicht nur ratsam, sondern verpflichtend. Das Erreichen einer behördlichen Genehmigung ist keine Situation, in der „gut genug“ funktioniert.

Faktoren, die bei der Entwicklung von Software für sicherheitskritische Systeme zu beachten sind

Denken Sie daran: Das Ziel sicherheitskritischer Softwareentwicklung ist nicht Geschwindigkeit oder Funktionen, sondern Sicherheit. Dies ist der wichtigste Aspekt, den Sie bei der Kodierung von Sicherheitsstandards berücksichtigen sollten. Sicherheitskritische Softwareentwicklungsfehler in diesen Systemen können dazu führen, dass Dinge wie der NASA Mars Climate Orbiter zu schnell und zu niedrig in die Marsatmosphäre eindringen und Zerstörung verursachen. Probleme wie diese lassen sich auf mehrere wichtige Faktoren zurückführen, die Teams während des Entwicklungslebenszyklus berücksichtigen müssen, um sicherheitskritische Softwarefehler zu minimieren.

Zusätzlich zu den Modi Einhaltung der Sicherheitsanforderungen und formale Methoden, beachten Sie Folgendes:

  • Berücksichtigen Sie die Softwarearchitektur, denn ein gutes Design kann ein einfacheres Upgrade ermöglichen.
  • Sicherheitsbedenken, die Minimierung von Gefahren und die Sicherstellung der Einhaltung von Vorschriften machen Ihr Projekt komplexer.
  • Ein ausfallsicheres Design bedeutet, dass Ihr Gerät und/oder Ihre Software auf sichere oder erwartete und vorhersehbare Weise ausfallen kann.
  • Nur ein bestimmtes Maß an Gefährdung und Versagen ist zulässig.
  • Die Entwicklung sicherheitskritischer Software kann mit verschiedenen Entwicklungslebenszyklusmethoden wie Spirale, Wasserfall, Agile und im Tandem durchgeführt werden.
  • Gehen Sie beim Testen Ihrer Software weiter, als Sie für nötig halten, und machen Sie dann weiter.
  • Zur Verbesserung sicherheitskritischer Systemsoftware sind praktische Felddaten erforderlich.

Ermöglichen Sie die Entwicklung sicherheitskritischer Software mit fortschrittlichen Tools und Technologien

Eine große Falle, die Entwickler vermeiden können, wenn es um Tools für die sicherheitskritische Softwareentwicklung geht, ist die Zertifizierung. Die Verwendung eines Tools, das von der entsprechenden Organisation zertifiziert ist, kann Ihnen Sicherheit geben. Zertifizierte Tools führen dazu, dass Compliance zuverlässig erreicht wird. Allerdings erfordert konforme Software die richtigen Entwicklungsmethoden, um längere Entwicklungszeiten und -kosten zu vermeiden. Außerdem ist dort die Shift-Links-Denkweise ins Spiel kommt.

Ein großartiges Beispiel für agile Methoden ist die parallele Koexistenz von DevOps CI/CD und Scrum, wodurch Silos beseitigt, die Kommunikation gefördert, Produktivität ermöglicht und Verifizierung und Validierung automatisiert werden.

Die Aufrechterhaltung von Qualität und Erschwinglichkeit ist für viele Entwicklungsteams zu Prioritäten und einzigartigen Herausforderungen geworden. Ein Beispiel ist die Automatisierung von Softwaretests, die in eine CI/CD-DevOps-Bereitstellung im Automobilbereich integriert ist. CI/CD-Pipelines bieten kontinuierliche Tests, die Projektkosten senken und Projektlaufzeiten verkürzen können. Auch wenn strenge Sicherheitsstandards wie ISO 26262 eingehalten werden, sorgen automatisierte Tests für zusätzliche Codeabdeckung, Sicherheit und umsetzbare Daten.

Wenn Sie Ihre Entwickler mit den besten Tools für die jeweilige Aufgabe ausstatten, kann dies ihre Arbeit nur einfacher machen. Dies wiederum kann zu mehr führen optimierte Dokumentation, Konsistenz und die termin- und budgetgerechte Lieferung Ihres Produkts – oder sogar früher und unter Budget.

Die Rolle von Parasoft im Softwareentwicklungsprozess für sicherheitskritische Systeme

Parasoft bietet eine Vielzahl von Lösungen für viele Branchen, wenn es um die Entwicklung sicherheitskritischer Software geht. Diese komplexen Systeme erfordern eine konsistente, eindeutige Dokumentation, umsetzbare Testdaten und Tools, die Entwickler unterstützen.

Unit-Tests, anforderungsbasierte Tests, Regressionstests, Sicherheitstests und Integrationstests müssen alle die Rückverfolgbarkeit und Wiederholbarkeit der Anforderungen umfassen. Automatisiert und TÜV SÜD zertifiziert Lösungen wie C/C++test kann die Arbeitsbelastung für Entwickler und Tester gleichermaßen reduzieren und gleichzeitig die Codequalität, Abdeckung und Gesamtproduktqualität verbessern.

Unsere Tools unterstützen direkt viele Sicherheitsstandards, einschließlich, aber nicht beschränkt auf:

  • ISO 26262
  • IEC 62304
  • DO-178C
  • IEC 61508
  • UL 2900
  • DISA ASD STIG
  • OWASP
  • MISRA
  • AUTOSAR
  • CERT
  • CWE
  • PCI DSS

Tools wie C/C++test ermöglichen es Teams, Fehler frühzeitig zu erkennen, die Einhaltung von Industriestandards zu automatisieren und intelligente Tests durchzuführen. Ein großartiges Beispiel aus der Praxis, wie sich Parasoft-Lösungen in sicherheitskritische Systeme integrieren lassen, ist die Art und Weise, wie ein Auftragnehmer des US-Verteidigungsministeriums in der Luft- und Raumfahrt- und Verteidigungsindustrie eine DevOps-Pipeline nutzte, um die Codeabdeckung, Testgründigkeit und Nachhaltigkeit zu verbessern.

Wie entwickelt sich sicherheitskritische Software als Reaktion auf Branchentrends?

Wie bei allen Dingen ist der sichtbare Trend, den jeder bei der Entwicklung sicherheitskritischer Systeme erkennen kann, die steigenden Geschäftskosten. Darüber hinaus nimmt auch die Komplexität immer weiter zu. Dies bedeutet, dass Entwickler sorgfältiger mit der Dokumentation umgehen müssen und Manager bereit sein müssen, ihre Teams nach Bedarf in Bezug auf Sicherheitsstandards und regelmäßig zu schulen, um sicherzustellen, dass das Wissen auf dem neuesten Stand ist.

Wenn es jedoch darum geht, wie die Software selbst auf Branchentrends reagieren muss, wird es etwas trüber. Dafür können wir dem Internet der Dinge, dem maschinellen Lernen und der KI danken – sowohl auf nützliche als auch auf belastende Weise. Es ist zwar nützlich, über mehr Dinge zu verfügen, die miteinander kommunizieren oder sich je nach Bedarf an verschiedene Szenarien anpassen können, dies kann jedoch zu zusätzlichen Sicherheitslücken führen. Die Planung der unvermeidlichen Ausnutzung dieser neuen Bedrohungsvektoren macht bereits komplexe Systeme in der Softwareentwicklung noch komplexer. Die Testautomatisierung hat begonnen, sich auf KI und maschinelles Lernen auszudehnen, um diese Lücke zu schließen, bevor sie zu groß wird.

Zusammenfassung

Edsger W. Dijkstra gab uns mit diesem Zitat den Schlüssel zur modernen Softwareentwicklung:

„Wer wirklich zuverlässige Software möchte, wird feststellen, dass er Mittel finden muss, um die meisten Fehler von vornherein zu vermeiden …“

Schließlich ist es einfacher, Probleme von vornherein zu verhindern, als entstehende Brände zu bekämpfen. Dieser Aspekt der agilen Methodik verändert die Entwicklung sicherheitskritischer Software grundlegend. Mit den richtigen Tools kann der Prozess noch effizienter gestaltet werden.

Der Aufbau einer soliden Code-Architektur, die Aufrechterhaltung einer konsistenten und systematischen Sprache für die Dokumentation sowie kontinuierliche und angemessene Tests können Ihrem Team dabei helfen, Compliance-Standards einzuhalten.

Der wesentliche Leitfaden zur automatisierten Testgenerierung für eingebettete Systeme