Suchen

Entwicklung im System ARM-Toolchain sorgt für die Einhaltung funktionaler Sicherheit

Autor / Redakteur: Daniel Owens* / Dr. Anna-Lena Gutberlet

Da ARM-Prozessoren auch in sicherheitsbezogenen Anwendungen zum Einsatz kommen, unterliegt die Software einer immer genaueren Prüfung: Denn selbst der kleinste Fehler kann verheerende Folgen haben.

Firmen zum Thema

Bild 1: ARM-Prozessoren finden sich nicht mehr nur in Mobil-, Consumer- und Datenserver-Anwendungen, sondern nun auch in den Bereichen Automotive, Industrie und dort, wo eine Einhaltung funktionaler Sicherheitsstandards nach IEC 61508 und ISO 26262 erforderlich ist. MCU-Softwareentwickler stehen damit vor neuen Herausforderungen.
Bild 1: ARM-Prozessoren finden sich nicht mehr nur in Mobil-, Consumer- und Datenserver-Anwendungen, sondern nun auch in den Bereichen Automotive, Industrie und dort, wo eine Einhaltung funktionaler Sicherheitsstandards nach IEC 61508 und ISO 26262 erforderlich ist. MCU-Softwareentwickler stehen damit vor neuen Herausforderungen.
(Bild: ARM)

Sicherheitsstandards wie IEC 61508 und ISO 26262 sollen garantieren, dass die Software neuesten besten Praktiken entspricht. Diese Best Practices dehnen sich nun auf die Wahl der Toolchain und deren Einsatz aus, welche ein wichtiger Bestandteil der modernen Softwareentwicklung sind und die Sicherheitsintegrität eines Systems direkt beeinflussen können.

ARM in sicherheitsbezogenen Anwendungen

ARM-basierte Prozessoren finden ihren Weg in sicherheitsbezogene Anwendungen von Antriebssteuerungen und Automatisierungstechnik, über Fahrwerks- und Motorsteuerungen in Fahrzeugen bis hin zu Infusionspumpen und Herzschrittmachern in der Medizintechnik.

Bild 1: IEC 61508 und ihre branchenspezifischen Auslegungen sind Richtlinien für sicherheitsbezogene elektrische, elektronische und programmierbare Systeme, um neueste Anforderungen zu erfüllen.
Bild 1: IEC 61508 und ihre branchenspezifischen Auslegungen sind Richtlinien für sicherheitsbezogene elektrische, elektronische und programmierbare Systeme, um neueste Anforderungen zu erfüllen.
(Bild: ARM)

Der Übergang auf MCUs und Programmierbarkeit rückt den Softwarebereich ins Augenmerk der Sicherheit - nun müssen Sicherheitsstandards wie IEC 61508 erfüllt werden.

ISO 26262 geht noch weiter und weist einen detaillierteren Rahmen auf, der auch sicherheitsbezogene Systeme auf Basis anderer Technologien mit einbezieht, wie das Lebenszyklus-Management oder die Beziehungen zum Zulieferer. Für Softwareentwickler steht damit ein Automotive-spezifischer risikobasierter Ansatz zur Bestimmung der ASILs (Automotive Safety Integrity Levels) zur Verfügung.

Toolchains und ihrer Auswirkungen auf die Sicherheit

Moderne ARM-Prozessoren sind mit Fehlererkennungs- und Kontrollfunktionen ausgestattet, wie ECC-Logik (Error Correction Code), MPU (Memory Protection Units), Lock-Step-Funktion und Support für Softwarepartitionierung mittels Hypervisor. Es besteht allerdings weiterhin die Möglichkeit, dass Softwarefehler durch die Abwehrmechanismen hindurch gelangen und den Prozessor zu etwas Ungewolltem zwingen, was verheerende Folgen haben kann.

100-prozentige Sicherheit ist schwierig, wenn gar unmöglich zu erreichen. Moderne Softwareentwicklung kann das Risiko, dass ein Prozessor anstelle zulässiger Anweisungen etwas Unbeabsichtigtes ausführt, erheblich verringern. Sicherheitsstandards wie IEC 61508 und ISO 26262 bieten eine Anleitung für beste Praktiken in der Softwareentwicklung. Diese beziehen zunehmend auch die Tools mit ein, die während der Softwareentwicklung verwendet werden, vor allem Code-Generatoren wie Compiler.

Sicherheitsstandards kategorisieren Entwicklungstools auf Basis ihrer Auswirkungen auf die Sicherheitsintegrität eines Systems. Ein Text-Editor ist z.B. ein gängiges Tool, das während der Softwareentwicklung zum Einsatz kommt, aber nur begrenzte Fähigkeiten aufweist, einen Fehler in ein funktionierendes System einzubringen. Ein Compiler hingegen kann logisch korrekten Quellcode in falschen ausführbaren Zielcode fehlinterpretieren und so unwissend Fehler in ein laufendes System einbringen. Compiler stellen deshalb die höchste Risikoklasse unter den Support-Tools dar, da sie direkt oder indirekt den ausführbaren Code in einem sicherheitsbezogenen System beeinflussen können. Ihre Auswahl und ihr Einsatz sollte deshalb im Rahmen der IEC 61508-3 erfolgen.

Zertifizierte Tools entsprechen den Sicherheitsstandards

Eine externe Prüfung von Software-Entwicklungsprozessen kann Schwächen aufzeigen oder Prozessbereiche hervorheben, die während der Entwicklung vernachlässigt wurden. Beste Praktiken fördern eine unabhängige Kontrolle von Softwareentwicklungsprozessen durch einen qualifizierten Prüfer, der zertifizieren kann, dass die Tools den Anforderungen des Sicherheitsstandards entsprechen.

