Sicheres C- und C++-Development in der Automobilfertigung und bei softwaredefinierten Fahrzeugen (SDV)
23. Oktober 2024
0 Min. LesezeitDie Automobilindustrie befindet sich mit dem Aufkommen des Software Defined Vehicle (SDV) an einem einzigartigen Wendepunkt ihrer Geschichte. Beim World Congress der Society of Automotive Engineers (SAE), der vom 16. bis 18. April 2024 in Detroit stattfand, wurde ausdrücklich darauf hingewiesen, dass ein Markt von mehr als 500 Milliarden US-Dollar Investitionen in Forschung und Entwicklung sowie technologische Fortschritte in der Automobilindustrie anziehen wird. Der Wandel hin zum SDV ermöglicht neue Einnahmequellen durch Abonnements für Funktionen und Services, die mit dem in der Automobilbranche seit ihren Anfängen üblichen „Einmalkauf“-Modell nicht möglich waren.
Automobilhersteller und ihre Zulieferer wollen sich zu Technologieunternehmen entwickeln, deren Grundlage die elektrische/elektronische (E/E-)Architektur bildet und in deren Zentrum Halbleiter stehen. Ein entscheidender Wegbereiter für SDVs sind außerdem Microservices, eine Container-Architektur und umfangreiche Cloud-Computing-Ressourcen.
Dieser Sektor setzt fast ausschließlich auf die Softwareentwicklung mit C und C++, da diese Programmiersprachen zuverlässig, effizient und robust sind. Allerdings bergen diese Sprachen Sicherheitsrisiken wie Pufferüberläufe und Probleme mit der Speichersicherheit, die seit Jahrzehnten bekannt sind. Der SDV-Markt passt unmittelbar zu Snyks Mission, Software sicher zu machen. Automobilhersteller profitieren von den Infrastructure-as-Code- (IaC-) und Container-Angeboten von Snyk sowie von der nahtlosen Integration mit verschiedenen Cloud-Anbietern.
Zum Beispiel ist Mercedes mit seinem MB Operating System ganz vorne mit dabei.
Wir haben die beste verfügbare Hardware schnell mit dem Qualcomm Gen4 8295 integriert, der erst sechs Monate zuvor für Verbraucher verfügbar gemacht worden war. Das war ein ambitioniertes Projekt, und ich bin enorm stolz auf das Team: Es hat die Herausforderung angenommen, 20 GB kompilierten Code erstellt und diesen Vorläufer von MB.OS in die E-Klasse integriert. Die dabei gewonnenen Erkenntnisse sind entscheidend für die Einführung unseres vollwertigen MB.OS 1.0.
MISRA-Konformität für C und C++
Die MISRA-C:2023-Richtlinien konzentrieren sich in erster Linie auf Sicherheit und Zuverlässigkeit in kritischen Systemen. Dazu gehören auch Aspekte der Anwendungssicherheit, insbesondere dort, wo Schwachstellen zu Sicherheitsrisiken führen könnten. Die MISRA-C:2023-Richtlinien decken zwar ein breites Themenspektrum ab, doch einige Regeln und Vorgaben sind besonders wichtig, um die Anwendungssicherheit zu verbessern. Sie fördern Praktiken, die undefiniertes Verhalten, Speicherkorruption, unbefugten Zugriff und andere häufige Schwachstellen verhindern.
Wie die C-Richtlinien enthält auch die Spezifikation MISRA C++:2023 mehrere Regeln und Vorgaben zur Anwendungssicherheit sowie Beispiele für konformen und nicht konformen Code.
Einige MISRA-Richtlinien zur Konformität bei der C- und C++-Entwicklung nennen Vorgaben und Regeln wie die folgenden, die sich mit Anwendungssicherheit und der Entwicklung sicherer C- und C++-Software befassen:
MISRA-Vorgabe 4.12 – Dynamische Speicherzuweisung darf nicht verwendet werden: Durch die Einschränkung dynamischer Speicherzuweisungen lässt sich eine Klasse von Schwachstellen verhindern, die auf Fehler in der Speicherverwaltung zurückzuführen sind.
MISRA-Regel 1.3 – Es darf kein undefiniertes oder kritisch nicht spezifiziertes Verhalten geben: Undefiniertes Verhalten kann zu Sicherheitslücken führen. Daher ist diese Regel für die Sicherheit entscheidend.
MISRA-Regel 18.1 – Ein Zeiger, der aus einer arithmetischen Operation mit einem Zeigeroperand hervorgeht, muss auf ein Element desselben Arrays zeigen wie dieser Zeigeroperand: Mit dieser Regel sollen Zugriffe außerhalb der Grenzen verhindert werden – eine häufige Schwachstelle in C-Programmen.
MISRA-Regel 21.3 – Die Speicherzuweisungs- und -freigabefunktionen aus <stdlib.h> dürfen nicht verwendet werden: Wie bei Vorgabe 4.12 verringert der Verzicht auf dynamische Speicherzuweisungen die Risiken von Schwachstellen in der Speicherverwaltung.
MISRA-Regel 22.1 bis Regel 22.20 (Ressourcen): Eine ordnungsgemäße Verwaltung von Ressourcen, einschließlich Fehlerbehandlung und Ressourcenfreigabe, ist entscheidend, um Lecks und Erschöpfung von Ressourcen zu verhindern. Diese können bei Denial-of-Service-Angriffen ausgenutzt werden oder zu undefiniertem Verhalten führen, das Angreifer ausnutzen können.
Die MISRA-C-Spezifikation bezeichnet ihre Richtlinien zwar nicht ausdrücklich als „Sicherheitsmaßnahmen“, doch die Einhaltung ihrer umfassenden Regeln und Vorgaben verbessert die Sicherheitslage der Software, indem zahlreiche häufige Ursachen von Sicherheitslücken in C- und C++-Code beseitigt werden. Die Richtlinien fördern ein robustes, klar definiertes Verhalten und unterstützen so die Entwicklung sicherer und zuverlässiger Systeme.
Wie Snyk Sie unterstützt
Snyk unterstützt Entwickler dabei, ihren Code zu schützen – auch bei der Arbeit mit C und C++. Durch die Integration von Sicherheit in den Entwicklungslebenszyklus, etwa mit DevSecOps-Methoden, hilft Snyk Entwicklern, Schwachstellen zu erkennen, bevor sie zu kritischen Problemen werden. Darüber hinaus hilft Snyk Entwicklern, unsichere Codemuster bereits beim Speichern des Codes in der IDE zu erkennen. Sie müssen also nicht warten, bis Continuous-Integration- (CI-) und Build-Pipelines durchlaufen sind, und auch keine Codekompilierung abwarten.
Mit Tools wie Snyk Code können Sie Ihre C- und C++-Codebasen auf Schwachstellen untersuchen und konkrete Hinweise zu deren Behebung erhalten.
Betrachten wir als Beispiel eine häufige Schwachstelle in C++: den Pufferüberlauf. Der folgende einfache Codeausschnitt veranschaulicht das Problem:
In diesem C++-Beispielprogramm kann die Funktion strcpy einen Pufferüberlauf verursachen, wenn die Eingabezeichenfolge größer ist als der Puffer. Snyk hilft Ihnen dabei, solche Schwachstellen zu erkennen und sicherere Alternativen wie strncpy zu empfehlen:
Wenn Snyk jedoch in Ihrer IDE installiert ist, erhalten Sie zwei Superkräfte:
Snyk erkennt anfälligen Code wie diesen Pufferüberlauf – ganz ohne Kompilierung.
Snyk schlägt mithilfe von Snyk Agent Fix eine Korrektur vor.
Möchten Sie diese Magie in Aktion sehen? Hier geht’s zum Video:

