In “Matrix Reloaded” hackt Trinity mit Nmap das Stromversorgungsnetz, um Neo den Weg zum Architekten der Scheinwelt zu ebnen. Doch der Portscanner eignet sich auch bestens für profanere Zwecke – etwa, um Schwachstellen in heimischen Netz dingfest zu machen.
Als Port- und Security-Scanner lässt sich Nmap [1] vielfältig einsetzen. Es stellt nicht nur auf sehr unterschiedliche Arten fest, welche Rechner sich in einem Netzwerk tummeln: Obendrein ermittelt es auch recht genaue Informationen über deren Betriebssystem, die angebotene Dienste und deren Schwachstellen. In einen Cron-Job verpackt informiert Nmap Administratoren, sobald ein Dienst ausfällt oder ein Rechner im Netzwerk plötzlich ganz neue Services anbietet, die ein eifriger Anwender oder gar ein Angreifer installiert hat.
Nicht zuletzt enthält Nmap auch eine Scripting-Engine und viele LUA-Skripte, mit denen Sie Aufgaben automatisieren oder den Funktionsumfang des Tools in Eigenregie erweitern. Neben dem eigentlichen Scanner enthält die Nmap-Suite noch weitere hilfreiche Werkzeuge, wie die grafische Nutzeroberfläche Zenmap, das Datentransfer- und Debugging-Tool Ncat, das Vergleichswerkzeug Ndiff und den Paketgenerator Nping.
Nmap installieren
Nmap findet sich in den Repositories fast aller Distributionen und lässt sich dementsprechend bequem mit den jeweiligen Paketwerkzeugen einrichten. Mithilfe des Kommandos nmap --version erfahren Sie schnell, welche Version installiert ist. Dabei handelt es sich meist nicht um die aktuellste – die müssen Sie in aller Regel aus den Quellen [2] selbst übersetzen. Dazu genügt nach dem Herunterladen und Auspacken des Quelltext-Tarballs jedoch der übliche Dreisatz ./configure && make && make install mit administrativen Rechten.
Grundfunktionen
Mit Nmap untersuchen Sie sowohl einzelne Rechner als auch ganze Netzwerke, und das nicht nur als Administrator, sondern auch als normaler Nutzer. Allerdings unterscheidet Nmap zwischen privilegierten Anwendern wie Admins und unprivilegierten Nutzern: Letztere dürfen beispielsweise keine sogenannten Raw-Packets versenden, sondern sind an die connect()-Calls des Systems gebunden, die bei jeder TCP-Portabfrage einen kompletten, aus Syn-Syn/Ack bestehenden Verbindungsaufbau vornehmen.
Führen Sie Nmap als privilegierter Nutzer aus, klopft es Ports nur mit einem sogenannten Syn-Stealth-Scan oder Half-open-Scan ab. Dabei setzt Nmap lediglich ein Syn-Paket an den Server ab. Antwortet dieser mit Syn-Ack, sendet Nmap ein Rst-Paket, das den Verbindungsaufbau sofort abbricht (Abbildung 1). Der Stealth-Scan wurde ursprünglich entwickelt, um zu verhindern, dass der angefragte Rechner die IP-Adresse des anfragenden Rechners mitloggt. Doch mittlerweile erkennen auch viele Firewalls, Intrusion-Detection- und Intrusion-Prevention-Systeme derartige Syn-Anfragen und reagieren entsprechend.
Einen besonderen Vorteil von Nmap stellt dar, dass es neben einzelnen Host auch ganze Netzwerke scannen kann. Das erweist sich vor allem dann nützlich, wenn man nicht (mehr) weiß, welche Dienste die einzelnen Rechner eigentlich anbieten. Um ein Netz zu scannen, nennen Sie Nmap entweder die IP-Adressen der einzelnen Rechner direkt im Aufruf oder übergeben diese in einer Datei. Noch wesentlich einfacher geht es, indem Sie IP-Adressbereiche angeben, beispielsweise in CIDR-Notation. Das bedeutet, dass die Kommandos in den ersten drei Zeilen von Listing 1 funktionell identisch sind. Sollen die Hosts aus einer Datei eingelesen werden, darf pro Zeile ein Eintrag stehen, wobei auch hier wieder größere Bereiche erlaubt sind. Die Datei mit den Hosts wird Nmap mit der Option -sL dateiname mitgeteilt.
Listing 1
# nmap 192.168.1.1 192.168.1.2 [...] 192.168.1.254 # nmap 192.168.1.1-254 # nmap 192.168.1.0/24 # nmap -p22,25,80,110,8080-8088 192.168.1.0/24
Standardmäßig scannt Nmap pro Host die tausend gebräuchlichsten Ports – das geht recht schnell, dauert aber naturgemäß je nach Anzahl der gescannten Rechner gelegentlich trotzdem einen Moment. Mit dem Schalter -F (“fast”) begrenzen Sie bei Bedarf die Anzahl der untersuchten Ports auf die hundert wichtigsten. Möchten Sie nur bestimmte Ports prüfen, geben Sie mittels des Schalters -p einzelne Ports oder durch Kommas getrennte Portbereiche an (Listing 1, Zeile 4). Mit -p- weisen Sie Nmap an, den kompletten Bereich 1-65535 zu scannen.
Oft genügt es nicht, zu wissen, ob ein Host online ist und welche Ports offen stehen. Daher bietet Nmap zusätzlich die Möglichkeit, detaillierte Informationen zu den Betriebssystemen und angebotenen Diensten zusammenzutragen. Diesem Zweck dienen die Optionen -sV (Versionsabfrage) und -O (OS-Erkennung), für die Nmap eine umfangreiche Datenbank mit Fingerprints zahlreicher Dienste und Betriebssysteme mitbringt. Die Option -A bezieht neben OS- und Versionserkennung auch zahlreiche Skripte mit in den Scan ein und gibt die Traceroute aus. Derartige Scans dauern aber deutlich länger als normale und verursachen jede Menge möglicherweise unerwünschten “Lärm” auf dem Zielrechner.
Offene Ports kennzeichnet Nmap als open, geschlossene (die auf Anfragen sofort mit einem RST reagieren) als closed. Daneben gibt es auch noch Ports, die Nmap als filtered interpretiert. Das sind solche, die vermutlich von einer Firewall geschützt werden, die Requests einfach mit DROP verwirft. Daneben gibt es noch Mischformen wie open|filtered oder closed|filtered, die nichts anderes bedeuten, als dass Nmap den genauen Status des Ports nicht erkennt.
Ausgabeformate
Nmap präsentiert seine Ergebnisse standardmäßig auf der Konsole. Bei wenigen gescannten Hosts ist das übersichtlich genug, bei einem kompletten Netzwerk-Scan jedoch nicht mehr. Hier bietet es sich an, auf die Ausgabe in Dateien zurückzugreifen. Nmap unterstützt die Ausgabe in normale (-oN) sowie für Grep optimierte (-oG) Textdateien sowie ins XML-Format (-oX). Die XML-Dateien bieten den Vorteil, dass sie sich später mit anderen Programmen sehr gut auswerten lassen. Daneben kennt Nmap noch das Format ScRipT KIdd3 (-oS), das sich an eine eher spezielle Zielgruppe richtet (Abbildung 2).
Untersucht Nmap große Netzwerke und prüft dabei vielleicht auch noch UDP-Ports, kann das sehr lange dauern. Aber auch andere Faktoren beeinflussen die Dauer des Scans. Wird beispielsweise ein Host während eines Scan-Vorgangs ausgeschaltet, versucht Nmap trotzdem noch, alle Ports abzufragen. Das kann dazu führen, dass es die meiste Zeit des Scans für einige wenige Rechner aufwendet. Mit dem Schalter --host-timeout 10s weisen Sie das Tool an, sich nach der angegebenen Zeitspanne nicht weiter mit einem Host zu beschäftigen. So prüft Nmap mit dem Befehl:
# nmap -p- --host-timeout 120s -O -sV -oX nmap.xml 192.168.x1.1/24
zwar alle Rechner im Netzwerk, die zum Zeitpunkt des Aufrufs eingeschaltet waren, hält sich aber nicht länger als 120 Sekunden mit jedem Host auf. Statt in Sekunden (s) können Sie die Dauer auch in Millisekunden (ms) oder Minuten (m) angeben. Sofern die Ausgabe in eine Textdatei erfolgt, können Sie übrigens den Scan abbrechen und später mit nmap --resume Datei wieder fortsetzen. Bei XML-Dateien klappt das allerdings nicht. Da die XML-Dateien jedoch viele Möglichkeiten der alternativen Auswertung eröffnen, sollten sie die erste Wahl darstellen.
Entsprechend bietet es sich an, Nmap auf einem Rechner zu starten, der sowieso stets eingeschaltet bleibt. Handelt es sich dabei um einen entfernten Rechner, erweist sich wie so oft der Multiplexer Screen [3] als nützliches Werkzeug. Läuft Nmap in einer mit screen -S nmap-session gestarteten Sitzung, können Sie offene Konsolen nach einem Detach ([Strg]+[A],[D]) schließen. Später holen Sie die Sitzung dann mit screen -r nmap-session von einem anderen Rechner auf den Schirm und kontrollieren den Fortschritt. Gegenüber anderen Lösungen (etwa nohup) bietet die Screen-Sitzung den Vorteil, dass Nmap nicht von der Eingabe entkoppelt wird und Sie dem Portscanner so jederzeit durch Drücken der Eingabetaste entlocken können, wann der Scan voraussichtlich abgeschlossen ist (Abbildung 3).
Abbildung 3: Wie lange ein Scanvorgang voraussichtlich noch dauert, verrät ein Druck auf die Eingabetaste.
Zenmap
Die grafische Oberfläche Zenmap kann nicht nur Portscans via Nmap starten, sondern lässt sich auch dazu nutzen, die Ergebnisse eingängig darzustellen und bei deren Auswertung zu helfen. So können Sie zwei zu verschiedenen Zeitpunkten als XML gespeicherte Scans vergleichen. Ein auf der Konsole ausgeführtes ndiff scan1.xml scan2.xml zeigt zwar alle relevanten Informationen, aber in Zenmap gestaltet sich der Vergleich ein wenig komfortabler und übersichtlicher (Abbildung 4).

