In einigen Fällen müssen Testentwickler vor der Veröffentlichung einer neuen Webanwendungs-Build automatisierte Pentests und Sicherheitsregressionstests durchführen.
Es ist möglich, OWASP ZAP (ZAP) zu diesem Zweck zu verwenden. ZAP bietet eine Application Programming Interface (API), die es ermöglicht, mit ZAP programmgesteuert zu interagieren. Die ZAP API-Dokumentation wird verwendet, um ein eigenständiges Python-Skript auszuführen, das API-Aufrufe an das ZAP-Programm macht. ZAP kann Python (und andere Sprachen) innerhalb der Anwendung ausführen, aber es kann im Moment, in dem dieser Artikel geschrieben wird, kein Python 3 ausführen. Wahrscheinlich sehen Sie einen ähnlichen Fehler, wenn Sie versuchen, einige Python3-Skripte für das Scannen auszuführen:
D:\OwaspZapInfo\zapScrits\...>python activeScanningScriptPy2.py Traceback (most recent call last): File "activeScanningScriptPy3.py", line 26, in <module> from zapv2 import ZAPv2 ModuleNotFoundError: No module named 'zapv2'
Es gibt mehrere mögliche Gründe, warum das ZAP-API-Python-Skript für das aktive automatisierte Scannen von Webanwendungen in Python 3 möglicherweise nicht ausgeführt werden kann. Eine mögliche Ursache könnte sein, dass das Skript möglicherweise Kompatibilitätsprobleme mit Python 3 hat. Darüber hinaus können Probleme bei der Installation der benötigten Repositorys für python-owasp-zap auftreten oder bei der Konfiguration des ZAP-Dämons.
Was müssen Sie tun, um das Python 3-Skript innerhalb der ZAP-API zu verwenden?
Um das ZAP-API-Python-Skript für das aktive automatisierte Scannen von Webanwendungen in Python 3 auszuführen, befolgen Sie diese Schritte:
Zuerst können Sie überprüfen, ob das ‚zapv2‘-Python-Modul mithilfe des ‚pkgutil‘-Moduls installiert ist:
#!/usr/bin/python3.8 import pkgutil if pkgutil.find_loader('zapv2') is None: print("Das Modul 'zapv2' ist nicht installiert.") else: print("Das Modul 'zapv2' ist installiert.")
Falls nicht, installieren Sie den ZAP Python API-Client mit dem Befehl: ‚pip install zaproxy‘.
C:\User...\Programs\Python\Python310>pip install zaproxy Requirement already satisfied: zaproxy in c:\user...\programs\python\python310...
D:\OwaspZapInfo\zapScrits>python checkZap2Module.py zapv2 module is installed
Wählen Sie das eigenständige Python-Skript aus der ZAP-API-Dokumentation aus, das Sie verwenden möchten, oder erstellen Sie Ihr eigenes Python-Skript. Stellen Sie sicher, dass Sie die folgenden Schritte in diesem Skript haben:
2.1 Importieren Sie den Python-API-Client für ZAP in Ihr Python-Skript ` from zapv2 import ZAPv2 `
2.2 Verbinden Sie sich mit dem API-Endpunkt der ZAP-Instanz, indem Sie den Host und den Port für die ZAP-Instanz als Argument für das Modul bereitstellen `zap = ZAPv2(proxies=localProxy, apikey=apiKey)` und überprüfen Sie, ob der notwendige API-Schlüssel und die Proxy-Einstellungen korrekt konfiguriert sind: ` localProxy = {„http“: „http://127.0.0.1:<Port>“, „https“: „https://127.0.0.1:<Port>“}` Vergewissern Sie sich, dass Ihre API-Schlüssel mit dem Schlüssel in der Zap-Oberfläche übereinstimmen. Zu diesem Zweck gehen Sie zu Werkzeuge => Optionen… -> API und klicken Sie auf „Zufälligen Schlüssel generieren“ (zum Beispiel, wenn der API-Schlüssel als „dsl21524545454sedasaszec“ festgelegt ist, stellen Sie sicher, dass Ihr Python-Skript diesen Schlüssel verwendet: apikey=“dsl21524545454sedasaszec“)
2.3 Richten Sie den Kontext für den Scan ein, indem Sie einen neuen Kontext erstellen und URLs hinzufügen.
2.4 Richten Sie die Authentifizierung für den Scan ein, indem Sie einen neuen Benutzer erstellen und die Authentifizierungsmethode konfigurieren.
3.Starten Sie ZAP, indem Sie Zap als daemon ausführen.
D:\OwaspZap2.13\Zed Attack Proxy java -Xmx512m -jar zap-2.13.0.jar -daemon port 8095 -config api.key-" adg03gshi -config api.addrs.addr.name. -config api.addrs.addr.regex-true Ignoring legacy log4j.properties file, backup already exists. 1503 [main] INFO org.zaproxy.zap.Daemon Bootstrap OWASP ZAP 2.13.0 started 03/09/2023, 14:45:09 with home C:\User...NOWASP ZAP 1543 [main] INFO org.paros proxy.paros.common.AbstractParam - Setting config api.key - mc661fiksja131np2qdg03gshi 1544 [main] INFO org.paros proxy.paros.common.AbstractParam - Setting config apl.addrs.addr.name - was 127.0.0.1 1545 [main] INFO org.paros proxy.paros.common.AbstractParam - Setting config apl.addrs.addr.regex - true was false
Zap hört nun auf localhost: <Port>:
tension for Advanced SQL Injection add-on. 8819 [ZAP-daemon] INFO org.paros proxy.paros.extension.ExtensionLoader - Initializing Wappalyzer Automation Framework In tegration Wappalyzer Automation 8831 [ZAP-daemon] WARN org.zaproxy.zap.extension.soap.Extension ImportWSDL - The Oracle Nashorn engine was not found, sc ript variant will not be added. 8839 [ZAP-daemon] INFO org.zaproxy.addon.oast.services.callback.CallbackService - Started callback service on 0.0.0.0:3 9218 10924 [ZAP-daemon] INFO org.zaproxy.addon.network.ExtensionNetwork - ZAP is now listening on localhost:8095
4.Führen Sie das Python-Skript aus:
D:\>cd D:\OvaspZapInfo\zapScripts\... D:\OvaspZapInfo\zapScripts\...>python activeScanningScript Py3.py Create ZAP session: WSession Sun Sep 3 22:42:58 2023 -> illegal_parameter Add Global Exclude URL regular expressions: (?:(?!https:\\/\\/...).*).$ ->OK Enable outgoing proxy chain: False -> OK' Use context ID: 1' Include URL in context: https://... -> OK' Exclude URL from context:
Ich empfehle, Beispiele für Python-Skripte aus der Zap API-Dokumentation zu verwenden. Das Skript startet einen neuen Scan mit der angegebenen Kontext-ID unter Verwendung der ZAP-API und führt passive und aktive Scans durch.
Starting Scans on target: https:// Starting scans with User ID: 0 Start Spider scan with user ID: 0. Scan ID equals: 0 Spider scan for user ID 0 completed 'Set forced user mode enabled -> OK" 'Set user ID: 0 for forced user mode -> OK' 'Ajax Spider the target with user ID: 0 -> OK' ('Ajax Spider the URL: https://../index.html locate with 'user ID: 0 -> OK') Ajax Spider is running Ajax Spider is running Ajax Spider is running
Ajax Spider is running Ajax Spider is running Ajax Spider is running 'Set forced user mode disabled -> OK' Ajax Spider scan for user ID 0 completed Start Active Scan with user ID: 0. Scan ID equals: 0 Active Scan progress: 7% Active Scan progress: 7% Active Scan progress: 13% Active Scan progress: 20% Active Scan progress: 33% Active Scan progress: 36%
5.Warten Sie, bis der Scan abgeschlossen ist, und holen Sie die Scan-Ergebnisse ab.
Active Scan progress: 74% Active Scan progress: 87% Active Scan progress: 87% Active Scan progress: 87% Active Scan progress: 87% Active Scan progress: 87% Active Scan progress: 87% Active Scan for user ID 0 completed Scan is completed Hosts: optimizationguide-pa.googleapis.com, accounts.google.com, Alerts: [('alert": "Charset Mismatch (Header Versus Meta Content-Type Charset)", "alertRef": "90011", 'attack': 'confidence": "Low", 'cweld': '436", 'description": "This check identifies responses where the HTTP Content-Type 'header declares a charset different from the charset defined "by the body of the HTML or XML. When there's a charset 'mismatch between the HTTP header and content body web 'browsers can be forced into an undesirable content-sniffing "mode to determine the content's correct character set.\n" "\n" 'An attacker could manipulate content on the page to be 'interpreted in an encoding of their choice. For example, if "an attacker can control content at the beginning of the 'page, they could inject script using UTF-7 encoded text and "manipulate some browsers into interpreting that text.", 'evidence': 'id': '0', "InputVector': ", 'messageId': 1, "method": "GET", 'name': 'Charset Mismatch (Header Versus Meta Content-Type Charset)", 'other': 'There was a charset mismatch between the HTTP Header and the META 'content-type encoding declarations: [iso-8859-1] and [utf-8] do
6.Analysieren Sie die Scan-Ergebnisse und ergreifen Sie die entsprechenden Maßnahmen, um die gefundenen Sicherheitslücken zu beheben.
reference': 'https://owasp.org/wstg", 'risk': 'Informational", 'solution': 'sourceid': 1 'tags': {}, 'url': 'https://:...3/u1', 'wascid': '0'), ('alert': 'User Agent Fuzzer', 'alertRef': '10104", 'attack': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 * (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", 'confidence': 'Medium', 'cweld': '0', 'description: Check for differences in response based on fuzzed User Agent (eg. mobile sites, access as a Search Engine Crawler). Compares the response statuscode and the hashcode of the 'response body with the original response.", 'evidence': 'id': 23842, 'InputVector 'messageId': '33184', 'method': 'GET', 'name': 'User Agent Fuzzer, 'other': 'param': 'Header User-Agent', 'pluginId: '10104, reference: https://owasp.org/wstg", 'risk': 'Informational", 'solution:", 'sourceid': 1 'tags': (), 'url': 'https://...-3/u1',: 'wascid': '0')] HTML report: D:/OwaspZap2.13/reports/zapReport No.html is generated. D:\OvaspZapInfo\zapScripts
Bei der Verwendung der ZAP-API für das aktive Scannen von Webanwendungen können einige potenzielle Probleme auftreten. Hier sind einige der Herausforderungen, denen Sie begegnen könnten:
- Langsame oder instabile Leistung: ZAP kann langsam oder instabil sein, insbesondere bei der Arbeit mit großen oder komplexen Webanwendungen. Es kann viel Speicher oder CPU-Ressourcen verbrauchen, was die Leistung Ihres Systems beeinträchtigen kann.
- Falsch positive Ergebnisse: ZAP kann falsch positive Ergebnisse generieren, das bedeutet, dass Sicherheitsprobleme als Schwachstellen gemeldet werden, obwohl sie in Wirklichkeit nicht ausnutzbar sind. Auf der anderen Seite kann ZAP auch einige Warnungen als falsch negatives Ergebnis erzeugen, das bedeutet, dass bestimmte Sicherheitsprobleme vom Tool nicht erkannt werden.
- Risiko der Beschädigung der Webanwendung: ZAP ist ein leistungsstarkes Werkzeug, das echte Angriffe auf Webanwendungen simulieren kann. Wenn es jedoch nicht ordnungsgemäß verwendet wird, kann es die Webanwendung beschädigen, indem es Daten ändert oder bösartige Skripte einfügt.
Um die oben genannten Probleme zu vermeiden, empfehle ich, die ZAP-API ordnungsgemäß zu verwenden und bewährte Verfahren für Sicherheitstests von Webanwendungen zu befolgen. Ich empfehle die Kombination von automatisierten Scans mit manuellen Tests. Dies hilft Ihnen, echte Sicherheitslücken zu identifizieren und zu vermeiden, sie fälschlicherweise als falsch positive Ergebnisse zu markieren, um eine umfassende Abdeckung von Sicherheitsproblemen zu gewährleisten.
Benötigen Sie Unterstützung von professionellen Python Entwicklern? Kontaktieren Sie uns – wir helfen Ihnen gerne weiter!