Die wichtigste Ursache für Software-Schwachstellen sind Software-Defekte, von denen viele auf gängige Sicherheitslücken in Programmen zurückzuführen sind. Eine wachsende Zahl von Verzeichnissen, Normen und Regeln widmet sich diesen verbreiteten Sicherheitslücken, damit diese besser vermieden werden können.
Im November 2013 veröffentlichte die ISO/IEC ihre neuesten Regeln für das Erstellen von sicherem Code in der Programmiersprache C. Das Dokument mit dem Titel „C Secure Coding Rules“ (ISO/IEC 17961:2013 oder secureC) ist der neueste einer immer umfangreicher werdenden Palette von Standards für die sichere Programmierung, die die Grundlage für sichere Software-Entwicklungsprozesse bilden können. Standards wie etwa secureC, das CWE-Lexikon (Common Weakness Enumeration-Lexikon) der Mitre Corporation und der CERT-C Secure Coding Standard des Software Engineering Institute der Carnegie-Mellon-Universität helfen den Software-Entwicklungs-Teams dabei, neue Software von Beginn an sicher zu machen.
Durchsetzen lassen sich diese sicheren Codierungsstandards durch den Einsatz statischer Analyse-Tools. Auf diese Weise können auch Entwickler, die noch wenig Erfahrung im Entwickeln sicherer Software besitzen, von der Erfahrung und dem Wissen profitieren, das in diesen Standards enthalten ist. Die Anwendung von Codierungsstandards mit dem Ziel, Mehrdeutigkeiten und Schwachstellen in dem zu entwickelnden Code zu eliminieren, hat sich bei der Entwicklung hochzuverlässiger Software als äußerst erfolgreich erwiesen, ähnlich wie es die Richtlinien der MISRA (Motor Industry Software Reliability Association) für die Anwendung der C-Sprache in sicherheitskritischen Systeme waren. Die gleiche Vorgehensweise kann mit ähnlicher Wirkung auch beim Entwickeln sicherer Software genutzt werden.
Zum Beispiel spiegelt secureC viele der allgemein ausnutzbaren Software-Schwachstellen wider, die sich im CVE-Lexikon, im CWE-Verzeichnis und in den CERT-C Secure Coding Standards finden. Es geht darum, undefinierte Verhaltensweisen in der Programmiersprache C sowie die Verwendung zweifelhafter Daten zu vermeiden. Statische Analyse-Tools helfen bei der Eliminierung sowohl bekannter als auch unbekannter Schwachstellen und beseitigen außerdem latente Fehler im Code. Der Screenshot in Bild 1 zeigt als Beispiel die Aufdeckung einer Sicherheitslücke infolge eines Pufferüberlaufs, der durch ungeeignete Datentypen verursacht wurde.