Bei der Entwicklung großer Softwaresysteme spielen Sicherheitsaspekte oft eine untergeordnete Rolle. Ein Grund dafür ist die oftmals ohnehin hohe Komplexität des Gesamtsystems. Es gibt zwar Methoden, um einzelne Sicherheitslücken zu vermeiden. Es gibt allerdings keine praktikable Möglichkeit, umfassend die Sicherheit eines großen Softwaresystems zu garantieren.
Damit umfassende Sicherheitsgarantien gegeben werden können, müssen effiziente Methoden gefunden werden, die – im Gegensatz zu momentan verwendeten Methoden – auch bislang unbekannte Angriffe berücksichtigen. Dabei muss die Sicherheit des Gesamtsystems bereits zum Entwurfszeitpunkt berücksichtigt werden. Sicherheit ist keine Produkteigenschaft, die im Nachhinein hinzugefügt werden kann.
Um die Gesamtsicherheit großer Softwaresysteme bereits zum Entwurfszeitpunkt zu beurteilen und zu verbessern, wird bisher mit sogenannten Angriffsbäumen gearbeitet. Bei diesem Top-Down-Ansatz werden Angriffsziele bereits bekannten Angriffen zugeordnet. Diese werden dann wiederum einzelnen Teilen des Systems zugeordnet, deren Sicherheit durch zusätzliche Maßnahmen (beispielsweise durch den Einsatz von Verschlüsselung) verbessert werden kann. Es existieren Softwarelösungen, die Programme auf bekannte Sicherheitslücken (wie beispielsweise SQL-Injektionen) testen und dadurch Angriffe auf das endgültige Produkt unwahrscheinlicher machen. Desweiteren gibt es Leitlinien, die Programmierer für bestimmte Schwachstellen sensibilisieren und somit die Anzahl möglicher Angriffe auf das Softwaresystem verringern. Der von Microsoft geprägte Security Development Lifecycle (SDL) integriert Sicherheit als explizite Anforderung in den Software-Entwicklungsprozess.
All diese Methoden und Maßnahmen erschweren jedoch nur bekannte Angriffe. Eine generelle Sicherheitsgarantie kann dadurch nicht gegeben werden.


