Tags: Netzwerk, Sicherheit, Monitoring
Nmap ist ein populärer Portscanner, der ermitteln kann, welche Server, Clients und andere Systeme in einem Netzwerk aktiv sind. Er erkennt auch, welche Betriebssysteme dort laufen und welche Ports von außen erreichbar sind. Daher ist Nmap nicht nur ein Werkzeug für Hacker, sondern auch für Penetration-Tests.
Da Portscanner wie Nmap sowohl für echte Angriffe während der Reconnaissance-Phase als auch für Penetrationstests von Security-Teams zum Einsatz kommen, sollten Sie sich vor dem Einsatz des Tools unbedingt rechtlich absichern. Am besten holen Sie sich die Zustimmung vom Auftraggeber ein.
Da Intrusion Detection Systems oder Firewalls den Einsatz von Nmap als Erkundungsangriff bewerten, erzeugen die genannten Tools auch entsprechende Log-Einträge. Dies wiederum erkennt ein guter Admin oder dies führt idealerweise auch zu einem Vorfall (Incident) in einen SIEM-Tool.
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.
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 auf erreichbare TCP-/UDP-Ports untersucht.
Das Tool versteht mehr als 100 Parameter bzw. Optionen beim Aufruf, so dass es unterschiedlichste Szenarien abdecken kann. Diese dienen unter anderem zum Einstellen des Scan-Typs oder der Performance-Optimierung. Zudem verfügt Nmap über eine Script-Engine (NSE), mit deren Hilfe man Scripts einbinden kann.
Die grundsätzliche Syntax von Nmap ist aber relativ einfach:
nmap <Scantyp> [<Optionen>] <Ziele>
Die Angabe von Optionen ist nicht zwingend. Unter Windows können Sie auch die grafische Nmap-Oberfläche Zenmap verwenden.
Host-Erkennung
Üblicherweise beginnt man mit einem horizontalen Scan, um zu ermitteln, welche potentiellen Ziele überhaupt erreichbar sind. Diese kann man im Rahmen eines vertikalen Scans dann genauer abklopfen. Man bezeichnet diesen ersten Schritt auch als Host Discovery. Nur bei Systemen, die sich mit einem horizontalen Scan identifiziert lassen, 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 Verfahren für das Host Discovery gibt.
Für einen horizontalen Scan (Host Discovery) verwenden Sie -sN für den so genannten TCP Null Scan. Das bedeutet, dass nur ein horizontaler Scan (Host Discovery) ohne einen eigentlichen Port-Scan durchgeführt wird. Als erstes Ziel bietet sich scanme.nmap.org an:
nmap -sN scanme.nmap.org
Dieser Aufruf ermittelt, ob der betreffende Host (hier: scanme.nmap.org) erreichbar ist ("Host is up").
Auf diese Weise kann man beispielsweise ein komplettes Netzwerksegment scannen:
nmap -sN 172.20.10.0/24
Das Ergebnis könnte so aussehen wie in der folgenden Abbildung.
Im obigen Beispiel konnten fünf Systeme ("Host is up") identifiziert werden. Bei den ersten drei handelt es sich um VMware-Linux-VMs, die Teil eines Kubernetes-Clusters sind, und Ihre MAC-Adresse preisgeben. Das vorletzte System ist ein physischer Router, der ebenfalls seine MAC-Adresse offenbart. Das letzte System, eine VMware-VM mit Windows, verbirgt ihre MAC-Adresse.
Ports-Scan (vertikales Scanning)
Der eigentliche Einsatzzweck von Nmap ist aber das Scannen von Ports (vertikales Scanning). Hier prüft es den Zustand der erreichbaren TCP- oder UDP-Ports, denn die weitaus meisten Dienste in einem TCP/IP-Netzwerk (Web-, Mail-, SQL-Server) binden sich an einen oder mehrere Ports. Dort lauschen sie auf Verbindungsanforderungen.
Nmap kann nicht nur feststellen, ob ein TCP- oder UDP-Port einfach nur offen ist, sondern unterscheidet mehrere Zustände:
- open: Der Port ist erreichbar, er antwortet also mit SYN/ACK bei TCP oder mit einer dem UDP-Dienst entsprechenden 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 so, dass die Vermutung naheliegt, dass der betreffende Port durch eine Firewall geblockt wird. Bei UDP können das verschiedene ICMP-Typ3-Codes sein;
- unfiltered: Dieser seltsam anmutende Zustand sagt einerseits aus, dass Nmap den Port zwar grundsätzlich erreichen, aber nicht bestimmen kann, ob der Port offen oder geschlossen ist. Dies können Sie dann nur mit einem TCP-ACK-Scan herausfinden. Sie benötigen also weitere Scan-Typen (etwa 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 bei UDP-, IP-, FIN-, NULL- und XMAS-Scans vorkommen;
- closed|filtered: Hier kann Nmap nicht feststellen, ob ein Port geschlossen ist oder gefiltert wird.
In der Praxis werden Sie es am häufigsten mit den Zuständen open, closed, filtered und open|filtered zu tun haben.
Ping-Scans
Während der Null-Scan nur dem reinen Discovery-Prozess, etwa in einem Netzwerk-Segment, dient (horizontaler Scan), kann Nmap zusätzlich andere Scan-Typen verwenden. Damit lassen sich im Rahmen des horizontalen Scans auch Systeme aufspüren, die ein Null-Scan etwa wegen einer blockierenden Firewall nicht findet.
Ein Beispiel dafür ist der so genannte Ping-Scan. Damit testet man die Erreichbarkeit eines oder mehrerer Ziele im Netzwerk auf ähnliche Weise wie mit einem gewöhnlichen Ping-Kommando. 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. Dabei hängt es vom Standort des Zielsystems ab, wie Nmap dessen Erreichbarkeit prüft. Befindet sich dieser im eigenen Subnetz, dann nutzt der TCP-Ping-Scan gar keine ICMP-Nachrichten, sondern ARP-Requests.
ICMP-Echo-Requests plus TCP-SYN-Paket
Ist das Ziel hingegen in einem anderen Netzwerk, dann 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, dann antwortet es aber möglicherweise trotzdem mit einem SYN/ACK (von Port 443) bzw. RST (von Port 80) auf die TCP-Pakete. So kann Nmap über einen Trick, also durch Provokation einer Antwort, das Zielsystem unter Umständen dennoch als erreichbar klassifizieren.
So sendet 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
TCP-ACK-Paket auf Port 80
Ein Echo-Request gefolgt von einem TCP-SYN-Paket auf Port 443 ist eine reguläre Kommunikationsanfrage. Mit einem TCP-ACK-Paket auf Port 80 hingegen provoziert Nmap eine TCP-RST-Antwort, weil es sich hier nicht um eine reguläre Anfrage handelt. Diese Methode führt manchmal sogar dann zum Erfolg, wenn eine Firewall alle regulären Anfragen blockiert (nicht nur Ping), vermeintliche Antworten aber passieren lässt.
nmap -PA 172.20.10.0/24
Timestamp Request
Auch der Timestamp-Request hat allein den Zweck, unzureichend konfigurierte Firewalls, die etwa nur ICMP-Typ 0 und 8 blockieren, auszukontern.
nmap -PT 172.20.10.0/24
Port-Scanning im Detail
Grundsätzlich scannt Nmap die Ports aller Systeme, die bei der Host-Discovery als aktiv erkannt wurden. Sie können aber auch jede IP-Adresse eines Netzwerk-Segments scannen, indem Sie das Host-Discovery ausschalten. Dazu stehen wahlweise die drei Schalter -PN, -Pn oder -P0 zur Verfügung.
Ist die Antwort ein SYN/ACK-Paket, dann wertet Nmap den Port als aktiv und an einen Dienst gebunden. Daher gibt Nmap den Portstatus open zurück. Ist die Antwort ein RST/ACK-Paket, dann gilt der Port als nicht aktiv und nicht gebunden. Daher gibt Nmap den Portstatus closed zurück. Kommt überhaupt keine Antwort, dann wird der Port von einer Firewall geblockt, und Nmap melden den Portstatus filtered.
Ein Scan dieser Art heißt auch halboffener Scan, weil Nmap bei einer Antwort des Zielsystems den eigentlichen TCP-Handshake gar nicht mehr vervollständigt, 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 findet sich aber noch viele weitere Scan-Optionen, zum Beispiel 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. Daher stützt sich der UDP-Scan-Typ auf ICMP-Typ-3-Rückmeldungen (DestinationUnreachable), um daraus Informationen über den Portzustand abzuleiten.
Häufig ist es gar nicht erforderlich, sämtliche oder die standardmäßig eingestellten 1000 wichtigsten Ports zu scannen. Mit der Option -F können Sie den Port-Scan auch auf die Top 100-Ports beschränken, was den Vorgang deutlich beschleunigt. Darüber hinaus können Sie mit der Option -p die in den Scan einzuschließenden Ports auch explizit angeben, beispielsweise mit
nmap –sS –p 21-23,80,443 scanme.nmap.org
Natürlich können Sie 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 können Sie bestimmte Ports aus dem Scan ausschließen, etwa bei Diensten, von denen Sie ohnehin wissen, dass diese auf dem Zielsystem laufen. 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 übrigens in der Konfigurationsdatei /usr/share/nmap/nmap-services. Sie gleicht vom Aufbau und Syntax der unter Linux üblichen Datei zu /etc/services, ergänzt um eine dritte Spalte namens Open-Frequency. In der vermerkt Nmap die Häufigkeit, mit welcher der jeweilige Port bei Test-Scans geöffnet war.
Verfügbarkeit
Nmap ist nicht nur im Quellcode, sondern auch als RPM-Binary für Red-Hat-basierte Distributionen sowie für Mac OS und Windows erhältlich (Download).
Das Tool braucht unter Windows Npcap. Details dazu finden Sie in diesem Beitrag über Wireshark. Das Setup für Windows kann Npcap installieren, die Registrierungsleistung optimieren und die Dateien am ausgewählten Speicherort entpacken.
Das Paket enthält auch das grafische Frontend Zenmap. Es kann zusätzlich die Netzwerkstruktur oder weitere Rechnerdetails visualisieren.
Sie können sich alternativ auch Kali-Linux als Distribution für Security- und Penetrationstests herunterladen, in dem nmap bereits vorinstalliert ist.
Täglich Know-how für IT-Pros mit unserem Newsletter
Thomas Drilling arbeitet ist seit fast 30 Jahren selbständig in der IT-Welt sowohl als Consultant, als auch als Redakteur, Buchautor und Journalist für viele ehemalige und aktuelle IT-Magazine sowie Blogs.
Aktuell bestätigt sich Thomas schwerpunktmäßig als IT-Trainer für Cloud-Computing in den Bereichen Microsoft Azure, Amazon Web Services und VMware.
Thomas ist zertifizierter Microsoft-Trainer für nahe das gesamte Portfolio an Microsoft Azure Trainings. Thomas ist außerdem zertifizierter Microsoft Azure Solutions Architect Expert sowie VMware Certified Professional und wurde von VMware in den Jahren 2016 bis 2022 mit dem Blogger-Status vExpert ausgezeichnet.
Thomas führt aktuell jeden Monat zwei selbstkonziperte 4-tägigen Grundlagenkurse in Cloud Computing mit Azure durch, die sich inhaltlich bewusst von den Microsft-Kursen abheben und vorzuweise als Bootcamp in eine besonderen Lokation stattfinden. Optional kann aber aber auch remote via Microsoft Teams teilgenommen werden.
Das aktuelle Trainingsprogramm findet sich unter Azure-Trainings. Weitere Informationen und Anmeldung über sein Azure-Blog.
Verwandte Beiträge
- Fortgeschrittene Techniken mit Nmap: TCP-Window-, FIN-, NULL- und XMAS-Scans
- Nmap: Firewalls umgehen mit Ping- und TCP-ACK-Scans
- Netzwerk-Analyse mit Wireshark: Datenströme verfolgen mit Verbindungsfiltern
- Netzwerk-Analyse mit Wireshark: TCP-Handshake beim Aufbau einer Sitzung untersuchen
- Netzwerk-Analyse mit Wireshark am Beispiel von Ping
Weitere Links