Bei djangsters liegt uns die Sicherheit am Herzen. Wir legen so viel Wert darauf, dass der „Batterien-enthalten“-Ansatz von Django einer der Hauptgründe ist, warum es ein grundlegender Baustein für unsere Webanwendungen ist.
In den letzten Jahren haben wir begonnen, mit externen Sicherheitsprüfungen in Form von Penetrationstests (Pentests) zu arbeiten, um unser Sicherheitsportfolio zu erweitern. Obwohl dies eine neue Erfahrung für uns war, sind wir mit Begeisterung und ein wenig Skepsis an die Sache herangegangen. Dabei haben wir drei wichtige Erkenntnisse gewonnen:
Aber eins nach dem Anderen: Bevor wir ins Detail gehen, sollten wir uns das Gesamtbild ansehen.
An einem Pentest sind oft drei Parteien beteiligt. Ein Entwicklungsteam, eine interne Aufsichtsbehörde und eine Sicherheitsprüfstelle.
Das Entwicklungsteam ist für den Code und das Schließen von Sicherheitslücken verantwortlich. Die interne Aufsichtsbehörde schreibt die Tests vor und legt Standards fest, während die Sicherheitsprüfstelle die Probleme findet. Im Grunde handelt es sich also um ein Katz- und Mausspiel mit einem Schiedsrichter.
Es hört sich kompliziert an, ist aber relativ einfach und leicht zu verstehen, wenn man erst einmal angefangen hat.
Bei uns lief es folgendermaßen ab:
Penetrationstestberichte werden in der Regel halbautomatisch erstellt und sortieren die Probleme in Kategorien mit niedriger, mittlerer und hoher Priorität.
Probleme mit niedriger Priorität sind wünschenswert gelöst zu werden, aber stellen keine aktuelle Gefahr dar. Zum Beispiel eine öffentlich einsehbare Versionsnummer einer beteiligten Software. Diese sind in der Regel nicht blockierend und verhindern kein grünes Licht.
Probleme mittlerer Priorität sind Voraussetzung für grünes Licht und sind oft nicht vollständig umgesetzte Sicherheitsmaßnahmen.
Probleme hoher Priorität oder kritische Probleme sind ausnutzbare Schwachstellen. Diese MÜSSEN vor allen anderen Problemen behoben werden, da sie eine klare und akute Gefahr darstellen.
Jetzt kommt der heikle Teil für jeden Softwareentwickler: Ist ein Pentest eine Bewertung der eigenen Arbeit? Ist jedes gemeldete Problem ein vernichtendes Urteil der Qualität und ein mahnender Fingerzeig auf einen?
Nein.
Pentest-Berichte sind im Grunde nur eine weitere Ebene der Codeüberprüfung. Diese Prioritäten und Bewertungen sind eine externe und unabhängige Sicht auf die eigene Arbeit. Es mag verlockend sein, sie nur als Checkliste zu verwenden, um grünes Licht zu bekommen, aber ein besserer Ansatz ist, sie als Lernerfahrung zu nutzen.
Manche sind vielleicht nicht relevant, manche sind unbedeutend, aber sie sind alle gut gemeinte Vorschläge, wo und wie man sich verbessern kann. Letztendlich hast du natürlich den Code geschrieben und weißt am besten, wo die Leichen im Keller sind, ein Pentest sagt dir nur, wo es müffelt.
Wie bereits erwähnt, nimmt Django die Sicherheit sehr ernst. Der beste Tipp, den wir geben können, ist, die Django-Einstellungen durchzugehen und sie auf härtende Sicherheitseinstellungen zu überprüfen. Weil es einfach ist, Debug-Konfiguration zu übersehen, hat es Django so eingerichtet, dass man nicht raten muss, wo diese zu finden sind, großartig. Es gibt ein Sicherheitsdokument, in dem die bewährten Methoden beschrieben sind.
Ein gutes Release-Management und die Verwendung von Umgebungsvariablen sind ebenfalls hilfreich, aber das ist ein Thema für ein anderes Mal.
Hier ein paar nicht offensichtliche Tipps, die helfen können, die Prüfung zu bestehen:
Lass mich noch einmal betonen, wie großartig nicht nur Django als Framework ist, sondern auch seine Dokumentation. Wenn du nur wenig Zeit für Sicherheitsmaßnahmen hast, genügt es, das Django-Sicherheitsdokument zu befolgen und die konfigurierten Einstellungen zu überprüfen und deren Einfluss auf dein Setup zu verstehen. Dadurch sollte die Sicherheit deines Webanwendungs-Backends bereits auf ein angemessenes Niveau gebracht worden sein.
Zurück zu unseren wichtigsten Erkenntnissen. Während ein anständig arbeitendes Entwicklungsteam, das ein anständiges Framework (👋 Django 👋) verwendet und das Testen und Überprüfen ernst nimmt, höchstwahrscheinlich keine kritischen Sicherheitsprobleme übersehen wird, wird es ein paar mittlere geben. Diese scheinen ärgerlich und relativ harmlos zu sein, wie zum Beispiel ein fehlender CSP-Header, ein theoretischer Injektionsvektor oder eine schwache Kennwortrichtlinie, aber sie können als Sprungbrett für gefährlichere Angriffe dienen.
Bei der Entwicklung einer Webanwendung ist es jedoch fast unmöglich, alle Sicherheitsebenen im Blick zu haben. Konzentriere dich daher am besten auf die Anwendungsschicht und lass die Pentester ihre Arbeit machen. Deren Input hilft dir sehr dabei, dein gesamtes Sicherheitskonzept zu verbessern.
Wenn du neugierig auf das Was und Wie des Pentests aus der Perspektive eines Pentesters sind, lesen sie diesen Artikel von unseren Freunden und Partnern bei Lutra Security auf Englisch.