Nmap Portscanner: Die Einführung
Nmap ist der wohl mit Abstand bekannteste Portscanner. Mit Hilfe eines Portscanners kannst du ermitteln, welche Server, Clients und andere System aktuell in deinem Netzwerk aktiv sind. Die Ergebnisse liefern Informationen darüber, welche Betriebssysteme im Einzelnen verwendet werden und welche Netzwerkdienste (Ports) nach außen erreichbar sind. Daher ist Nmap nicht nur das favorisierte Werkzeug für Hacker, sondern unterstützt dich auch bei Penetration-Tests, um z. B. Angriffsvektoren in deinem eigenen Netzwerk zu identifizieren.
Passende Schulungen
Cisco CCNA Zertifikat: Cisco Certified Network Associate (CCNA)
CompTIA Network+
CompTIA Network+ - Werde zum Spezialisten für Aufbau und Troubleshooting von Netzwerken!
Nmap: der bekanntestes Portscanner
Da Portscanner wie Nmap sowohl für echte Angriffe z. B. im Rahmen der Reconnaissance-Phase als auch für Penetrationstests zum Einsatz kommen, musst du dich vor dem Einsatz im nicht eigenen Netzwerk unbedingt rechtlich absichern und z. B. die Zustimmung vom Auftraggeber einholen. Informiere dich vorher umfassend, was beim Einsatz von Scannern erlaubt ist und was nicht, bzw. was in die Grauzone fällt. Entsprechende Ausführung sind nicht Inhalt dieses Beitrages. Da aber der Einsatz von Nmap auch im Rahmen der Reconnaissance-Phase eines echten Angriffs von Security-Tools wie IDS-Systemen oder Firewalls als Erkundungsangriff bewertet wird, erzeugen die genannten Tools auch entsprechende Log-Einträge was wiederrum ein guter Admin erkennt oder idealerweise zu einem Vorfall (Incident) in einen SIEM-Tool führt.
Was ist Nmap?
Der Name Nmap steht für Network Mapper. Das Tool wurde von Gordon Lyon entwickelt, der aber besser unter seinem Pseudonym Fyodor Vaskovich bekannt ist. Version 1.0 wurde im September 1997 für Linux unter der GPL-Lizenz veröffentlicht. Aktuell ist die stabile https://nmap.org/download.html Version 7.92. Heute ist Nmap nicht nur im Quellcode, sondern auch als RPM-Binary für Red-Hat-basierte Distributionen sowie für Mac OS und Windows erhältlich.
Nmap braucht unter Windows https://npcap.com/windows-10.html Ncap. Details dazu findest du in diesem https://www.windowspro.de/thomas-drilling/netzanalyse-wireshark-gesetzliche-vorgaben-vorbereitung-installation-windows Beitrag zu Wireshark. Das ausführbare Nmap-Windows-Installations-Programm kann die Npcap-Installation, Optimierungen der Registrierungsleistung und das Dekomprimieren der ausführbaren Dateien und Datendateien an deinem bevorzugten Speicherort durchführen. Es enthält auch das grafische Frontend Zenmap. Die Windows-Version ist also leicht in Betrieb zu nehmen. Du kannst dir aber auch https://www.kali.org/get-kali/ Kali-Linux als Security- und Penetrationstest-Distribution herunterladen. Kal-Linux gibt es auch als VM-Image (VMware, Virtual Box), für WSL, Live-Boot und als Docker-Container. In Kali Linux ist nmap vorinstalliert.
Nmap kann horizontal oder vertikal scannen
Nmap kann horizontal oder vertikal scannen. Der horizontale Scan läuft über mehrere Systeme im Netzwerk, um zu ermitteln, welche davon erreichbar sind, während der vertikale Scan ein einzelnes System dahingehend untersucht, welche TCP-/UDP-Ports auf diesem erreichbar sind. Anspruchsvoll weniger in der Anwendung an sich als in der Abdeckung unterschiedlichster Szenarien ist Nmap dadurch, dass das Tool mehr als 100 Parameter, bzw. Optionen beim Aufruf versteht. Diese dienen u. a. zum Einstellen des Scan-Typs oder der Performanceoptimierung. Zudem verfügt Nmap über eine Script-Engine (NSE), mit deren Hilfe du auch Skripte einbinden kannst. Die Syntax von Nmap an sich ist aber einfach:
nmap <Scantyp> [<Optionen>] <Ziele>
Optionen brauchst du nicht zwingend, sondern nur bei Bedarf. Unter Windows kannst du auch die grafische Nmap-Oberfläche Zenmap verwenden.
Host-Erkennung mit Nmap
Die Arbeitsweise mit Nmap gestaltet sich derart, dass du Nmap im Rahmen eines horizontalen Scans zunächst einsetzt, um zu ermitteln, welche potentiellen Ziele überhaupt erreichbar sind, um diesen im Rahmen eines vertikalen Scans intensiv untersuchen zu können. Man bezeichnet den Schritt auch als „Host Discovery“. Nur bei Systemen, die im Rahmen des horizontalen Scans identifiziert werden können, lohnt sich ein vertikaler Scan.
Hosts (Clients wie Server) geben sich allerdings nicht immer in der gleichen Weise und auch nicht unbedingt freiwillig zu erkennen, weshalb es unterschiedliche Herangehensweise für das Host-Discovery gibt. Den Scan-Typ gibst du mit „… -s <Scantyp>“ normalerweise als Großbuchstabe an (z. B.: -sN, -sT, -sSA oder -sU). Um einen horizontalen Scan (Host Discovery) durchzuführen, verwendest du z. B..-sN für den so genannten TCP Null Scan. Das bedeutet, dass nur ein horizontaler Scan (Host Discovery) ohne den eigentlichen Port-Scan durchgeführt wird. Als erstes Ziel bietet sich z. B. scanme.nmap.org an:
nmap -sN scanme.nmap.org
Mit diesem Scan ermittelst du, dass der betreffende Host (hier: scanme.nmap.org) erreichbar ist (“Host is up”).
Nun scanne auf diese Weise beispielsweise ein komplettes Netzwerksegment mit:
nmap -sN 172.20.10.0/24
Das Ergebnis könnte z. B. so aussehen:
In der Abbildung konnten 5 Systeme („Host is up“) identifiziert werden. Die ersten drei sind VMware-Linux-VMs, die Teile eines Kubernetes-Clusters sind und ihre MAC-Adresse preisgeben. Beim vorletzten System handelt es sich um einen physischen Router, der ebenfalls seine MAC-Adresse preisgibt. Das letzte System ist eine VMware-Windows-VM, die ihre MAC-Adresse verbirgt.
Ports-Scan (vertikales Scanning) mit Nmap
Das Host-Discovery ist eine Sache. Der eigentliche Einsatzzweck von Nmap ist aber das Scannen von Ports (vertikales Scanning), also das Prüfen des Zustandes der erreichbaren TCP- oder UDP-Ports, denn die meisten Dienste in einem TCP/IP-Netzwerk (Webserver, Mailserver, SQL) binden sich an einen oder mehrere Ports, um dort auf Verbindungsanforderungen über das Netzwerk zu lauschen.
Das wiederum bietet einem Scanner wie Nmap die Möglichkeit, Informationen über das gescannte System einzusammeln. Übrigens kann ein TCP- oder UDP-Port nicht einfach nur offen oder nicht sein. Der Nmap Portscanner ist in der Lage, mehrere differenzierte Zustände zu unterscheiden:
- open: Der Port ist erreichbar, d. h. er antwortet mit SYN/ACK bei TCP oder mit einer dem UDP-Dienst entsprechend Antwort.
- closed: Der Port ist nicht erreichbar und antwortet mit einem RST/ACK-Paket bei TCP oder bei UDP mit dem ICMP-Typ 3 für „Port Unreachable (UDP)“.
- filtered: Der Port antwortet bei TCP entweder gar nicht oder mit einer Antwort, die vermuten lässt, dass der betreffende Port durch eine Firewall geblockt wird und deshalb nicht erreichbar ist. Bei UDP können das verschiedene ICMP-Typ3-Meldungscodes sein .
- unfiltered: Dieser seltsam anmutende Zustand sagt einerseits aus, dass Nmap den Port zwar grundsätzlich erreichen kann, aber nicht näher bestimmen kann, ob der Port offen oder geschlossen ist. Dies können Sie dann nur mit einem TCP-ACK-Scan erreichen. Sie benötigen also weitere Scan-Typen (z. B. SYN-Scan), um sich mehr Klarheit zu verschaffen.
- open|filtered: Als open|filtered stuft nmap einen Port ein, bei dem das Tool nicht bestimmen kann, ob der Port offen ist oder gefiltert wird. Das kann z. B. bei UDP-, IP-, FIN-, NULL- und XMAS-Scans sein.
- closed|filtered: Hier kann Nmap nicht feststellen, ob ein Port geschlossen ist oder gefiltert wird,
In der Praxis wirst du es am häufigsten mit den Zuständen open, closed, filtered und open|filtered zu tun haben. Nmap führt grundsätzlich immer Port-Scans durch, wenn du diese nicht, wie beim reinen Host-Discovery beschrieben, ausdrücklich mit dem ScanTyp –sN (Null-Scan) ausschließst.
Ping-Scans mit dem Nmap Portscanner
Während der Null-Scan nur dem reinen Discovery-Prozess z. B. in einem Netzwerk-Segment dient (horizontaler Scan) kann Nmap zahlreiche andere Scan-Typen verwenden. Damit lassen sich auch im Rahmen des Discover-Prozesses Systeme ermitteln, die von einem Null-Scan z. B. wegen einer blockierenden Firewall nicht gefunden werden. Ein Beispiel ist der so genannte Ping-Scan. Beim Ping-Scanning ermitteln du die Erreichbarkeit eines oder mehrerer Ziele im Netzwerk in ähnlicher Weise, wie du es mit einem gewöhnlichen Ping-Kommando tun würdest. Nmap bringt allerdings einige Schalter für weitere, spezielle Ping-Scan-Verfahren mit, die typische ICMP- oder Ping-Filter umgehen, wie sie von den meisten Firewalls implementiert werden.
Die von Nmap unterstützen Ping-Scan-Methoden sind beispielsweise
- ICMP-Echo-Ping (klassischer Ping), Schalter -PE
- TCP-Ping-Scan, Schalter -sP
- TCP-SYN-Ping, Schalter -PS
- TCP-ACK-Ping, Schalter -PA
- UDP-Ping, Schalter -PU
- ICMP-Timestamp-Scan, Schalter -PT
- ICMP-Address-Scan, Schalter -PM
Neben dem klassischen ICMP-Echo-Ping kommt häufig der TCP-Ping-Scan zum Einsatz. Hierbei handelt es sich um eine nützliche Erweiterung zum klassischen Ping. Dabei hängt es vom Standort des Zielsystems ab, wie Nmap dessen Erreichbarkeit prüft. Befindet sich dieser im eigenen Subnetz nutzt der TCP-Ping-Scan gar keine ICMP-Nachrichten, sondern ARP-Requests. Ist das Ziel-System hingegen in einem anderen Netzwert, arbeitet Nmap mit ICMP-Echo-Requests, sendet aber zusätzlich noch ein TCP-SYN-Paket auf Port 443 und ein TCP-ACK-Paket auf Port 80 an das Zielsystem. Blockiert nämlich die Firewall des Zielsystems ICMP-Echo-Pakete, antwortet es aber möglicherweise doch mit einem SYN/ACK (von Port 443) bzw. RST (von Port 80) auf die TCP-Pakete. So kann Nmap über einen Umweg/Trick, also durch Provokation einer Antwort, das Zielsystem möglicherweise doch als erreichbar klassifizieren.
So sendet z. B der TCP-SYN-Ping an zahlreiche TCP-Ports ein TCP-SYN-Paket. Lauscht auf einem dieser Ports keine Anwendung, antwortet das Zielsystem mit einem TCP-RST-Paket. Ist der Port offen, was bedeutet, dass zu einer Anwendung eine Verbindung aufgebaut werden kann, antwortet die Gegenstelle mit einem TCP-ACK-SYN-Paket.
nmap -PS 172.20.10.0/24
Auch der Timestamp Request hat allein den Zweck, unzureichend konfigurierte Firewalls, die z. B. nur ICMP-Typ0 0 und 8 blockieren, auszukontern.
nmap -PT 172.20.10.0/24
Übrigens ist die grafische Nmap-Variante Zenmap unter Windows auch nützlich, um z. B. die Netzstruktur oder weitere Rechnereinzelheiten zu visualisieren:
Port-Scanning mit dem Nmap Portscanner im Detail
Grundsätzlich scannt Nmap alle Systeme mit einem Port-Scan, die im Rahmen der Host-Discovery als aktiv erkannt wurden. Du kannst aber auch jede IP-Adresse deines Netzwerk-Segments scannen, indem du das vorhergehende Host-Discovery ausschaltest. Dazu stehen wahlweise die drei Schalter -PN, -Pn oder -P0 zur Verfügung. Außerdem scannt Nmap per Default nur die 1000 gängigsten Ports. Das ist übrigens auch das Standardverhalten, wenn du jegliche Parameter wegläßt oder nur -sS für den oben beschriebenen TCP-SYN-Scan verwendest.
Ist die Antwort ein SYN/ACK-Paket, wertet Nmap den Port als aktiv und an einem Dienst gebunden. Daher gibt Nmap den Portstatus „open“ zurück. Ist die Antwort ein RST/ACK-Paket ist der Port nicht aktiv und nicht gebunden. Daher gibt Nmap den Portstatus „closed“ zurück. Kommt überhaupt keine Antwort wird der Port von einer Firewall geblockt und Nmap melden den Portstatus „filtered“.
Ein Scan dieser Art heißt übrigens auch halboffener Scan, weil der Nmap Portscanner bei einer Antwort des Zielsystems den eigentlichen TCP-Handshake gar nicht mehr vervollständig, also kein ACK-Paket mehr sendet. Das hat den Vorteil, dass der Scan schneller ist und mit weniger Paketen auskommt. Außerdem wird eine halboffene Verbindung auf dem Zielsystem mit geringerer Wahrscheinlichkeit protokolliert, was die Sichtbarkeit des Scan-Versuchs reduziert. Das Verfahren wird manchmal auch als Stealth-SYN-Scan bezeichnet
Per Default gibt Nmap auch nur die offenen und gefilterten Ports zurück, nicht die geschlossenen. In der Nmap-Referenz finden sich noch viele weitere Scan-Optionen, z. B. für den TCP-Connect-Scan (–sT) mit vollständig durchgeführten 3-Way-Handshake oder den UDP-Scan (–sU). UDP-Scans sind allerdings für Nmap schwieriger zu handhaben, weil UDP keine Sitzungen aufbaut, weshalb sich der UDP-Scan-Typ auf ICMP-Typ-3-Rückmeldungen (DestinationUnreachable) stützt, um daraus Informationen über den Portzustand abzuleiten.
Häufig ist es gar nicht erforderlich, sämtliche oder auch nur die 1000 wichtigsten Ports zu scannen. Mit der Option -F den kannst du den Port-Scan auch auf die Top 100-Ports beschränken, was die Scan-Zeit deutlich verringert. Darüber hinaus kannst du mit der Option -p die in den Scan einzuschließenden Ports auch explizit angeben, z. B.
nmap –sS –p 21-23,80,443 scanme.nmap.org
Natürlich kannst du bei der Portangabe auch TCP- und UDP-Scans mit „T:“, bzw „U;“ mischen:
nmap –sS –sU –p T:21,22,80,443 U:53 scanme.nmap.org
Mit dem Parameter –exclude kannst du auch bestimmte Ports aus dem Scan ausschließen etwa bei Diensten, von denen du ohnehin weißt, dass diese auf dem Zielsystem sind. In diese Fall greift ohne weiteren -p-Parameter wieder das Standardverhalten (1000 gängige Ports), abzüglich der ausgeschlossenen.
nmap –sS --exclude-ports 25,80 172.20.10.81
Welche aus Sicht von Nmap die 1000 wichtigsten Ports sind steht in der Konfigurationsdatei /usr/share/nmap/nmap-services, die vom Aufbau und Syntax der unter Linux/Unix üblichen Datei zu /etc/services gleicht, ergänzt um eine dritte Spalte Open-Frequency. In der vermerkt Nmap die Häufigkeit, mit der der jeweilige Port bei Test-Scans geöffnet war.
Kontakt
„*“ zeigt erforderliche Felder an