Netzwerkanalyse, Fehlersuche, Testberichte
Home / News
Netzwerkanalyse
Grundlagen
Verkabelung
Erste Schritte
Baselining
Let's sniff
Tools
Auswerten/Filtern
Typische Probleme 1
Typische Probleme 2
Sicherheit
Bücher
Tutorials
Cacti
DSL einrichten
DynDNS einrichten
m0n0wall | pfSense
Nmap
VirtualBox
Wireshark
FAQ
Know How
Testberichte
Hardware-DB
Netzwerklexikon
Links / Service
Suche
Kontakt
Impressum
Feedback
Sitemap
Tutorials

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:

 

 
© 2004-2023, network lab - we make your net work - Netzwerkforum
aktualisiert am 10.01.2023