OWASP Zed Attack Proxy (ZAP) Sicherheitsprüfung
Wenn Sie ein Entwickler von Websites sind, können Sie Schwachstellen auf einfache Weise mit der Anwendung OWASP Zed Attack Proxy (ZAP) ausfindig machen.
Zeit für Freude oder Krise: die Anwendung OWASP Zed Attack Proxy (ZAP) ausführen, um die Schwachstellen unserer Webanwendung zu überprüfen. Entwickler wissen oft, dass es Schwachstellen in ihrem Code gibt, aber es gibt immer ein Lieferdatum. Warum also nicht ein Tool verwenden, das die bekannten und wichtigen auflistet? Dies ist mein erstes Mal, dass ich ZAP benutze, wenn Sie also ein Experte sind, hören Sie am besten auf, hier zu lesen. In den untenstehenden Links finden Sie Informationen zur Installation und Ausführung, auch wenn Sie angemeldet sind. Auf meinem Ubuntu 18.04 System war die Installation ein Kinderspiel, einfach downloaden, im Terminal in das Download-Verzeichnis gehen und eintippen:
./zap.sh
Ich habe dies nicht gegen meine Produktionsstätte laufen lassen, sondern auf der gleichen Maschine, auf der auch die Entwicklungsversion meiner Website läuft. Zum Ausführen, wenn Sie angemeldet sind, gehen Sie zu 'Manuelle Suche', geben Sie die URL der lokalen Website ein und klicken Sie dann auf die Schaltfläche 'Browser starten'. Dies startet ein neues Browserfenster mit Ihrer Website mit ZAP-Buttons auf der linken und rechten Seite. Melden Sie sich wie gewohnt an und klicken Sie auf (Spider) Start, um einen Lauf zu starten. Der Login-Button meiner Website war ein wenig unter den linken Seitenbuttons, ich musste die Breite des Bildschirms ändern, um den Button neu zu positionieren und zu erreichen.
Von der ZAP gemeldete Warnungen
Unten sind einige Warnungen, die ZAP gemeldet hat. Alle Texte in den folgenden Blöcken stammen aus der ZAP-Anwendung. Ich zeige nur einige wenige Zeilen, aber in vielen Fällen gibt es viel mehr Informationen. "Nach der Untersuchung" bedeutet, dass ich die meiste Zeit
- Klicken Sie auf die Registerkarte Alerts
- Wählen Sie eine Zeile mit dem Problem
- Klicken Sie auf die Registerkarte Anfrage und schauen Sie sich die Anfrage an
- Klicken Sie auf die Registerkarte Antwort und sehen Sie sich die Antwort an
Path Traversal
Von ZAP berichtet:
Alert priority: High
Path Traversal
Evidence: etc
Description:
The Path Traversal attack technique allows an attacker access to files, directories, and commands that potentially reside outside the web document root directory.
An attacker may manipulate a URL in such a way that the web site will execute or reveal the contents of arbitrary files anywhere on the web server.
Any device that exposes an HTTP-based interface is potentially vulnerable to Path Traversal.
...
Nach der Untersuchung:
Obwohl dies weitaus mehr Untersuchung benötigt, schien es, dass der Themenselektor-Prozessor nicht überprüft hat, ob das angeforderte Thema in den verfügbaren Themen enthalten ist. Repariert. Auch nachdem ich mir die Antworten genauer angesehen habe, fiel mir auf, dass ich in einem Blog-Post einen Satz mit dem Wort 'etc' hatte. Dies wurde in der Antwort hervorgehoben. Hier geht es um Angriffe auf /etc von c:\etc. Kein Problem.
Absence of Anti-CSRF Tokens
Von ZAP berichtet:
Alert priority: Low
Absence of Anti-CSRF Tokens
Evidence: <form name="search" action="/en/blog/posts/search" method="post">
Description: No Anti-CSRF tokens were found in a HTML submission form.
A cross-site request forgery is an attack that involves forcing a victim to send an HTTP request to a target destination without their knowledge or intent in order to perform an action as the victim.
The underlying cause is application functionality using predictable URL/form actions in a repeatable way.
The nature of the attack is that CSRF exploits the trust that a web site has for a user.
...
Nach der Untersuchung:
Die Suchformulare verwendeten fälschlicherweise die POST-Methode. Ich habe die Methode auf GET geändert und natürlich akzeptiert die aufgerufene Flask -Methode nur die GET-Methode.
Private IP Disclosure
Von ZAP berichtet:
Alert priority: Low
Private IP Disclosure
Evidence: 192.168.0.0
Description: A private IP (such as 10.x.x.x, 172.x.x.x, 192.168.x.x) or an Amazon EC2 private hostname (for example, ip-10-0-56-78)
has been found in the HTTP response body. This information might be helpful for further attacks targeting internal systems.
...
Nach der Untersuchung:
Die Nachricht stammt aus dem Text eines Blog-Posts, in dem ich diese IP-Adresse erwähnt habe. Kein Problem.
Format String Error
Von ZAP berichtet:
Alert priority: Medium
Format String Error
Parameter: lc
Attack: ZAP %1!s%2!s%3!s%4!s%5!s%6!s%7!s%8!s%9!s%10!s%11!s%12!s%13!s%14!s%15!s%16!s%17!s%18!s%19!s%20!s%21!n%22!n%23!n%24!n%25!n%26!n%27!n%28!n%29!n%30!n%31!n%32!n%33!n%34!n%35!n%36!n%37!n%38!n%39!n%40!n
Description: A Format String error occurs when the submitted data of an input string is evaluated as a command by the application.
...
Nach der Untersuchung:
Die Antwort zeigte einen 500 Fehler mit dem Text: sqlalchemy.exc.DataError: (pymysql.err.DataError) (1406, "Daten zu lang für die Spalte 'request_url' bei Zeile 1") In diesem Fall war es das PageRequest SQLAlchemy Objekt, in dem ich jede eingehende Anfrage speichere. Ich habe gehofft, erwartet, dass zu lange Werte automatisch abgeschnitten werden, aber das war eine falsche Annahme! Vielleicht kann dies auch an anderer Stelle im Programm geschehen. Ich habe dies für dieses Objekt ohnehin geändert, indem ich die Länge der Spalte ermittelt und den Wert vor dem Einfügen abgeschnitten habe.
Buffer Overflow
Von ZAP berichtet:
Alert priority: Medium
Buffer Overflow
Parameter: lc
Attack: GET http://127.0.0.1:8000/en/auth/register?lc=aofyVsiquNyUZJJWRvcyMtmOKToYwtFlLIjVPAnQbvLMSuvapNZbePEuuZUgyEVHmcDklTcXYhZDCGFNtEFpbiJaafhHTrJobQWgcGKHjrYuDDaYbddfJxoemFoxRtesJrGieOviBIdFHhoYngoGNKaowenBuwavrUdOAfKElNWLoGHVTTsQDUTRgZMYKUTAOQJuNqQqBNkjuuMgAxqCQKvEvSvHviRyXrFRylXFjQuDeRosheUMCjjEFZRLMFpmRcYsjYZKPaALNOBvjLMcYJtoUIxGCKqYBSPwRTilwkaxxPmCekriFLVOkVtpVlSMWvtgHdrnjuAEesIuwfWyByZQjJKblYBXbRBHoHjCJKssKKdynuuGTnGlCMrRQHUnTcgbOPhCoTgIAcyDxBerlYELKJlCiIEbAnkFbtgCqnBKaUsHglhcVcyjqFnXtUEAKoHDSXMHhTJmXFvmYBxvEFITqJQgaWOsHIutVZYDiuRBSMwOXQYlmTenZHXPnchCHTfxtvsqlgZQZYmyNKYXRETmBRKyHKTbgoJGtVFaMCOPkvQAGasEylqdVEutnJiHSIBhovlKfMbPpctsMTsukniTThWTFqLJLS
Description: Buffer overflow errors are characterized by the overwriting of memory spaces of the background web process, which should have never been modified intentionally or unintentionally. Overwriting values of the IP (Instruction Pointer), BP (Base Pointer) and other registers causes exceptions, segmentation faults, and other process errors to occur. Usually these errors end execution of the application in an unexpected way.
...
Nach der Untersuchung:
Wieder zeigte die Antwort einen 500 Fehler mit dem Text: sqlalchemy.exc.DataError: (pymysql.err.DataError) (1406, "Daten zu lang für die Spalte 'request_url' in Zeile 1") Und wieder war es das PageRequest SQLAlchemy Objekt, in dem ich jede eingehende Anfrage speichere. Die gleiche Lösung.
Application Error Disclosure
Von ZAP berichtet:
Alert priority: Low
Application Error Disclosure
Url: http://127.0.0.1:8000/run
Evidence: HTTP/1.0 500 INTERNAL SERVER ERROR (KeyError: 'babel' // Werkzeug Debugger)
Description:
This page contains an error/warning message that may disclose sensitive information like the location of the file that produced the unhandled exception. This information can be used to launch further attacks against the web application. The alert could be a false positive if the error message is found inside a documentation page.
...
Nach der Untersuchung:
Die Url wurde von ZAP aufgrund des Content-Security-Policy-Report-Only-Headers entdeckt, der den (csp)-Report-uri enthält. Die /run url ist nicht Teil der sichtbaren Anwendung. Ich habe gerade die Applikationsfehler-Handler verwendet, die Babel für Übersetzungen aufrufen. Dies wurde geändert, indem einsprachige Basisfehlerseiten für die Anwendung auf der /run url hinzugefügt wurden.
X-Content-Type-Options Header Missing
Von ZAP berichtet:
Alert priority: Low
X-Content-Type-Options Header Missing
Url: http://127.0.0.1:8000/run/raw?__debugger__=yes&cmd=resource&f=console.png
Parameter: X-Content-Type-Options
Description:
The Anti-MIME-Sniffing header X-Content-Type-Options was not set to 'nosniff'. This allows older versions of Internet Explorer and Chrome to perform MIME-sniffing on the response body, potentially causing the response body to be interpreted and displayed as a content type other than the declared content type.
...
Nach der Untersuchung:
Ein nicht existierendes Bild wurde zurückgegeben. Ich habe security headers, natürlich ohne den CSP-Header, zur Antwort hinzugefügt. Außerdem habe ich grundlegende HTTP-Fehlerseiten hinzugefügt. Der Browser zeigt ein nicht existierendes Bild an. Gut.
Application Error Disclosure
Von ZAP berichtet:
Alert priority: Low
Application Error Disclosure
Url: http://127.0.0.1:8000/admin/static/
Evidence: HTTP/1.0 500 INTERNAL SERVER ERROR
Description:
This page contains an error/warning message that may disclose sensitive information like the location of the file that produced the unhandled exception. This information can be used to launch further attacks against the web application. The alert could be a false positive if the error message is found inside a documentation page.
...
Nach der Untersuchung:
Dies geschieht nur im (lokalen) Flask Entwicklungsmodus. In der Produktion werden alle statischen Elemente von Nginx bedient. Kein Problem ... Ich glaube.
Zusammenfassung
Ein Tool wie das OWASP Zed Attack Proxy (ZAP) lässt selbst einen Neuling wie mich auf einfache Weise Schwachstellen finden. Ich kann dieses Tool allen Entwicklern empfehlen. Und weil es versucht, Ihre Website auf alle verfügbaren URLs anzugreifen, ist es auch extrem nützlich, um andere Probleme wie fehlende Seiten und CSP-Verletzungen zu finden.
Links / Impressum
Getting Started with ZAP and the OWASP Top 10: Common Questions
https://www.denimgroup.com/resources/blog/2019/09/getting-started-questions/
How can ZAP automatically authenticate via forms?
https://github.com/zaproxy/zaproxy/wiki/FAQformauth
OWASP ZAP for Dummies
https://devonblog.com/security/owasp-zap-for-dummies/
proxy settings for localhost not obeyed unless network.proxy.allow_hijacking_localhost is set
https://bugzilla.mozilla.org/show_bug.cgi?id=1535581
Running Penetration Tests for your Website as a Simple Developer with OWASP ZAP
https://medium.com/volosoft/running-penetration-tests-for-your-website-as-a-simple-developer-with-owasp-zap-493d6a7e182b
The Open Web Application Security Project (OWASP)
https://www.owasp.org
The OWASP Zed Attack Proxy (ZAP)
https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project
Mehr erfahren
Security testing
Neueste
- Ausblenden der Primärschlüssel der Datenbank UUID Ihrer Webanwendung
- Don't Repeat Yourself (DRY) mit Jinja2
- SQLAlchemy, PostgreSQL, maximale Anzahl von Zeilen pro user
- Anzeige der Werte in den dynamischen Filtern SQLAlchemy
- Sichere Datenübertragung mit Public Key Verschlüsselung und pyNaCl
- rqlite: eine hochverfügbare und distverteilte SQLite -Alternative
Meistgesehen
- Verwendung von Pythons pyOpenSSL zur Überprüfung von SSL-Zertifikaten, die von einem Host heruntergeladen wurden
- Verwendung von UUIDs anstelle von Integer Autoincrement Primary Keys mit SQLAlchemy und MariaDb
- Verbindung zu einem Dienst auf einem Docker -Host von einem Docker -Container aus
- PyInstaller und Cython verwenden, um eine ausführbare Python-Datei zu erstellen
- SQLAlchemy: Verwendung von Cascade Deletes zum Löschen verwandter Objekte
- Flask RESTful API Validierung von Anfrageparametern mit Marshmallow-Schemas