20. Februar 2022, 22:32
Lesezeit: ca. 5 Min

Website Pentesting mit OWASP-ZAP

Online-Testtools gibt es wie Sand am Meer und bieten erste Orientierung bei der Bestimmung, wie es um eine Website bestellt ist. Ich nutze sie selbst und stelle diese hier gelegentlich vor.1

Für Audits und weitergehende Analysen bedarf es Tools aus dem Pentesting-Werkzeugkoffer, die tiefer graben. Eines dieser Tools ist der OWASP2 Zed Attack Proxy3, abgekürzt ZAP genannt. Es ist ein mächtiges Tool mit einer Vielzahl von Erweiterungen, einer programmierbaren API und grafischen GUI und nicht ohne Grund Bestandteil der Kali-Linux Pentesting-Distribution.4

Der Fokus dieses Blogs kann folglich nur in der Kurzvorstellung liegen und einen Bruchteil zeigen. Ziel ist es, eine minimale Testumgebung herzustellen, die eine Website automatisiert über CLI auf Schwachstellen überprüft und das Ergebnis als PDF-Datei auswirft. Das alles aber nicht ohne einen Disclaimer:

Umfangreiche Crawling, Fuzzing oder sonstige als “offensiv” zu verstehende Techniken von ZAP bitte nur mit den eigenen Servern ausführen, idealerweise im lokalen Netzwerk.

Die Gefahr durch einen Betreiber einer Website belangt zu werden erachte ich als gering. Die meisten Unternehmen monitoren Ihre Websites kaum und verfügen oft noch nicht einmal über eigene Web-Server. Es gehört zum allgemeinen Grundrauschen im Internet, wenn Bots oder Crawler sich durch Websites wühlen. Die weitaus größere Gefahr geht vom Verhalten betroffener ISPs, Cloud- oder Telekom-Anbietern aus. Je nachdem, wie diese etwas interpretieren, können ohne Ankündigung Zugänge oder Systeme gesperrt werden, wenn Grund zur Annahme besteht, dass diese für offensive Angriffe missbraucht werden. Geraten Unternehmen durch solche Maßnahmen offline, wird es teuer und straf- sowie zivilrechtliche Konsequenzen drohen.

Detail am Rande: Das ist Grund, öffentliche WLAN-Zugänge besser nicht über die einzige Internetverbindung eines Unternehmens anzubieten. Mit Hilfe von False-Flag5 Operationen und bestimmten Aufrufen kann eine Deutsche Telekom zur zeitweiligen Sperrung eines Internetanschlusses gebracht werden, die mitunter einige Tage dauern kann.

Installation

Die nachfolgenden Schritte werden als Root entweder direkt am Rechner oder via SSH ausgeführt. Grundlage für unser Testsystem ist ein Debian Linux Stable 11 (Bullseye)6, welches Sie bitte minimal ohne grafischen Desktop nur mit SSH-Server installieren. Nach der Basisinstallation bringen Sie bitte noch die Pakete curl, w3m und wkhtmltopdf auf das System:

apt update -y && apt install curl w3m wkhtmltopdf -y

Von der OWASP-Projektwebsite7 wird das Repo und der zugehörige Key in der Paketverwaltung APT hinzugefügt:

echo 'deb http://download.opensuse.org/repositories/home:/cabelo/Debian_11/ /' | sudo tee /etc/apt/sources.list.d/home:cabelo.list
curl -fsSL https://download.opensuse.org/repositories/home:cabelo/Debian_11/Release.key | gpg --dearmor | tee /etc/apt/trusted.gpg.d/home_cabelo.gpg > /dev/null

Anschliessend kann ZAP mit apt installiert werden:

apt update -y && apt install owasp-zap

Sie sind startbereit für den ersten Quickscan einer Webseite.

Der erste Quickscan

Rufen Sie bitte ZAP in der Konsole mit dem nachfolgenden Befehl auf. Die URL ist eine Beispiel-Website des OWASP Projektes, die bewusst mit Schwachstellen versehen ist, damit diese mit ZAP gefunden werden können:8

owasp-zap -cmd -quickurl "https://demo.owasp-juice.shop/" -quickprogress -quickout ~/report.html

ZAP erstellt einen headless Browser und leitet die Anfragen an die Website über einen virtuellen Proxy-Server, der als Man-in-the-Middle den Verkehr mitschneidet bzw. gezielt manipulieren kann.

Das Ergebnis wird Ihnen als HTML-Datei ausgegeben und kann mit w3m direkt in der Konsole betrachtet werden:

w3m -s ~/report.html

Das Ergebnis des OWASP-ZAP Quickscans in w3m betrachtet