Mit sicheren Programmierpraktiken und Tools wie Snyk können Entwickler das Risiko von Schwachstellen in ihren C- und C++-Codebasen erheblich senken. Registrieren Sie sich noch heute bei Snyk und schützen Sie Ihre kritischen Softwareprojekte.
Beispiele für konformen und sicheren sowie unsicheren und anfälligen C- und C++-Code
Um zu zeigen, wie MISRA-Richtlinien und -Spezifikationen mit Code und Schwachstellen aus der Praxis zusammenhängen, sehen wir uns das C-Programm program2.c an. Es veranschaulicht unerwünschtes Verhalten (MISRA-Regel 1.3) aus der obigen Liste.
Hier ist der C-Programmcode:
Eine Division durch null ist in C undefiniertes Verhalten und kann zu unvorhersehbaren Ergebnissen führen. Die MISRA-Richtlinien verbieten solche Operationen zu Recht, um die Sicherheit kritischer Software zu gewährleisten.
Kompilieren Sie das Programm zunächst und führen Sie es dann aus:
Sie werden feststellen, dass der GCC-Compiler eine Warnung zur Division durch null ausgibt:
Dieses Programm ist jedoch einfach und klein. In realen Szenarien können solche Probleme in einer umfangreichen Codebasis und bei zahlreichen Compiler-Warnungen, die an die Standardausgabe weitergeleitet werden, schwer zu finden sein.
Schwachstellen mit Snyk Code finden
Eine Warnmeldung des Compilers zu _division by zero_ und anderen Problemen kann auf undefiniertes Verhalten hinweisen, das schwer zu erkennen ist und erst spät im Entwicklungszyklus auffällt. Snyk Code hilft Ihnen, solche Probleme frühzeitig im Entwicklungszyklus zu erkennen, indem Ihre Codebasis vor der Kompilierung auf Schwachstellen untersucht wird.
Snyk nutzt Techniken des maschinellen Lernens in seiner statischen Code-Engine für Anwendungssicherheit, um Programmaufrufabläufe zu verstehen und Codepfade von Quelle zu Senke nachzuverfolgen. So findet Snyk unsicheren Code und potenzielle Schwachstellen in Ihrer Codebasis, ohne den Code zu kompilieren.

