Ein kurzes Port-Scanning-Tutorial
Eines meiner Ziele bei der Entwicklung von Nmap ist es, die häufigste Benutzung einfach zu halten und gleichzeitig die Flexibilität für benutzerdefinierte und fortgeschrittene Scans zu bewahren. Dies wird mit der Befehlszeilenschnittstelle erreicht, indem Dutzende von Optionen angeboten werden, aber vernünftige Standardwerte gewählt werden, wenn sie nicht angegeben sind. Ein Neuling kann mit einem so einfachen Befehl wienmap <target>
beginnen, während fortgeschrittene Benutzer manchmal so viele Optionen angeben, dass sich ihre Terminalzeile überschlägt.
Ein ähnliches Gleichgewicht muss bei der Befehlsausgabe erreicht werden. Die wichtigsten Ergebnisse sollten auch dem gelegentlichen Benutzer auffallen, der nicht einmal die Manpage gelesen hat. Dennoch sollte die Ausgabe umfassend und übersichtlich genug sein, um professionellen Penetrationstestern zu genügen, die Nmap täglich gegen Tausende von Rechnern einsetzen. Benutzer, die klug genug sind, dieses Buch oder den Nmap-Quellcode zu lesen, profitieren von einer besseren Kontrolle über den Scanner und erhalten Einblicke in die Bedeutung der Nmap-Ausgaben.
Dieses Tutorial demonstriert einige übliche Nmap-Port-Scanszenarien und erklärt die Ausgaben. Das Ziel ist nicht, umfassend zu werden, sondern einfach neue Benutzer gut genug vertraut zu machen, um den Rest dieses Kapitels zu verstehen.
Der einfachste Nmap-Befehl ist einfach nmap selbst. Das gibt einen Spickzettel mit den üblichen Nmap-Optionen und der Syntax aus. Ein interessanterer Befehl ist nmap<target>
, der Folgendes tut:
-
Wandelt
<target>
einen Hostnamen mit Hilfe von DNS in eine IPv4-Adresse um. Wenn statt eines Hostnamens eine IP-Adresse angegeben wird, wird diese Suche übersprungen. -
Pingt den Host standardmäßig mit einem ICMP-Echo-Request-Paket und einem TCP-ACK-Paket an Port 80 an, um festzustellen, ob er aktiv ist und läuft. Wenn nicht, meldet Nmap diese Tatsache und beendet sich. Ich hätte
-Pn
angeben können, um diesen Test zu überspringen. Siehe Kapitel 3, Host Discovery („Ping-Scanning“). -
Wandelt die Ziel-IP-Adresse mit Hilfe einer Reverse-DNS-Abfrage in den Namen zurück. Aufgrund der Funktionsweise von DNS kann es sein, dass der umgekehrte Name nicht mit dem in der Befehlszeile angegebenen
<target>
identisch ist. Diese Abfrage kann mit der Option-n
übersprungen werden, um die Geschwindigkeit und Unauffälligkeit zu verbessern. -
Startet einen TCP-Port-Scan der beliebtesten 1.000 Ports, die in
nmap-services
aufgeführt sind. Normalerweise wird ein SYN-Stealth-Scan verwendet, aber für Nicht-Root-Unix-Benutzer, die nicht über die notwendigen Privilegien verfügen, um rohe Pakete zu senden, wird stattdessen ein Connect-Scan verwendet. -
Die Ergebnisse werden in einem normalen, für den Menschen lesbaren Format auf die Standardausgabe gedruckt und das Programm wird beendet. Andere Ausgabeformate und Speicherorte (Dateien) können angegeben werden, wie in Kapitel 13, Nmap-Ausgabeformate, beschrieben. Beispiel 4.2 zeigt die Ergebnisse, wenn scanme.nmap.org als
<target>
.
verwendet wirdBeispiel 4.2. Einfacher Scan: nmap scanme.nmap.org
# Starting Nmap ( http://nmap.org )Nmap scan report for scanme.nmap.org (64.13.134.52)Not shown: 994 filtered portsPORT STATE SERVICE22/tcp open ssh25/tcp closed smtp53/tcp open domain70/tcp closed gopher80/tcp open http113/tcp closed authNmap done: 1 IP address (1 host up) scanned in 4.99 seconds
Die erste Ausgabezeile in Beispiel 4.2 gibt einfach die URL zum Herunterladen von Nmap an. Die Zeit, zu der Nmap gestartet wurde, und die Versionsnummer werden normalerweise ebenfalls angegeben, aber in diesem Buch wurden diese Angaben aus Konsistenzgründen und zur Vermeidung von Zeilenumbrüchen generell entfernt.
Die nächste Zeile enthält die Ziel-IP-Adresse (in diesem Fall IPv4) und den umgekehrten DNS-Namen (auch als PTR-Record bekannt), falls er verfügbar ist. Nmap verspricht, die „interessanten Ports“ anzuzeigen, obwohl alle gescannten Ports berücksichtigt werden. Die Ports, die als besonders interessant angesehen werden, weil sie offen sind oder sich in einem seltenen Zustand für diesen Host befinden, werden einzeln aufgelistet. Wenn sich viele Ports in einem einzigen nicht-offenen Zustand befinden, werden sie als Standardzustand betrachtet und in einer einzigen Zeile zusammengefasst, um die Ergebnisse nicht mit Tausenden von uninteressanten Einträgen zu verwässern. In diesem Fall stellt Nmap fest, dass 994 Ports gefiltert sind.
Die Tabelle mit den interessanten Ports kommt als nächstes und liefert die Ergebnisse der Schlüsselsuche. Die Spalten variieren je nach den verwendeten Optionen, liefern aber in diesem Fall die Portnummer und das Protokoll, den Status und das Serviceprotokoll für jeden Port. Der Dienst ist hier nur eine Vermutung, die durch Nachschlagen des Ports in nmap-services
ermittelt wurde. Der Dienst würde als unknown
aufgeführt werden, wenn für einen der Ports kein Name in dieser Datei eingetragen wäre. Drei dieser Ports sind offen und drei sind geschlossen.
Schließlich meldet Nmap einige grundlegende Zeitstatistiken, bevor es sich beendet.
Diese Statistiken sind die Anzahl der angegebenen Ziele, die Anzahl der Ziele, bei denen der Ping-Scan festgestellt hat, dass sie aktiv sind, und die insgesamt benötigte Zeit.
Während dieser einfache Befehl oft alles ist, was man braucht, gehen fortgeschrittene Benutzer oft viel weiter. In Beispiel 4.3 wird der Scan mit vier Optionen modifiziert. -p0-
bittet Nmap, jeden möglichenTCP-Port zu scannen, -v
bittet Nmap, dabei ausführlich zu sein,-A
aktiviert aggressive Tests wie die Erkennung von entfernten Betriebssystemen, die Erkennung von Diensten/Versionen und die Nmap Scripting Engine(NSE). Schließlich ermöglicht -T4
eine aggressivere Zeitpolitik, um den Scan zu beschleunigen.
Beispiel 4.3. Komplexer: nmap -p0- -v -A -T4 scanme.nmap.org
# Starting Nmap ( http://nmap.org )Completed Ping Scan at 00:03, 0.01s elapsed (1 total hosts)Scanning scanme.nmap.org (64.13.134.52) Discovered open port 22/tcp on 64.13.134.52Discovered open port 53/tcp on 64.13.134.52Discovered open port 80/tcp on 64.13.134.52SYN Stealth Scan Timing: About 6.20% done; ETC: 00:11 (0:07:33 remaining)Completed SYN Stealth Scan at 00:10, 463.55s elapsed (65536 total ports)Completed Service scan at 00:10, 6.03s elapsed (3 services on 1 host)Initiating OS detection (try #1) against scanme.nmap.org (64.13.134.52)Initiating Traceroute at 00:1064.13.134.52: guessing hop distance at 9Completed SCRIPT ENGINE at 00:10, 4.04s elapsedHost scanme.nmap.org (64.13.134.52) appears to be up ... good.Nmap scan report for scanme.nmap.org (64.13.134.52)Not shown: 65530 filtered portsPORT STATE SERVICE VERSION22/tcp open ssh OpenSSH 4.3 (protocol 2.0)25/tcp closed smtp53/tcp open domain ISC BIND 9.3.470/tcp closed gopher80/tcp open http Apache httpd 2.2.2 ((Fedora))|_HTML title: Go ahead and ScanMe!113/tcp closed authDevice type: general purposeRunning: Linux 2.6.XOS details: Linux 2.6.20-1 (Fedora Core 5)Uptime guess: 2.457 days (since Thu Sep 18 13:13:24 2008)TCP Sequence Prediction: Difficulty=204 (Good luck!)IP ID Sequence Generation: All zerosTRACEROUTE (using port 80/tcp)HOP RTT ADDRESS9 10.36 metro0.sv.svcolo.com (208.185.168.173)10 10.29 scanme.nmap.org (64.13.134.52)Nmap done: 1 IP address (1 host up) scanned in 477.23 seconds Raw packets sent: 131432 (5.783MB) | Rcvd: 359 (14.964KB)
Nmap hat in Beispiel 4.3 die gewünschte Ausführlichkeit geliefert! Glücklicherweise ist die zusätzliche Ausgabe leicht zu verstehen. Die ersten 13 neuen Zeilen sind Laufzeitinformationen, die den Benutzer darüber informieren, was passiert, während er erwartungsvoll auf das Terminal starrt und auf gute Nachrichten hofft. Was eine gute Nachricht ist, hängt davon ab, ob es sich um einen Systemadministrator handelt, der Probleme beheben muss, um einen Pen-Tester, der über Probleme berichten muss, oder um einen Black-Hat-Cracker, der versucht, diese auszunutzen. Etwa ein Dutzend ähnlicher Zeilen wurden der Kürze halber entfernt. Die Zeile „discovered open port“ (entdeckter offener Port) informiert sofort über offene Ports, so dass sie schon vor Abschluss des Scans damit beginnen kann, sie zu öffnen. Die Zeile „Scan-Timing“ gibt eine Schätzung für den Abschluss des Scans an, so dass sie weiß, ob sie weiter auf den Bildschirm starren oder zu Mittag essen soll. Da die Netzwerkbedingungen (Latenz, Überlastung, Bandbreite usw.) und die Regeln für die Paketfilterung sehr unterschiedlich sind, können dieselben Scan-Optionen bei einem Host 30 Sekunden und bei einem anderen 45 Minuten in Anspruch nehmen. Wenn Sie während des Scannens eine aktuelle Zeitschätzung wünschen, drücken Sie einfach die Eingabetaste.
Die Port-Tabelle zeigt keine neuen Ports. Alle zusätzlich gescannten Ports befinden sich im gefilterten Zustand, wodurch sich die Gesamtzahl der gefilterten Ports von 994 auf 65.530 erhöht. Es gibt zwar keine neuen Ports im Einzelnachweis, aber die Einträge haben sich geändert. Eine neue Spalte VERSION
enthält den Anwendungsnamen und die Versionsangaben für den abhörenden Dienst. Dies stammt aus der Diensterkennung, einer der Funktionen, die mit der Option -A
aktiviert wurden. Ein weiteres Merkmal der Diensterkennung ist, dass alle Dienstprotokolle in der Spalte SERVICE
tatsächlich überprüft wurden. Beim vorigen Scan basierten sie auf der relativ schwachen Heuristik eines nmap-services
Portnummern-Lookups. Dieser Tabellen-Lookup war dieses Mal korrekt, aber das wird nicht immer der Fall sein.
Eine weitere Funktion, die durch -A
hinzugefügt wurde, ist die NmapScripting Engine, die in Kapitel 9, Nmap Scripting Engine, ausführlich behandelt wird. Das einzige hier gezeigte Skript ist HTMLtitle
. Es gibt Dutzende von anderen Skripten, aber keines davon lieferte nützliche Ergebnisse für diesen Rechner. Die Tracerout-Ergebnisse wurden auch von -A
hinzugefügt. Diese Option ist effizienter und leistungsfähiger als die meisten Traceroute-Programme, da die Tests parallel durchgeführt werden und Nmap die Scan-Ergebnisse verwendet, um einen günstigen Testtyp zu bestimmen (in diesem Fall TCP-Pakete an Port 80).
Die meisten der verbleibenden neuen Zeilen stammen von der Betriebssystemerkennung (ebenfalls durch -A
aktiviert), die in Kapitel 8, Entfernte Betriebssystemerkennung, ausführlich behandelt wird. Die letzte Zeile zeigt, dass all diese Zusatzinformationen ihren Preis hatten – der Scan dauerte fast 100 Mal länger als in Beispiel 4.2, „Simple scan: nmap scanme.nmap.org“ (477 Sekunden im Vergleich zu 5).