Sichere Software entwickeln: So setzen Sie die OWASP Top 10 Proactive Controls um
5. November 2020
0 Min. LesezeitKürzlich dachte ich an eine großartige Eröffnungssession der DevSecCon-Community zurück, die wir letztes Jahr mit niemand Geringerem als Jim Manico veranstaltet haben.
In dieser Session führte Jim uns durch die Liste der OWASP Top 10 Proactive Controls und zeigte, wie sie sich in unsere Webanwendungen integrieren lassen. Das von Manico selbst sowie Katy Anton und Jim Bird verfasste Dokument zu den Proactive Controls bietet einen Sicherheitsüberblick für Entwickler, die sich mit Web-Sicherheit beschäftigen, die verschiedenen Ebenen von Sicherheitsrisiken verstehen und erfahren möchten, wie sie sich davor schützen können.
Wenn Sie das interessant finden, lesen Sie weiter: Wir gehen die OWASP Top 10 Proactive Controls einzeln durch!
OWASP Top 10 Proactive Controls 2020
Sicherheitsanforderungen definieren
Sicherheits-Frameworks und -Bibliotheken nutzen
Datenbankzugriffe absichern
Daten kodieren und escapen
Alle Eingaben validieren
Digitale Identität implementieren
Zugriffskontrollen durchsetzen
Daten überall schützen
Sicherheitsprotokollierung und -überwachung implementieren
Alle Fehler und Ausnahmen behandeln
OWASP Proactive Control 1 — Sicherheitsanforderungen definieren
Die Entwicklung eines sicheren Produkts beginnt damit, die Sicherheitsanforderungen zu definieren, die berücksichtigt werden müssen. So wie geschäftliche Anforderungen uns bei der Gestaltung des Produkts helfen, sorgen Sicherheitsanforderungen dafür, dass wir von Anfang an die Sicherheit berücksichtigen.
Ein bekanntes OWASP-Projekt namens Application Security Verification Standard – kurz OWASP ASVS – definiert über 200 verschiedene Anforderungen für die Entwicklung sicherer Webanwendungen.
Darin sind Sicherheitsanforderungen wie Authentifizierungsprotokolle, Sitzungsverwaltung und kryptografische Sicherheitsstandards aufgeführt. Besonders wichtig: Der ASVS bietet einen stufenweisen Ansatz, mit dem Sie Sicherheitsanforderungen nach und nach umsetzen können, wenn Sie gerade erst anfangen.

