
rdpscan für CVE-2019-0708 (BlueKeep-Sicherheitslücke)
Dies ist ein schneller und einfacher Scanner für die Sicherheitslücke CVE-2019-0708 in Microsoft Remote Desktop.
Derzeit sind etwa 900.000 Rechner im öffentlichen Internet anfällig für diese Sicherheitslücke,
daher ist zu erwarten, dass bald ein Wurm wie WannaCry oder notPetya auftaucht. Scannen Sie daher Ihre Netzwerke und
patchen Sie (oder aktivieren Sie zumindest NLA) auf anfälligen Systemen.
Dies ist ein Kommandozeilenwerkzeug. 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 Werkzeug basiert vollständig auf dem rdesktop-Patch von https://github.com/zerosum0x0/CVE-2019-0708.
Ich habe den Code lediglich so gekürzt, dass ich ihn problemlos unter macOS und Windows kompilieren kann,
und habe die Möglichkeit hinzugefügt, mehrere Ziele zu scannen.
Status
Dies ist erst wenige Tage alt und experimentell. Ich teste es jedoch durch Scannen
des gesamten Internets (mit Hilfe von masscan), sodass ich recht schnell eine Menge Probleme
behebe. Sie können mich auf Twitter (@erratarob) kontaktieren, um Hilfe/Kommentare zu erhalten.
- 2019-05-38 – Bessere Ergebnisbeschreibungen sowie Dokumentation ihrer Bedeutung (siehe unten).
- 2019-05-27 – Windows- und macOS-Binärdateien veröffentlicht (Klicken Sie auf die Badges oben).
- 2019-05-26 – Behebung der Windows-Netzwerkprobleme
- 2019-05-25 – Linux und macOS funktionieren gut, Windows hat einige Netzwerkfehler
- 2019-05-24 – Funktioniert unter Linux und macOS, Windows hat einige Kompilierungsfehler
- 2019-05-23 – Arbeitet derzeit unter macOS in XCode
Hauptverwendung
Um ein Netzwerk zu scannen, führen Sie es wie folgt aus:
rdpscan 192.168.1.1-192.168.1.255
Dies erzeugt für jede Adresse eines von drei Ergebnissen:
- SAFE – wenn das Ziel als gepatcht oder zumindest als CredSSP/NLA erfordernd eingestuft wurde
- VULNERABLE – wenn das Ziel als anfällig bestätigt wurde
- UNKNOWN – wenn das Ziel nicht antwortet oder ein Protokollfehler auftritt
Wenn an einer Ziel-IP-Adresse nichts vorhanden ist, druckten die älteren Versionen die
Meldung "UNKNOWN – Verbindungszeitüberschreitung". 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) auf der Kommandozeile hinzu.
Sie können die Geschwindigkeit beim Scannen großer Netzwerke erhöhen, indem Sie die
Anzahl der Worker erhöhen:
rdpscan --workers 10000 10.0.0.0/8
Auf meinem Computer werden jedoch nur etwa 1500 Worker erzeugt, aufgrund von
Systemeinschränkungen, 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.
Interpretation der Ergebnisse
Es gibt drei allgemeine Antworten:
- SAFE – bedeutet, dass das Ziel wahrscheinlich gepatcht oder anderweitig
nicht anfällig für den Fehler ist.
- VULNERABLE – bedeutet, dass wir bestätigt haben, dass das Ziel anfällig
für diesen Fehler ist und wahrscheinlich infiziert wird, sobald der Wurm zuschlägt.
- UNKNOWN – bedeutet, dass wir weder bestätigen noch ausschließen können, normalerweise
weil das Ziel nicht antwortet oder kein RDP ausführt, was die überwiegende
Mehrheit der Antworten ausmacht. Auch wenn Ziele überlastet sind oder
Netzwerkprobleme auftreten, erhalten wir viele davon. Schließlich sind
Protokollfehler für viele verantwortlich.
Während die drei Hauptantworten SAFE, VULNERABLE und UNKNOWN sind,
enthalten sie zusätzlichen Text, der die Diagnose erklärt. Dieser Abschnitt
beschreibt die verschiedenen Zeichenfolgen, die Sie sehen werden.
SAFE
Es gibt drei Hauptgründe, warum wir ein Ziel für sicher halten:
- SAFE – Target appears patched
Dies tritt auf, wenn das Ziel nicht auf die auslösende Anfrage reagiert.
Dies bedeutet, dass es sich um ein Windows-System handelt, das gepatcht wurde,
oder um ein System, das von Anfang an nicht anfällig war, wie Windows 10
oder Unix.
- SAFE – CredSSP/NLA required
Dies bedeutet, dass das Ziel zuerst eine Netzwerkauthentifizierung auf Netzwerkebene (NLA) erfordert, bevor die
RDP-Verbindung hergestellt werden kann. Das Werkzeug kann diesen Punkt ohne
legitime Anmeldeinformationen nicht passieren und kann daher nicht feststellen, ob das Ziel gepatcht wurde.
Allerdings können Hacker auch nicht über diesen Punkt hinausgehen, um anfällige Systeme auszunutzen,
daher sind Sie wahrscheinlich "sicher". Wenn jedoch Exploits auftauchen, können Insider mit gültigen
Benutzernamen/Passwörtern das System ausnutzen, wenn es nicht gepatcht ist.
- SAFE – not RDP
Dies bedeutet, dass das System kein RDP verwendet, sondern einen anderen Dienst, der zufällig denselben
Port verwendet und eine Antwort erzeugt, die eindeutig nicht RDP ist. Häufige Beispiele sind
HTTP und SSH. Beachten Sie jedoch, dass ein Server anstelle eines identifizierbaren Protokolls
mit einem RST- oder FIN-Paket antworten kann. Diese werden als UNKNOWN identifiziert,
nicht als SAFE.
VULNERABLE
Dies bedeutet, dass wir bestätigt haben, dass das System anfällig für den Fehler ist.
- VULNERABLE – got appid
Es gibt nur eine Antwort, wenn das System anfällig ist, diese.
UNKNOWN
Es gibt unzählige Variationen für UNKNOWN
- UNKNOWN – no connection – timeout
Dies ist bei weitem die häufigste Antwort und tritt auf, wenn die Ziel-IP-Adresse
überhaupt nicht antwortet. Tatsächlich ist sie so häufig, dass sie beim Scannen
großer Adressbereiche normalerweise weggelassen wird. Sie müssen das Flag -v (verbose)
hinzufügen, um sie zu aktivieren.
- UNKNOWN – no connection – refused (RST)
Dies ist bei weitem die zweithäufigste Antwort und tritt auf, wenn das Ziel existiert
und auf Netzwerkverkehr antwortet, aber kein RDP ausführt, sodass es die Verbindung mit
einem TCP-RST-Paket ablehnt.
- UNKNOWN – RDP protocol error – receive timeout
Dies ist die dritthäufigste Antwort und tritt auf, wenn wir erfolgreich eine RDP-Verbindung
hergestellt haben, der Server dann aber nicht mehr antwortet. Dies liegt an
Netzwerkfehlern oder daran, dass das Zielsystem aus irgendeinem Grund überlastet ist.
Es könnten auch Netzwerkfehler auf unserer Seite sein, zum Beispiel wenn Sie hinter einem NAT sitzen
und dieses mit zu vielen Verbindungen überlasten.
- UNKNOWN – no connection – connection closed
Dies bedeutet, dass wir eine Verbindung hergestellt haben (TCP SYN-ACK), diese aber dann
sofort geschlossen wird (mit einem RST oder FIN). Dafür gibt es viele
Gründe, die wir nicht unterscheiden können: