Richtlinien für Programmierung und Security

Programmierrichtlinien bei jedem Commit automatisch durchsetzen

Durch statische Analyse werden Programmierrichtlinien von bloßen dokumentierten Empfehlungen zu verbindlichen technischen Vorgaben. PC-lint Plus setzt diese Vorgaben bei jedem Build-Vorgang automatisch für Standards wie MISRA C und C++, AUTOSAR, CERT-C und CWE durch; zudem ermöglicht das Tool die Definition projektspezifischer Regeln mittels eines Query-basierten Mechanismus, der Architekturvorgaben, Namenskonventionen sowie domänenspezifische Sicherheitsanforderungen abdeckt.

RichtlinieZweckVon PC-lint Plus unterstützte Versionen
MISRA CSicherheit und Zuverlässigkeit für C in embedded/sicherheitskritischen SystemenMISRA C:2025, MISRA C:2023, MISRA C:2012 (Änderungen 1–4), MISRA C:2004
MISRA C++Sicherheit und Zuverlässigkeit für C++ in embedded/sicherheitskritischen SystemenMISRA C++:2023, MISRA C++:2008
AUTOSAR Programmierrichtlinien für AUTOSAR-konforme Software für Fahrzeug-SteuergeräteAUTOSAR 17 und 19
CERT-CBewährte Verfahren für Sicherheit und Zuverlässigkeit in CStatisch durchsetzbare CERT-C-Regeln
CWEAuflistung häufiger Schwachstellen der Software und der HardwareCWE Top 25, CWE Top 10, KEV (alle für C/C++ relevanten Einträge), CWE-kompatibel zertifiziert
Kundenspezifische RichtlinienUnternehmensspezifische Regeln und EinschränkungenAbfragebasierte kundenspezifische Prüfungen mittels AST-Analyse

MISRA C und MISRA C++

MISRA (Motor Industry Software Reliability Association) veröffentlicht die am weitesten verbreiteten Richtlinien für die Programmierung von sicherheitskritischer und Embedded Software. Trotz des Namens, der auf die Automobilindustrie verweist, werden die MISRA-Richtlinien in der Luft- und Raumfahrt, der Medizintechnik, der Industrie sowie in der Bahntechnik überall dort verwendet, wo C oder C++ als Implementierungssprache zum Einsatz kommt.

MISRA C bezieht sich auf die Programmiersprache C. Die Regeln zielen darauf ab, Konstrukte zu eliminieren, die undefiniert, implementierungsabhängig oder in embedded Kontexten anderweitig risikobehaftet sind: nicht initialisierte Variablen, implizite Typkonvertierungen, nicht erreichbarer Code und Hunderte ähnlicher Muster. MISRA C++ überträgt diese Vorgaben auf C++.

Die Richtlinien entwickeln sich mit den Sprachstandards (für C und C++) weiter. MISRA C:2025 und MISRA C++:2023 sind die aktuellen Ausgaben.

PC-lint Plus – MISRA-Unterstützung

  • MISRA C: 2025
  • MISRA C:2023
  • MISRA C:2012 mit den Änderungen 1, 2, 3 und 4
  • MISRA C:2004
  • MISRA C++:2023
  • MISRA C++:2008

AUTOSAR

AUTOSAR (Automotive Open System Architecture) ist eine globale Partnerschaft der Automobilindustrie, die eine standardisierte Systemarchitektur für elektronische Steuergeräte (ECUs = Electronic Control Units) definiert. Die C++-Programmierrichtlinien legen Regeln für das Schreiben von C++-Code fest, der sich korrekt in AUTOSAR-konforme ECUs verschiedener Zulieferer integrieren lässt.

Die AUTOSAR-C++-Richtlinien befassen sich mit Codequalität, Zuverlässigkeit und Sicherheit im Kontext von Software-Systemen für die Automobilindustrie. Die Einhaltung dieser Richtlinien unterstützt die Interoperabilität zwischen Komponenten, die von unterschiedlichen Teams und Zulieferern entwickelt wurden, und ebnet den Weg zur Einhaltung der funktionalen Sicherheit gemäß ISO 26262 für C++-Codebasen.

PC-lint Plus unterstützt AUTOSAR17 und AUTOSAR19 von Haus aus.

CERT-C

Die CERT-C-Programmierrichtlinien wurden von der CERT-Abteilung (Computer Emergency Response Team) am Software Engineering Institute (SEI) der Carnegie Mellon University entwickelt. Er enthält Programmierrichtlinien und bewährte Verfahren für die Programmiersprache C, die spezifisch auf Sicherheitslücken und Zuverlässigkeitsmängel ausgerichtet sind.

