Viel Spaß beim Lesen!
Hardware-View: Nmap
Titel: Nmap |
Hinweis: Für die Korrektheit oder Aktualität der Informationen kann nicht garantiert werden. Der Autor übernimmt daher keine Haftung für Schäden, die durch Nutzung der Informationen entstanden sind.
Nmap ist der wohl bekannteste Hardware-Glossar: Portscanner unter den heute verfügbaren. Das Befehlszeilen-Programm ist komplex und doch vergleichsweise einfach zu bedienen. Nmap bietet unterschiedliche Scanning-Techniken, die man teilweise sogar kombinieren kann. Damit lassen sich Hardware-Glossar: Host-, Port-, Hardware-Glossar: Protokoll- und Hardware-Glossar: OS-Scans durchführen. In dieser Anleitung zu Nmap soll der grundlegende Leistungsumfang erläutert werden. Für ein besseres Verständnis wäre es vorteilhaft, wenn Sie sich zuvor in unserem Glossar über die Netzwerkprotokolle Hardware-Glossar: IP, Hardware-Glossar: ICMP, Hardware-Glossar: TCP und Hardware-Glossar: UDP informieren würden.
Download und Ressourcen
Die Internetseiten zum Projekt finden Sie unter http://www.insecure.org/nmap/. Dort finden Sie den plattformunabhängigen Quellcode zu Nmap und entsprechende Installationsanleitungen, sowie einer umfangreichen Dokumentation. Seit einiger Zeit gibt es auch eine Windows-Version von Nmap, die Sie ebenfalls mit entsprechenden Anleitungen im Downloadbereich der Projektseiten finden. In den folgenden Abschnitten beziehen wir uns auf die Nmap-Version 2.54 Beta 30.
Hinweis: Vor der offiziellen Windows-Version von Nmap gab es eine von eEye (www.eeye.com) entwickelte Windows-Portierung namens NmapNT. Die Benutzung fällt prinzipiell identisch aus, zu beachten ist jedoch, dass NmapNT in einigen Bereichen bekanntermaßen fehlerhaft implementiert ist. Dies ist auch einer der Gründe, weshalb das Projekt seit geraumer Zeit eingestellt wurde. Das Programm finden Sie unter anderem unter http://www.computec.ch/download.php?view.448.
Da Nmap für die meisten Funktionen Manipulationen an den Paketen durchführen muss, werden oftmals Root- bzw. Administrator-Rechte benötigt. Sie sollten Nmap vorzugsweise als entsprechend privilegierten Benutzer ausführen, um das volle Leistungsspektrum in Anspruch nehmen zu können.
Grundlegende Verwendung
Eine Befehlszeile, die Nmap anweist, Port 80 des Hosts 192.168.0.1 zu scannen, sieht folgendermaßen aus:
# nmap -p 80 192.168.0.1
Der Schalter -p dient dazu, den oder die zu scannenden Ports anzugeben. Am Ende einer Befehlszeile kommt immer bzw. vorzugsweise die Hardware-Glossar: IP-Adresse oder der Hostname des abzuscannenden Hosts. Die Angabe von Ports und IP-Adressen ist variabel, so können Sie bestimmte Ports und IP-Adressen kommasepariert angeben:
# nmap -p 80,81,82 192.168.0.1,2,3
Mit einem Bindestrich können Sie Port- und IP-Adressbereiche angeben:
# nmap -p 80-82 192.168.0.1-3
Für IP-Adressen können Sie weiterhin das Asterikzeichen als Platzhalter für alle verfügbaren Hosts eines Netzwerks angeben:
# nmap -p 80 192.168.0.*
Dieser Befehl scannt alle Hosts des Netzwerks 192.168.0 (Host 0 bis 255). Beachten Sie hierbei die Angabe der Anführungszeichen. Wenn Sie die Zielports (Option -p) auslassen, wird Nmap standardmäßig versuchen, alle Ports aus der Nmap-Services-Datei (nmap-services) und die Ports von 1-1024 zu scannen. Diese Art von Scan bezeichnet man als Standard-Scan:
# nmap 192.168.0.1
Hinweis: Wenn ein Client, in unserem Fall Nmap, versucht, sich mit einem TCP-Dienst eines Hosts zu verbinden, sendet er das TCP-Flag SYN. Der Host antwortet regulär mit einem ACK/SYN-Paket. Hierdurch stellt Nmap fest, dass der Host aktiv und der Port offen ist, d.h. von einem Dienst abgehört wird. Wenn der Port von keinem Dienst abgehört, also geschlossen ist, sendet der Host laut TCP-Spezifikation das TCP-Flag RST. Auch hier ist klar, dass der Host aktiv ist, der Port ist lediglich geschlossen. Spätestens, wenn keine Antwort vom Host erfolgt, kann angenommen werden, dass der Host entweder inaktiv, oder der Port durch eine Hardware-Glossar: Firewall oder ähnliche Schutzeinrichtung blockiert wird. Aus diesem Grund verwendet Nmap im Normalfall den Hardware-Glossar: HTTP-Port 80. Schutzeinrichtungen wie Firewalls lassen Webdaten oftmals unbeaufsichtigt. Mit der Option -PT Portnummer können Sie eine andere zu verwendende Portnummer angeben, von der aus die Portscans laufen sollen.
Nach Hosts im lokalem Netzwerk scannen
Wenn Sie sich dafür interessieren, welche Hosts im lokalem Netzwerk aktiv sind, können Sie Nmap mit der Option -sP (Scan Ping) anweisen, einen Hostscan durchzuführen. Die Funktion ist vergleichbar mit derjenigen des Programms fping. Nmap sendet ICMP-Echo-Request-Pakete für einen bestimmten IP-Adressbereich, und wartet anschließend auf Antworten. Da ICMP-Requests an vielen Hosts standardmäßig blockiert werden, versucht Nmap alternativ eine TCP-Verbindung zum Port 80 (HTTP) aufzubauen. Webdaten werden in der Regel von Firewall, Paketfilter und Co. akzeptiert. Empfängt Nmap schließlich irgendwelche Antwortdaten, ob SYN, ACK oder RST, ist der Host aktiv, andernfalls geht es davon aus, dass der Host entweder inaktiv oder momentan nicht am Netzwerk ist. Wenn Sie lediglich eine Liste der Hostnamen für einen anzugebenden IP-Adressbereich haben möchten, können Sie die Option -sL (Scan List) benutzen.
Die Befehlszeilen der beiden Funktionen könnten so aussehen:
# nmap -sP 192.168.0.1-100
# nmap -sL 192.168.0.1-100
TCP-Ports scannen
Nmap bietet verschiedene Möglichkeiten, TCP-Ports eines aktiven Hosts zu scannen. Es werden die gebräuchlichsten Methoden aufgelistet und kurz erläutert.
-sT
Die einfachste Methode für TCP-Scans ist das Öffnen einer vollwertigen TCP-Verbindung. Nmap bietet hierfür die Option -sT (Scan TCP). Hierbei sendet Nmap zunächst das SYN-Flag an den Port. Der Host antwortet mit einem ACK/SYN-Paket, wenn der Port offen ist. Nmap vollendet die Verbindung in diesem Fall mit einem ACK-Paket und bricht sie danach mit einem RST-Paket wieder ab. Ist der Port geschlossen, sendet der Host in der Regel ein RST-Paket. Kommt keine Antwort, ist der Host inaktiv oder geschützt. Mit der Option -sR (Scan RPC-Services) wird Nmap angewiesen, RPC-Befehle mit zu senden. Hierdurch lassen sich womöglich weitere Informationen zum Dienst am abzuscannenden Port heraus finden.
Die Befehle sehen wie folgt aus:
# nmap -sT 192.168.0.1
# nmap -sR 192.168.0.1
Beachten Sie, dass ein solcher Portscan mit hoher Wahrscheinlichkeit vom Host wahrgenommen und protokolliert wird. Trickreicher ist hier die folgende Option.
-sS
Durch die Option -sS (Scan SYN) wird Nmap angewiesen, ein SYN-Paket an den Port des Hosts zu senden. Wird der Port von einem Dienst abgehört, antwortet dieser mit einem ACK/SYN-Paket. In diesem Fall wird der Port also nicht blockiert. Ist er geschlossen, sendet der Host ein RST-Paket. Kommt keine Antwort, ist der Host inaktiv oder geschützt. Der Unterschied ist, dass Nmap bei einer ACK/SYN-Antwort die angefangene Verbindung sofort mit einem RST-Paket abbricht. Es gibt Dienste, die den Portscan in diesem Fall nicht protokollieren. Die meisten Firewalls und Hardware-Glossar: IDS (Intrusion Detection System) achten jedoch explizit auf ein solches Verhalten.
Befehlszeile:
# nmap -sS 192.168.0.1
-sF
Noch trickreicher ist die Nmap-Option -sF (Scan FIN). Das FIN-Flag wird normalerweise gesendet, wenn man ein Verbindungsende initialisieren möchte. Wenn keine Verbindung steht, ist es jedoch Unsinn, ein solches Paket zu senden. Genau dies macht die Option jedoch. Es wird der Umstand ausgenutzt, dass ein Host bei einem geschlossenem Port immer mit einem RST-Paket antwortet, oder besser antworten sollte. Ein offener Port wird das FIN-Paket schlichtweg verwerfen. Nmap sendet also ein FIN-Paket an den Port des Hosts. Kommt keine Antwort, und ist der Host aktiv, ist der Port vermutlich offen. Sendet der Host ein RST-Paket, ist der Port geschlossen.
Befehlszeile:
# nmap -sF 192.168.0.1
Weitere Datenmüll-Scans sind -sN (San Null), bei dem alle Flags gesetzt werden, und -sX (Scan Xmas-Tree), bei dem die Flags FIN, URG und PSH gesetzt werden. Diese Scantypen sollen hier nicht näher erläutert werden.
Hinweis: Es gibt Betriebssysteme, die ein TCP-Verhalten implementiert haben, dass nicht den Spezifikationen von TCP entspricht. In diesem Fall kann es sein, dass RST-Paket auch dann gesendet werden, wenn der Port offen ist, und Datenmüll eingereicht wurde. Manche Schutzeinrichtungen ahmen dieses Verhalten sogar explizit nach.
-sA
Gelegentlich sagt Ihnen Nmap, dass ein Port gefiltert, d.h. durch eine Firewall oder ähnliches geschützt ist. Mit der Option -sA (Scan ACK) können Sie die Regeln dieser Firewall prüfen. Dabei sendet Nmap ein ACK-Paket. Gehört dieses zu keiner aktuellen Verbindung, sendet der Host in der Regel ein RST-Paket. In diesem Fall ist der Port vermutlich durch keine Firewall geschützt. Sendet der Host keine Antwort, oder ein ICMP-unreachable, ist der Port mit hoher Wahrscheinlichkeit geschützt. Beachten Sie jedoch, dass dieser Scantyp keinerlei Informationen darüber gibt, ob der Port offen oder geschlossen ist.
Befehlszeile:
# nmap -sA 192.168.0.1
UDP-Ports scannen
Nmap kann auch nach UDP-Ports scannen. Da UDP jedoch verbindungslos arbeitet, muss die Gegenseite theoretisch nie antworten. Für dieses Problem gibt es keine wirkliche Lösung. Mit der Option -sU (Scan UDP) weisen Sie Nmap an, nach UDP-Ports zu scannen. Hierzu wird ein leeres UDP-Paket an den Port des Hosts gesendet. Antwortet der Host nicht, ist aber aktiv, könnte man annehmen, dass der Port offen ist. Er kann aber auch genauso gut geschlossen sein, wenn Schutzeinrichtungen den Port blockieren. Der Port ist vermutlich geschlossen, wenn der Host mit einem ICMP-unreachable antwortet.
Befehlszeile:
# nmap -sU 192.168.0.1
Hinweis: Nmap pingt den Host vor dem Scanvorgang standardmäßig an, um sicher zu gehen, dass er aktiv ist. Dies ist vor allem bei UDP-Scans wichtig. Mit der Option -PO können Sie dies ausschalten. Siehe Abschnitt Weitere nützliche Optionen.
Portscans verstecken
Nmap bietet einige Möglichkeiten, um den Portscan unauffälliger zu gestalten. Einige dieser Möglichkeiten sollen hier erläutert werden.
Fragmentierung
Mit der Option -f von Nmap können Sie Stealth-Scans ausführen (funktioniert mit den Scantypen -sS, -sF, -sX und -sN). Dazu werden fragmentierte IP-Datagramme verwendet, bei denen der TCP-Header quasi auseinander gebrochen wird. Dies geschieht aus dem Grundgedanken oder der Annahme, dass zerstörte TCP-Pakete mit ungewöhnlichen Flaggen nicht durch Firewalls oder ähnliche Schutzeinrichtungen blockiert werden. Manche Systeme stürzen durch diese Option ab, und einige Unix-Derivate unterstützen sie nicht einmal Vorsicht!
Befehlsbeispiel:
# nmap -f -sS 192.168.0.1
Decoy-Hosts
Nmap bietet die Möglichkeit, Quell-IP-Adressen mit der Option -S IP-Adesse zu fälschen (spoofen). Hierbei erhält man jedoch keine Informationen über den Portscan, da die Antwortdaten an die unechte bzw. gefälschte Adresse gesendet werden. Nmap bietet deshalb eine Funktion für ein Ablenkungsmanöver. Mit der Option -D und einer darauf folgenden kommaseparierten Liste von Hosts wird Nmap angewiesen, den jeweiligen Portscan durchzuführen, zwischen durch jedoch immer wieder gefälschte Portscans der unschuldigen oder unechten Hosts einzuwerfen. Dadurch ist zwar kein ernst zu nehmender Schutz gewährleistet, ein Administrator, der den aufgezeichneten Portscan anschließend untersucht, kann unter Umständen jedoch stark verwirrt werden.
Befehlsbeispiel:
# nmap -D 192.168.0.3,192.168.0.4 -p 80 192.168.0.1
Der Befehl weist Nmap an, Port 80 vom Host 192.168.0.1 von Ihnen und den Hosts 192.168.0.3 und 192.168.0.4 abzuscannen.
Zufällige Reihenfolge für Hosts und Ports
Nmap definiert standardmäßig eine zufällige Reihenfolge für die angegebenen bzw. abzuscannenden Ports. Mit der Option -r kann dies abgestellt werden. Die Ports werden dann chronologisch abgescannt. Wenn Sie eine Gruppe von Hosts untersuchen, kann es hilfreich sein, diese nach dem Zufallsprinzip zu scannen. Verwenden Sie hierfür die Option --randomize_hosts.
Befehlsbeispiele:
# nmap -r -p 80-90 192.168.0.1
# nmap --randomize_hosts 192.168.0.1-100
Timing-Optionen für den Scanvorgang
Mit den Timing-Optionen von Nmap können Sie Zeiten bestimmen, die beispielsweise zwischen den einzelnen Portscans gewartet werden soll. Somit verursacht der Scan nicht allzu viel Lärm im Netzwerk. Es gibt vordefinierte Zeitschalter, sie lassen sich jedoch auch selbst definieren. Vordefinierte Zeitschalter sind Paranoid, Sneaky, Polite, Normal, Aggressive und Insane. Genau Angaben zu den Zeitschaltern können Sie der offiziellen Man-Page zu Nmap entnehmen. Dem Zeitschalter wird die Option -T vorangestellt.
Befehlsbeispiel:
# nmap -T Insane -sS 192.168.0.1
Betriebssystem-Fingerprinting
Mit der Option -O kann Nmap versuchen, Informationen über das Betriebssystem des Hosts heraus zu finden. Dabei formuliert es TCP- und UDP-Pakete dermaßen spezifisch, dass unterschiedliche Betriebssysteme ein unterschiedliches Verhalten zeigen können. Dieses Verhalten wird mit Verhaltenssignaturen aus der Datei nmap-os-fingerprints verglichen. Diese Datei wird vom Nmap-Entwickler gepflegt.
Befehlsbeispiel:
# nmap -O 192.168.0.1
Weitere nützliche Optionen
-PO -PT -PS -PI -PB
Wie weiter oben bereits erwähnt wurde, pingt Nmap die abzuscannenden Hosts grundsätzlich vorher an. Dieses Verhalten lässt sich mit diesen Optionen steuern.
-PO: Kein Pingen
-PT: TCP-Verbindung zu Port 80 oder beliebigen Port, der nach -PT angegeben wird.
-PS: Pingen durch SYN-Pakete
-PI: ICMP-Ping
-PB: Standardwert: Versucht ICMP-, dann TCP-Ping
-v -d
Die Option -v (verbose) weist Nmap an, weitere Informationen bezüglich des Scanvorgangs auszugeben. Die Option -d (debugging) lässt Nmap Debugging-Informationen ausgeben.
-oN -oM -oS Log-Datei
Mit diesen Optionen lässt sich die Nmap-Ausgabe zusätzlich in eine Datei weiterleiten.
-oN: Weiterleitung im Klartextformat
-oM: Weiterleitung im maschinenlesbaren Format. Kann später wieder von Nmap ausgelesen werden (siehe --resume).
-oS: Weiterleitung im Skript-Kiddie-Format
--resume Log-Datei
Wenn Sie Nmap während eines von Nmap protokollierten Portscans abgebrochen haben, können Sie den Scan mithilfe der Log-Datei wieder aufnehmen und fortsetzen.
-iL Host-Datei
Mit dieser Option lassen sich die abzuscannenden Hosts (IP-Adressen oder Hostnamen) aus einer Datei auslesen. In dieser Datei müssen die Hosts leerschrtt-, tab- oder zeilensepariert vorhanden sein.
-F
Weist Nmap an, nur nach bekannten Ports zu scannen. Diese befinden sich in der Datei nmap-services. Andernfalls werden die Ports 1-1024 und diejenigen aus der Services-Datei gescannt.
-e Netzwerkschnittstelle
Nmap sucht sich in der Regel selbst aus, welche Netzwerkschnittstelle für die Datenübertragung verwendet wird. Mit dieser Option können sie eine Schnittstelle explizit bestimmen.
-g Quell-Port
Mit dieser Option können Sie einen Quell-Port angeben, der für die Scans verwendet werden soll.
Sämtliche Optionen für Nmap können Sie der Man-Page entnehmen.
Nmap Front-End Nmapfe
Sofern Sie das X-Window-System im Einsatz haben, können Sie die grafische Oberfläche Nmapfe verwenden. Im Vergleich zu Nmap stehen Ihnen zwar weniger Optionen zur Verfügung, dafür können Sie das Programm über hübsche Formulare und Menüs steuern. Das Programm finden Sie im Downloadbereich der offiziellen Internetseiten zu Nmap (siehe Abschnitt Download und Ressourcen).