
rdpscan per la vulnerabilità BlueKeep CVE-2019-0708
Questo è uno scanner rapido e sporco per la vulnerabilità CVE-2019-0708 in Microsoft Remote Desktop.
Al momento, ci sono circa 900.000 macchine sulla Internet pubblica vulnerabili a questa falla,
quindi molti si aspettano un worm imminente come WannaCry e notPetya. Pertanto, scansiona le tue reti e
aggiorna (o almeno, abilita NLA) sui sistemi vulnerabili.
Questo è uno strumento a riga di comando. Puoi scaricare il codice sorgente e compilarlo
da solo, oppure scaricare uno dei binari precompilati per
Windows o macOS dal link sopra.
Questo strumento è basato interamente sulla patch di rdesktop da https://github.com/zerosum0x0/CVE-2019-0708.
Ho semplicemente rifilato il codice per poter compilare facilmente su macOS e Windows,
oltre ad aver aggiunto la capacità di scansionare più target.
Stato
Questo è solo di qualche giorno fa e sperimentale. Tuttavia, lo sto testando scansionando
l'intera Internet (con l'aiuto di masscan), quindi sto risolvendo molti problemi
abbastanza rapidamente. Puoi contattarmi su Twitter (@erratarob) per aiuto/commenti.
- 2019-05-38 - Descrizioni dei risultati di output migliorate, oltre a documentazione sul loro significato (vedi sotto).
- 2019-05-27 - Rilasciati binari per Windows e macOS (clicca sui badge sopra).
- 2019-05-26 - Risolti problemi di rete su Windows
- 2019-05-25 - Linux e macOS funzionano bene, Windows ha qualche errore di rete
- 2019-05-24 - Funziona su Linux e macOS, Windows ha qualche bug di compilazione
- 2019-05-23 - Attualmente funziona su macOS con XCode
Utilizzo principale
Per scansionare una rete, eseguilo in questo modo:
rdpscan 192.168.1.1-192.168.1.255
Questo produce uno di 3 risultati per ogni indirizzo:
- SAFE - se il target è risultato aggiornato o almeno richiede CredSSP/NLA
- VULNERABLE - se il target è stato confermato vulnerabile
- UNKNOWN - se il target non risponde o c'è un qualche fallimento del protocollo
Quando non esiste nulla a un indirizzo IP target, le versioni precedenti stampavano il
messaggio "UNKNOWN - connection timed out". Scansionando reti grandi,
questo produce un sovraccarico di troppe informazioni su sistemi che non ti
interessano. Pertanto, la nuova versione di default non produce questa
informazione a meno che non aggiungi -v (verbose) sulla riga di comando.
Puoi aumentare la velocità di scansione di reti grandi incrementando
il numero di worker:
rdpscan --workers 10000 10.0.0.0/8
Tuttavia, sul mio computer, produce solo circa 1500 worker, a causa
di limitazioni di sistema, indipendentemente da quanto alto configuri questo parametro.
Puoi aumentare ulteriormente la velocità utilizzandolo in combinazione
con masscan, descritto nel secondo paragrafo sotto.
Interpretazione dei risultati
Ci sono tre risposte generali:
- SAFE - significa che il target è probabilmente aggiornato o altrimenti
non vulnerabile al bug.
- VULNERABLE: significa che abbiamo confermato che il target è vulnerabile
a questo bug, e che quando il worm colpirà, probabilmente verrà
infettato.
- UNKNOWN: significa che non possiamo confermare in alcun modo, di solito perché
il target non risponde o non sta eseguendo RDP, che è la
stragrande maggioranza delle risposte. Inoltre, quando i target sono
a corto di risorse o hanno problemi di rete, otterremo
molti di questi. Infine, errori di protocollo sono responsabili
di molti.
Mentre le tre risposte principali sono SAFE, VULNERABLE e UNKNOWN,
contengono testo aggiuntivo che spiega la diagnosi. Questa sezione
descrive le varie stringhe che vedrai.
SAFE
Ci sono tre motivi principali per cui pensiamo che un target sia sicuro:
- SAFE - Target appears patched
Questo accade quando il target non risponde alla richiesta
trigger. Significa che è un sistema Windows aggiornato,
o un sistema che non era vulnerabile all'inizio, come Windows 10
o Unix.
- SAFE - CredSSP/NLA required
Questo significa che il target richiede prima l'autenticazione a livello di rete (NLA) prima che
la connessione RDP possa essere stabilita. Lo strumento non può superare questo punto senza
credenziali legittime, quindi non può determinare se il target è stato aggiornato.
Tuttavia, gli hacker non possono proseguire oltre questo punto per sfruttare sistemi vulnerabili, quindi
probabilmente sei "al sicuro". Tuttavia, quando appariranno exploit, utenti interni con
nomi utente/password validi potranno sfruttare il sistema se non è aggiornato.
- SAFE - not RDP
Questo significa che il sistema non è RDP, ma ha qualche altro servizio che capita di usare
questa stessa porta, e produce una risposta chiaramente non RDP. Esempi comuni sono
HTTP e SSH. Nota che invece di un protocollo identificabile, un server
può rispondere con un pacchetto RST o FIN. Questi sono identificati come UNKNOWN invece
di SAFE/
VULNERABLE
Questo significa che abbiamo confermato che il sistema è vulnerabile al bug.
- VULNERABLE - got appid
C'è solo una risposta quando il sistema è vulnerabile, questa.
UNKNOWN
Ci sono un'infinità di variazioni per sconosciuto
- UNKNOWN - no connection - timeout
Questa è di gran lunga la risposta più comune, e accade quando l'indirizzo IP
target non dà alcuna risposta. Infatti, è così comune che
quando si scansionano grandi intervalli di indirizzi, di solito viene omessa. Devi
aggiungere il flag -v (verbose) per abilitarla.
- UNKNOWN - no connection - refused (RST)
Questa è di gran lunga la seconda risposta più comune, e accade quando
il target esiste e risponde al traffico di rete, ma non sta eseguendo
RDP, quindi rifiuta la connessione con un pacchetto TCP RST.
- UNKNOWN - RDP protocol error - receive timeout
Questa è la terza risposta più comune, e accade quando abbiamo stabilito con successo
una connessione RDP, ma poi il server smette di rispondere.
Ciò è dovuto a errori di rete e quando il sistema target è
sovraccarico per qualche motivo. Potrebbero anche essere errori di rete dalla nostra parte,
come quando sei dietro un NAT e lo sovraccarichi con troppe
connessioni.
- UNKNOWN - no connection - connection closed
Questo significa che abbiamo stabilito una connessione (TCP SYN-ACK), ma poi
la connessione viene immediatamente chiusa (con un RST o FIN). Ci sono
molte ragioni per cui ciò accade, che non possiamo distinguere:
- Sta eseguendo RDP, ma per qualche motivo chiude la connessione,
probabilmente perché è a corto di risorse.
- Non è RDP, e non gradisce la richiesta RDP che gli inviamo,
quindi invece di inviarci un bel messaggio di errore (che
innescherebbe SAFE - not RDP), chiude bruscamente la connessione.
- Qualche dispositivo intermedio, come un IPS, firewall o NAT ha chiuso
la connessione perché l'ha identificata come ostile, o
ha esaurito le risorse.