mimi - stock.adobe.com
Masscan: Offene Ports und Schwachstellen im Netzwerk finden
Das Open-Source-Tool Masscan kann sehr schnell Geräte im Netzwerk identifizieren, offene Ports erkennen und dadurch Schwachstellen finden. Wir zeigen, wie Sie dabei vorgehen.
Masscan ist ein Open-Source-Tool, dessen Stärke vor allem darin besteht, sehr schnell große und kleine Netzwerke zu scannen, IP-Adressen zu identifizieren und offene Ports zu finden. Auf Basis dieser Informationen können Admins Schwachstellen im Netzwerk identifizieren, Penetrationstests durchführen und dadurch die Sicherheit deutlich erhöhen.
Masscan ist zum Beispiel in Kali Linux verfügbar, lässt sich aber auch auf anderen Linux-Distributionen installieren oder auch im Windows-Subsystem für Linux (WSL) unter Windows betreiben. Wir gehen im folgenden Text vom Subnetz 10.0.0.0/16 aus.
Scan im Netzwerk nach offenen Webservern
Um in diesem Netzwerk aktive Geräte zu finden, auf denen die Ports 80 oder 443 offen sind, können Sie den folgenden, einfachen Befehl verwende:
masscan -p80,443 10.0.0.0/16
Bei großen Netzwerken lässt sich das auch auf einen Bereich von IP-Adressen einschränken:
masscan 10.0.0.1-10.0.1.254 -p80,443 -rate=1000
Mit diesem Befehl scannt Masscan den IP-Bereich 10.0.0.1 bis 10.0.1.254 nur auf die Ports 80 und 443. Die Scan-Geschwindigkeit wird auf 1000 Pakete pro Sekunde eingestellt, um das Netzwerk nicht zu überlasten. Ohne diese Option scannt Masscan noch schneller. Die Ergebnisse lassen sich auch in der Datei port_scan_output.txt speichern. Dazu kommt zusätzlich noch der Parameter -oL port_scan_output.txt zum Einsatz. Der Einsatz von Masscan erfordert Root-Rechte.
Um einzelne IP-Adressen vom Scan auszuschließen, kann der folgende Parameter zum Einsatz kommen: --exclude 10.0.1.5,10.0.1.10
Sobald klar ist, welche Ports offen sind, lassen sich diese mit anderen Tools weiter auslesen, zum Beispiel mit den verschiedenen Möglichkeiten von Nmap. Wir haben dem Thema Pentest mit Nmap einen eigenen Beitrag gewidmet.
Schnellscan des gesamten Subnetzes auf offene Ports
Ein grundlegender Scan mit Masscan über das gesamte Subnetz liefert eine Liste offener Ports, die anschließend detaillierter mit Nmap untersucht werden können. Sinnvoll ist das etwa in einem Szenario, indem zunächst zum Beispiel alle Domänencontroller auf Basis der offenen Ports identifiziert werden. Das geht mit:
masscan 10.0.0.0/16 -p80,443,445,3389 --rate=1000 -oL masscan_output.txt
Dieser Befehl scannt das Subnetz auf die gängigen Ports 80 (HTTP), 443 (HTTPS), 445 (SMB) und 3389 (RDP) mit einer moderaten Geschwindigkeit von 1000 Paketen pro Sekunde. Die Ergebnisse werden in der Datei Masscan_output.txt gespeichert. Das Ergebnis lässt sich für Nmap umändern, um nur die IP-Adressen anzuzeigen:
awk '/open/ {print $4}' masscan_output.txt | sort -u > Nmap_targets.txt
Danach können Sie mit Nmap genau diese IP-Adressen scannen und die Ergebnisse anzeigen:
Nmap -iL Nmap_targets.txt -A -sV -O
Spezifischer Scan für Domänencontroller in Microsoft-Netzwerken
Für Domänencontroller im Netzwerk lässt sich die Technik gezielt anpassen, um spezifisch auf die Ports und Dienste zu scannen, die meistens auf Windows-Domänencontrollern aktiv sind, wie etwa LDAP (389), SMB (445) und Kerberos (88). Ein gezielter Scan der typischen Domänencontroller-Ports wird so ausgeführt:
masscan 10.0.0.0/16 -p88,135,389,445,636 --rate=1000 -oL masscan_dc_output.txt
Nach der Erfassung der offenen Ports führen Sie mit Nmap eine detaillierte Abfrage der entdeckten IP-Adressen und Ports durch, um die spezifischen Informationen zu den Domänencontroller-Diensten zu ermitteln:
awk '/open/ {print $4}' masscan_dc_output.txt | sort -u > Nmap_dc_targets.txt
Nmap -iL Nmap_dc_targets.txt -A -sV -O --script "ldap*"
Hier wird zusätzlich das Nmap-Skript ldap* verwendet, das spezifische LDAP-Informationen von einem Domänencontroller abruft und so eine tiefere Analyse der Windows-Umgebung ermöglicht. Neben den genannten Ports lassen sich natürlich beliebig weitere nutzen, die in Active Directory eine Rolle spielen. Das sind vor allem folgende:
- Port 88 (Kerberos)
- Port 135 (RPC Endpoint Mapper)
- Port 389 (LDAP)
- Port 636 (LDAPS)
- Port 445 (SMB/CIFS)
- Port 53 (DNS)
- Port 464 (Kerberos Password Change)
- Port 3268 (Global Catalog)
- Port 3269 (Global Catalog over SSL)
Diese Ports lassen sich beliebig mit dem Parameter -p von Masscan nutzen und kombinieren. Dadurch ist es auch möglich, zunächst alle Domänencontroller in einem Netzwerk zu identifizieren, die IP-Adressen zu speichern und danach mit Nmap zu überprüfen:
#!/bin/bash
subnet="10.0.0.0/16"
masscan_rate=1000
masscan_ports="88,135,389,445,636"
masscan_output="masscan_dc_output.txt"
Nmap_output="Nmap_dc_report.txt"
# Step 1: Scan the subnet for Domain Controllers using Masscan
echo "Scanning the subnet $subnet for Domain Controllers..."
masscan $subnet -p$masscan_ports --rate=$masscan_rate -oL $masscan_output
# Step 2: Extract IP addresses and open ports for Nmap input
echo "Processing Masscan results..."
awk '/open/ {print $4}' $masscan_output | sort -u > Nmap_targets.txt
# Check if any Domain Controllers were found
if [ ! -s Nmap_targets.txt ]; then
echo "No Domain Controllers found in the subnet."
exit 1
fi
# Step 3: Run Nmap on the identified Domain Controllers to check for vulnerabilities
echo "Scanning Domain Controllers with Nmap for vulnerabilities..."
Nmap -iL Nmap_targets.txt -A -sV -O --script vuln -oN $Nmap_output
# Final Output
echo "Nmap scan completed. Vulnerability report saved in $Nmap_output."
Weitere Serverdienste für Pentests mit Masscan identifizieren
Auf dem gleichen Weg lassen sich schnell auch andere Serverdienste im Netzwerk identifizieren. Um ungesicherte Datenbanken im Netzwerk zu finden, kann zum Beispiel gezielt auf die typischen Ports für MySQL (3306) und PostgreSQL (5432) gescannt werden:
masscan 10.0.0.0/8 -p3306,5432 --rate=5000 -oL database_scan.txt
Auch hier lässt sich das Ergebnis wieder mit den genannten Möglichkeitenfür Nmap nutzbar machen, um den Scan sofort mit Nmap weiterzuführen. Dadurch lassen sich mit Masscan aktive IP-Adressen finden und mit den verschiedenen Nmap-Skripten und -Möglichkeiten nach Schwachstellen untersuchen.
Ein weiteres Beispiel ist das Scannen auf Ports, die für Geräte-Management-Interfaces genutzt werden, etwa 22 (SSH), 23 (Telnet) oder 161 (SNMP). Hiermit lassen sich potenziell ungesicherte oder schlecht konfigurierte Geräte im Netzwerk aufspüren.
Masscan kann auch zur gezielten Suche nach Remote-Access-Diensten und VPN-Endpoints eingesetzt werden, die häufig in Unternehmensnetzwerken vorhanden sind. Diese Dienste sind eine beliebte Angriffsfläche, da sie extern zugänglich sein müssen und bei Sicherheitslücken direkten Zugriff auf das Netzwerk ermöglichen könnten. Ein typischer Anwendungsfall ist das Scannen auf Ports, die von Remote-Desktop-Diensten, VPN-Gateways und SSH-Zugängen genutzt werden, um festzustellen, welche Systeme und Zugänge im Netzwerk offen liegen. Der folgende Befehl durchsucht einen IP-Bereich gezielt nach typischen Remote-Access-Ports wie 3389 (Remote Desktop Protocol), 22 (SSH), 500 (IKE für IPsec-VPNs) und 4500 (NAT-Traversal für VPNs). Auch hier können andere Ports genutzt werden.
masscan 10.1.0.0/16 -p3389,22,500,4500 --rate=3000 -oL remote_access_scan.txt
Bei den VPN-Lösungen WireGuard und OpenVPN kommen unterschiedliche Ports zum Einsatz, die für die sichere Übertragung der Daten verantwortlich sind. WireGuard verwendet standardmäßig den UDP-Port 51820. Administratoren können diesen Port jedoch anpassen. OpenVPN nutzt den UDP-Port 1194. Wenn eine stabilere, aber möglicherweise langsamere Verbindung benötigt wird oder wenn Firewalls UDP blockieren, kann OpenVPN auch über den TCP-Port 1194 oder andere Ports, wie den TCP-Port 443, betrieben werden.