Quelle: GitHub
OWASP Proactive Control 2 — Sicherheits-Frameworks und -Bibliotheken nutzen
Welche Tools brauchen Sie, um sichere Software zu entwickeln?
Die Liste reicht vom Schutz vor Injection-Angriffen über Authentifizierung und sichere kryptografische APIs bis hin zur Speicherung sensibler Daten und vielem mehr. Um diese Risiken zu adressieren, sollten Sie speziell dafür entwickelte Sicherheitsbibliotheken verwenden.
Behalten Sie die verwendeten Open-Source-Bibliotheken im Blick und führen Sie ein Inventar ihrer Versionen, Lizenzen und Schwachstellen, etwa der OWASP Top 10-Schwachstellen. Dafür eignen sich Tools wie OWASP’s Dependency Check oder Snyk.
OWASP Proactive Control 3 — Datenbankzugriffe absichern
Datenbanken sind oft zentrale Komponenten leistungsfähiger Webanwendungen, sobald Zustandsverwaltung und dauerhafte Datenspeicherung erforderlich werden.
Datenbanksicherheit umfasst zahlreiche Bereiche, darunter:
Schutz vor SQL-Injections durch Techniken wie Parameterbindung. Ebenso wichtig ist es, Schwachstellen in ORM- und SQL-Bibliotheken zu überwachen, die Sie verwenden. Ein aktuelles Beispiel dafür ist die npm-Bibliothek Sequelize ORM, in der eine Schwachstelle für SQL-Injection-Angriffe entdeckt wurde.
sichere und robuste Datenbankauthentifizierung sowie eine insgesamt sichere Konfiguration.
sichere Kommunikation zwischen der Datenbank und ihrem Client.
Möchten Sie mehr über SQL-Injection-Angriffe und die damit verbundenen Sicherheitsrisiken erfahren? Jim gibt einige Tipps auf bobby-tables.com.
OWASP Proactive Control 4 — Daten kodieren und escapen
Behandeln Sie Daten immer als nicht vertrauenswürdig, da sie aus unterschiedlichen Quellen stammen können, über die Sie möglicherweise nicht immer Bescheid wissen.
Schwachstellen durch Cross-Site-Scripting (XSS) sind ein gutes Beispiel dafür, wie Daten durch ein System fließen und schließlich dazu führen können, dass schädlicher Code im Browser-Kontext – etwa JavaScript – ausgeführt wird und den Browser kompromittiert.
Weitere Beispiele, bei denen Daten escaped werden müssen, sind Command-Injection-Angriffe auf Betriebssysteme (OS). Dabei kann eine Komponente Systembefehle ausführen, die aus Benutzereingaben stammen und daher das Risiko bergen, dass schädliche Befehle ausgeführt werden.
Ich rufe Daten aus der Datenbank ab. Sollte ich sie escapen? Sichere Entwickler tun das auf jeden Fall. Es ist nicht praktikabel, nachzuverfolgen und zu kennzeichnen, ob ein String in einer Datenbank verunreinigt ist oder nicht. Stattdessen sollten Sie in der Präsentationsschicht, etwa im Browser, geeignete Kontrollen einrichten, damit alle an sie übergebenen Daten escaped werden.
Eine besondere Ausnahme von dieser Regel ist der Fall, dass Sie ein oder mehrere DOM-Elemente einer Webseite aus Datenbankeingaben erstellen. Damit begeben Sie sich auf gefährliches Terrain. Überdenken Sie Ihr Modell sorgfältig und prüfen Sie, welche Kontrollen die damit verbundenen Risiken mindern können.
Hier sind einige Bibliotheken, die Sie bei der Bereinigung von Daten unterstützen:
DOMPurify für JavaScript
Wichtig: Das OWASP-ESAPI-Projekt wird nicht mehr aktiv gepflegt. Suchen Sie besser nach anderen Lösungen.
Abschließend empfehle ich Ihnen unseren Beitrag zu Command-Injection-Angriffen: Funktionsweise, Risiken und Schutzmaßnahmen als weiterführende Lektüre.
OWASP Proactive Control 5 — alle Eingaben validieren
So wie Sie häufig ein Typsystem wie TypeScript nutzen, um sicherzustellen, dass der erwartete und gültige Variablentyp in Ihrem Code verwendet wird, sollten Sie auch überprüfen, ob die erhaltenen Eingaben Ihren Erwartungen oder Datenmodellen entsprechen.
Allgemeine Richtlinien:
Verlassen Sie sich nicht auf die Validierung als Gegenmaßnahme zum Escapen von Daten: Diese Sicherheitskontrollen sind nicht austauschbar.
Legen Sie bei der Validierung von Eingaben Größenbeschränkungen für alle Eingabetypen fest.
OWASP Proactive Control 6 — digitale Identität implementieren
Wie stellen Sie die Identität eines Benutzers fest? Dazu dienen Sicherheitskontrollen wie Authentifizierung, Identitätsprüfung und Sitzungsverwaltung.
Bei all diesen Entscheidungen können Sie eine eigene Lösung entwickeln – die Benutzerregistrierung selbst verwalten und Passwörter oder andere Authentifizierungsmethoden nachverfolgen. Alternativ können Sie verwaltete Dienste nutzen und von der serverlosen Cloud-Architektur von Diensten wie Auth0 profitieren.
Dieses Thema ist weit gefasst. Wenn Sie überprüfen und sicherstellen müssen, dass eine digitale Identitätsebene sicher umgesetzt ist, finden Sie Richtlinien für digitale Identitäten in NIST 800-63-3B. Das NIST-Dokument hilft Ihnen dabei, die Passwortsicherheit zu berücksichtigen.
OWASP Proactive Control 7 — Zugriffskontrollen durchsetzen
Anforderungen an die Zugriffskontrolle wirken sich wahrscheinlich auf viele Ebenen Ihrer Anwendung aus. Ein Beispiel: Wenn Sie in einer mandantenfähigen SaaS-Anwendung Daten aus der Datenbank abrufen, müssen Sie sicherstellen, dass Daten nicht versehentlich für andere Benutzer offengelegt werden. Ein weiteres Beispiel ist die Frage, wer zum Aufruf der APIs Ihrer Webanwendung berechtigt ist.
Ein Tipp von Jim: Vermeiden Sie es, im Code für den Datenzugriff auf Rollen zu verweisen, da dies dazu führt, dass die Zugriffsrichtlinie fest einprogrammiert wird. Denken Sie beispielsweise an Codeprüfungen wie if (user.role === 'admin'). Ein berechtigungsbasierter Ansatz hingegen setzt die eigentliche Richtlinie nicht fest. Ein Beispiel dafür ist if (user.canDelete(blogPostId).
OWASP Proactive Control 8 — Daten überall schützen
In der Snyk-App verarbeiten wir Daten unserer Benutzer und unsere eigenen. Deshalb müssen wir besonders sorgfältig mit der Sicherheit und dem Datenschutz unserer Anwendung umgehen und sie überall dort schützen, wo es nötig ist.
Beachten Sie beim Umgang mit Daten die folgenden Maßnahmen:
Schützen Sie Daten während der Übertragung, indem Sie HTTPS korrekt konfigurieren und aktuelle Sicherheitsprotokolle wie TLS 1.3 sowie starke kryptografische Verfahren einsetzen.
Verwenden Sie sichere HTTP-Header, die die Sicherheitsfunktionen des Browsers nutzen, etwa HTTP Strict Transport Security (HSTS). Richten Sie außerdem eine Content Security Policy (CSP) ein, um das Vertrauen in Daten zu gewährleisten.
Verwenden Sie bei kryptografischen Aufgaben stets bekannte Bibliotheken und entwickeln Sie keine eigenen Implementierungen.
OWASP Proactive Control 9 — Sicherheitsprotokollierung und -überwachung implementieren
Als Anwendungsentwickler sind wir es gewohnt, Daten zu protokollieren, die uns beim Debuggen und bei der Nachverfolgung von Problemen mit fehlerhaften Geschäftsabläufen oder ausgelösten Ausnahmen helfen. Die sicherheitsorientierte Protokollierung ist eine weitere Art von Protokolldaten, die wir erfassen sollten. So entsteht ein Audit-Trail, mit dessen Hilfe sich später Sicherheitsverletzungen und andere Sicherheitsprobleme zurückverfolgen lassen.
Hier sind einige Vorschläge für die Sicherheitsprotokollierung:
alle fehlgeschlagenen Eingabevalidierungen
alle Authentifizierungsereignisse, erfolgreiche und fehlgeschlagene Passworteingaben, Anmeldungen und sitzungsbezogene Daten
alle Verstöße gegen Zugriffskontrollen, etwa Versuche zur Rechteausweitung
OWASP Proactive Control 10 — alle Fehler und Ausnahmen behandeln
Eine angemessene Behandlung von Fehlern und Ausnahmen in Webanwendungen ist nicht nur wichtig für deren Zustand, sondern stellt auch sicher, dass keine sensiblen Daten offengelegt werden.
Beachten Sie diese Richtlinien:
Verwalten Sie Ausnahmen zentral.
Stellen Sie sicher, dass unerwartetes Verhalten überall nach einer einheitlichen Methode abgefangen und korrekt behandelt wird.
Achten Sie darauf, dass erfasste Daten keine sensiblen Informationen wie Stacktraces oder kryptografische Fehlercodes enthalten.
Werden Sie Teil der DevSecCon-Community
Ich lade Sie ein, Teil der DevSecCon-Community zu werden und in unseren Webinaren sowie in der Online-Community Snyk User Community mehr zu erfahren. Dort unterstützen wir Entwickler dabei, sich mit Sicherheit vertraut zu machen und sicheren Code zu schreiben!
Starten Sie mit Capture the Flag
Erfahren Sie in unserem virtuellen On-Demand-Workshop für Einsteiger, wie Sie Capture-the-Flag-Herausforderungen lösen.