Tools für C- und C++-Sicherheitskonformität und sicheren Code
Zu den Open-Source-Optionen zur Überprüfung der MISRA-Konformität von C- und C++-Code gehören die folgenden Tools:
OpenMRC: OpenMRC ist ein Open-Source-Prüftool für MISRA-C-Regeln, das als Eclipse-CDT-Plugin (C/C++ Development Tooling) entwickelt wurde. Es analysiert Code für softwaredefinierte Fahrzeuge anhand der MISRA-C:2004-Richtlinien und gibt Meldungen zu Verstößen aus. So können Entwickler ihren Quellcode für die funktionale Sicherheit entsprechend anpassen.
Clang-misracpp2008: Dieses inzwischen archivierte Projekt sollte einen Open-Source-Prüfer für die MISRA-C++:2008-Regeln auf Basis der LLVM/Clang-Infrastruktur entwickeln. Obwohl es archiviert und nicht mehr aktiv ist, empfehlen die Entwickler
clang-tidy-misraals Alternative.clang-misracpp2008wurde als LLVM/Clang-Plugin implementiert und zeigte, wie sich MISRA-C++-Regeln mithilfe benutzerdefinierter Logik und vom Compiler bereitgestellter Flags abdecken lassen.
Neben den genannten Tools ist auch Snyk eine Option, die Sie in Betracht ziehen sollten – unabhängig davon, ob die Tools Ihren Ansprüchen entsprechend gewartet werden und Qualitätsvorgaben sowie umfassende Schwellenwerte für Sicherheitstests einhalten.
Die Sicherheitsplattform von Snyk umfasst Snyk Code, eine auf Entwickler ausgerichtete SAST-Lösung in Echtzeit, die die Codesicherheit mit einer entwicklerfreundlichen Benutzererfahrung optimiert. Die Ergebnisse von Snyk enthalten Lernmaterialien, Beispielkorrekturen als Empfehlungen zur Behebung und manchmal sogar eine automatische Korrektur mit Snyk Agent Fix.
Snyk ist kostenlos und lässt sich auf verschiedene Weise zum Scannen von C- und C++-Code verwenden: Installieren Sie die Snyk-IDE-Erweiterung, importieren Sie Git-Repositories aus Bitbucket oder GitHub oder verwenden Sie die Snyk CLI.
Bei C- und C++-Programmen können Schwachstellen in der Codebasis auch außerhalb des vom Entwickler geschriebenen Codes entstehen – etwa durch eingebundenen Code aus Open-Source-Bibliotheken.
Abschließend empfehle ich Ihnen dringend die kurzen, prägnanten Lernmodule von Snyk Learn C vulnerability educational lessons, die interaktive Lernerfahrungen zum Thema Sicherheit bieten. Die Lektionen behandeln verschiedene C- und C++-Schwachstellen wie Nullzeiger-Dereferenzierung, Double Free, schlechte Programmierkonventionen und mehr.
Sichern Sie Ihren Code mit modernsten Erkenntnissen
Lernen Sie in nur 30 Minuten das gesamte Funktionsspektrum von Snyk Code SAST kennen.
