Sichere Entwicklungssysteme und Laufzeitumgebungen verwenden
Sichere Entwicklungssysteme und Laufzeitumgebungen verwenden
Für die Generierung und Wartung sicherer Software ist es sehr nützlich, schon bei der Softwareentwicklung strukturiert zu programmieren und leicht überschaubare und erlernbare Werkzeuge zu verwenden, die möglichst enggefasste Sichtbarkeitsregeln und gekapselte Programmmodule mit eindeutig definierten Schnittstellen erlauben. Durch eingeschränkte Freiheiten bei der Programmierung, wie zum Beispiel die Beschränkung auf einfache Vererbung oder das Verbot von Zirkelbezügen oder kritischen Typumwandlungen, wird in der Regel zugleich das Potenzial von Programmfehlern eingeschränkt.
- Dabei ist es auch sinnvoll und hilfreich, bereits getestete Software durch geeignete Maßnahmen wiederzuverwenden, wie zum Beispiel durch die Verwendung von Prozeduren oder objektorientierten Datenstrukturen.
Entwickler von Software, die zum sicheren Datenaustausch zwischen Rechnern eingesetzt wird, müssen moderne Entwicklungssysteme und Programmiersprachen einsetzen, da ältere Systeme häufig Sicherheitslücken aufweisen und nicht über die entsprechende Sicherheitsfunktionalität verfügen.
- Sichere Software ist nur in entsprechenden, modernen und sicheren Laufzeitumgebungen lauffähig und sollte mit Entwicklungswerkzeugen (wie zum Beispiel Compilern) erstellt werden, die ein möglichst hohes Maß an inhärenter Sicherheit bieten, wie zum Beispiel Modulsicherheit, Typsicherheit oder die Vermeidung von Pufferüberläufen.
Auch bei Geräten, die nicht in einem Rechnernetz beziehungsweise im Internet der Dinge betrieben werden, kann die Informationssicherheit durch geeignete Entwicklungssysteme und Laufzeitumgebungen erhöht werden.
- Datenverlust durch unzuverlässigen Programmcode (Computerabsturz) kann vorbeugend zum Beispiel durch compilergenerierte Überprüfung von Indizes von Datenfeldern, unzulässigen Zeigern oder nach dem Auftreten von Programmfehlern durch Ausnahmebehandlung in der Laufzeitumgebung vermieden werden.
- Ferner ist es in objektorientierten Laufzeitumgebungen unerlässlich und auch in anderen Systemen sicherer, eine automatische Speicherbereinigung durchzuführen, damit nicht versehentlich Speicherplatz freigegeben wird.
Manche Entwickler vertrauen auf die Verifikation von Programmcode, um die Korrektheit von Software zu verbessern.
- Ferner ist es möglich, bereits implementierte Software durch bestimmte Verfahren, wie zum Beispiel die Verwendung von Proof-Carrying Code, erst während der Laufzeit zu überprüfen und deren Ausführung bei der Nichteinhaltung von Sicherheitsrichtlinien zu verhindern.