Nmap Tutorial
Portscanner sind eines der wichtigsten Arbeitsmittel von Administratoren.
Dieses Tutorial beschreibt den Einsatz des populären Portscanner Nmap unter
Windows und Linux.
Mirko Kulpa, 01.05.2005
Grundlagen zu Protokollen und Ports
Um einen Dienst auf einen IP-Host eindeutig zu identifizieren werden drei Angaben benötigt:
- die IP-Adresse (z.B. 10.0.0.1)
- das Protokoll (z.B. TCP)
- die Portnummer (z.B. 80 für HTTP)
Diese drei Angaben identifizieren einen Webserver (HTTP) der auf dem Host mit der IP-Adresse 10.0.0.1
läuft. Die Portnummer ist eine 16-Bit-Zahl zwischen 0 und 65535. Für Standarddienste werden die Portnummern
von der IANA vergeben. Dort finden Sie auch die
aktuelle Liste der Portnummern.
Die Aufgabe eines Portscanners ist es nun, die offenen Ports eines Systems zu ermitteln. Also die Ports,
auf denen ein Service angeboten wird.
Ein Beispiel
Sehen wir uns dazu ein erstes Beispiel an.
[root] ~ $ nmap -sT m0n0
Starting nmap 3.20 ( www.insecure.org/nmap/ ) at 2005-05-01 11:17 CEST
Interesting ports on m0n0 (10.0.0.1):
(The 1610 ports scanned but not shown below are in state: closed)
Port State Service
80/tcp open http
Nmap run completed -- 1 IP address (1 host up) scanned in 10.886 seconds
Mit dem Kommando nmap -sT m0n0 untersucht nmap den Host m0n0 auf offene TCP-Ports.
Dabei überprüft nmap nicht alle 65535 TCP-Ports. Per Default werden nur 1611 "wichtige" Portnummern
gescannt. Auf dem Host m0n0 wird ein offener Port entdeckt (HTTP). Der Scan dauert etwa 11 Sekunden.
Grundsätzlich sollten auf einem System nur die Ports offen sein, die wirklich benötigt werden.
TCP Portscans
TCP ist das verbindungsorientierte Protokoll der TCP/IP-Familie auf dem OSI-Layer 4.
Vor jeder Datenübertragung baut der Client eine TCP-Session zum Server auf.
TCP nutzt dazu den Dreiwege-Handshake (three-way handshake). Hierfür tauschen
Client und Server drei TCP-Segmente mit bestimmten Flags aus.
Client Server
SYN
--------->
SYN + ACK
<----------
ACK
---------->
Der Client sendet zuerst ein Segment mit gesetztem SYN-Flag (synchronisieren) an den Server. Dieses Datenpaket wird
enthält auch die Portnummer des gewünschten Dienstes auf dem Server. Akzepiert der Server
den Verbindungsaufbau, antwortet er mit einen gesetzten SYN- und ACK-Flag (Acknowledgement). Der Client
bestätigt mit einem ACK-Segment.
Bietet der Server auf dem angesprochenen Port keinen Dienst an, gibt es mehrere Möglichkeiten der Reaktion.
Ein RST-Segement (RESET) könnte an den Client gesendet werden, der Server könnte eine ICMP-Meldung
versenden oder er tut einfach nichts.
TCP connect-Scan -sT
Mit der Option -sT für Nmap einen connect-Scan aus. Der Scanner verhält sich dabei wie ein
normaler Client und verbindet sich (connect) mit dem Zielsystem. Ist der Port auf dem Zielhost im
Status LISTENING, wird ein Three-way Handshake ausgeführt. Eine solche Verbindung
kann vom Zielhost leicht protokolliert werden und auch jedes IDS sollte einen connect-Scan erkennen.
TCP SYN-Scan -sS
Die Option -sS veranlasst Nmap einen SYN-Scan auszuführen. Auch dabei beginnt der Scanner mit
einem SYN-Segment. Es wird jedoch keine vollständige TCP-Session aufgebaut. Ist der Port
auf dem Zielhost im LISTENING und antwortet mit einem
SYN/ACK, sendet Nmap sofort ein RST-Segment (RESET). Dadurch wird die halboffene (half-open) Verbindung
wieder abgebaut. Mit der SYN-Scan Technik kann unter Umständen eine Erkennung des Portscans
durch das Target vermieden werden.
Stealth Scans
Mit den Optionen -sF wird ein FIN-Scan ausgeführt. Nmap sendet dazu FIN-Segmente an das
Target. Diese werden eigentlich zum Beenden einer TCP-Sitzung genutzt. Das Zielsystem sollte an
geschlossenen Ports mit einem RST reagieren und auf listening (abhören) Ports das FIN-Segment
einfach verwerfen.
Beim Xmas-Tree-Scan (Option -sX) sind in einem Segment das FIN, URG und
PSH-Flag gesetzt. Je nach Implementierung reagieren die Zielsysteme recht verschieden auf
ein solches Segment.
Der Null-Scan wird über die Option -sN aktiviert. Nmap sendet Segmente ohne
gesetzte Flags an das Target.
Wie bei allen Scan-Techniken können die Resultate durch Firewalls und Filter zwischen Nmap
und Target beeinflusst werden. Auf jeden Fall sollte der Admin das Verhalten seiner eigenen
Systeme bei diesen Portscans kennen.
UDP Portscans -sU
UDP ist das verbindungslose Protokoll der TCP/IP-Suite.
Normalerweise sollte ein System auf ein UDP-Segment an einen geschlossenen Port
mit einem "ICMP Port Unreachable" reagieren. Offene UDP-Ports sollten keine Reaktion erzeugen.
Heute wird allerdings ICMP oft rigoros gefiltert. Dadurch sind UDP-Scans mitunter nicht sehr
zuverlässig. Viele Betriebssysteme begrenzen die Rate von ICMP-Paketen. Dadurch sind UDP-Scans
bei vielen Systemen sehr langsam.
Allgemeine Optionen
Die Arbeitsweise von Nmap kann durch viele weitere Optionen beeinflusst werden.
Kein Ping -P0
Mit der Option -P0 wird ein ICMP-Ping vor dem eigentlichen Scan unterdrückt.
Das kann notwendig sein, wenn eine Firewall oder das Target ICMP filtert.
Fingerprint -O
Jede Implementierung von TCP/IP hat ihre Eigenheiten. Mit der Option -O
versucht Nmap diese Eigenheiten zu erkennen und das Betriebssystem des Targets zu identifizieren.
[root] ~ $ nmap -sT -O m0n0
Starting nmap 3.20 ( www.insecure.org/nmap/ ) at 2005-05-01 17:59 CEST
Interesting ports on m0n0 (10.0.0.1):
(The 1610 ports scanned but not shown below are in state: closed)
Port State Service
80/tcp open http
Remote operating system guess: FreeBSD 4.7-RELEASE
Uptime 30.096 days (since Fri Apr 1 15:41:28 2005)
Nmap run completed -- 1 IP address (1 host up) scanned in 17.254 seconds
Im gezeigten Beispiel erkennt Nmap auf dem Zielsystem ein FreeBSD 4.7.
Fragmentierung -f
Nmap kann zum Beispiel beim SYN-Scan mit fragmentierten IP-Paketen arbeiten.
Mitunter lassen sich dadurch Firewalls oder Intrusion Detection Syteme (IDS)
verwirren.
Verbose -v
Mit -v können Sie Nmap etwas gesprächiger machen. Es werden Meldungen über die
aktuellen Aktivitäten angezeigt.
Port-Bereiche -p
Um bestimmte Ports oder Bereiche zu untersuchen, können diese mit der Option -p
bestimmt werden. Einzelne Ports werden als -p 22 notiert, Bereiche können mit
-p 40-45, 100-120 angegeben werden.
Quell-IP-Adresse -S und Interface -e
Unter bestimmten Umständen ist es notwendig Nmap eine Absender-IP-Adresse und eine
Schnittstelle mitzuteilen. Das kann zum Beispiel auf einem virtuellen Server hilfreich sein.
Das erste Beispiel zeigt einen Aufruf von Nmap auf einem vServer:
root ~ $ nmap -sT work.example.org
Starting nmap V. 2.54BETA31 ( www.insecure.org/nmap/ )
Failed to lookup device subnet/netmask: eth0: no IPv4 address assigned
QUITTING!
Eigentlich nutzt dieser vServer das Interface eth0:vs4 mit der IP-Adresse 10.0.0.4.
Der Aufruf von Nmap könnte so aussehen:
root ~ $ nmap -sT -e eth0:vs4 -S 10.0.0.4 work.example.org
Starting nmap V. 2.54BETA31 ( www.insecure.org/nmap/ )
WARNING: If -S is being used to fake your source address, you may also have to use -e and -P0.
WARNING: -S will not affect the source address used in a connect() scan.
(The 1549 ports scanned but not shown below are in state: closed)
Port State Service
22/tcp open ssh
80/tcp open http
Nmap run completed -- 1 IP address (1 host up) scanned in 0 seconds
Timing -T Paranoid|Sneaky|Polite|Normal|Aggressive|Insane
Über die Option -T kann das Timing von Nmap verändert werden. Mit -T Paranoid
wartet Nmap bis zu 5 Minuten zwischen den einzelnen Packeten. Dadurch soll die Entdeckung
durch ein IDS erschwert werden. Bei "Insane" wird das Target praktisch mit Packeten
bombardiert.
Angabe des Zielsystems
Der Scanner Nmap bietet vielfältige Möglichkeiten zur Angabe des Zielystems.
Es können einzelne System über Hostname oder IP-Adresse oder ganze IP-Netze
gescannt werden. IP-Netze können in CIDR-Notation (z.B. /24) oder mit
Sternchen (z.B. 192.168.*.*) angegeben werden.
Beispiele
Im Folgenden sehen Sie einige Beispiele für den Einsatz von Nmap.
Sie sollten nur eigene Systeme und Netze mit Nmap scannen. Admins mögen
exzessive Portscans auf ihre Systeme nicht besonders gerne.
// Hier werden alle Adressen von 10.0.0.0 und 10.0.0.255 mit einem FIN-Scan überprüft
[root] ~ $ nmap -sF -T insane 10.0.0.0/24
Starting nmap 3.20 ( www.insecure.org/nmap/ ) at 2005-05-01 18:49 CEST
Host 10.0.0.0 seems to be a subnet broadcast address (returned 1 extra pings). Skipping host.
All 1611 scanned ports on m0n0 (10.0.0.1) are: filtered
RTTVAR has grown to over 2.3 seconds, decreasing to 2.0
RTTVAR has grown to over 2.3 seconds, decreasing to 2.0
Interesting ports on wrt54g (10.0.0.55):
(The 1610 ports scanned but not shown below are in state: closed)
Port State Service
80/tcp open http
Interesting ports on 10.0.0.101:
(The 1610 ports scanned but not shown below are in state: closed)
Port State Service
6000/tcp open X11
RTTVAR has grown to over 2.3 seconds, decreasing to 2.0
RTTVAR has grown to over 2.3 seconds, decreasing to 2.0
RTTVAR has grown to over 2.3 seconds, decreasing to 2.0
RTTVAR has grown to over 2.3 seconds, decreasing to 2.0
All 1611 scanned ports on 10.0.0.120 are: closed
Host 10.0.0.255 seems to be a subnet broadcast address (returned 1 extra pings). Skipping host.
Nmap run completed -- 256 IP addresses (4 hosts up) scanned in 238.816 seconds
// SYN Stealth Scan auf eine m0n0wall (IP 10.0.0.1) mit Erkennung des Betriebssystems
[root] ~ $ nmap -sS -O -v -T insane 10.0.0.1
Starting nmap 3.20 ( www.insecure.org/nmap/ ) at 2005-05-01 18:58 CEST
Host m0n0 (10.0.0.1) appears to be up ... good.
Initiating SYN Stealth Scan against m0n0 (10.0.0.1) at 18:58
Adding open port 80/tcp
The SYN Stealth Scan took 148 seconds to scan 1611 ports.
For OSScan assuming that port 80 is open and port 1 is closed and neither are firewalled
Insufficient responses for TCP sequencing (2), OS detection may be less accurate
Interesting ports on m0n0 (10.0.0.1):
(The 1610 ports scanned but not shown below are in state: closed)
Port State Service
80/tcp open http
Remote operating system guess: FreeBSD 4.7-RELEASE
Uptime 30.139 days (since Fri Apr 1 15:41:28 2005)
Nmap run completed -- 1 IP address (1 host up) scanned in 154.481 seconds
Fazit
Nmap bietet die Möglichkeit eigene Systeme auf ihre Sicherheit und Konfigurationsfehler
hin zu untersuchen. Natürlich wird auch die Gegenseite nmap für ihre Zwecke nutzen.
Jeder Admin sollte die Reaktion seiner eigenen Systeme auf die verschiedenen Scan-Typen
kennen.
Hilfe und Erfahrungsaustausch zu Nmap finden Sie im Netzwerkforum.
Das Nmap Buch
Vom Entwickler von Nmap gibt es auch ein lesenswertes Buch zu Nmap:
Weiterführende Informationen
Weiterführende Informationen finden Sie unter folgenden Links:
|