Die Sicherheit von Embedded-Systemen – insbesondere von vernetzten Embedded-Systemen und IoT-Geräten (Internet of Things) – wird zu einem immer wichtigeren Thema. Daher werden Standards entwickelt und die Erwartung an Softwaremanager und Softwareentwickler steigt.
Neue Cybersicherheit-Standards für Embedded-Systeme
Der wachsende Fokus auf sichere Codierungspraktiken und die Sicherstellung, dass der Code nicht anfällig für gefährliche Software-Schwachstellen ist, wird durch die Einführung einer Vielzahl neuer branchenspezifischer Cybersicherheits-Standards belegt: z.B
- ISO/SAE 21434 für eingebettete Systeme im Automobilbereich,
- IEC 81001 (Teil 5-1) für Software im Gesundheitswesen, einschließlich medizinischer Geräte, und
- IEC 62443 für industrielle Automatisierungsgeräte.
Obwohl diese neuen Standards – ISO 21434, IEC 81001-5-1 und IEC 62443 – alle auf ihre eigenen spezifischen Branchen und die einzigartigen Anforderungen und Bedürfnisse der Cybersicherheitslandschaft in diesen Sektoren abzielen, haben sie letztendlich alle eines gemeinsam: Bei der Entwicklung von sicherem Code geht es um die Anforderung, dass sichere Codierungsstandards verwendet werden müssen.
Richtlinien für die sichere Codierung
Sicherheitsorientierte Codierungsstandards gibt es schon seit einiger Zeit. Standards wie:
OWASP
Die OWASP Top 10 (Open Web Application Security Project) wird alle vier Jahre veröffentlicht (zuletzt 2021 – OWASP Top 10 2021). Sie listet die gefährlichsten oder folgenreichsten Sicherheitslücken auf, die Web- und mobile Anwendungen der damaligen Zeit betreffen. Das, obwohl sich die Verwendung oft auch auf Unternehmens- und Embedded-Systeme erstreckt. Die OWASP-Codierungsrichtlinien sind unabhängig von der Programmiersprache, konzentrieren sich aber offensichtlich auf die Arten von Sprachen – wie Java und Javascript –, welche regelmäßig im Web- und mobilen Anwendungsbereich zu sehen sind.
CERT
Die CERT-Standards (CERT C, CERT C++ und CERT Java) sind eine etwas umfangreichere Liste der wichtigsten Sicherheitslücken. Wie der Name schon sagt, sind sie sprachspezifisch und haben tendenziell einen stärker eingebetteten Fokus. CERT C und CERT C++ wurden zuletzt 2016 offiziell von der Carnegie Mellon University in einer gedruckten Publikation veröffentlicht. Aktualisierungen dieser Standards und des neueren CERT-Java-Standards sind im CERT-Wiki vorhanden.
MISRA C:2012
Sogar die MISRA-Gruppe beteiligte sich mit dem MISRA C:2012 Coding Standard Amendment 1 (Amd. 1) am Secure Coding Standard Act. Dieser konzentrierte sich ursprünglich auf den bestehenden MISRA-C-Standard mit einem Fokus auf Zuverlässigkeit, Lesbarkeit und Wartbarkeit des Codes. Damit ergänzte er sicherheitsorientierte Regeln als Treiber für die Entwicklung sichereren C-Codes. Die Änderungen und Erweiterungen von MISRA C:2012 Amd. 1 führte MISRA C von einem auf funktionale Sicherheit ausgerichteten Satz von Codierungsrichtlinien, zu einem sicherheitsorientierten Codierungsstandard.
MISRA C:2012 ist zusammen mit CERT C der am weitesten verbreitete Codierungsstandard für die sichere Entwicklung von Embedded-Software – nach funktionalen Sicherheitsstandards wie ISO 21434 und IEC 81001.
CWEs
Auch wenn es sich nicht um eine Coding-Richtlinie per se handelt, ist die CWE-Liste (Common Weakness Enumeration) von Software-Schwachstellen ein wunderbarer Katalog möglicher Arten von Codierungsfehlern. Dieser Katalog zeigt auf, welche Fehler zu Sicherheitsrisiken führen würden, und zwar in allen möglichen Programmiersprachen und mit einer hierarchischen Struktur von Schwachstellenklassen.
Die vollständige CWE-Liste umfasst über tausend Arten von Schwachstellen. Nicht alle Schwachstellen gelten für alle Programmiersprachen, so dass sie als Codierungsrichtlinie etwas unhandlich ist. Untergruppen von CWEs sind jedoch als Codierungsrichtlinien wertvoll. Die CWEs sind auch in einer jährlichen Top-25-Liste der am häufigsten auftretenden Problemtypen enthalten, welche in CVEs () innerhalb der NVD (National Vulnerability Database) von NIST () identifiziert wurden.
CVEs, welche bestimmte Fälle von Schwachstellen darstellen und in bestimmten Anwendungen oder Bibliotheken auftreten, sollten nicht mit CWEs verwechselt werden, da diese die Kategorien von Problemen definieren unter die bestimmte CVEs fallen. Beachten Sie, dass es sich um eine Mehrfachzuordnungsbeziehung zwischen den beiden handelt. Viele CVEs fallen unter eine einzige CWE-Schwachstellenkategorie, eine einzelne CVE kann aber auch mehrere CWE-Kategorien haben.
Durchsetzung und Berichterstattung über die Einhaltung von Codierungsstandards
Der erste Schritt zur Erstellung von sichererem Code, ist die Entscheidung für den zu verwendenden Codierungsstandard oder die zu verwendenden Richtlinien. Die nächste Aufgabe besteht dann jedoch darin, sicherzustellen, dass diese Codierungsrichtlinie im gesamten Entwicklungsteam oder in der gesamten Organisation (konsistent) durchgesetzt wird.
Das Durchsetzen von Codierungsrichtlinien kann eine mühsame Aufgabe sein. Traditionell wurden Codierungsregeln und -konventionen im Rahmen des Codeüberprüfungsprozesses durchgesetzt. Bei diesem überprüfen Entwickler ihren Code gegenseitig. Bei Standards wie CERT oder MISRA, die Hunderte von Regeln enthalten – eine Menge. Der Code-Reviewer muss alle Regeln kennen – und die Wahrscheinlichkeit von Inkonsistenzen zwischen Reviewern in Bezug auf das, was als Verstoß oder sogar relevant angesehen wird ist hoch. Daher sind manuelle Code-Reviews nicht wirklich der beste Mechanismus für diese Aufgabe.
Glücklicherweise sind statische Code-Analyse-Tools – oft als SAST-Tools (Static Application Security Test) bezeichnet, wenn sie in einem Sicherheitskontext angewendet werden – SEHR gut darin, Regeln konsistent und universell durchzusetzen. Zudem sind sie auch viel schneller als ein menschlicher Prüfer.
Statische Analysetools – wie Understand by SciTools Code Check – bieten eine automatisierte Lösung für die Durchsetzung von Codierungsstandards. Diese wird dann möglicherweise als Grundlage für einen unterstützten Code-Review-Prozess verwendet.
Schließlich ist es in den meisten Fällen nicht nur notwendig, einen Codierungsstandard durchzusetzen, sondern auch den Grad der Einhaltung und etwaige Ausnahmen zum Nachweis der Einhaltung zu melden. Die verwendeten Statischen Analysewerkzeuge, müssen also auch in der Lage sein, diese Nachweise in einem Format zu erbringen, das dann extern verwendet werden kann.
Großartig! Wie fange ich an?
Bitte kontaktieren Sie uns, wenn Sie eine kostenlose Testversion von Understand by SciTools haben möchten. So können Sie die von Ihnen gewählten sicheren Codierungsrichtlinien noch heute durchsetzen!