
CVE-2018-15473 - Opensshenum ist ein Benutzer-Enumerator, der einen OpenSsh-Bug ausnutzt.
Opensshenum ist ein OpenSSH-Benutzer-Enumerator, mit dem eine beliebige Liste von Benutzernamen gegen einen OpenSSH-Server überprüft werden kann, um festzustellen, welche davon tatsächlich auf dem entfernten Rechner vorhanden sind. Dieses Programm nutzt einen Fehler aus (korrigiert im Juli 2018), der sich mindestens ab OpenSSH 2.3.0 (veröffentlicht im November 2000) als wirksam erwiesen hat.
Ich habe den Exploit ausgehend von Tssh geschrieben, einem SSH-2-Client, den ich ab den RFCs von Grund auf in C++11 entwickelt habe.
Weitere Informationen finden Sie hier:
http://seclists.org/oss-sec/2018/q3/124
Dieses Problem erhielt die CVE-Nummer CVE-2018-15473.
Dieser Code wurde zu Informations- und Bildungszwecken veröffentlicht. Das Eindringen in Systeme und Dienste ohne Erlaubnis des Eigentümers ist illegal. Der Missbrauch der Informationen und der Software in diesem Repository kann zu strafrechtlichen Anklagen gegen den Täter führen. Handlungen oder Aktivitäten im Zusammenhang mit dem Material in diesem Git-Repository liegen in Ihrer alleinigen Verantwortung. Der Autor übernimmt keine Haftung für den Fall, dass gegen Personen, die die Informationen oder die Software auf dieser Website missbrauchen, um gegen das Gesetz zu verstoßen, Strafanzeige erstattet wird.
Das Programm ist für den Einsatz in einer *nix-Umgebung vorgesehen und wurde auf verschiedenen Linux-Distributionen und OS X getestet:
mit einem der folgenden Compiler:
und einem der folgenden SSH-Server:
Die einzige externe Abhängigkeit ist die OpenSSL-Bibliothek, die für die kryptografischen Funktionen verwendet wird. In zukünftigen Versionen könnten Alternativen zu OpenSSL eingeführt werden. Dieses Programm ist für die Verwendung mit einer OpenSSL-Version gleich oder höher als:
(Das bedeutet, dass unter OS X ein Upgrade erforderlich ist).
Zum Kompilieren des Programms sind folgende Werkzeuge/Bibliotheken erforderlich:
Es verarbeitet die über die Pipe übergebene Benutzerliste, Beispiel:
cat user.txt | ./opensshenum -i dummy_cert target_addr
xxx:NOK
gabriel:OK
wobei user.txt eine Datei ist, die eine Liste von Benutzern enthält, einen pro Zeile, und dummy_cert ein mit dem Befehl ssh-keygen von OpenSSH erstellter Schlüssel ist (das Verzeichnis der Schlüssel ist standardmäßig ~/.ssh).
Ein Programm könnte zur Generierung der Liste verwendet werden:
printf "xxx\ngabriel" | ./src/opensshenum -i dummy_rsa localhost
xxx:NOK
gabriel:OK
Siehe die in dieser Version enthaltene Manpage.
SSH-Port-Scanner-Funktion hinzugefügt: Jetzt kann opensshenum alle einem Adresse zugeordneten Ports scannen, um SSH-Instanzen zu finden, die auf anderen Ports als 22 lauschen, um den Exploit nur auf diese verifizierten Ports anzuwenden. Diese Funktion kann eigenständig verwendet werden, um nur eine Liste der mit SSH verbundenen Ports zu erhalten, ohne einen Angriff auszuführen.
Beispiel:
opensshenum -s -n -t2 -m22221 -M22225 -r'.*OpenSSH' -idummy_rsa my_imaginary_website.com
scannt die Ports (-s) zwischen 22221 und 22225 (beide inklusive), führt nur den Scan durch (-n), mit einem Timeout von 2 Sekunden (-t), erwartet einen Hello-String, der die Zeichenfolge OpenSSH enthält, verwendet einen öffentlichen Schlüssel namens idummy_rsa (ich empfehle, nur für diese Art von Operationen einen Schlüssel zu generieren) und verwendet als Ziel my_imaginary_website.com. Weitere Informationen in der Manpage.
Ein Alpha-Skript mit GNU Parallel (parallenum.sh) ist enthalten, als Proof-of-Concept für die Reduzierung der Scanzeit durch Aufteilung des zu scannenden Portbereichs in Unterbereiche, die jeweils einem bestimmten Prozess zugeordnet sind. Dies erzeugt offensichtlich viel Rauschen. Um das Rauschen zu reduzieren, kann der Parameter -t verwendet werden.
Fingerabdruck-Funktion, nützlich zur automatischen Identifizierung des Betriebssystemtyps (z. B. wenn der "Hallo"-String weggelassen wird) und der Dienste mit einer Datenbank aus Benutzern/Benutzerkombinationen. Die Datenbank wird aus *.lst-Dateien erstellt, die in einem Verzeichnis gesammelt werden. Jede *.lst-Datei hat den Namen <os_name_or_service>.lst, Beispiele:
ubuntu_17_10.lst aix.lst proprietary_ftp.lst
Die Datenbank, eine CSV-Datei, hat das Format:
user_1;os_or_service_1; ... ;os_or_service_n ... user_m;os_or_service_1; ... ;os_or_service_n
Die Datenbank kann aus den *.lst-Dateien mit dem Dienstprogramm createdb erstellt werden, das sich im Verzeichnis ./utils befindet, wobei das *.lst-Verzeichnis angegeben wird, Beispiel:
cd utils make ./createdb ../lists/
Um das Fingerprinting zu verwenden, nutzen Sie die Option -F mit der Datenbankdatei, Beispiel:
cat test/scan.sample | opensshenum -p22 -idummy_rsa -Futils/opensshenum.db localhost