
Ein schneller Scanner für die CVE-2019-0708 "BlueKeep"-Sicherheitslücke.
Dies ist ein schneller und schmutziger Scanner für die Sicherheitslücke CVE-2019-0708 in Microsoft Remote Desktop. Derzeit gibt es etwa 900.000 Maschinen im öffentlichen Internet, die für diese Schwachstelle anfällig sind, daher wird bald ein Wurm wie WannaCry und notPetya erwartet. Scannen Sie daher Ihre Netzwerke und patchen Sie (oder aktivieren Sie zumindest NLA) auf anfälligen Systemen.
Dies ist ein Kommandozeilen-Tool. Sie können den Quellcode herunterladen und selbst kompilieren, oder Sie können eine der vorkompilierten Binärdateien für Windows oder macOS über den obigen Link herunterladen.
Dieses Tool basiert vollständig auf dem rdesktop-Patch von https://github.com/zerosum0x0/CVE-2019-0708.
Ich habe lediglich den Code reduziert, damit ich ihn problemlos unter macOS und Windows kompilieren kann,
und die Möglichkeit hinzugefügt, mehrere Ziele zu scannen.
Dies ist erst ein paar Tage alt und experimentell. Ich teste es jedoch, indem ich das gesamte Internet
scan (mit Hilfe von masscan), sodass ich viele Probleme relativ schnell bearbeite. Sie können mich
auf Twitter (@erratarob) für Hilfe/Kommentare kontaktieren.
Um ein Netzwerk zu scannen, führen Sie es wie folgt aus:
rdpscan 192.168.1.1-192.168.1.255
Dies erzeugt eines von 3 Ergebnissen für jede Adresse:
Wenn auf einer Ziel-IP nichts vorhanden ist, haben ältere Versionen die Meldung "UNKNOWN - Verbindung abgelaufen" ausgegeben. Beim Scannen großer Netzwerke führt dies zu einer Überflutung mit Informationen über Systeme, die Sie nicht interessieren. Daher unterdrückt die neue Version diese Informationen standardmäßig, es sei denn, Sie fügen -v (für verbose) in der Befehlszeile hinzu.
Sie können die Geschwindigkeit beim Scannen großer Netzwerke erhöhen, indem Sie die Anzahl der Arbeiter erhöhen:
rdpscan --workers 10000 10.0.0.0/8
Auf meinem Computer werden jedoch aufgrund von Systemeinschränkungen nur etwa 1500 Arbeiter erzeugt, egal wie hoch ich diesen Parameter einstelle.
Sie können die Geschwindigkeit noch weiter erhöhen, indem Sie dies in Verbindung
mit masscan verwenden, wie unten im zweiten Abschnitt beschrieben.
Es gibt drei allgemeine Antworten:
Es gibt drei Hauptgründe, warum wir ein Ziel für sicher halten:
Dies bedeutet, dass wir bestätigt haben, dass das System anfällig für den Fehler ist.
Es gibt unzählige Variationen für Unbekannt
Dieses rdpscan-Tool ist ziemlich langsam und scannt nur ein paar hundert Ziele pro Sekunde.
Stattdessen können Sie masscan verwenden, um die Dinge zu beschleunigen.
Das masscan-Tool ist etwa 1000-mal schneller, liefert aber nur begrenzte Informationen
über das Ziel.
Die Schritte sind:
masscan in rdpscan, sodass es nur die
Ziele scannen muss, von denen wir wissen, dass sie aktiv sind.Die einfache Methode, dies auszuführen, besteht darin, sie in der Befehlszeile zu kombinieren:
masscan 10.0.0.0/8 -p3389 | rdpscan --file -
Die Art, wie ich es mache, erfolgt in zwei Schritten:
masscan 10.0.0.0/8 -p3389 > ips.txt
rdpscan --file ips.txt --workers 10000 >results.txt
Der schwierige Teil ist die Installation der OpenSSL-Bibliotheken, ohne dass sie mit anderen Versionen auf dem System kollidieren. Unter Debian Linux mache ich Folgendes:
$ sudo apt install libssl-dev
Wenn Sie dieses Problem gelöst haben, kompilieren Sie einfach alle .c-Dateien
wie folgt zusammen:
$ gcc *.c -lssl -lcrypto -o rdpscan
Ich habe ein Makefile im Verzeichnis abgelegt, das dies erledigt, sodass Sie wahrscheinlich einfach Folgendes tun können:
$ make
Der Code ist in C geschrieben, benötigt also einen C-Compiler, z. B. durch Ausführen von:
$ sudo apt install build-essential
Dieser Abschnitt beschreibt die offensichtlicheren Build-Fehler.
ssl.h:24:25: fatal error: openssl/rc4.h: No such file or directory
Dies bedeutet, dass Sie entweder nicht die OpenSSL-Header installiert haben oder sie sich nicht in einem Pfad befinden. Denken Sie daran: Selbst wenn Sie OpenSSL-Binärdateien installiert haben, bedeutet dies nicht, dass Sie die Entwicklungsdateien installiert haben. Sie benötigen sowohl die Header als auch die Bibliotheken.
Um diese Dinge unter Debian zu installieren, führen Sie aus:
$ sudo apt install libssl-dev
Um das Pfadproblem zu beheben, fügen Sie ein Compiler-Flag -I/usr/local/include oder etwas
Ähnliches hinzu.
Ein Beispiel für ein Linker-Problem ist das folgende:
Undefined symbols for architecture x86_64:
"_OPENSSL_init_ssl", referenced from:
_tcp_tls_connect in tcp-fac73c.o
"_RSA_get0_key", referenced from:
_rdssl_rkey_get_exp_mod in ssl-d5fdf5.o
"_SSL_CTX_set_options", referenced from:
_tcp_tls_connect in tcp-fac73c.o
"_X509_get_X509_PUBKEY", referenced from:
_rdssl_cert_to_rkey in ssl-d5fdf5.o
Ich bekomme dies unter macOS, weil es mehrere Versionen von OpenSSL gibt. Ich behebe dies, indem ich die Pfade fest codiere:
$ gcc *.c -lssl -lcrypto -I/usr/local/include -L/usr/local/lib -o rdpscan
Laut Kommentaren von anderen könnte die folgende Befehlszeile unter macOS funktionieren, wenn Sie Homebrew zum Installieren verwendet haben. Ich erhalte jedoch weiterhin die oben genannten Linker-Fehler, weil ich andere OpenSSL-Komponenten installiert habe, die sich widersprechen.
gcc $(brew --prefix)/opt/openssl/lib/libssl.a $(brew --prefix)/opt/openssl/lib/libcrypto.a -o rdpscan *.c
Der obige Abschnitt enthält Kurzanleitungen zum Ausführen des Programms. Dieser Abschnitt enthält ausführlichere Hilfe.
Um ein einzelnes Ziel zu scannen, übergeben Sie einfach die Adresse des Ziels:
./rdpscan 192.168.10.101
Sie können IPv6-Adressen und DNS-Namen übergeben. Sie können mehrere Ziele übergeben. Ein Beispiel dafür wäre:
./rdpscan 192.168.10.101 exchange.example.com 2001:0db8:85a3::1
Sie können auch Adressbereiche scannen, entweder mit Beginn-Ende-IPv4-Adressen oder mit IPv4-CIDR-Spezifikation. IPv6-Bereiche werden nicht unterstützt, da sie so groß sind.
./rdpscan 10.0.0.1-10.0.0.25 192.168.0.0/16
Standardmäßig werden nur 100 Ziele gleichzeitig gescannt. Sie können diese Anzahl
mit dem Parameter --workers erhöhen. Unabhängig davon, wie hoch Sie diesen Parameter
einstellen, erhalten Sie in der Praxis jedoch maximal etwa 500 bis 1500 gleichzeitig
laufende Arbeiter, abhängig von Ihrem System.
./rdpscan --workers 1000 10.0.0.0/24
Anstatt Ziele in der Befehlszeile anzugeben, können Sie sie auch aus einer Datei
laden, indem Sie den gut benannten Parameter --file verwenden:
./rdpscan --file ips.txt
Das Format der Datei ist eine Adresse, ein Name oder ein Bereich pro Zeile. Es kann auch
den von masscan erzeugten Text verarbeiten. Überflüssige Leerzeichen werden entfernt,
leere Zeilen werden ignoriert, und alle Kommentarzeilen werden ignoriert. Ein Kommentar ist
eine Zeile, die mit dem Zeichen # oder den Zeichen // beginnt.
Die Ausgabe wird an stdout gesendet und gibt den Status VULNERABLE, SAFE oder UNKNOWN an.
Es kann zusätzliche Gründe für jeden geben. Diese Gründe werden oben beschrieben.
211.101.37.250 - SAFE - CredSSP/NLA required
185.11.124.79 - SAFE - not RDP - SSH response seen
125.121.137.42 - UNKNOWN - no connection - refused (RST)
40.117.191.215 - SAFE - CredSSP/NLA required
121.204.186.182 - SAFE - CredSSP/NLA required
99.8.11.148 - SAFE - CredSSP/NLA required
121.204.186.114 - SAFE - CredSSP/NLA required
49.50.145.236 - SAFE - CredSSP/NLA required
106.12.74.155 - VULNERABLE - got appid
222.84.253.26 - SAFE - CredSSP/NLA required
144.35.133.109 - UNKNOWN - RDP protocol error - receive timeout
199.212.226.196 - UNKNOWN - RDP protocol error - receive timeout
183.134.58.152 - UNKNOWN - no connection - refused (RST)
83.162.246.149 - VULNERABLE - got appid
Sie können dies mit zusätzlichen Unix-Befehlen wie grep und cut verarbeiten.
Um eine Liste nur der anfälligen Maschinen zu erhalten:
./rdpscan 10.0.0.0/8 | grep 'VULN' | cut -f1 -d'-'
Der Parameter -dddd steht für Diagnoseinformationen, wobei je mehr ds Sie
hinzufügen, desto mehr Details werden gedruckt. Dies wird an stderr anstelle von stdout
gesendet, sodass Sie die Streams trennen können. Mit bash wird dies wie folgt gemacht:
./rdpscan --file myips.txt -ddd 2> diag.txt 1> results.txt
Das Hinzufügen des Parameters -d gibt Diagnoseinformationen zu den Verbindungen an stderr aus.
./rdpscan 62.15.34.157 -d
[+] [62.15.34.157]:3389 - connecting...
[+] [62.15.34.157]:3389 - connected from [10.1.10.133]:49211
[+] [62.15.34.157]:3389 - SSL connection
[+] [62.15.34.157]:3389 - version = v4.8
[+] [62.15.34.157]:3389 - Sending MS_T120 check packet
[-] [62.15.34.157]:3389 - Max sends reached, waiting...
62.15.34.157 - SAFE - Target appears patched
Unter macOS/Linux können Sie stdout und stderr wie üblich getrennt in verschiedene
Dateien umleiten:
./rdpscan --file ips.txt 2> diag.txt 1> results.txt
Es enthält auch SOCKS5-Unterstützung:
./rdpscan --file ips.txt --socks5 localhost --socks5port 9050
Es verschlechtert die Verbindungsprobleme, sodass Sie viel mehr "UNKNOWN"-Ergebnisse erhalten.