nmap
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 22.04 Jammy Jellyfish
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Nmap 🇬🇧 oder auch "Network Mapper" ist ein Portscanner, der seit 1997 vom "Nmap-Developer-Team" entwickelt wird. Mit Nmap lassen sich Netzwerke und / oder Computer im Internet (d.h. mit eigener IP-Adresse) auf offene Ports und den darauf lauschenden Diensten prüfen. Nmap kann z.B. zum Testen der eigenen Firewall-Konfiguration eingesetzt werden oder auch zum Testen des eigenen Computers auf offene Ports und (eventuell unerwünschte) im Hintergrund laufende Dienste.
Achtung!
Das Scannen von Ports auf fremden Rechnern ist zwar nicht generell verboten, aber dennoch rechtlich umstritten. Nmap als Portscanner sollte daher nur für eigene Rechner verwendet werden.
Installation¶
Folgendes Paket muss installiert [1] werden:
nmap
Befehl zum Installieren der Pakete:
sudo apt-get install nmap
Oder mit apturl installieren, Link: apt://nmap
Aus dem Quelltext¶
Alternativ kann auch die neueste Version von nmap kompiliert [2] werden, da die Version aus den offiziellen Paketquellen meist etwas älter ist. Damit die für die Kompilation notwendigen Werkzeuge beisammen sind, muss zuerst das Paket build-essential installiert werden.
build-essential (main)
Befehl zum Installieren der Pakete:
sudo apt-get install build-essential
Oder mit apturl installieren, Link: apt://build-essential
Nun lädt man den aktuellen Quelltext als Archivdatei nmap-VERSION.tar.bz2 ⮷ herunter. Um Nmap zu kompilieren, öffnet man ein Terminal [3] und führt die folgenden Befehle im Downloadverzeichnis aus:
bzip2 -cd nmap-VERSION.tar.bz2 | tar xvf - cd nmap-VERSION ./configure make sudo checkinstall ## oder sudo make install
Der letzte Befehl checkinstall erstellt und installiert ein DEB-Paket.
Snap-Paket¶
Außerdem lässt sich nmap
mittels eines Snap-Paketes installieren:
sudo snap install nmap
Da das Snap-Paket allerdings in einer Sandbox läuft, muss ihm manuell mithilfe eines Plugs, network-control 🇬🇧, Zugang zum Netzwerk gewährt werden.
Andernfalls scheitert nmap
, wenn es mit Root-Rechten gestartet wird. Dazu dient der Befehl snap connect
:
sudo snap connect nmap:network-control
Bedienung¶
Um Nmap zu starten, öffnet man ein Terminal [3] und führt den folgenden Befehl aus:
sudo nmap [Art(en) des Scans] <Optionen> [Zielbezeichnung]
Als Zielbezeichnung sollte eine IP-Adresse (oder ein Adressbereich) angegeben werden. Wird Nmap ohne Angabe eines Ziels aufgerufen, so erhält man als Ausgabe eine kurze Übersicht über die verschiedenen Scan-Techniken und Optionen.
Hinweis:
Nmap kann auch ohne Root-Rechte gestartet werden, allerdings ist der Funktionsumfang (also die Art der möglichen Scans) dann stark eingeschränkt. Alternativ können entsprechende Rechte nmap
dauerhaft erteilt werden.
Scan-Techniken¶
Nmap kennt verschiedene Scan-Techniken, die wie folgt aufgerufen werden können:
nmap - Scan-Techniken | |
Scan Technik | Beschreibung |
-sT | Einfacher Connect Scan. Hierbei wird pro zu scannendem Port eine volle TCP-Verbindung auf- und wieder abgebaut. Dieser Scan steht auch zur Verfügung, wenn nmap ohne Root-Recht aufgerufen wird. |
-sS | "SYN-Stealth-Scan": Ähnlich -sT , allerdings wird keine komplette TCP-Verbindung aufgebaut, daher unauffälliger. (Standard bei Root-Rechten) |
-sU | Scannt UDP-Ports statt TCP. |
-sn | Ping-Scan: Prüft nur auf Erreichbarkeit über ICMP-Echo-Request, TCP-SYN-Paket auf Port 443, TCP-ACK-Paket auf Port 80 und ICMP-Timestamp-Request. Sinnvoll, um ganze Netzbereiche auf aktive Hosts zu testen. |
-sO | Internet-Protokoll (IP) Scan |
--scanflags <flags> | Flags für TCP-Scan festlegen |
-sI <Zombie Host[:Port]> | Idle-Scan (TCP) |
-6 | Scannt auch IPv6-Adressen |
Experten-Info:
Folgende etwas exotischere Techniken (und noch weitere) können in Einzelfällen sinnvoll sein. Es empfiehlt sich aber das vorherige Studium der Manpage oder der Homepage 🇬🇧 von nmap, um die Besonderheiten und möglichen Erkenntnisse zu verstehen.
Besondere Scantechniken | |
Scan Technik | Beschreibung |
-sF , -sN , -sX | nmap sendet an die zu scannenden Ports bewusst manipulierte bzw. falsche TCP-Pakete. Anhand der Reaktion des Ports (bzw. des Servers) lassen sich ggf. Rückschlüsse ziehen, ob der Port offen oder von einer Firewall geschützt ist. Im Vergleich zu -sT oder -sR ebenfalls unauffälliger. |
-sA , -sW | ACK und Window 🇬🇧 Scan. Für die Einrichtung einer Verbindung zu einem Port. Besonders gut zum Erkennen von Firewalls. |
Optionen¶
Nmap kennt diverse Optionen, die mit den oben genannten Scan-Techniken kombiniert werden können:
Versions- und OS-Erkennung¶
nmap - Optionen (Version und OS) | |
Option | Beschreibung |
-sV | Versucht durch zusätzliche Tests, den Dienst auf jedem offenen Port zu identifizieren. |
-O | OS-Detection: Versucht über besondere Eigenarten der Netzwerkimplementierungen das Betriebssystem des Zieles zu identifizieren. |
-A | Kurzform für -sV -O -sC --traceroute |
Ports¶
Standardmäßig scannt Nmap alle Ports von 1 bis 1024, sowie die höheren, die in der Datei /usr/share/nmap/nmap-services aufgeführt sind. Folgende Optionen erzeugen ein abweichendes Verhalten:
nmap - Optionen (Ports) | |
Option | Beschreibung |
-p X | X-Y | X,Y,Z | Scannt Port X, die Ports X-Y oder die Ports X,Y,Z |
--exclude-ports X | X-Y | X,Y,Z | Schließt die angegebenen Ports von der mit -p angegebenen Reichweite aus |
-p- | Alle Ports scannen |
-F | Schneller Scan, scannt nur die bekannten Ports, welche in der Datei nmap-services aufgeführt sind. |
-r | Scannt alle Ports in numerischer Reihenfolge, was zu besserer Übersichtlichkeit mit der Option -v führen kann. Standardmäßig wählt nmap eine zufällige Reihenfolge. |
sonstige Optionen (Ausgabe/Firewalls/Spoofing)¶
nmap - Optionen (Sonstige) | |
Option | Beschreibung |
-Pn | Normalerweise überprüft nmap vor einem vollen Portscan, ob der Rechner überhaupt existiert und online ist (s. Scan-Technik -sn ). Diese Option schaltet das ab und wird benötigt um Hosts zu scannen, auf denen kein Webserver läuft und die Ping blockieren. |
-e eth0 | Weist nmap explizit an, die Netzwerkschnittstelle eth0 zu nutzen. Normalerweise wählt nmap die Schnittstelle selber aus. |
-oN/oX/oS/oG DATEI | Protokolliert den Scan in DATEI im Format XML / s|<rIpt / kIddi3 / Grepable |
-v(v), -d(d) | Gibt zusätzliche Informationen während des Scans aus. Kann nie schaden. |
-S ADRESSE | Nutzt IP-Spoofing für die angegebene ADRESSE |
-D HOST1,HOST2[,CLIENT],... | Nutzt den sog. decoy scan: Die angegeben HOSTS sorgen dafür, dass das Scanziel den CLIENT nicht eindeutig als Scanstarter identifizieren kann |
-T 0-5 | Schnelligkeit einstellen |
Eine aktuelle Übersicht aller Optionen findet sich auch auf der Projektseite 🇩🇪 oder kann über das Terminal mittels nmap -h
abgerufen werden.
Skripte¶
Neben dem einfachen Scannen von Ports unterstützt Nmap auch das Ausführen von komplexen Skripten über die NSE-Engine 🇬🇧. Dieses sind Textdateien in der Programmiersprache Lua. Viele vordefinierte Skripte sind im Verzeichnis /usr/share/nmap/scripts gespeichert. Ein Ordner für lokale Skripte kann auch über die Option --datadir
mitgegeben werden, außerdem wird das Verzeichnis ~/.nmap durchsucht. Jede Datei enthält am Anfang eine kurze Funktionsbeschreibung und die Aufrufparameter. Nmap-Skripte können für folgende Aufgaben eingesetzt werden:
Erweiterte Informationen zu einem Port
Schwachstellenanalyse - Für viele bekannte Schwachstellen existieren Nmap-Skripte die anzeigen, ob der jeweilige Server davon betroffen ist (z.B. ssl-heartbleed).
Brute-Force-Angriffe - Viele der Skripte versuchen sich über eine Liste mit Benutzernamen und Passwörtern auf einem bestimmten Server-Dienst anzumelden (z.B. ssh-brute).
Achtung!
Das Ausnutzen von Schwachstellen oder das Überwinden von Passwortsperren (egal ob Brute-Force oder das einmalige Eintippen) sind rechtswidrig und können strafrechtlich verfolgt werden, wenn dies auf fremde Systeme erfolgt und ohne Absprache mit dem Systemverantwortlichen durchgeführt wird. Die jeweiligen Nmap-Skripte sollten daher nur für eigene Rechner verwendet werden.
Beispiel für das Auflisten aller unterstützten Verschlüsselungsfunktionen eines Webservers:
sudo nmap --script ssl-enum-ciphers -p 443 ubuntuusers.de
Starting Nmap 7.60 ( https://nmap.org ) at 2018-08-25 10:01 CEST Nmap scan report for ubuntuusers.de (213.95.41.4) Host is up (0.044s latency). Other addresses for ubuntuusers.de (not scanned): 2001:780:0:25:dead:beef:cafe:1 rDNS record for 213.95.41.4: ha.ubuntu-eu.org PORT STATE SERVICE 443/tcp open https | ssl-enum-ciphers: | TLSv1.0: | ciphers: | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A | TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A | TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A | compressors: | NULL | cipher preference: server | warnings: | Key exchange (dh 2048) of lower strength than certificate key | Key exchange (secp256r1) of lower strength than certificate key | TLSv1.1: | ciphers: | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A | TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A | TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A | compressors: | NULL | cipher preference: server | warnings: | Key exchange (dh 2048) of lower strength than certificate key | Key exchange (secp256r1) of lower strength than certificate key | TLSv1.2: | ciphers: | TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp256r1) - A | TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp256r1) - A | TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 2048) - A | TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 2048) - A | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (secp256r1) - A | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (secp256r1) - A | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A | TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (dh 2048) - A | TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A | TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (dh 2048) - A | TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A | compressors: | NULL | cipher preference: server | warnings: | Key exchange (dh 2048) of lower strength than certificate key | Key exchange (secp256r1) of lower strength than certificate key |_ least strength: A Nmap done: 1 IP address (1 host up) scanned in 15.99 seconds
Weitere Optionen lassen sich auch auf der Manpage 🇬🇧 der Scripting Engine einsehen.
Root-Privilegien¶
Für bestimmte Arten von Scans, wie diesen UDP-Scan, oder das Starten von bestimmten Skripten 🇬🇧 benötigt nmap
Root-Privilegien:
nmap -n -sU 192.168.0.1
You requested a scan type which requires root privileges. QUITTING!
Ander Sacntypen, wie -sn
sind in ihrere Funktionalität eingeschränkt. Dieser kann dann nur mit SYN-Paketen auf Port 80 und 443 operieren.
Eine Möglichkeit ist es, nmap
mit sudo zu starten. Wenn man dies aber umgehen möchte, bietet es sich an, mehrere Prozess-Privilegien 🇬🇧 unter Linux nmap
zu erteilen, wodurch auch erweiterte Scan-Methoden laufen:
sudo setcap cap_net_raw,cap_net_admin,cap_net_bind_service+eip /usr/bin/nmap
Diese Technik funktioniert allerdings nicht für das Snap-Paket.
Nach der Erteilung der Rechte muss nmap
mit dem Schalter --privileged
gestartet werden:
nmap --privileged -n -sU 192.168.0.1
Starting Nmap 7.80 ( https://nmap.org ) at 2023-01-15 16:00 CET ...
Eine Übersicht aller nmap
-Operationen, die Root-Rechte benötigen, findet sich auf dieser Seite 🇬🇧.
Deinstallation der manuell kompilierten Version¶
Hat man nmap manuell über make installiert und das Verzeichnis, in das der Quelltext entpackt wurde, nicht gelöscht, kann man die selbstkompilierte Version über
cd nmap-VERSION sudo make uninstall
wieder vollständig deinstallieren.
Links¶
Projektseite 🇬🇧
Nmap - Wikipedia