Nmap
Network Mapper (nmap)
- ist ein freier Netzwerk-Scanner
Netzwerke scannen
Was ist Network Scanning?
- Netzwerke scannen und analysieren
- angeschlossene und aktiven Systeme erkennen
- Details zu Diensten, Konfigurationen und Versionen bestimmen
- Netzwerk-Inventarisierung
- Dienste-Aktualisierungen prüfen
- Überwachung von Betriebszeiten, Hosts oder Diensten
Syntax
nmap [Scan Type(n)] [Optionen] {Ziel}
Einfacher Portscan
nmap ohne Optionen
- Es geht darum herauszufinden, ob ein Port offen ist, welche Anwendung dahinter läuft und ob dort Sicherheitslücken und Schwachstellen zu vermuten sind.
- Ein einfacher Port-Scanner wird alle Ports pauschal in zwei oder drei Zustände einteilen:
- offen,
- geschlossen,
- gefiltert (offen/geschlossen).
Bedeutung der Ausgabe
- Der Zustand "Offen" bedeutet, dass eine Anwendung oder ein Dienst bereit ist TCP-Verbindungen oder UDP-Pakete auf diesem Port anzunehmen.
- Um Kommunikationsverbindungen betreiben zu können bedarf es offener Ports.
- Anzahl offener Ports begrenzen, um die Angriffsfläche so klein wie möglich zu halten.
- Offene Ports werden zusätzlich geschützt oder Verbindungsmöglichkeiten eingeschränkt.
- Der Zustand "Geschlossen" bedeutet, dass keine Anwendung und kein Dienst an diesem Port auf eingehende Datenpakete und Verbindungsversuche lauscht bzw. hört.
- Auf ihm sind keine Kommunikationsverbindungen möglich.
- Ein geschlossener Port ist nur so lange geschlossen, wie eine Anwendung auf diesen Port hört und Verbindungen und Pakete annimmt.
- Um offene, aber auch geschlossene Ports zu schützen, setzen Systemadministratoren einen Portfilter (Firewall) ein.
- So verhindert man z.B. die Verbindungsversuche durch Port-Scans.
- Ein Port-Scan soll nur den Zustand eines Ports ermitteln, aber keine echte Verbindung aufbauen.
- Weil er die dahinterliegende Anwendung nicht kennt, kann er nur Testpakete an einen Port schicken.
- Der Filter verhindert, dass diese Testpakete durchkommen.
- In der Regel werden diese Pakete verworfen.
- Dann kann für diesen Port weder der Status "offen" oder "geschlossen" gelten.
- Dafür gibt es den Zustand "gefiltert" oder "blockiert".
Ziele festlegen
- NMAP ist bei der Angabe des Scan-Ziels sehr flexibel.
- Das kann ein Domain-Name sein, eine IP-Adresse oder ein ganzes Subnetz.
Domain: www. XXX.XX IP-Adresse: 192.168.1.1 Subnetz: 192.168.1.1/24 Subnetz: 192.168.1.*
- Man sollte einen Port-Scan nicht auf ein ganzes Subnetz anwenden.
- Ein ganzes Subnetz zu scannen, kann sehr lange dauern, wenn die Hosts gefilterte Ports haben.
- Die Anzahl der Ports reicht von 1 bis 65.535.
- NMAP scannt standardmäßig nur etwa 1.000 der meistgenutzten Ports, die in der Datenbank "nmap-services" aufgelistet sind.
- Mit der Option "-F" (für engl. fast, dt. schnell) kann man den Port-Scan sogar auf die 100 meistgenutzten Ports beschränken.
- Interessante Ports scannen mit der Option "-p":
- Für den Port 22 verwendet man die Option "-p22".
- Für die Ports 22, 25 und 80 verwendet man die Option "-p22,25,80".
- Für die Ports von 1 bis 100 verwendet man die Option "-p-100".
- Für die Ports von 80 bis 88 verwendet man die Option "-p80-88".
- Für alle Ports über 60.000 verwendet man die Option "-p60000-".
- Alle Ports von 1 bis 65.535 scannen: Option "-p-".
Einzelne Rechner
- Der Zielbereich ist eine einzelne IP-Adresse
- Standardmäßig arbeitet Nmap mit IPv4 (es geht aber auch IPv6)
- Hier wurde ein Linux-PC von einem Windows-7-Rechner aus gescannt:
- nmap 172.16.24.102
- Die IP-Adresse gehört also dem Linux-Rechner, den wir mit Nmap auf offene Ports hin überprüfen.
- Das Ergebnis: Drei Ports sind offen; 21 für FTP, 80 für einen Webserver (in unserem Fall ein Apache) und 110 für POP3.
- 997 well known Ports erkennt Nmap als geschlossen.
Netzwerkbereiche
Bereich auswählen
- Nmap betrachtet alles in der Kommandozeile, was keine Option (oder ein Argument einer Option) ist, als Bezeichnung eines Zielhosts.
- Der einfachste Fall ist die Beschreibung einer IP-Zieladresse oder eines Zielhostnamens zum Scannen.
- Manchmal möchten Sie ein ganzes Netzwerk benachbarter Hosts scannen.
- Dafür unterstützt Nmap Adressen im CIDR-Stil.
- Sie können an eine IPv4-Adresse oder einen Hostnamen angefügt werden, und Nmap wird alle IP-Adressen scannen, bei denen die ersten <numbits> mit denen der gegebenen IP oder des gegebenen Hostnamens übereinstimmen.
- Z.B: würde 192.168.10.0/24 die 256 Hosts zwischen 192.168.10.0 (binär: 1100.0000.1010.1000.0000.1010.0000.0000) und 192.168.10.255 (binär: 1100.0000.1010.1000.0000.1010.1111.1111, inklusive) scannen.
- 192.168.10.40/24 würde genau dieselben Ziele scannen.
- Dadurch, dass der Host
scanme.nmap.org
die IP-Adresse 64.13.134.52 hat, würde die Angabe
scanme.nmap.org/16
die 65.536 IP-Adressen zwischen 64.13.0.0 und 64.13.255.255 scannen.
- Der kleinste erlaubte Wert ist /0, der das gesamte Internet scannt.
- Der größte Wert ist /32 und scannt lediglich den Host mit angegebenem Namen oder IP-Adresse, da alle Adressen-Bits festgelegt sind.
Teilbereich auswählen
- Die CIDR-Notation ist kurz, aber nicht immer flexibel genug.
- Möcht man z.B. 192.168.0.0/16 scannen, aber IPs auslassen, die mit .0 oder .255 enden, weil sie als Unternetzwerk und Broadcast-Adressen benutzt werden können.
- Nmap unterstützt das in Form einer Oktett-Bereichsadressierung.
- Statt eine normale IP-Adresse anzugeben, können Sie eine mit Kommata getrennte Liste von Zahlen oder Bereichen für jedes Oktett angeben.
- Z.B. überspringt 192.168.0-255.1-254 alle Adressen im Bereich, die mit .0 oder .255 enden, und 192.168.3-5,7.1 scannt die vier Adressen 192.168.3.1, 192.168.4.1, 192.168.5.1 und 192.168.7.1.
- Beide Bereichsgrenzen können weggelassen werden, die Standardwerte sind 0 für die linke und 255 für die rechte Grenze.
- Wenn Sie allein -benutzen, ist das identisch mit 0-255.
- Im ersten Oktett dann 0- benutzen, damit die Zielangabe nicht wie eine Kommandozeilenoption aussieht.
- Die Angabe 0-255.0-255.13.37 führt einen internetweiten Scan über alle IP-Adressen aus, die mit 13.37 enden.
- Diese Art von breiter Abtastung kann bei Internet-Umfragen und -Forschungen hilfreich sein.
IPv6
- IPv6-Adressen können nur durch ihre vollständige IPv6-Adresse oder ihren Hostnamen angegeben werden.
- CIDR und Oktettbereiche werden für IPv6 nicht unterstützt, weil sie selten nützlich sind.
Zielauswahl
- Auch wenn Ziele normalerweise in der Kommandozeile angegeben werden, gibt es auch die folgenden Optionen, um die Zielauswahl zu steuern:
-iL <inputfilename> (Eingabe aus einer Liste)
- Eine sehr lange Liste von Hosts in der Kommandozeile anzugeben ist oft sehr umständlich, kommt aber sehr häufig vor.
- Der DHCP-Server z.B. exportiert vielleicht eine Liste von 10.000 aktuellen Adresszuweisungen (engl. leases), die Sie scannen möchten.
- Möchte man alle IP-Adressen außer denjenigen scannen, um Hosts zu finden, die unautorisierte statische IP-Adressen benutzen.
- Die Liste der zu scannenden Hosts und übergibt deren Dateinamen als Argument zur Option -iL an Nmap.
- Die Einträge dürfen alle Formate haben, die Nmap auf der Kommandozeile akzeptiert (IP-Adresse, Hostname, CIDR, IPv6 oder Oktettbereiche).
- Alle Einträge müssen durch ein oder mehrere Leerzeichen, Tabulatoren oder Zeilenumbrüche getrennt sein.
- Wenn man einen Bindestrich (-) als Dateinamen angibt, liest Nmap die Hosts von der Standardeingabe statt aus einer normalen Datei.
-iR <num hosts> (zufällige Auswahl von Zielen)
Internetumfragen
- Für internetweite Umfragen und andere Forschungsaktivitäten möchte man Ziele vielleicht zufällig auswählen.
- Das kann man mit der Option -iR, die als Argument die Anzahl der zu erzeugenden IPs annimmt.
- Nmap lässt automatisch bestimmte unerwünschte IPs aus, wie solche in privaten, Multicast- oder unbesetzten Adressbereichen.
- Für einen endlosen Scan kann man das Argument 0 angeben.
Beispiele
- Befehl
nmap -sS -PS80 -iR 0 -p 80
sucht Webserver , auf denen man stöbern kann.
- Befehl
--exclude <host1>[,<host2>[,...]] (Ziele ausklammern)
gibt eine mit Kommata getrennte Liste von Zielen an, die vom Scan ausgeschlossen sein sollen, selbst wenn sie in den angegebenen Netzwerkbereich fallen.
- Die übergebene Liste benutzt die normale Nmap-Syntax und kann folglich Hostnamen, CIDR-Netzblöcke, Oktettbereiche usw. enthalten.
- Das kann nützlich sein, wenn das zu scannende Netzwerk hochkritische Server und Systeme enthält, die man nicht anfassen darf, weil sie bekanntermaßen ungünstig auf Port-Scans reagieren.
- Oder Unternetze, die von anderen Leuten administriert werden.
- Befehl
--excludefile<-exclude_file> (Liste aus Datei ausklammern)
- Das bietet dieselbe Funktionalität wie die Option --exclude.
- Unterschied: die ausgeklammerten Ziele in der mit Zeilenumbrüchen, Leerzeichen oder Tabulatoren getrennten Datei <exclude_file> statt auf der Kommandozeile angegeben werden.
Dienste identifizieren
- Die Ports 25/tcp, 80/tcp und 53/udp offen sind.
- Dank der Datenbank in nmap-services gibt Nmap noch aus, dass diese Ports wahrscheinlich jeweils zu einem Mailserver (SMTP), Webserver (HTTP) und Nameserver (DNS) gehören.
- Selbst wenn Nmap recht hat und auf dem Server im obigen Beispiel SMTP-, HTTP- und DNS-Server laufen, ist das nicht besonders viel an Information.
- Eine genaue Versionsnummer hilft bei der Bestimmung der Exploits, für die ein Server anfällig ist.
- Die Versionserkennung hilft Ihnen, an diese Information heranzukommen.
- Nachdem TCP- und/oder UDP-Ports mit einer der anderen Scan-Methoden entdeckt wurden, fragt die Versionserkennung diese Ports ab.
- Die Datenbank innmap-service-probes enthält Testpakete für die Abfrage verschiedenster Dienste und Ausdrücke für den Vergleich und das Parsen der Antworten.
- Nmap versucht, das
- Dienstprotokoll zu bestimmen (z.B. FTP, SSH, Telnet, HTTP), aber auch
- Anwendungsnamen (z.B. ISC BIND, Apache httpd, Solaris telnetd),
- Versionsnummer,
- Hostnamen, Gerätetyp (z.B. Drucker, Router),
- die Betriebssystemfamilie (z.B. Windows, Linux) und manchmal verschiedene Details:
- etwa ob ein X-Server Verbindungen annimmt,
- die SSH-Protokollversion
- oder der KaZaA-Benutzername.
Versionserkennung
- Die Versionserkennung wird mit den folgenden Optionen aktiviert und gesteuert:
-sV (Versionserkennung)
- Aktiviert die Versionserkennung wie oben beschrieben.
- Alternativ dazu können Sie -A benutzen, was unter anderem auch die Versionserkennung aktiviert.
--allports (keine Ports von der Versionserkennung ausschließen)
- Standardmäßig schließt Nmaps Versionserkennung den TCP-Port 9100 aus.
- Manche Drucker drucken alles aus, was an diesen Port gesendet wird.
- Dieses Verhalten kann man ändern, indem man die Exclude-Anweisung in nmap-service-probes verändert oder entfernt.
- Oder Sie geben --allports an, um alle Port zu scannen, unabhängig von einer Exclude-Anweisung.
--version-intensity <intensity> (Intensität des Versions-Scans setzen)
- Bei einem Versions-Scan -sV sendet Nmap eine Reihe von Testpaketen, die alle über einen zugeordneten Seltenheitswert zwischen eins und neun verfügen.
Versionsvariationen
--version-light (leichten Modus setzen)
- Das ist ein Alias für --version-intensity 2 aus Bequemlichkeitsgründen.
- Dieser leichte Modus macht die Versionserkennung wesentlich schneller, identifiziert die Dienste aber mit geringerer Wahrscheinlichkeit.
--version-all (benutze alle Testpakete)
- Das ist ein Alias für--version-intensity 9, der garantiert, dass jedes einzelne Testpaket bei jedem Port ausprobiert wird.
--version-trace (verfolge Aktivität des Versions-Scans)
- Das bewirkt, dass Nmap umfangreiche Debugging-Information darüber ausgibt, was die Versionserkennung gerade macht.
- Das ist eine Untermenge dessen, was Sie mit --packet-trace erhalten.
-sR (RPC-Scan)
Diese Methode funktioniert zusammen mit den verschiedenen Port-Scan-Methoden von Nmap. Sie nimmt alle offenen TCP-/UDP-Ports und überflutet sie mit NULL-Befehlen für das SunRPC-Programm, in dem Versuch, festzustellen, ob es RPC-Ports sind, und wenn ja, welches Programm und welche Versionsnummer darauf läuft. Dadurch können Sie quasi dieselbe Information herausfinden wie mit rpcinfo -p, selbst wenn der Portmapper des Ziels hinter einer Firewall liegt (oder von TCP-Wrappern geschützt wird). Köder funktionieren im Moment nicht mit dem RPC-Scan. Das wird automatisch als Teil einer Versionserkennung aktiviert (-sV), wenn Sie diese verlangen. Da die Versionserkennung das enthält und wesentlich umfangreicher ist, wird -sR selten benötigt.
Zenmap
- Neben der textbasierten Variante gibt es noch die grafische Benutzeroberfläche NmapFE zur komfortablen Einstellung von Nmap.
- Wurde mittlerweile durch die Zenmap genannte GUI abgelöst.
Ausgabe steuern
Weitere Informationen
Funktionen
Target Enumeration
Ping-Scanning (Host-Discovery)
- Klassischer Ping-Scan (Network-Scan)
nmap -PE -sn -oG - 192.168.0.1/24
- Der klassische Ping-Scan mit ICMP—Echo-Requests (-PE), aber ohne Port-Scan (-sn).
- Erweiterter Ping-Scan (Network-Scan)
nmap -sP -oG - 192.168.0.1/24
- Dieser TCP-Ping-Scan ist eigentlich kein Ping-Scan, sondern eher eine sinnvolle Erweiterung zu einem klassischen Ping.
- Der TCP-Ping-Scan kombiniert den klassischen Ping (ICMP-Echo) mit dem TCP-SYN-Scan.
- Damit funktioniert der TCP-Ping-Scan manchmal besser als ein klassischer Ping bzw. ein einfacher ICMP-Echo-Request.
Port-Scanning
Service- und Versionserkennung (Service Identification)
Betriebssystemerkennung (OS Identification)
Scan-Typen
Ping-Scan
1. ICMP-Echo-Ping (klassischer Ping)
nmap -PE 10.10.0.1 für Subnet nmap -PE 10.10.0.1/24 oder nmap -PE 10.10.0.*
2. TCP-Ping-Scan
nmap -sn 10.10.0.1
3. TCP-SYN-Ping
nmap -PS 10.10.0.1
4. TCP-ACK-Ping nmap -PA 10.10.0.1 5. UDP-Ping
nmap -PU 10.10.0.1
6. ICMP-Timestamp-Scan
nmap -PT 10.10.0.1
7. ICMP-Address-Scan
nmap -PM 10.10.0.1
TCP-Full-Connect-Scan
- Connect-Scan verwendet den gleichnamigen Systemaufruf zum Scannen von Rechnern, anstatt sich auf rohe Pakete zu verlassen, wie es die meisten anderen Methoden tun.
- Es wird normalerweise von unprivilegierten Unix-Benutzern und gegen IPv6-Ziele verwendet, da der SYN-Scan in diesen Fällen nicht funktioniert.
nmap -sT 10.10.0.1
TCP-SYN-Scan
- Dies ist bei weitem der populärste Scan-Typ, weil es die schnellste Art ist, Ports des populärsten Protokolls (TCP) zu scannen.
- Er ist stealthier als der Verbindungs-Scan, und er funktioniert gegen alle funktionierenden TCP-Stapel (im Gegensatz zu einigen Spezial-Scans wie dem FIN-Scan).
nmap -sS 10.10.0.1
3. TCP-FIN-Scan
nmap -sF 10.10.0.1
4. TCP-XMAS-Scan
nmap -sX 10.10.0.1
5. TCP-NULL-Scan
nmap -sN 10.10.0.1
UDP-Scan
UDP-Ports bieten viele Sicherheitslücken
nmap -sU 10.10.0.1
TCP-ACK-Scan
- Der ACK-Scan wird häufig zur Abbildung von Firewall-Regelsätzen verwendet.
- Insbesondere hilft er zu verstehen, ob Firewall-Regeln zustandsbehaftet sind oder nicht.
- Der Nachteil ist, dass er nicht zwischen offenen und geschlossenen Ports unterscheiden kann.
nmap -sA 10.10.0.1
TCP-Window-Scan
Der Window-Scan ist wie der ACK-Scan, außer dass er in der Lage ist, offene gegenüber geschlossenen Ports gegen bestimmte Rechner zu erkennen.
nmap -sW 10.10.0.1
TCP-Maimon-Scan
Dieser obskure Firewall-evading-Scan-Typ ähnelt einem FIN-Scan, enthält aber auch das ACK-Flag. Dadurch kann er durch mehr Paketfilter-Firewalls hindurchkommen, mit dem Nachteil, dass er gegen noch weniger Systeme funktioniert als der FIN-Scan.
nmap -sM 10.10.0.1
TCP-Idle-Scan
Der Leerlauf-Scan ist der heimlichste Scan-Typ von allen und kann manchmal vertrauenswürdige IP-Adressenbeziehungen ausnutzen. Leider ist er auch langsam und komplex.
nmap -sI 10.10.0.1
IP-Protokoll-Scan
- Protokoll-Scan bestimmt, welche IP-Protokolle (TCP, ICMP, IGMP usw.) vom Zielcomputer unterstützt werden.
- Technisch gesehen handelt es sich hierbei nicht um einen Port-Scan, da die IP-Protokollnummern und nicht die TCP- oder UDP-Portnummern durchlaufen werden.
- Dennoch verwendet er nach wie vor die Option -p zur Auswahl der gescannten Protokollnummern, meldet seine Ergebnisse mit dem normalen Port-Tabellenformat und verwendet sogar dasselbe zugrunde liegende Scan-Modul wie die echten Port-Scan-Methoden.
- Es ist also nahe genug an einem Port-Scan, dass es hierher gehört.
nmap -sO 10.10.0.1
Ohne angaben werden die 1000 wichtigsten Ports gescannt. -F steht für die 100 wichtigsten Ports -p steht für Port selektiv ( -p25 oder -p25-100 oder -p25,80,100 oder alle Ports über -p6000-) -p- um alle Ports zu scannen.
OS & Service Identication mit NMAP
1. OS-Scan (OS-Detection)
nmap -O 10.10.0.1
2. Service-Scan / Versions-Scan
nmap -sV 10.10.0.1
3. RPC-Scan
nmap -sR 10.10.0.1
4. Kombinierter OS- & Service-Scan
nmap -O -sV 10.10.0.1
Anwendungsbeispiele
1. Klassischer Ping-Scan
nmap -PE -sn -oG – 10.10.0.1/24
2. Erweiterter Ping-Scan
nmap -sP -oG – 10.10.0.1/24
3. SYN-TOP100-Port-Scan
nmap -sS -F 10.10.0.1
4. SYN/Version-All-Port-without-Ping-Scan
nmap -sV -Pn -p0- --reason --stats-every 60s 10.10.0.1
5. Aggressive-All-Host-All-Port-Scan
nmap -sV -Pn -p0- -T4 -A -oG - --reason --stats-every 60s 10.10.0.1/24
6. TCP-ACK-Scan
nmap -sA -F 10.10.0.1
7. TCP-FIN-Scan
nmap -sF -F 10.10.0.1
8. UDP-Port-Scan
nmap -sU -F 10.10.0.1
9. UDP-All-Port-Scan
nmap -sU -p0- --reason --stats-every 60s --max-rtt-timeout 100ms --max-retrie 1 10.10.0.1
10. List-Scan
nmap -sL 10.10.0.1/24