[[Vorlage(Getestet, focal, jammy)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Programme_kompilieren:] [:Terminal: Ein Terminal öffnen] [:mit_Root-Rechten_arbeiten:] }}} [[Inhaltsverzeichnis(2)]] [[Bild(./nmap_logo.png, 85, left)]] [https://nmap.org/ Nmap] {en} oder auch "Network Mapper" ist ein [:Portscan: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. {{{#!vorlage Warnung Das Scannen von Ports auf fremden Rechnern ist zwar nicht generell verboten, aber dennoch [wikipedia:Portscanner#Rechtliche_Aspekte:rechtlich umstritten]. Nmap als Portscanner sollte daher nur für eigene Rechner verwendet werden. }}} = Installation = [[Bild(./nmap.png, 200, right)]] Folgendes Paket muss installiert [1] werden: {{{#!vorlage Paketinstallation nmap }}} [[Anker(Manuell)]] == 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 [packages:build-essential:] installiert werden. {{{#!vorlage Paketinstallation build-essential, main }}} Nun lädt man den aktuellen Quelltext als Archivdatei [https://nmap.org/dist/ nmap-VERSION.tar.bz2] {dl} herunter. Um Nmap zu kompilieren, öffnet man ein Terminal [3] und führt die folgenden Befehle im Downloadverzeichnis aus: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl sudo snap install nmap }}} Da das Snap-Paket allerdings in einer Sandbox läuft, muss ihm manuell mithilfe eines [:snap/#Schnittstellen-Interfaces-Slots-und-Plugs:Plugs], [https://snapcraft.io/docs/network-control-interface network-control] {en}, Zugang zum Netzwerk gewährt werden. Andernfalls scheitert `nmap`, wenn es mit [:Root-Rechte:Root-Rechten] gestartet wird. Dazu dient der Befehl `snap connect`: {{{#!vorlage Befehl sudo snap connect nmap:network-control }}} = Bedienung = Um Nmap zu starten, öffnet man ein Terminal [3] und führt den folgenden Befehl aus: {{{#!vorlage Befehl 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. {{{#!vorlage 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 [#Root-Privilegien Rechte] `nmap` dauerhaft erteilt werden. }}} == Scan-Techniken == Nmap kennt verschiedene Scan-Techniken, die wie folgt aufgerufen werden können: ||<-2 tableclass="zebra_start3" rowclass="titel" :> nmap - Scan-Techniken || ||<rowclass="kopf" :>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]>` || [wikipedia_en:Idle_scan:Idle]-Scan (TCP) || || `-6` || Scannt auch [wikipedia:IPv6:]-Adressen|| {{{#!vorlage Experten Folgende etwas exotischere Techniken (und noch weitere) können in Einzelfällen sinnvoll sein. Es empfiehlt sich aber das vorherige Studium der [:man:Manpage] oder der [https://nmap.org/ Homepage] {en} von nmap, um die Besonderheiten und möglichen Erkenntnisse zu verstehen. ||<-2 tableclass="zebra_start3" rowclass="titel" :> Besondere Scantechniken || ||<rowclass="kopf" :>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`||[wikipedia_en:Transmission_Control_Protocol#CONNECTION-ESTABLISHMENT:ACK] und [https://nmap.org/book/scan-methods-window-scan.html Window] {en} 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 === ||<-2 tableclass="zebra_start3" rowclass="titel" :> nmap - Optionen (Version und OS) || ||<rowclass="kopf" :>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: ||<-2 tableclass="zebra_start3" rowclass="titel" :> nmap - Optionen (Ports) || ||<rowclass="kopf" :>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) === ||<-2 tableclass="zebra_start3" rowclass="titel" :> nmap - Optionen (Sonstige) || ||<rowclass="kopf" :>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'' / ''[:Grep:]able''|| ||`-v(v), -d(d) `||Gibt zusätzliche Informationen während des Scans aus. Kann nie schaden.|| ||`-S ADRESSE`||Nutzt [wikipedia_en:IP_address_spoofing: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 [https://nmap.org/man/de/man-briefoptions.html Projektseite] {de} 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 [https://nmap.org/book/man-nse.html NSE-Engine] {en}. 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''). * [wikipedia:Brute-Force-Methode: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''). {{{#!vorlage Warnung 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: {{{#!vorlage Befehl 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 [https://nmap.org/book/man-nse.html Manpage] {en} der Scripting Engine einsehen. == Root-Privilegien == Für bestimmte Arten von Scans, wie diesen [wikipedia:User_Datagram_Protocol:UDP]-Scan, oder das Starten von bestimmten [https://www.infosecmatter.com/why-does-nmap-need-root-privileges/#running-certain-nse-scripts Skripten] {en} benötigt `nmap` [:Root-Rechte:Root-Privilegien]: {{{#!vorlage Befehl 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 [https://man7.org/linux/man-pages/man7/capabilities.7.html Prozess-Privilegien] {en} unter Linux `nmap` zu erteilen, wodurch auch erweiterte Scan-Methoden laufen: {{{#!vorlage Befehl 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 Snap-Paket]. Nach der Erteilung der Rechte muss `nmap` mit dem Schalter `--privileged` gestartet werden: {{{#!vorlage Befehl 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 [https://www.infosecmatter.com/why-does-nmap-need-root-privileges/#scan-methods-requiring-root-privileges dieser Seite] {en}. = Zenmap = [[Bild(./Zenmap_625.png, 250, right)]] [https://nmap.org/zenmap/ Zenmap] {en} ist ein grafische Benutzeroberfläche für Nmap. {{{#!vorlage Hinweis Zemmap ist als Python-2-Programm ab Ubuntu 20.04 nicht mehr sinnvoll verwendbar und deshalb auch nicht mehr in den offiziellen Paketquellen enthalten. Ein Verwendung unter bionic (Ubuntu 18.04) ist möglich. }}} Zenmap wird über folgendes Paket installiert [1]: {{{#!vorlage Paketinstallation zenmap, universe }}} Gestartet wird Zenmap aus dem GNOME Menü unter * ''"Anwendungen -> Internet -> Zenmap"'' Auch mit Zenmap sind alle Scantechniken nur verfügbar, wenn das Programm mit Root-Rechten gestartet wird. Mit Hilfe von Zenmap kann man die verschiedenen oben beschriebenen Scan-Techniken und Optionen bequem aus diversen Auswahlmenüs zusammenstellen. Zenmap stellt dann den entsprechenden Aufruf von Nmap in einer Zeile am unteren Rand des Fensters dar. = Deinstallation der manuell kompilierten Version = Hat man nmap manuell über [:Makefile:make] installiert und das Verzeichnis, in das der Quelltext entpackt wurde, nicht gelöscht, kann man die selbstkompilierte Version über {{{#!vorlage Befehl cd nmap-VERSION sudo make uninstall }}} wieder vollständig deinstallieren. = Links = * [https://nmap.org/ Projektseite] {en} * [https://nmap.org/man/de/ Nmap-Referenz-Handbuch] {de} * [wikipedia:nmap:Nmap] - Wikipedia # tag: Internet, Netzwerk, Server, Sicherheit, Shell