Der Secure Development Lifecycle im Fokus
Webanwendungssicherheit gewährleisten
Sicherheitsvorfälle nehmen weltweit stetig zu. Hierbei geht die Bedrohung nicht mehr nur von Einzelpersonen, sondern auch von Organisationen und staatlichen Akteuren aus. Durch diese immer weiter steigende Bedrohungslage entstehen auch regulatorische Anforderungen, wie z.B. die EU-Richtlinie zur Netzwerk- und Informationssicherheit (NIS-2).
Motivation
Im Jahr 2023 gingen 8.214.886.660 Datensätze in 2.814 Security-Vorfällen verloren. Diese Zahlen konnten für 2024 bereits im Januar übertroffen werden. Der vorläufige Stand für 2024: 35.900.145.035 Datensätze in 9.478 Vorfällen. Hierbei handelt es sich lediglich um Vorfälle, die auch öffentlich gemacht wurden. Die Dunkelziffer ist also vermutlich höher.
Diese Zahlen korrelieren mit den Daten des Open Worldwide Application Security Project (kurz OWASP). Die OWASP gibt regelmäßig eine Top 10 Liste mit den häufigsten Schwachstellen für Webanwendungen heraus. Die häufigste Schwachstelle ist demnach „Broken Access Control“, also unzureichende oder fehlende Maßnahmen zur Kontrolle des Zugriffs auf Ressourcen. Aber auch Klassiker wie Injection-Lücken sind weiterhin vertreten.
Im Folgenden werden wir untersuchen, was notwendig ist, um nicht selbst Teil dieser Statistiken zu werden.
Wissen und Awareness
IT-Security betrifft alle Rollen einer Organisation und der Aufbau von Wissen ist die Grundlage, um Projekte umsetzen zu können, die modernen Standards genügen. Vor dem Aufbau von Wissen zur Vermeidung von Schwachstellen muss jedoch zunächst umfassendes Problembewusstsein geweckt werden. Nur durch hohe Awareness kann die Grundlage für eine nachhaltige IT-Sicherheitskultur geschaffen werden.
Alle Mitglieder eines Teams müssen ein gemeinsames, grundlegendes Sicherheitsverständnis haben und je nach ihrer Rolle individuell geschult werden. Hierbei gibt es viele verschiedene Arten Mitarbeiter zu schulen, die sich auch nach individuellen Vorlieben richten sollten. Wichtig ist, dass es ein übergreifendes Schulungskonzept geben muss, in dem Mitarbeiter die Möglichkeit haben sich fortwährend weiterzubilden.
Sicherheit frühzeitig berücksichtigen
In der modernen Softwareentwicklung gewinnt das Konzept des „Shift Left“ zunehmend an Bedeutung. Der Grundgedanke besteht darin, sicherheitsrelevante Aspekte so früh wie möglich und damit so günstig wie möglich in den Entwicklungsprozess zu integrieren, um potenzielle Sicherheitsprobleme bereits in den frühen Phasen der Softwareentwicklung zu erkennen und zu adressieren.
Ein zentraler Aspekt dieses Ansatzes ist das Security Requirements Engineering, das darauf abzielt, sicherheitsbezogene Anforderungen systematisch zu identifizieren, zu spezifizieren und zu validieren. Durch die frühzeitige Berücksichtigung von Sicherheitsanforderungen kann das Entwicklungsteam sicherstellen, dass mögliche Bedrohungen und Schwachstellen bereits in der Konzeptionsphase adressiert werden. So werden Sicherheitsaspekte nicht als nachträgliches Add-on, sondern als integraler Bestandteil des gesamten Entwicklungsprozesses betrachtet.
Sichere Designprinzipien
Um sich bei der Umsetzung von Anwendungen bestmöglich vor Sicherheitslücken zu schützen, ist es notwendig einige grundlegende Designprinzipien einzuhalten.
Ein wesentliches solches Prinzip ist Security by Design. Das bedeutet, dass Sicherheitsmaßnahmen von Anfang an in das Design und die Architektur der Anwendung integriert werden. Hierzu folgen Entwickler Security Best Practices und Code Konventionen, um Sicherheitslücken zu vermeiden.
Ein weiteres wichtiges Konzept in der Softwareentwicklung ist Zero Trust. Das bedeutet, dass kein Benutzer oder System per se vertrauenswürdig ist. Daraus folgt, dass jede Aktion authentifiziert und autorisiert werden muss, nicht nur, wenn sie von einem Benutzer ausgelöst wurde, sondern auch, wenn sie von einem anderen System oder Dienst ausgelöst wurde.
Neben der Datensicherheit ist es wichtig sich ebenfalls mit dem Schutz von Daten zu beschäftigen. Privacy by Default bedeutet, dass der Schutz personenbezogener Daten ebenfalls von Anfang an in den Entwicklungsprozess integriert wird. Dies gewährleistet, dass Datenschutzvorgaben automatisch erfüllt werden und Benutzerinformationen sicher bleiben.
Secure Development Lifecycle
Der Secure Development Lifecycle hilft dabei die vorherigen Punkte umzusetzen und Security ganzheitlich in den Entwicklungsprozess zu integrieren. Beachtet werden muss allerdings, dass er kein Feature ist, welches man einkaufen kann, sondern ein Mindset, das von allen Beteiligten, inklusive des Kunden, getragen werden muss. Nur so kann eine robuste und sichere Software entstehen, die den steigenden Anforderungen und Bedrohungen der heutigen IT-Welt gewachsen ist.
Der Secure Development Lifecycle unterteilt sich in folgende Phasen:
- Anforderungen: Zu Beginn wird der individuelle Schutzbedarf ermittelt und Sicherheitsanforderungen an die Anwendung definiert. Nicht alle Anwendungen oder Teile einer Anwendung haben zwangsläufig den gleichen Schutzbedarf. Für einige reichen Standardanforderungen, während andere ein höheres Maß an Sicherheit erfordern.
- Design: In der Designphase wird ermittelt welche Komponenten der Anwendung besonders relevant für die Sicherheit sind. Zu diesem Zweck wird Risikoanalyse und Bedrohungsmodellierung verwendet. Beides sind Werkzeuge, die dabei helfen die potenziellen Bedrohungen für die Anwendung zu identifizieren, zu bewerten und zu priorisieren.
- Umsetzung: Zusätzlich zu den bereits diskutierten Designprinzipien sollten automatisierte Werkzeuge genutzt werden. Darunter fallen unter Anderem Werkzeuge zur statischen Codeanalyse. Diese sind bereits in der Lage einige der häufigsten Sicherheitsprobleme zu finden, wie z.B. das Ablegen von Passwörtern im Quellcode. Da viele Anwendungen Abhängigkeiten zu externen Bibliotheken haben, sollte auch Software Composition Analysis (SCA) durchgeführt werden. Das ist ein Prozess, in dem verwendete Bibliotheken automatisiert nach bekannten Schwachstellen untersucht werden. Um mit den Ergebnissen dieser Tools umgehen zu können ist es essenziell auch ein entsprechendes Schwachstellenmanagement zu betreiben. Der Einsatz von automatisierten Testtools ist nur dann sinnvoll, wenn mit den Ergebnissen auch entsprechend umgegangen wird.
- Test: Umgesetzte Features werden mittels Codereviews verifiziert. Zusätzlich werden dynamische Sicherheitstests durchgeführt, die die laufende Anwendung auf Schwachstellen untersuchen.
- Release: Nach der Veröffentlichung der Anwendung ist es wichtig, zuverlässiges Security Monitoring einzurichten sowie zu definieren, was im Fall eines Vorfalls passieren muss. Je nach Anforderung und Schutzbedarf können auch Penetrationstests durchgeführt werden.
- Training: Der gesamte Prozess wird durch das ständige Training aller Beteiligten begleitet. Wie schon eingangs erwähnt ist Awareness und Wissen zu Security Themen die Grundlage, auf der ein Secure Development Lifecycle aufgebaut wird.
Die Einführung eines Secure Development Lifecycle kann die Sicherheit enorm erhöhen, ist aber keine einfache Aufgabe. Es braucht die Bereitschaft aller Beteiligten und kontinuierliche Pflege und Arbeit, um erfolgreich zu sein.