Abbildung 4: Welche Rechner laufen nachts und welche am Tag? Zwei Scans und ein Ndiff erleichtern die Auswertung.
Abbildung 5 zeigt die Topographie des untersuchten Netzwerks, eine weitere Nmap-Spezialität. Alle Rechner scharen sich um einen Switch. Kreise zeigen an, dass es sich um einen “normalen” Rechner im Netzwerk handelt, etwa einen Desktop, Server oder auch Drucker. Quadrate symbolisieren Netzwerkgeräte wie Switches, Router oder Access Points.
Die Größe und Farbe des Symbols sagt etwas über die offenen Ports aus: Grün dargestellte Geräte weisen drei offene Ports auf, in Gelb angezeigte zwischen drei und sechs, die Farbe Rot steht für mehr als sechs offene Ports. Klicken Sie einen Knoten an, lassen sich zahlreiche Informationen zu diesem Host einblenden. In Abbildung 5 sieht die Topographie sehr symmetrisch aus – das ändert sich, wenn Sie Rechner an verschiedenen Standorten über mehrere Ecken scannen.
Klar verständliche Informationen erhalten Sie auch, sobald Sie eines der Icons in der linken Spalte anklicken und den Reiter Rechner-Details aktivieren. Zwei große Icons zeigen an, ob es sich um einen Computer (offene Windows-Fenster, ein grinsendes Mac-Gesicht, Linux-Pinguine) oder ein Peripheriegerät (Monitor) handelt. Dem zweiten Bildchen lässt sich auf den ersten Blick entnehmen, wie viele Ports offen stehen. Ein Safe steht für maximal zwei offene Ports, eine Schatzkiste für drei oder vier, einen Karton für fünf oder sechs. Für sieben und acht offene Ports zeigt Nmap einen Stinkekäse, für alles darüber dann eine Bombe (Abbildung 6).
Auf den zweiten Blick lassen sich den Informationen auch Laufzeit, Rechnernamen und Betriebssysteme entnehmen, sofern beim Scan die entsprechenden Optionen gesetzt waren. Über Filter machen Sie schnell Kandidaten ausfindig, die Angreifern als potentielle Einfallstore dienen könnten, etwa Rechner mit alten Betriebssystemen oder anfälligen Services (Abbildung 7).
Scripting Engine
Für genauere Untersuchungen bringt Nmap seit Version 4.5 die Nmap Scripting Engine NSE mit. Mit ihr und den aktuell über 430 in LUA implementierten, in verschiedene Kategorien gegliederten NSE-Skripts entlocken Sie einzelnen Hosts viele zusätzliche Details (siehe Tabelle “NSE-Skripts – Auswahl”). Wozu die einzelnen Skripts taugen, finden Sie mit dem Befehl nmap --script-help "*" heraus. Ersetzen Sie das Platzhalter-Sternchen durch einen Kategorie- beziehungsweise Skript-Namen, erhalten Sie Informationen nur zu den zugehörigen Skripts.
NSE-Skripts – Auswahl
| Name | Zweck |
|---|---|
auth |
Authentifizierung umgehen |
brute |
Brute-Force-Attacke |
dos |
Denial-of-Service-Test |
discovery |
Freigaben und Webseiten abrufen |
fuzzer |
Server mit unerwarteten Eingaben attackieren |
vuln |
bekannte Schwachstellen überprüfen |
Um ein oder mehrere Skripte gegen einen oder mehrere Hosts auszuführen, setzen Sie den den Befehl nmap --script Name ab, wobei der Name sich auf ein Skript, eine ganze Kategorie, ein Verzeichnis mit Skripten oder einen regulären Ausdruck beziehen kann. Einige Skripte erfordern noch zusätzliche Parameter, die Sie Nmap via --script-args Parameter übergeben.
So versucht der Befehl nmap --script http-enum Ziel beispielsweise, alle interessanten URLs zu ermitteln, die der Zielhost anbietet (Abbildung 8). Mittels nmap -sV -O --script vuln Ziel lassen Sie sämtliche Skripte der Kategorie vuln auf jeden Host des Netzwerks los. Das ersetzt zwar keine sorgfältige Überprüfung, deckt aber gängige Schwachstellen sehr schnell auf.

