
Scanner zur Identifizierung von Servern mit SSH-Software, die möglicherweise anfällig für die CVEs CVE-2024-6387 und CVE-2023-48795 sind.
Scanner zur Identifizierung von Servern mit SSH-Software, die möglicherweise anfällig für die CVEs CVE-2024-6387 und CVE-2023-48795 ist.
| CVE | Name | Bedingung | Schweregrad |
|---|---|---|---|
| CVE-2024-6387 | regreSSHion | OpenSSH < 9.8p1 | CRITICAL |
| CVE-2023-48795 | Terrapin | OpenSSH < 9.6 | HIGH |
Race Condition im SIGALRM-Signalhandler des OpenSSH-Servers ermöglicht nicht authentifiziertes RCE als Root auf Linux-Systemen mit glibc. Betrifft alle OpenSSH-Versionen vor 9.8p1.
Prefix-Truncation-Angriff auf den SSH-Handshake (binäres Protokoll), der es einem MITM-Gegner erlaubt, ausgehandelte Sicherheitserweiterungsnachrichten zu Beginn der Sitzung zu entfernen. Betrifft OpenSSH < 9.6.
Das Skript verbindet sich direkt mit dem SSH-Port der Ziele und liest das Identifikationsbanner (z. B. SSH-2.0-OpenSSH_9.7), ohne Anmeldeinformationen zu senden. Anhand der Version vergleicht es mit den behobenen Versionen jeder CVE und klassifiziert den Host.
Ziel → TCP-Verbindung Port 22 → Lesen des SSH-Banners → Identifikation der Software
→ Parsen der OpenSSH-Version → Vergleich mit behobenen Versionen → Klassifizierung + Log + CSV
Das Skript identifiziert außerdem den Hersteller/die SSH-Software anhand des Banners und erkennt:
| Banner | Identifizierter Hersteller |
|---|---|
SSH-2.0-OpenSSH_9.7 | OpenSSH |
SSH-2.0-ROSSSH | Mikrotik |
SSH-2.0-Cisco-1.25 | Cisco |
SSH-2.0-dropbear_2022.83 | Dropbear |
SSH-2.0-libssh-0.9.6 | libssh |
SSH-2.0-AsyncSSH_2.13.2 | AsyncSSH |
SSH-2.0-paramiko_2.9.5 | Paramiko |
SSH-2.0-Bitvise-... | Bitvise |
SSH-2.0-WolfSSH_1.4.14 | wolfSSH |
| Andere nicht zugeordnete | Name aus dem Banner extrahiert |
pip install requests packaging urllib3 dnspython
dnspythonist optional, aber sehr empfehlenswert – die parallele Reverse-Auflösung ist damit deutlich schneller. Ohnednspythonverwendet das Skriptsocketals Fallback.
# IP individual
python ssh_scanner.py --ip 192.168.1.10
# Faixa CIDR
python ssh_scanner.py --cidr 10.0.0.0/24
# Múltiplos CIDRs
python ssh_scanner.py --cidr 10.0.0.0/24 192.168.1.0/24
# ASN (prefixos resolvidos via RIPE Stat, fallback para bgp.tools)
python ssh_scanner.py --asn AS12345
# Combinação de entradas
python ssh_scanner.py --asn AS12345 --cidr 10.0.0.0/8 --ip 1.2.3.4
# A partir de um arquivo (um IP, CIDR ou ASN por linha)
python ssh_scanner.py --file alvos.txt
# Portas adicionais (além da 22)
python ssh_scanner.py --cidr 10.0.0.0/24 --ports 22 2222 22222
| Parameter | Standard | Beschreibung |
|---|---|---|
--ports | 22 | SSH-Port(s) zum Scannen |
--workers | 60 | Gleichzeitige Threads für den SSH-Scan |
--timeout | 3.0 | Timeout der SSH-Verbindung in Sekunden |
--dns-workers | 200 | Gleichzeitige Threads für die Reverse-DNS-Auflösung |
--dns-timeout | 1.5 | Timeout der DNS-Abfragen in Sekunden |
--no-confirm | — | Überspringt die Bestätigung vor dem Start (nützlich für Automatisierungen) |
Die DNS-Auflösung wird vor dem SSH-Scan als Batch mit einer dedizierten Thread-Warteschlange durchgeführt, sodass die DNS-Latenz die Scangeschwindigkeit nicht beeinträchtigt.
Alle Ergebnisse werden in ./logs/ gespeichert:
| Datei | Inhalt |
|---|---|
ssh_scan_<timestamp>.log | Vollständiges Scan-Log (alle gefundenen SSH-Hosts) |
ssh_scan_<timestamp>_vulneraveis.txt | Nur Hosts, die als VULNERABEL eingestuft wurden |
ssh_scan_<timestamp>_resultados.csv | Alle SSH-Hosts mit vollständigem Status |
ssh_scan_<timestamp>_formato_estruturado.csv | Strukturierte CSV mit IP, Port, Zeitstempel, Domäne, Hersteller und CVEs |
formato_estruturado.csv)Vorhandene Spalten:
| Spalte | Beschreibung |
|---|---|
IP | IP-Adresse des Hosts |
PORTA | SSH-Port, an dem das Banner erfasst wurde |
TIMESTAMP_UTC | ISO-8601-UTC-Zeitstempel des Scans |
DOMINIO | Hostname per Reverse-DNS (PTR) oder SEM-PTR |
FABRICANTE | Aus dem Banner identifizierter Hersteller |
SW_NAME | Aus dem Banner extrahierte SSH-Software |
SW_VERSAO | Version der SSH-Software |
CVEs | Betroffene CVEs, getrennt durch ; (Kleinbuchstaben) |
BANNER | Vollständiges erfasstes SSH-Banner |
Beispielzeilen:
IP | PORTA | TIMESTAMP_UTC | DOMINIO | FABRICANTE | SW_NAME | SW_VERSAO | CVEs | BANNER
192.168.1.10 | 22 | 2026-05-20T00:39:33Z | host.exemplo.com | OpenSSH | OpenSSH | 9.7 | cve-2024-6387;cve-2023-48795 | SSH-2.0-OpenSSH_9.7
192.168.1.20 | 22 | 2026-05-20T12:46:03Z | host2.exemplo.com | OpenSSH | OpenSSH | 9.4 | cve-2023-48795;cve-2024-6387 | SSH-2.0-OpenSSH_9.4
192.168.1.30 | 22 | 2026-05-20T12:47:11Z | router.exemplo.com | Mikrotik | ROSSSH | N/D | | SSH-2.0-ROSSSH
Am Ende des Scans zeigt das Skript automatisch eine Vorschau der ersten 20 Zeilen der strukturierten CSV im Terminal an, sofern verwundbare Hosts vorhanden sind.
| Status | Bedeutung |
|---|---|
VULNERABEL | Bestätigte OpenSSH-Version unterhalb der korrigierten Version |
SICHER | Bestätigte OpenSSH-Version mit korrigierter oder höherer Version |
VERSION-VERSTECKT | SSH erkannt, aber Version nicht preisgegeben – nicht als sicher bestätigt |
NICHT-OPENSSH | SSH-Server gefunden, aber kein OpenSSH (Dropbear, Cisco usw.) |
KEIN-SSH | Port hat geantwortet, aber das Banner entspricht nicht dem SSH-Protokoll |
Aktualisieren Sie OpenSSH auf Version 9.8p1 oder höher (deckt beide CVEs ab):
# Ubuntu / Debian — über System-Repository
sudo apt update && sudo apt install --only-upgrade openssh-server
ssh -V
# CentOS / RHEL / Rocky
sudo dnf update openssh-server
ssh -V