CERT-C ist branchenunabhängig. Er wird für Software in der Luft- und Raumfahrt, der Automobilindustrie, im Gesundheitswesen und im Finanzsektor verwendet, wo immer sicherer und zuverlässiger C-Code erforderlich ist. Er ist im Rahmen der Konformitätsframeworks „Common Criteria“ und ISO 27001 anerkannt und wird häufig zusammen mit MISRA C für Projekte verwendet, die sowohl Safety- als auch Security-Anforderungen erfüllen müssen.

PC-lint Plus unterstützt viele der statisch durchsetzbaren Richtlinien von CERT-C und deckt damit einen breiten Bereich der Sicherheits- und Zuverlässigkeitsregeln des Standards ab.

CWE: Common Weakness Enumeration

CWE ist eine von der Community gepflegte Liste gängiger Arten von Software- und Hardware-Schwachstellen, die auf der Grundlage von Daten des NIST (National Institute of Standards and Technology) und der CISA (Cybersecurity & Infrastructure Security Agency) erstellt wird. Ihr Ziel ist es, Schwachstellen bekannt zu machen, damit diese bereits während der Entwicklung beseitigt werden können, anstatt erst nach der Bereitstellung entdeckt zu werden.

Die Liste der „CWE Top 25 der gefährlichsten Software-Schwachstellen“ sowie die Liste der „CWE Top 10 KEV (Known Exploited Vulnerabilities)“-Schwachstellen bieten Entwicklungsteams und Tool-Anbietern priorisierte Ansatzpunkte. Eine Zertifizierung hinsichtlich der CWE-Kompatibilität belegt, dass ein statisches Analyse-Tool die Schwachstellen auf diesen Listen auf dokumentierte und überprüfbare Weise abdeckt.

PC-lint Plus ab Version 2.1 ist als CWE-kompatibel zertifiziert. Es deckt alle für C und C++ relevanten Schwachstellen der CWE-Liste der Top 10 KEV-Schwachstellen sowie den Großteil der CWE Top 25 ab.

Kundenspezifische Programmierrichtlinien

Veröffentlichte Programmierrichtlinien decken gängige Fehlerklassen und sprachspezifische Risiken ab. Die meisten Projekte unterliegen zudem spezifischen Einschränkungen hinsichtlich ihrer Architektur, Organisation oder ihres Anwendungsbereichs, die über allgemeine Richtlinien hinausgehen. PC-lint Plus unterstützt beides durch einen Query-basierten Mechanismus für benutzerdefinierte Regeln, der projektspezifische Einschränkungen ebenso statisch durchsetzt wie MISRA- oder AUTOSAR-Regeln.

Das Query-System von PC-lint Plus durchläuft den während der Analyse generierten Abstract Syntax Tree (AST) und verwendet dabei eine statisch typisierte, domänenspezifische Sprache, um die Prüfkriterien präzise zu definieren. Mit benutzerdefinierten Regeln können architektonische Einschränkungen durchgesetzt, Anti-Muster erkannt oder organisationsspezifische Sicherheitsregeln definiert werden.

Derselbe Abfragemechanismus dient auch zur Definition begründeter Ausnahmen: präzise, musterbasierte Unterdrückungen, die nur unter spezifischen Bedingungen gelten, anstatt pauschaler Unterdrückungen, die eine gesamte Regelkategorie außer Kraft setzen. Dadurch bleiben die  Dateien mit Unterdrückungen übersichtlich, nachvollziehbar und zielgerichtet.

Verwaltung von Unterdrückungen und Audit-Bereitschaft

Eine statische Analyse einer bestehenden Codebasis deckt Ergebnisse auf, die einer Überprüfung, Begründung oder Unterdrückung bedürfen. Ohne einen strukturierten Ansatz zur Verwaltung dieser Entscheidungen sammeln sich in den Unterdrückungsdateien veraltete Ausnahmen an, begründete Abweichungen bleiben undokumentiert, und die Konfiguration weicht von dem Zustand ab, der bei der ursprünglichen Prüfung genehmigt wurde.

PC-lint Plus ermöglicht die Unterdrückung auf der Ebene einzelner Befunde, Code-Bereiche, Dateien und Regelkategorien. Jede Unterdrückung ist dokumentierbar und nachvollziehbar. Die Funktion "Diagnostic Accounting" zur Diagnoseerfassung kennzeichnet Unterdrückungen, die nicht mehr benötigt werden, und verhindert so die Anhäufung veralteter Ausnahmen, die das Vertrauen in das Audit untergraben könnten.