Mehr Sinn ergibt die Umwandlung in eine PDF-Datei. Theoretisch sollte OWASP das auch auf direktem Wege können, praktisch funktioniert das jedoch nicht und Sie bewerkstelligen die Umwandlung besser mit dem nachfolgenden Einzeiler:

wkhtmltopdf ~/report.html ~/report.pdf

Mit scp holen Sie die PDF-Datei auf den lokalen Arbeitsplatz oder lassen sich diese mit einem lokal installierten Mailserver zustellen

Der Quickscan als PDF-Datei

Automatisierung und Erweiterungen

Mit Hilfe eines Bash-Scriptes lässt sich der manuell gezeigte Quickscan schnell und einfach automatisieren. Als Parameter brauchen wir nur noch die gewünschte URL und erhalten anschließend die PDF mit einem aktuellen Zeit-/Datum-Präfix.

cat <<EOF>> ~/create-zap-report
#!/bin/bash

HOST="$1"
TIMESTAMP=$(date '+%Y%m%d%H%M');

if [ -z "$HOST" ]; then
 echo "Bitte eine URL (z.B. https://demo.owasp-juice.shop) angeben."
 exit
fi

/usr/share/owasp-zap/zap.sh -cmd -quickurl "$HOST" -nostdout -quickout ~/"$TIMESTAMP"-zap-report.html
wkhtmltopdf ~/"$TIMESTAMP"-zap-report.html ~/"$TIMESTAMP"-zap-report.pdf
EOF
chmod +x ~/create-zap-report

Mit Hilfe des Automation-Frameworks9 lassen sich alle Einstellungen von ZAP granulär steuern und die zahlreichen Addons aus dem ZAP Marketplace10 integrieren. Sie benötigen hierfür nur eine YAML-Konfigurationsdatei, die Ihre Testumgebung, das Environment11 beschreibt. Der CLI Aufruf sieht dann wie folgt aus:

owasp-zap -cmd -autorun ~/passive_scan.yaml

Ein paar Worte zu den ZAP Erweiterungen oder Addons. Diese sollten regelmäßig aktualisiert werden, da verständlicherweise Scanner und Regelsätze häufigen Anpassungen unterliegen. Das erfolgt mit dem Befehl:

owasp-zap -cmd -addonupdate

Einzelne Addons lassen sich über die Kommandozeile nachträglich auf das System bringen, hier zum Beispiel die Alert-Filters:

owasp-zap -cmd -addoninstall alertFilters

Zusammenfassung

ZAP ist nur ein Werkzeug von vielen im großen Pentesting-Werkzeugkoffer. Die Aussagekraft eines Reports ist immer qualitativ unter Berücksichtigung der Gesamtsituation zu bewerten. So führen bewusste Designentscheidungen dazu, dass möglicherweise Schwachstellen in Kauf genommen und an anderer Stelle mitigiert werden.

Was ZAP sehr gut kann ist die Integration in automatisierte Workflows oder Pipelines. Das erfordert eine gewisse Professionalität, Know-How und einen mehrstufigen Entwicklungsprozess mit strikter Trennung von Development und Produktivumgebung. Grobe Schnitzer können so rechtzeitig erkannt und im Entwicklungsprozess behoben werden. Security by Design & Default.

Meiner persönlichen Erfahrung nach ist das im Mittelstand leider selten anzutreffen und ein Programmieren am “offenen Herzen” leider normal. Ich ticke dahingehend mittlerweile radikal-deutlich:

Produktivsysteme gehören wenn möglich nicht ins Internet und auf keinen Fall in die Hände von Entwicklern.

In diesem Sinne,
einen guten Start in die neue Woche.
Tomas Jakobs


  1. https://blog.jakobs.systems/micro/20200816-website-qualitaet/ ↩︎

  2. Open Web Application Security Project https://owasp.org/ ↩︎

  3. https://www.zaproxy.org/ ↩︎

  4. https://www.kali.org/ ↩︎

  5. https://en.wikipedia.org/wiki/False_flag ↩︎

  6. https://www.debian.org/download ↩︎

  7. https://software.opensuse.org/download.html?project=home%3Acabelo&package=owasp-zap ↩︎

  8. https://owasp.org/www-project-juice-shop/ ↩︎

  9. https://www.zaproxy.org/docs/desktop/addons/automation-framework/ ↩︎

  10. https://www.zaproxy.org/addons/ ↩︎

  11. https://www.zaproxy.org/docs/desktop/addons/automation-framework/environment/ ↩︎

© 2022 Tomas Jakobs - Impressum und Datenschutzhinweis