Suchen

Compiler Zertifizierte funktionale Sicherheit mit der Programmiersprache C

| Autor / Redakteur: Martin Gisbert * / Franz Graser

Trotz ihrer Sicherheitsmängel wird C auch in Bereichen genutzt, in denen funktionale Sicherheit eine große Rolle spielt. Wie können mit C entwickelte Produkte die Standards für funktionale Sicherheit erfüllen?

Firma zum Thema

Sicher programmieren in C: Die laut dem TIOBE-Index weltweit meist verwendete Programmiersprache weist eine Reihe von Fällen auf, in denen das Code-Verhalten nicht eindeutig definiert ist. Programmierstandards und zertifizierte Compiler umschiffen diese Klippen.
Sicher programmieren in C: Die laut dem TIOBE-Index weltweit meist verwendete Programmiersprache weist eine Reihe von Fällen auf, in denen das Code-Verhalten nicht eindeutig definiert ist. Programmierstandards und zertifizierte Compiler umschiffen diese Klippen.
(Bild: IAR)

Bis zu 190 Fälle undefinierten Verhaltens enthält die aktuelle Version des C99-Standards. Es ist also nicht eindeutig festgelegt, wie der Compiler eine C-Anweisung zu übersetzen hat.

Der Entwickler oder Hersteller eines Compilers muss den C-Code also nach eigenem Verständnis interpretieren. Oder die Anweisung ist zwar sprachlich eindeutig definiert, aber der generierte Code entspricht nicht den Absichten des Programmierers oder macht sehr leicht Fehler.

Ergänzendes zum Thema
Interview mit IAR-Chef Stefan Skarin

IAR-CEO Stefan Skarin: „Wer von Anfang an zertifizierte Compiler nutzt, macht seine Produkte zukunftssicher.“
IAR-CEO Stefan Skarin: „Wer von Anfang an zertifizierte Compiler nutzt, macht seine Produkte zukunftssicher.“
( Bild: IAR )

Wieso hat die Zertifzierung in der Embedded-Entwicklung so an Bedeutung gewonnen?

Immer mehr Anwendungen erfordern funktionale Sicherheit. Viele Produkte und Funktionen, vor allem im Automotive- und Automatisierungsbereich, die zuvor nur dem Komfort dienten, haben sich zu sicherheitskritischen Faktoren für ein ganzes System entwickelt. Deshalb sehen wir eine wachsende Zahl an Kunden, die nach Embedded-Software-Entwicklungstools verlangen, die den Standards der IEC 61508 oder ISO 26262 entsprechen.

Brauchen Tools wirklich eine Zertifizierung?

Ein Compiler kann einen großen Einfluss auf den von ihm generierten Code haben, der ja wiederum die Zuverlässigkeit des Gesamtsystems beeinflusst – also muss er im Validierungsprozess unbedingt berücksichtigt werden. Denn mehr und mehr Applikationen entwickeln sich von Standard- zu sicherheitsrelevanten Anwendungen. Wer also von Anfang an einen zertifizierten Compiler nutzt, macht seine Produkte zukunftssicher.

Wie unterstützen Sie Ihre Safety-Kunden?

In der Vergangenheit mussten die Kunden die Zertifizierung des Compilers selbst vornehmen, was einen unnötigen Zeit- und Kostenaufwand bedeutete. Jetzt, mit der TÜV-zertifizierten Version unserer IAR Embedded Workbench für ARM können unsere Kunden ihren Validierungsprozess beschleunigen und so ihr Toolsinvestment über den gesamten Produktlebenszyklus hinweg schützen.

Ein typisches Beispiel ist die sogenannte Integer Promotion, nach der die Operanden bei Bit-Operationen zunächst auf 32 Bit erweitert werden. Das führt dazu, dass im folgenden Code die if-Bedingung niemals erfüllt wird, obwohl scheinbar eine Variable auf denselben Wert hin überprüft wird, der ihr zugewiesen wurde.

char c1;

c1 = ~0x80;

if (c1 == ~0x80)

{ //wird nie erreicht}

Der Standard für funktionale Sicherheit, die IEC61508, empfiehlt die Programmiersprache C nur für den niedrigsten Safety Integrity Level SIL1. Für SIL3 und SIL4 ist C dagegen ausdrücklich nicht empfohlen – außer, es werden geeignete Codierungs-Standards und Analysetools verwendet.

MISRA hilft über einige Schwachstellen von C hinweg

Eine wichtige Komponente hierfür ist der Programmierstandard MISRA-C. MISRA-C 2004 umfasst etwa 140 Regeln, die in 21 Gruppen unterteilt sind, darunter Initialisierung, Datentypen, Strukturen oder Präprozessor. Ziel von MISRA-C ist es, die erwähnten Schwachstellen des C-Standards zu überwinden und potentielle Risiken bei der Programmierung weitgehend zu verhindern.

Ein wichtiger Sicherheitsaspekt liegt auch in der korrekten Dimensionierung des Stapelspeichers (Stack), da Überläufe des Stack fast immer zu verheerenden Fehlern in der Programmausführung führen. Es ist daher wichtig, den Stackbedarf einer Applikation sorgfältig zu analysieren und dabei den gesamten möglichen Programmablauf inklusive aller Sprünge und Interrrupts in Betracht zu ziehen. Bei komplexen Programmen ist eine manuelle Optimierung jedoch sehr aufwendig, daher greifen Entwickler oft lieber auf geeignete Analysetools zurück.

Doch auch wenn der Softwareentwickler sein Bestes getan hat, um sicher zu programmieren, den Stack richtig dimensioniert, Codierungs-Standards und Analysetools verwendet, bedeutet das nicht, dass das fertige Produkt leicht zu zertifizieren ist. Die Anforderungen der Zertifizierungsbehörden gehen inzwischen über die Validierung von Hardware-Komponenten und den eigenen Prozessen hinaus und beziehen oft auch die Entwicklungswerkzeuge mit ein, da diese entscheidend in die Software eingreifen und diese möglicherweise sogar verändern.

Compiler mit TÜV-Zertifikat sichern Entwickler ab

Die Zulassung von Tools zur Codegenerierung hängt nicht nur vom SIL (Safety Integrity Level), sondern in vielen Fällen auch vom Zertifikator ab. Oft reicht es, die Verbreitung und durchlaufene Tests zu belegen. Schlimmstenfalls muss aber ein Compiler selbst validiert werden, was einen Aufwand von einigen Monaten und Kosten im hohen fünfstelligen Bereich bedeutet. Hinzu kommt die Problematik der unterschiedlichen Tools-Versionen: Wurde eine Software mit der Version x.y übersetzt und das Produkt damit zertifiziert, dann muss in aller Regel nach-zertifiziert werden, wenn der Compiler in der Version x.z verwendet wird. Um das zu verhindern, wird die Entwicklungsumgebung eingefroren, was wiederum verhindert, dass von behobenen Fehlern in neueren Versionen profitiert werden kann.

Eine sichere Lösung bietet die Verwendung von TÜV-validierten Tools zur Code-Generierung wie der „Functional Safety Edition“ der IAR Embedded Workbench von IAR Systems. Deren TÜV-Zertifikat überzeugt auch den kritischsten Prüfer. Ihr größter Wert liegt aber darin, dass die validierte Version auch in Zukunft gepflegt wird, das heißt es werden „Bug Fixes“ geliefert, die die Gültigkeit des Zertifikates nicht verletzen und folglich auch keine erneute Zertifizierung nötig ist, wenn diese eingesetzt werden.

* Martin Gisbert arbeitet als Field Application Engineer bei IAR Systems in München (www.iar.com).

(ID:42379980)