Die Softwareentwicklung hat sich im Laufe der Jahre stark verändert. Früher war das Wasserfallmodell die vorherrschende Methodik, bei der die Entwicklung in sequenziellen Phasen erfolgte: Anforderungsanalyse, Design, Implementierung, Test und Wartung. Jede Phase musste abgeschlossen sein, bevor die nächste begann.
Grundlagen und Historie der Softwareentwicklung
Mit der Zeit wurden agile Methoden wie Scrum und Kanban populär, die einen iterativen Ansatz verfolgen und eine engere Zusammenarbeit zwischen den Entwicklungsteams und den Stakeholdern ermöglichen. Diese Methoden erlauben es, schneller auf Änderungen zu reagieren und kontinuierlich Wert zu liefern.
Der nächste evolutionäre Schritt war DevOps, das die Entwicklung (Development) und den Betrieb (Operations) zusammenführt. DevOps-Praktiken wie Continuous Integration (CI) und Continuous Deployment (CD) ermöglichen es, Software schneller und zuverlässiger bereitzustellen.
Wasserfall

Agil

DevOps

Testen – Funktionalität vs. Sicherheit
Traditionell lag der Fokus beim Testen hauptsächlich auf der Funktionalität der Software. Es wurde überprüft, ob die Software die spezifizierten Anforderungen erfüllt und ob sie wie erwartet funktioniert. Sicherheitsaspekte wurden oft vernachlässigt oder erst spät im Entwicklungsprozess berücksichtigt.
Dies ist problematisch, da Sicherheitslücken, die erst in späteren Phasen entdeckt werden, wesentlich teurer zu beheben sind. Studien zeigen, dass die Kosten zur Behebung von Fehlern exponentiell steigen, je später sie im Entwicklungszyklus gefunden werden.
Ein Defekt, der in der Anforderungsphase entdeckt wird, kostet beispielsweise nur einen Bruchteil dessen, was es kosten würde, denselben Fehler in der Produktionsphase zu beheben – oft ist der Unterschied um den Faktor 100 oder mehr.
Darüber hinaus zeigen Untersuchungen, dass 64% aller Softwarefehler ihren Ursprung in den Anforderungs- und Design-Phasen haben. Dies unterstreicht die Bedeutung, Sicherheit von Anfang an in den Entwicklungsprozess zu integrieren.

(Quelle: IBM Systems Sciences Institute)

(Quelle: Crosstalk, the Journal of Defense Software Engineering)
Einbettung von Sicherheit in den SDLC
Um Sicherheit effektiv in den Software Development Life Cycle (SDLC) zu integrieren, wurde das Konzept des Secure Software Development Life Cycle (SSDLC) entwickelt. SSDLC erweitert den traditionellen SDLC um sicherheitsspezifische Aktivitäten in jeder Phase des Entwicklungsprozesses.
Es gibt verschiedene SSDLC-Modelle und Frameworks, die Unternehmen dabei unterstützen, Sicherheit in ihre Entwicklungsprozesse zu integrieren:

Prescriptive Modelle (vorschreibend)
Diese Modelle geben konkrete Anleitungen und Best Practices vor:
- Microsoft SDL (Security Development Lifecycle): Ein von Microsoft entwickeltes Framework mit konkreten Sicherheitsanforderungen für jede SDLC-Phase
- NIST SSDF (Secure Software Development Framework): Ein Framework des National Institute of Standards and Technology, das Praktiken zur Minimierung von Sicherheitsrisiken definiert
- OWASP SAMM (Software Assurance Maturity Model): Ein Framework, das Organisationen hilft, ihre Softwaresicherheitspraktiken zu bewerten und zu verbessern
Descriptive Modelle (beschreibend)
Diese Modelle analysieren bestehende Praktiken:
- BSIMM (Building Security In Maturity Model): Ein datengetriebenes Modell, das auf der Analyse realer Sicherheitsinitiativen von Unternehmen basiert und zeigt, was andere Organisationen tatsächlich tun
Die wichtigste Erkenntnis ist: Nehmen Sie EINES statt KEINES. Jedes SSDLC-Framework ist besser als gar keines. Es ist wichtiger, überhaupt mit einem strukturierten Ansatz zu beginnen, als den "perfekten" Ansatz zu finden.
Im nächsten Artikel werden wir detaillierter auf die verschiedenen SSDLC-Modelle eingehen und untersuchen, wie man sie in der Praxis anwendet. Außerdem werden wir das Konzept des „Shift-Left" genauer betrachten – einen Ansatz, der darauf abzielt, Sicherheitstests so früh wie möglich im Entwicklungsprozess durchzuführen.