Insecure Design ist eine Kategorie von Schwachstellen, die sich nicht allein durch Implementierung beheben lassen. Das Problem liegt in der Architektur. Kein Patch kann schlechtes Design reparieren.
Beispiele für Insecure Design¶
- Passwort-Reset über Sicherheitsfragen
- E-Shop ohne Limit für Gutscheincodes
- API ohne Rate Limiting auf sensiblen Endpunkten
- Authentifizierung über SMS ohne Alternative (SIM-Swap)
Threat Modeling — STRIDE¶
- Spoofing — Identitätsvortäuschung
- Tampering — unautorisierte Modifikation
- Repudiation — Abstreiten einer Aktion
- Information Disclosure — Informationsleck
- Denial of Service — Dienstverweigerung
- Elevation of Privilege — Rechteeskalation
Secure-by-Design-Prinzipien¶
- Defense in Depth — mehrere Schutzschichten
- Least Privilege — minimale notwendige Berechtigungen
- Fail Secure — bei Fehler sperren, nicht öffnen
- Separation of Duties
- Trust Boundaries — klare Vertrauensgrenzen
Threat Model als Code¶
threatmodel.yaml¶
application: e-shop data_flows: - name: user_login source: browser destination: auth_service threats: - type: spoofing mitigation: MFA + rate limiting - type: information_disclosure mitigation: TLS 1.3, no password in logs
Wichtigste Erkenntnis¶
Sicherheit beginnt beim Design, nicht beim Code. Threat Modeling vor der ersten Codezeile durchführen.