http-enum fördert in Windeseile interessante Seiten auf Webservern zutage.” width=”300″ height=”151″ />
Abbildung 8: Das Scripthttp-enum fördert in Windeseile interessante Seiten auf Webservern zutage. Neben den mit Nmap bereits mitgelieferten NSE-Skripts finden sich weitere in der Nmap-Entwickler-Liste [4] oder auf den Seiten einzelner Entwickler. Diese kopieren Sie bei Bedarf in Nmaps Skript-Verzeichnis und binden sie anschließend mit nmap --script-updatedb in den Portscanner ein.
Nmap-Datenbanken speisen
Nmaps identifiziert Betriebssysteme und Dienste anhand von Datenbanken, die seit langer Zeit gefüttert werden. Entsprechend umfangreich fallen sie denn auch aus: Zu Redaktionsschluss gab es rund 3050 Fingerprints für Betriebssysteme und knapp 8600 für Dienste. Dennoch kann es vorkommen, dass Nmap einen Dienst oder ein OS nicht oder zumindest nicht korrekt erkennt.
Hier sind die Nmap-Entwickler auf die Mithilfe der Nutzer angewiesen, die solche Fälle melden sollten. Der Autor dieses Artikels nutzt Nmap seit mehreren Jahren, hatte aber nur wenige Male die Gelegenheit, einen Beitrag über den Nmap Fingerprint Submitter [5] einzureichen. Listing 2 zeigt einen beispielhaften Fingerprint, der ein Kandidat für die Datenbank wäre.
Listing 2
SF-Port21-TCP:V=3.40PVT16%D=9/6%Time=3F5A961C%r(NULL,3F,"220\x20stage\x20F SF:TP\x20server\x20\(Version\x202\.1WU\(1\)\+SCO-2\.6\.1\+-sec\)\x20ready\ SF:.\r\n")%r(GenericLines,81,"220\x20stage\x20FTP\x20server\x20\(Version\x SF:202\.1WU\(1\)\+SCO-2\.6\.1\+-sec\)\x20ready\.\r\n500\x20'':\x20command\ SF:x20not\x20understood\.\r\n500\x20'':\x20command\x20not\x20understood\.\ SF:r\n");
Fazit
Mit Nmap erhalten Sie ein sehr leistungsfähiges Werkzeug, dessen Funktionsumfang weit über den eines gewöhnlichen Portscanners hinausgeht. Die Software unterstützt bereits IPv6 und liefert nicht nur simple Hinweise, ob und welche Ports offen stehen, sondern stellt auch fest, welche Dienste und Betriebssysteme genau auf den untersuchten Rechnern laufen.
Neben TCP-Ports lassen sich auch UDP-Ports abfragen. Es gibt eine Reihe Ping-Verfahren, die auch mit Firewalls Erfolg bescheren. Zusätzliche Tricks wie mit zufälligen Zeichen gefüllte Pakete können ebenfalls helfen, Firewalls, IDS und IPS zu überlisten. Eine weitere Stärke von Nmap stellt die Scripting Engine dar, mit der sich viele Arbeitsschritte automatisieren lassen. Analysieren Sie des Öfteren Netzwerke, lohnt es sich, die sehr gute und umfangreiche Nmap-Dokumentation zu lesen, die neben vielen Beispielen auch viel Hintergrundwissen bietet.
Bevor Sie allerdings fremde Hosts und Netze ausführlich unter die Lupe nehmen, müssen Sie auf jeden Fall die Zustimmung der Betreiber einholen. Anderenfalls fühlen diese sich zurecht angegriffen, was zu unangenehmen juristischen Konsequenzen führen kann. Zum Üben sollten Sie sich daher auf das heimische Netzwerk beschränken – oder den vom Nmap angebotenen Übungshost Scanme [6] nutzen. Hier dürfen Sie nach Lust und Laune Pakete generieren, Scans absetzen und mitgelieferte wie selbst entwickelte Skripts testen.
Buchpaket gewinnen: Nagios und Bacula
Wenn Sie als Administrator für Netzwerküberwachung, Datensicherung und Ausfallsicherheit verantwortlich sind, kennen Sie sicher nicht nur Nmap, sondern auch die beiden mächtigen freien Tools Nagios und Bacula.
Zu letzteren offeriert Open Source Press derzeit ein günstiges Buchpaket mit den Titeln “Nagios: System- und Netzwerk-Monitoring ” sowie “Bacula: Backup-Strategien und -Lösungen im Netzwerk” (http://www.opensourcepress.de/baculaundnagios). Die beiden Standardwerke mit insgesamt fast 1400 Seiten Umfang kosten im Bundle nur 69,90 Euro, statt 94,80 Euro beim Einzelkauf.
Drei der Buchpakete hat uns Open-Source-Press freundlicherweise für eine Verlosung zur Verfügung gestellt. Möchten Sie eines gewinnen, schreiben Sie einfach eine kurze Mail mit dem Betreff Nagios+Bacula an redaktion@linux-user.de und nennen uns darin den Namen und Nick des Nmap-Hauptentwicklers.
Infos
[1] Nmap: http://nmap.org
[2] Nmap-Quellcode: http://nmap.org/download.html
[3] Screen: http://www.gnu.org/software/screen/
[4] Nmap-Entwickler-Liste: http://seclists.org/nmap-dev/
[5] Nmap Fingerprint Submitter: http://insecure.org/cgi-bin/submit.cgi
[6] Nmap Scanme: http://scanme.nmap.org











