
Scanne dein IP-Netzwerk und ermittle Hosts mit möglicher CVE-2021-44228-Schwachstelle in der log4j-Bibliothek.
Scannen Sie Ihr IP-Netzwerk und ermitteln Sie Hosts mit möglicher CVE-2021-44228-Schwachstelle in der log4j-Bibliothek.
Es gibt weitaus bessere und fortschrittlichere Tools für Sicherheitsaudits, aber viele von ihnen benötigen kommerzielle Penetrationssoftware oder externe Drittanbieterdienste oder -software.
Dieses Skript ist als schnelles und unabhängiges kleines Tool geschrieben. Es wird nicht bestätigen, dass Ihre Server und Geräte zu 100% sicher sind. Betrachten Sie es als eines von vielen Tools, die Sie zur Überprüfung Ihrer IT-Umgebung verwenden sollten. Kann für private und öffentliche IP-Adressen verwendet werden.
Das Skript ist keine log4shell-Exploit-Demonstration. Es wird keinen Schaden anrichten oder versuchen, Remote-Code auszuführen.
Das Skript erstellt eine HTTPS-Anfrage (Ports enden mit 443) oder HTTP-Anfrage (alle anderen Ports) mit einer speziellen Zeichenfolge in den Feldern: User-Agent, X-Api-Version und X-Forwarded-For. Diese spezielle Zeichenfolge hat das Format ${jndi:ldap://some_listen_host:port} .
Wenn eine verwundbare log4j-Bibliothek verwendet wird, um Benutzeraktivitäten (unsere HTTP-Anfrage) irgendwo im Pfad „Benutzer -> Dienst | Load Balancer -> Sicherheit -> Server -> Protokollierung“ zu protokollieren, wird sie den JNDI-String parsen und versuchen, eine LDAP-Sitzung zu unserem some_listen_host:port aufzubauen.
Wenn wir den Verkehr auf some_listen_host:port überwachen und solche Pakete entdecken, sollte ihre Quelle weiter untersucht werden.
Die Standard-Ports, an die HTTP(S)-Anfragen gesendet werden, sind 80, 8080, 443 und 8443.
Diese beiden Hosts können dieselbe Maschine sein.
Auf dem Listen-Host starten Sie tcpdump, um Pakete zu erfassen, die an einem freien TCP-Port empfangen werden. Beispiel:
tcpdump -nn -i ens160 tcp port 12345
Auf dem Linux-Host führen Sie das Skript mit den erforderlichen Parametern aus. Beispiel:
./log4j-quick-scan.py -e 192.168.0.3:12345 192.168.0.0/24"
Dies testet das Netzwerk 192.168.0.0/24 und versucht, eine TCP-Verbindung zum Listen-Host 192.158.0.3 auf Port 12345 auszulösen.
Überwachen Sie die tcpdump-Ausgabe auf dem Listen-Host. Ziele, die verdächtig auf die log4j-Schwachstelle sind, werden den JNDI-String parsen und versuchen, eine LDAP-Verbindung aufzubauen.
Es ist ineffektiv und extrem langsam, alle Ports zu scannen. Da die log4j-Bibliothek in vielen Produkten verwendet wird, ermitteln Sie zuerst, welche Web-Ports in Ihrer Umgebung verwendet werden. Führen Sie das Skript mit Ihrer eigenen Portliste aus.
Es gibt zu viele Faktoren, die das externe Erkennen der log4j-Schwachstelle durch das Skript und andere Tools verhindern können. Einige davon sind: Netzwerk- und Server-Firewalls, Web Application Firewalls, benutzerdefinierte TCP-Ports, Software/Dienste protokollieren keine Ereignisse mit geringer Schwere (wie unsere gewöhnliche HTTP-Anfrage), das Skript greift auf IP-Adresse statt erforderlichem Hostnamen zu, usw.
Überprüfen Sie immer die Hinweise des Open-Source-Projekts oder des Softwareanbieters auf Details zum log4j-Problem.
usage: log4j-quick-scan.py [-h] [-V] -e LISTENHOST [-p PORTS] [-l LOG] target
Scan hosts with log4j+jndi doing external connections.
required arguments:
-e LISTENHOST, --listenhost LISTENHOST
Host[:port] where to monitor tcp connections. It could be the same machine where script is to be run.
optional arguments:
-h, --help show this help message and exit
-V, --version Display version and exit.
-p PORTS, --ports PORTS
Optional, comma separated list of ports on tested hosts. Default: 80,8080,443,8443
-l LOG, --log LOG Optional, append output to custom log file. Default: ./log4j-quick-scan.log
positional arguments:
target Scan target: IP network in CIDR format.