Sichere Anwendungsentwicklung bedeutet, Sicherheit nicht erst am Ende zu prüfen, sondern von Anfang an in Anforderungen, Architektur, Code, Tests, Konfiguration und Betrieb einzubauen. Im Kern ist es: Schwachstellen sollen möglichst früh verhindert, früh erkannt oder im Schaden begrenzt werden.
Wichtige Begriffe:
- SDL (Secure Development Lifecycle): Strukturierter Entwicklungsprozess, der Sicherheit in jede Phase einbindet.
- Threat Modeling: Systematische Suche nach Bedrohungen, bevor Code geschrieben wird.
- STRIDE: Modell mit sechs Bedrohungskategorien: Spoofing, Tampering, Repudiation, Information Disclosure, Denial of Service, Elevation of Privilege.
- Input Validierung: Prüfung von Eingaben, bevor sie verarbeitet werden.
- Output Encoding: Kodierung von Ausgaben, damit Eingaben nicht als Code interpretiert werden.
- Prepared Statement: Parametrisierte Datenbankabfrage, bei der SQL-Befehl und Benutzerdaten getrennt bleiben.
- Sandboxing: Ausführung von Code in einer abgegrenzten Umgebung mit begrenzten Rechten.
- SAST: Statische Analyse des Quellcodes.
- DAST: Dynamischer Test der laufenden Anwendung von außen.
- DevSecOps: Integration von Sicherheit in automatisierte Entwicklungs- und Deployment-Prozesse.
- SCA (Software Composition Analysis): Prüfung externer Bibliotheken und Pakete auf bekannte Schwachstellen.
- SBOM (Software Bill of Materials): Software-Stückliste aller enthaltenen Komponenten.
Auch Sichere Konfiguration ist Teil sicherer Anwendungsentwicklung. Der Code kann sauber sein und trotzdem unsicher laufen, wenn Produktionswerte falsch gesetzt sind.
Wichtige Leitfragen für sichere Anwendungskonfiguration:
- Startet die Anwendung mit sicheren Standardwerten?
- Bricht sie ab, wenn kritische Produktionswerte fehlen?
- Sind Testfunktionen in Produktion technisch ausgeschlossen?
- Werden gefährliche Einstellungen im Review sichtbar?
- Gibt es automatische Prüfungen vor dem Deployment?
- Können Secrets rotiert werden, ohne den Code zu ändern?
Sichere Anwendungsentwicklung schützt nicht nur einzelne Codezeilen. Sie verbindet sichere Architektur, saubere Eingabe- und Ausgabeprüfung, sichere Fehlerbehandlung, begrenzte Ausführungsumgebungen, sichere Konfiguration, automatisierte Analyse, DevSecOps und Supply-Chain-Schutz zu einem durchgängigen Entwicklungsprozess.