In diesem Artikel haben wir uns bereits damit beschäftigt, warum sich Investitionen in Sicherheitstests lohnen und was der Unterschied zwischen statischen und dynamischen Sicherheitstests ist (SAST & DAST). Doch wie können automatisierte Sicherheitstests und Scans nun in Projektzyklen integriert werden?
Für den Erfolg von Sicherheitstests werden in der Regel die zwei Metriken False-Positive-Rate und False-Negative-Rate herangezogen. Die False-Negative-Rate gibt darüber Aufschluss, wie viele Schwachstellen ein Ansatz oder ein konkretes Tool nicht finden konnte. Laut Studien kann beispielsweise ein SAST-Ansatz 50% der Schwachstellen identifizieren. Konkrete Ergebnisse variieren hier aber stark, je nach verwendetem Tool und Analyse-Ansatz. Die False-Positive-Rate zeigt hingegen auf, wie viele Funde fehlerhaft als Schwachstellen identifiziert wurden. Besonders SAST-Tools sind hierbei prädestiniert für eine höhere False-Positive-Rate.
Die Ergebnisse automatisierter Sicherheitstests sollten immer manuell evaluiert und eingeordnet werden. Für ein umfassendes Bild der Sicherheit einer Anwendung sollten zudem regelmäßige manuelle Sicherheitsüberprüfungen (Penetrationstests) durchgeführt werden.
Bevor wir im Folgenden auf konkrete Tools zum Identifizieren von Schwachstellen im eigenen Code eingehen, ein wichtiger Hinweis: Das Ausnutzen von Sicherheitslücken in fremden Systemen ohne vorherige Erlaubnis ist nach § 202a StGB verboten und strafbar!
Semgrep OSS ist eine kostenlose Open-Source Anwendung, welche statische Codeanalyse mit relativ niedrigem Konfigurations- und Einrichtungsaufwand ermöglicht. Semgrep kann im automatischen Modus ohne vorherige Auswahl der verwendeten Technologien und Programmiersprachen direkt im Projektordner ausgeführt werden. Das Tool analysiert seinerseits, welche Testregeln anzuwenden sind. Als Beispielanwendung nutzen wir hier DVWA, welche zu lernzwecken zahlreiche Sicherheitslücken enthält.
Semgrep hat in unserer Beispielanwendung 48 Codestellen gefunden, welche verwundbar erscheinen und manueller Prüfung bedürfen. Jedes dieser Ergebnisse wird übersichtlich mit Auszug des Codes, der betroffenen Datei und einem Link zu weiterführenden Informationen ausgegeben. Ein Blick in den betroffenen Code zeigt, dass es sich beim obigen Befund tatsächlich um eine (kritische) Schwachstelle handelt, welche sowohl die Vertraulichkeit, Verfügbarkeit als auch die Integrität der in unserer Beispielanwendung verarbeiteten Daten gefährdet. Wir haben also soeben, ohne großen Aufwand, unsere erste Schwachstelle unter Verwendung von Semgrep identifiziert! 🥳
Besonders praktisch wird Semgrep allerdings dann, wenn es in CI-Abläufe integriert wird. Hierbei kann Semgrep so konfiguriert werden, dass lediglich die aktuellen Änderungen analysiert werden. Dadurch dauert der Analysevorgang nicht so lange wie ein kompletter Scan des gesamten Quellcodes der Anwendung. Zudem können Entwickler*innen so gezielt ihre Änderungen auf potenzielle Sicherheitsrisiken überprüfen, bevor diese tatsächlich in der Anwendung Verwendung finden.
Dastardly von Portswigger ist ein Scanner für Schwachstellen in Webanwendungen, welcher dynamisch und zur Laufzeit der Anwendung Tests durchführt. Intern verwendet das Tool hierfür einen modifizierten Chrome-Browser, um Webseiten zu besuchen und automatisierte Tests durchzuführen. Wie bei Semgrep ist die Verwendung von Dastardly hierbei denkbar einfach: Über einen vorkonfigurierten Docker-Container, welchem lediglich die Einstiegs-URL und das Verzeichnis für den erzeugten Bericht übergeben werden muss, kann binnen weniger Augenblicke ein dynamischer Schwachstellentest gestartet werden:
Das Ergebnis des Scans ist ein XML-Bericht, welcher als Eingabe in weiterführende Tools fungieren kann:
Wie der obige Auszug aus dem Dastardly-Bericht zeigt, hat das Tool eine Cross-Site Scripting-Schwachstelle mit hoher Kritikalität identifiziert. Der Auszug wurde aus Darstellungsgründen gekürzt. In der Originalform enthält der Befund noch weiterführende Informationen, wie die Schwachstelle konkret reproduziert werden kann, warum und wie die Schwachstelle auftreten kann sowie Hinweise zur Behebung. Auch Dastardly wurde dafür konzipiert, in CI-Abläufe eingebunden zu werden. Da Dastardly für die Durchführung eines dynamischen Scans eine lauffähige Webanwendung benötigt, bietet sich die Integration in einer späteren Phase des Build-Prozesses an.
Ein zentraler Aspekt für den Erfolg automatisierter Tests sind die Metriken False-Positive-Rate und False-Negative-Rate. Diese Metriken helfen dabei zu verstehen, wie viele Schwachstellen statistisch von den angewendeten Verfahren übersehen und wie viele fälschlicherweise als Schwachstellen gemeldet werden. Tools wie Semgrep (SAST) und Dastardly (DAST) bieten die Möglichkeit, Schwachstellen effizient zu identifizieren und gleichzeitig die Entwicklungsprozesse durch ihre Integration in CI/CD-Pipelines zu unterstützen.
Es ist wichtig, die Ergebnisse automatisierter Tests immer manuell zu überprüfen und zusätzlich regelmäßige manuelle Penetrationstests durchzuführen. So wird ein umfassendes Bild der Sicherheit einer Anwendung gewährleistet. Mit der richtigen Kombination aus automatisierten und manuellen Tests können Entwickler*innen die Sicherheit ihrer Anwendungen erheblich verbessern und potenzielle Risiken frühzeitig erkennen und beheben.