Bild 2: Jedes Unternehmen, das programmierbare Systeme für Automotive-Anwendungen nach IEC 61508 und ISO 26262 für die Software herstellt, muss mit einer Flut von Dokumentation und Berichterstattung rechnen
Bild 2: Jedes Unternehmen, das programmierbare Systeme für Automotive-Anwendungen nach IEC 61508 und ISO 26262 für die Software herstellt, muss mit einer Flut von Dokumentation und Berichterstattung rechnen
(Bild: ARM)

Die ARM Compiler Toolchain inkl. ARM Compiler Qualification Kit, Anwendungsrichtlinien und Validierungsdaten, wurde durch den TÜV SÜD nach IEC 61508 und ISO 26262 zertifiziert. Das Qualification Kit besteht aus folgenden Teilen:

  • Das Sicherheitshandbuch gibt Hinweise auf die Konfiguration und den Einsatz der ARM Compiler Toolchain, um das Risiko sicherheitsbezogener Fehler zu minimieren.
  • Der Testbericht zeigt Konformität zu den Sprachspezifikationen auf, für die der Compiler entwickelt wurde (C-Standard).
  • Der Mängelbericht enthält eine Liste bekannter kritischer Mängel und Anweisungen, wie diese zu vermeiden sind.
  • Die Dokumentation bietet Einblick in beste Praktiken für die Softwareentwicklung, die zur Herstellung der Kompilierungs-Toolchain verwendet wurden.

Ist diese Dokumentation griffbereit, lässt sich damit die Softwarequalität der Endanwendung verbessern und ein Prüfer erhält einen genauen Überblick und die Gewissheit, dass die Wahl der Toolchain gerechtfertigt ist.

Es ist möglich, dass ein Endanwender seine eigenen Prüfbelege erzeugt, was allerdings sehr arbeitsintensiv, zeitaufwändig und teuer ist. Dabei können allerdings Lücken auftreten, da der Anwender keinen Zugriff auf alle verfügbaren Informationen hat.

Toolchain-Anbieter finden sich in der einzigartigen Lage, Entwickler sicherheitsbezogener Software zu unterstützten, da sie Informationen und Know-how über die Softwareentwicklungstools und deren Handhabung bieten. Der typische Software­entwickler verfügt nicht über diese Informationen und kann diese auch nicht einfach erzeugen. Es obliegt also den Entwicklern, genau zu prüfen, welcher Toolchain-Anbieter was bietet.

Einhaltung von Codierungs-Richtlinien

Die Einhaltung von Codierungs-Richtlinien kann Softwarefehler erheblich verringern und wird bei der Softwareentwicklung durch die meisten funktionalen Sicherheitsstandards vorgegeben. Solche Richtlinien machen den Quellcode einfacher verständlich und vermeiden häufige Fehlerquellen, die auf Lücken im Sprachstandard zurückzuführen sind. Einige High-Level-Programmiersprachen wie C und C++ sind unter bestimmten Bedingungen unvollständig oder zweideutig spezifiziert, was bei verschiedenen Compilern zu einem unterschiedlichen Verhalten führt.

Compiler ANSI C Strikt-Modus und Sprachuntergruppen wie MISRA C/C++ sind darauf ausgelegt, den Freiheitsgrad der Programmiersprache zu beschränken. Damit werden Bereiche innerhalb der Programmiersprache vermieden, die zu einer gemeinsamen Codierung oder zu Übersetzungsfehlern führen. Die Software wird damit einfacher lesbar und lässt sich einfacher debuggen und testen.

Die ARM Toolchains unterstützen Sprach-Strikt-Modi und Sprach-Konformitätstests über Plug-ins von Partnern wie LDRA, Parasoft und Gimple.

Test der Tool-Ausgabe mittels Code-Coverage-Analyse

Beste Praktiken legen nahe, dass eine Code-Coverage-Analyse sicherstellt, dass alle Code-Pfade während des Tests ausgeführt werden. Die Code-Coverage-Analyse ist ein Laufzeittest, der einen Bericht erstellt, in dem die ausgeführten und nicht ausgeführten Code-Zeilen dargestellt sind. Der Anwender kann dann sein Testpaket anwenden, um zu gewährleisten, dass eine 100prozentige Abdeckung vorliegt. So verringert sich die Wahrscheinlichkeit unzureichend getesteter Software.

Zu einer typischen Code-Coverage-Analyse zählt die Instrumentierung des Quellcodes, sodass die Software selbst berichtet, welche Code-Pfade ausgeführt wurden. Dies lässt sich zwar mit einem Instrumentierungs-Compiler effektiv und einfach einfügen, ändert jedoch das Programm, das sich im Test befindet.

Ein alternativer Ansatz ist ein Hardware-Trace, bei dem das unveränderte Programm auf dem Target läuft und Trace Probes den Zustand des Programms während der Ausführung verfolgen.

Die ARM-Architektur enthält die Embedded Trace Macrocell (ETM), über die sich alle ausgeführten Befehle verfolgen lassen. Mit diesen Daten lässt ein genaues Profil des ausgeführten und nicht ausgeführten Codes erstellen.

Das Keil Microcontroller Development Kit (MDK) für ARM enthält Code Coverage Tools auf Basis eines Echtzeit-Streaming ETM Trace. Diese Streaming-Technik spart erheblich Zeit und Aufwand, indem sich das Zusammenfügen mehrerer Trace Runs erübrigt, um die Code-Coverage-Profile zu vervollständigen.

Der Artikel erschien zuerst in der "Elektronik Praxis".

* Daniel Owens ist Produktmanager für den Bereich Compiler bei ARM.

(ID:43751225)