.\" This definition swiped from the gcc(1) man page .de Sp .if n .sp .if t .sp 0.4 .. .TH NMAP 1 .SH NAME nmap - Auswertungstool fuer Netzwerke und Security Scanner .SH SYNTAX .B nmap [Scan-Typ(en)] [Optionen] .SH BESCHREIBUNG .I Nmap wurde entwickelt, um Systemadministratoren und kuriosen Individuen die Moeglichkeit zu geben, ansprechbare Systeme und die durch sie bereitgestellten Dienste in grossen Netzwerken zu identifizieren. .I nmap unterstuetzt eine Vielzahl verschiedener Scanning-Techniken, wie zum Beispiel UDP, TCP connect(), TCP SYN (half open), FTP-Proxy (bounce attack), Reverse-ident, ICMP (Ping-Suchlauf), FIN, ACK-Suchlauf, Xmas-Tree, SYN-Suchlauf, IP-Protocol und Null-Scan. Siehe Absatz .I Scan-Typen fuer mehr Informationen. Ebenso ermoeglicht nmap eine Vielzahl von zusaetzlichen Moeglichkeiten, wie das Erkennen von Betriebssystemen mittels TCP/IP-Fingerprinting, Stealth-Scanning, dynamische Verzoegerungen und Uebertragungswiederholungs-Berechnungen, paralleles Scanning, Entdecken abgeschalteter Systeme mittels parallelem Scanning, Decoy-Scanning, entdecken von Port-Filtering, direktes RPC-Scanning (ohne Portmapper), fragmentiertes Scanning sowie flexible Ziel und Port Spezifizierung. .PP Ein Grossteil der Arbeit wurde in die Moeglichkeiten fuer non-root Benutzer investiert. Leider benoetigen viele exotische Techniken (z.B. die Kernel-nahen raw sockets) root-Privilegien. Aus diesem Grund sollte nmap stets als root genutzt werden, sofern dies moeglich ist (natuerlich kein setuid root). .PP Das Resultat eines nmap-Durchlaufs ist normalerweise eine Liste saemtlicher interessanter Ports der gescannten Geraete (falls vorhanden). Sofern eine Zuweisung stattfinden kann, benennt nmap die well-known Ports direkt mit ihrem Service-Namen, Portnummer, Status und Protokoll. Der Status ist entweder 'open', 'filtered' oder 'unfiltered'. Open (dt. offen) bedeutet, dass das Zielsystem auf diesem Port Verbindungen anzunehmen in der Lage ist. Filtered (dt. gefiltert) weist darauf hin, dass ein dediziertes Firewall-System, TCP/IP-Filter oder Netzwerk-Element die Arbeit von nmap behindert und somit keine verlaesslichen Rueckschluesse gemacht werden koennen. Unfiltered (dt. ungefiltert) heisst, dass nmap den Port kennt, jedoch beim Zugriff keinerlei Filter-Mechanismen ausgemacht werden konnten. Der ungefilterte Status wird in den meisten aller Faelle vorhanden sein, weshalb ein solcher nur immer dann ausgwiesen wird, wenn die meisten der gescannten Ports gefiltert (engl. filtered) sind. .PP Jenachdem, welche Optionen angewandt wurden, ist nmap in der Lage Auskunft ueber die folgenden Charakteristiken des Zielsystems zu geben: Genutztes Betriebssystem, TCP-Sequenznummern, Benutzername der an die Ports gebundene Software, DNS-Name, ob es sich um ein Smurf-System handelt und viele mehr. .SH OPTIONEN Das Zusammenspiel verschiedener Optionen ist immer dann moeglich, wenn dies auch Sinn macht. Einige Parameter koennen nur in Verbindung mit spezifischen Scan-Methoden genutzt werden. .I nmap versucht unlogische und nicht unterstuetzte Kombinationen von Parametern abzufangen und den Benutzer entsprechend zu warnen. .Sp Falls Sie ungeduldig sind, koennen Sie den Abschnitt .I Beispiele ueberspringen. Darin werden typische Befehlseingaben gezeigt. Ebenso kann .B nmap -h ausgefuehrt werden, um eine kurze Optionsreferenz ausgeben zu lassen. .TP .B SCAN-TYPEN .TP .B -sS TCP SYN-Scan: Diese Technik wird oft als "halb-offen" (engl. "half-open") bezeichnet, da keine volle TCP-Verbindung zustande kommt. Der Scanner schickt ein TCP-Datagramm mit gesetzter SYN-Flagge an das Zielsystem, so wie dies im Rahmen des Drei-Wege-Handschlags von TCP normalerweise auch der Fall ist. Nun wird auf eine positive Rueckmeldung des Zielsystems gewartet. Kommt ein Paket mit gesetzter SYN/ACK-Flagge zurueck, so wird der Zielport als im Status LISTENING (dt. abhoerend) identifiziert. Im Gegenzug deutet ein RST-Datangramm auf einen geschlossenen Port (engl. closed) hin. Wird ein SYN/ACK-Datagramm entgegengenommen, schickt nmap (bzw. der Betriebssystem-Kernel) automatisch ein RST zurueck, um den Verbindungsaufbau zu abzubrechen. Der primaere Vorteil dieser Vorgehensweise ist, dass viele Systeme solcherlei Zugriffe nicht protokollieren (Die meisten Applikationen interessieren sich nur fuer vollstaendig etablierte Verbindungen). Leider setzt diese Scan-Technik root-Privilegien voraus, da eine Generierung verhaeltnismaessig exotischer Paket-Sequenzen von Noeten ist. Dies ist die standardmaessige Scan-Methode fuer priviligierte Benutzer. .TP .B -sT TCP connect()-Scan: Dies ist die klassische Form des TCP-Portscannings. Der connect()-System-Call, der das Betriebssystem zur Verfuegung stellt, wird immer dann genutzt, wenn eine Verbindung zum Port eines Zielsystems hergestellt werden soll. Befindet sich der Zielport im Status LISTENING, so wird der connect()-Zugriff erfolgreich ausfallen. Der entscheidende Vorteil dieser Methode ist, dass keine erweiterten Rechte zur Durchfuehrung erforderlich sind. Jeder Benutzer der meisten UNIX-Systeme ist in der Lage solcherlei Zugriffe durchzufuehren. .Sp Diese Scan-Technik ist einfach zu entdecken und wird mit groesster Wahrscheinlichkeit in den Protokoll-Dateien des Zielsystems auftauchen. Dies ist der standardmaessig aktivierte Scan-Typ fuer unprivilegierte Anwender. .TP .B -sF -sX -sN Stealth FIN-, Xmas-Tree- oder Null-Scan-Modis: Es gibt Momente, wo SYN-Scans nicht heimlich genug ausfallen. Einige Firewall-Systeme (z.B. Packet-Filter) sind in der Lage verdaechtige SYN-Aktivitaeten zu erkennen; ebenso koennen Programme wie Synlogger oder Courtney die SYN-Portscans als solche ausweisen. Diese erweiterten Scan-Techniken koennen somit in manchen Faellen ungehindert die gewuenschten Resultate liefern. .Sp Die Idee ist, dass geschlossene Ports auf solcherlei Zugriffe mit einem RST-Datagramm antworten muessten, waehrend ansprechbare Ports die Anfragen ignorieren sollten (siehe RFC 793, S. 64). Der FIN-Scan nutzt ein TCP-Datagramm mit gesetzter FIN-Flagge, waehrend der Xmas-Tree-Scan die TCP-Flaggen FIN, URG und PSH aktiviert. Der Null-Scan schaltet alle optionalen Flags ab. Leider ignoriert einmal mehr Microsoft die gaengigen Standards und reagiert auf die exotischen Scan-Techniken ganz unerwartet. Dies bedeutet, dass diese Scanning-Methoden nicht gegen Windows 9x, ME, NT, 2000 und XP funktionieren. Auf der anderen Seite ist dies natuerlich hervorragend, wenn es um das Identifizieren der TCP/IP-Implementierung von Microsoft geht: Findet einer dieser Scans einen offenen Port, so kann davon ausgegangen werden, dass es sich beim Zielsystem nicht um ein Windows handelt - Im Gegenzug deuten unrealistisch viele offene Ports auf eine Windows-Maschine hin. Es gilt sich jedoch noch die Meinung einer klassischen Scan-Methode (z.B. SYN) einzuholen. Es gibt noch einige andere Betriebssysteme, die sich aehnlich demjenigen von Microsoft verhalten. Dies sind zum Beispiel Cisco, BSDI, HP/UX, MVS und IRIX. All diese retournieren ein Reset, auch wenn es sich um einen ansprechbaren Port handelt. Mittlerweile ist diese knifflige Unterscheidungs-Arbeit mittels exotischer Scanning-Techniken eher weniger wichtig, da nmap eine erweiterte Methode fuer das Erkennen des eingesetzten Betriebssystems mitbringt. .TP .B -sP Ping-Scanning: Manchmal ist es lediglich gefragt, welche Hosts in einem Netzwerk aktiv sind. nmap kann diese Frage beantworten, indem eine ICMP echo request-Anfrage an jede IP-Adresse im spezifizierten Netzwerk geschickt wird. Hosts, die mit einer ICMP echo reply antworten, koennen als aktiv ausgewiesen werden. Viele gewissenhafte Firewall- und Systemadministratoren filtern bzw. verwerfen unnoetigen ICMP-Verkehr. nmap greift sodann auf eine andere Technik zurueck. Es wird ein TCP-Datagramm mit gesetzter ACK-Flagge an einen potentiell offenen Port des Zielsystems geschickt (standardmaessig TCP-Port 80). Wird ein RST zurueckgeschickt, so ist das Zielsystem vorhanden und ansprechbar. Eine dritte Technik greift auf ein SYN-Datagramm zurueck, das auf ein RST oder SYN/ACK wartet. Alle non-root Benutzer fuehren einen connect()-Zugriff durch. .Sp Standardmaessig (bei root-Benutzern) fuehrt nmap beides - ICMP- und ACK-Technik - parallel durch. Dies kann durch das Heranziehen der spaeter noch detaillierter beschriebenen Option .B -P geaendert werden. .Sp Wichtig ist zu wissen, dass der Ping-Zugriff standardmaessig stets erfolgt. Abhaengig der Erreichbarkeit eines Systems wird ein solches dann gescannt. Benutzen Sie diese Option lediglich dann, wenn es um das Durchfuehren eines Ping-Suchlaufs ( .B ohne Portscan) geht. .TP .B -sU UDP-Scans: Diese Methode wird stets dann herangezogen, wenn es um das Identifizieren der offenen UDP-Ports (siehe RFC 768) eines Systems geht. Diese Technik basiert darauf, dass ein UDP-Datagramm mit 0 Byte an Nutzdaten an jeden Port des Zielsystems geschickt wird. Erhalten wir eine ICMP port unreachable-Nachricht, so ist der Zielport geschlossen. Andererseits handelt es sich um einen offenen Port. .Sp Einige Leute denken, dass UDP-Scanning sinnlos ist. Ich moechte in diesem Zusammenhang auf die Luecke in Solaris' rpcbind hinweisen. rpcbind kann an einem undokumentierten UDP-Port ueber 32770 gefunden werden. Bei diesem Angriff und der vorangehenden Auswertung ist es sodann zu einem hohen Grad irrelevant, ob Port 111 durch eine Firewall blockiert wird oder nicht. Ebenso existiert das populaere, von cDc entwickelte Backdoor namens Back Orifice, das durch einen frei waehlbaren UDP-Port Windows-Maschinen kontrollieren laesst. Und nicht zu vergessen die vielen potentiell verwundbaren Dienste, die auf UDP zurueckgreifen: SNMP, TFTP, NFS, etc. .Sp Traurigerweise ist UDP-Scanning in den meisten Faellen schmerzhaft langsam, seitdem viele Betriebssystem-Entwickler der Empfehlung von RFC 1812 (Absatz 4.3.2.8) nachgekommen sind, die Anzahl ausgehender ICMP-Fehlernachrichten zu limitieren. Zum Beispiel definiert der Linux-Kernel (in net/ipv4/icmp.h) die Anzahl ausgehender ICMP destination unreachable-Fehlermeldungen auf 80 fuer 4 Sekunden, mit einer 1/4 Sekunde Zusatz fuer jeden Uebertritt. Solaris weist einiges striktere Limitierungen auf (2 Nachrichten pro Sekunde), weshalb ein UDP-Portscan gegen ein Solaris-System sehr lange dauert. .I nmap ist in der Lage solcherlei Limitierungen zu erkennen und mit einem dynamischen Verlangsamen der Geschwindigkeit zu reagieren. Dies verhindert das Verstopfen des Netzwerks mit unnoetigen Paketen, die sowieso vom Zielsystem ignoriert werden wuerden. .Sp Einmal mehr typisch, ignoriert Microsoft die Empfehlungen des RFCs, weshalb eine Einschraenkung ausgehender ICMP-Fehlermeldungen gaenzlich bei der TCP/IP-Implementierung auf Windows 9x und NT fehlt. Das scannen saemtlicher UDP-Ports auf einer Windows-Maschine ist somit kein groesseres Problem. .TP .B -sO IP protocol-Scans: Diese Methode kommt dann zum Tragen, wenn herausgefunden werden will, welche IP-Protokolle vom Zielsystem unterstuetzt werden. Diese Technik basiert darauf, dass fuer jedes IP-Protokoll ein RAW IP-Paket mit fehlendem Protokoll-Header an das Zielsystem geschickt wird. Erhalten wir eine ICMP protocol unreachable-Fehlermeldung, so koennen wir davon ausgehen, dass das besagte Protokoll nicht unterstuetzt wird. Faellt das Resultat anders aus, kann mit einer Protokoll-Unterstuetzung gerechnet werden. Es ist wichtig zu bemerken, dass einige Betriebssysteme (z.B. AIX, HP-UX und Digital UNIX) und Firewall-Loesungen auf das Versenden der ICMP protocol unreachable-Fehlermeldungen gaenzlich verzichten. Das Resultat eines solchen Verhaltens ist die durch nmap generierte Ausgabe, dass saemtliche Protokolle "offen" sind. .Sp Aufgrund dessen, dass diese Scan-Methode in ihren Grundzuegen auf den Prinzipien des UDP-Portscannings aufbaut, spielt die Rate der potentiell generierten ICMP-Fehlermeldungen eine beachtliche Wichtigkeit. Da das IP-Protokoll Feld nur 8 Bits hat, muessen lediglich 256 Protokolle gescannt werden, was sich in einem angemessenen Zeitrahmen erledigen laesst. .TP .B -sI Idlescan: Diese erweiterte Scan-Technik ermoeglicht ein blindes Scannen der TCP-Port eines Ziels (dies bedeutet, dass keinerlei Pakete mit der richtigen IP-Absenderadresse verschickt werden). Stattdessen wird eine einzigartige Attacke angewandt, die die Berechenbarkeit der IP Fragmentation ID eines Zombie-Hosts ausnutzt. Intrusion Detection-Systeme werden den Scan-Versuch dem spezifizierte Zombie-System zuschreiben (welches ansprechbar sein und bestimmte Kriterien erfuellen muss). Ich habe eine Publikation zu diesem Thema verfasst, die sich unter http://www.insecure.org/nmap/idlescan.html findet. .Sp Neben der vollkommenen Sicherheit, nicht direkt erkannt werden zu koennen, ermoeglicht dieser Scan-Typ das Erkennen von IP-basierenden Vertrauensbeziehungen zwischen Geraeten. Das Port-Listing zeigt die offenen Ports .I aus der Sicht des Zombie-Systems. Es ist sodann Moeglich das effektive Zielsystem durch verschiedene Zombies scannen zu lassen, die eine bestehende Vertrauensbeziehung haben (via Router- oder Packetfilter-Regeln). Ganz offensichtlich ist dies eine gewichtige Information, wenn es um das Priorisieren von Angriffszielen geht. Andererseits muessten Penetration Tester zuerst muehsam ein System kompromittieren, bis verlaesslich gesagt werden kann, ob ueberhaupt die erforderliche Vertrauensbeziehung besteht. .Sp Durch einen Doppelpunkt laesst sich die Portnummer des Zombiesystems definieren. Ohne diese Angabe waehlt nmap den Standardport, der auch bei TCP-Pings Verwendung findet (TCP-Port 80). .TP .B -sA ACK-Scan: Auf diese erweiterte Scan-Technik wird normalerweise immer dann zurueckgegriffen, wenn es um das Identifizieren eines Firewall-Regelwerks geht. Zusaetzlich kann diese Methode eine Determinierung des Vorhandenseins einer Stateful Inspection, die eingehende SYN-Pakete blockt, ermoeglichen. .Sp Dieser Scan-Typ schickt ein ACK-Paket (mit zufaellig gewaehlten Bestaetigungs-/Sequenznummern) an den spezifizierten Zielport. Kommt ein RST zurueck, wird der besagte Port als "unfiltered" (dt. ungefiltert) eingestuft. Erhalten wir keine Rueckantwort (oder kommt ein ICMP unreachable zurueck), so weist nmap den Port als "filtered" (dt. gefiltert) aus. Wichtig ist, dass .I nmap normalerweise keine "unfiltered" ausgibt. So sind .B keine Ports in der Ausgabe ein Indiz dafuer, dass alle Zugriffe durchgekommen sind (und ein RST verursacht haben). Dieser Scan wird die Ports nie in einem "open" (dt. offenen) Status zeigen. .TP .B -sW Window-Scan: Diese erweiterte Scan-Technik ist dem ACK-Scan sehr aehnlich. Ausser, dass hiermit manchmal auch offene, ungefilterte und gefilterte Ports durch eine Anomalie in der durch die Betriebssysteme gewaehlten TCP window size entdeckt werden koennen. Systeme, die gegen diese Attacke verwundbar sind, sind einige Versionen von AIX, Amiga, BeOS, BSDI, Cray, Tru64 UNIX, DG/UX, OpenVMS, Digital UNIX, FreeBSD, HP-UX, OS/2, IRIX, MacOS, NetBSD, OpenBSD, OpenStep, QNX, Rhapsody, SunOS 4.x, Ultrix, VAX and VxWorks. Siehe das Archiv der nmap-Hackers Mailingliste fuer eine vollstaendige Auflistung. .TP .B -sR RPC-Scan: Diese Methode arbeitet in Kombination mit den meisten moeglichen Scan-Typen von nmap zusammen. Jeder als offen identifizierte TCP- und UDP-Port wird mit einer Vielzahl von SunRPC-Nullkommandos ueberflutet, um eine Identifizierung von RPC-Ports vorzunehmen. Falls ein solcher gefunden wurde, wird der Programmname und die Version ausgelesen, sofern diese Information zur Verfuegung gestellt wird. Diese Vorgehensweise ist ebenso mit dem Heranziehen von 'rpcinfo -p' moeglich; besonders dann, wenn des Zielsystems Portmapper hinter einer restriktiven Firewall steht oder durch einen TCP-Wrapper geschuetzt wird. Decoy-Scans arbeiten zur Zeit nicht mit RPC-Scans zusammen. Irgendwann wird vielleicht Decoy-Scanning im Zusammenhang mit UDP-RPC-Scans moeglich sein. .TP .B -sL List-Scan: Diese simple Methode generiert eine Liste aller IP-Adressen und Hostnamen, ohne die Zielsysteme direkt anzusprechen (Ping oder Portscan). Eine Namensaufloesung ueber DNS findet stets statt, sofern dies nicht durch das Heranziehen von -n unterbunden wird. .TP .B -b FTP-Bounce Attacke: Ein interessantes "Feature" des File Transport Protocols (RFC 959) ist die Unterstuetzung von "Proxy"-FTP-Verbindungen. Mit anderen Worten ist es moeglich, sich von boese.com auf ziel.com zu verbinden und eine Datei ueberall hin zu schicken. Nun, dies hat wohl ausgezeichnet funktioniert, als 1985 das besagte RFC geschrieben wurde. In der heutigen Zeit ist es nicht mehr ohne weiteres Moeglich, sich auf fremde FTP-Server zu verbinden und nach Belieben Dateien zu versenden. *Hobbit* schrieb 1995 folgendes zu dieser Schwachstelle: "[This protocol flaw] can be used to post virtually untraceable mail and news, hammer on servers at various sites, fill up disks, try to hop firewalls, and generally be annoying and hard to track down at the same time." Bei dieser Scanning-Methode wird ein als Proxy fungierender FTP-Server genutzt, um die offenen Ports eines Zielsystems ausfindig zu machen. Beispielsweise kann dadurch zu einem hinter einer Firewall positionierten FTP-Server verbunden werden, um danach interne, durch das Firewall-Element gegen externe Zugriffe geschuetzte Ports (z.B. die NetBIOS-Ports) anzusprechen. Falls auf dem FTP-Server ein Verzeichnis existiert, bei dem sowohl Lese- als auch Schreibrechte vorhanden sind (z.B. /incoming), kann eine semi-manuelle Uebergabe von Daten an die Zielports durchgefuehrt werden (nmap nimmt einem diese Arbeit nicht ab). .Sp Das mit der Option '-b' uebergebene Argument, spezifiziert den als Proxy gewollten Host, wobei die standard URL-Notation gilt. Das Format lautet .I Benutzername:Passwort@Server:Port. Alles, ausser .I Server ist optional. Wie eine Determinierung der gegen diese Zugriffsform verwundbare Server vorgenommen werden kann, kann in meinem Artikel in .I Phrack 51 nachgelesen werden. Eine aktualisierte Version ist auf der .I nmap Webseite (http://www.insecure.org/nmap) verfuegbar. .TP .B GENERELLE OPTIONEN Keine der folgenden Optionen ist erforderlich. Einige von ihnen koennen jedoch nuetzlich sein. .TP .B -P0 Verhindert das Pingen eines Hosts, bevor er gescannt wird. Dies ermoeglicht das Scannen von Netzwerken, die keine ICMP echo requests (oder responses) aufgrund einer restriktiv konfigurierten Firewall zulassen. microsoft.com ist ein Beispiel fuer ein solches Netzwerk, in dem diese Funktion stets genutzt werden sollte. Gebrauchen Sie .B -P0 oder .B -PT80 wenn ein Portscan gegen microsoft.com durchgefuehrt werden soll. .TP .B -PT Benutzt einen TCP-Ping, um die Erreichbarkeit eines Hosts zu verifizieren. Anstatt ICMP echo request-Abfragen zu verschicken und auf die entsprechenden ICMP echo reply-Rueckantworten zu warten, wird auf ein TCP-Datagramm mit gesetzter ACK-Flagge gesetzt. Ansprechbare Systeme sollten mit einem RST antworten. Diese Funktion ist immer dann anzuwenden, wenn Systeme oder Netzwerke gescannt werden sollen, die keine Erreichbarkeitsueberpruefung mittels ICMP zulassen und trotzdem zuerst die Erreichbarkeit identifiziert werden soll. Bei non-root Benutzern wird connect() angewandt. Um den Zielport des Zugriffs zu spezifizieren, kann -PT herangezogen werden. Der Standardport ist einmal mehr TCP/80 (HTTP), da dieser eher selten durch einen Filter gedeckt wird. .TP .B -PS Diese Option benutzt fuer root-Benutzer SYN (Verbindungsanforderungen) anstatt ACK-Pakete. Ansprechbare Hosts sollten mit einem RST (oder in seltenen Faellen mit einem SYN/ACK) antworten. Das Setzen des Zielports kann auf die selbe Art wie beim zuvor erlaeuterten -PT umgesetzt werden. .TP .B -PI Diese Option nutzt einen klassischen Ping (ICMP echo request), um die Erreichbarkeit von Systemen und Broadcast-Adressen von Subnetzen zu identifizieren. Letztere sind extern erreichbare IP-Adressen, die eine Umwandlung zu einem internen Broadcast des Subnetzes durchfuehren. Solcherlei sollten verhindert werden, denn sie sind Voraussetzung fuer eine Reihe von Denial of Service-Attacken (Smurf ist die bekannteste Variante). .TP .B -PP Benutzt eine ICMP timestamp-Anfrage (Typ 13, Code 0), um ansprechbare Hosts zu finden. .TP .B -PM Das Gleiche wie .B -PI und .B -PP , ausser, dass eine ICMP address mask request (Typ 17, Code 0) zum Tragen kommt. .TP .B -PB Dies ist der standardmaessig gewaehlte Ping-Typus. Er benutzt beide Techniken, ACK ( .B -PT ) und ICMP echo requests ( .B -PI ), die jeweils parallel durchgefuehrt werden. Auf diese Weise koennen Firewall-Elemente ausgetrickst werden, die eine der beiden Protokolle (nicht beide) filtern. Der Zielport fuer den TCP-Zugriff kann auf die gleiche Weise gesetzt werden, wie im zuvor erklaerten -PT. .TP .B -O Diese Option aktiviert das Identifizieren des am Zielsystem eingesetzten Betriebssystems anhand des TCP/IP-Fingerabdrucks (engl. TCP/IP fingerprint). Es wird eine Anzahl spezifischer Tests umgesetzt, die das typische Verhalten der jeweiligen TCP/IP-Implementierungen erkennen koennen sollen. Die gegebenen Informationen stellen quasi einen 'Fingerabdruck' dar, der mit der Datenbank der bekannten Betriebssystem-Fingerabdrucke (die nmap-os-fingerprints Datei) verglichen wird. .Sp Falls nmap nicht in der Lage ist, eine mehr oder weniger eindeutige Identifikation des am Zielsystem eingesetzten Betriebssystems vorzunehmen und die gegebenen Bedingungen gut sind (mindestens ein ansprechbarer Port), gibt nmap eine URL aus, bei der neu gefundene Fingerprints eingesendet werden koennen. Dies setzt natuerlich voraus, dass Sie sich eindeutig im Klaren darueber sind, um was fuer ein Betriebssystem es sich handelt. Durch diesen Schritt koennen Sie aktiv an der Erweiterung der Datenbank mithelfen, wodurch sie attraktiver fuer saemtliche Benutzer wird. Falls Sie beim Einsenden des neuen Fingerabdrucks die IP-Adresse des Zielsystems mitangeben, muessen Sie damit rechnen, dass es von uns zu Ueberpruefungszwecken gescannt wird. .Sp Die Option -O aktiviert ebenso einige weitere Tests. Einer dieser ist das Messen der "Uptime". Hierzu wird das Timestamp-Feature von TCP genutzt (RFC 1323), um erkennen zu koennen, wann das Zielsystem das letzte mal neu gestartet wurde. Diese Funktionalitaet wird natuerlich nur dann genutzt werden koennen, wenn das Zielsystem diese Information auch entsprechend bereitstellt. .Sp Ein anderer Check, der durch die Option -O aktiviert wird, ist die Klassifizierung der Berechenbarkeit der TCP-Sequenznummer des Zielsystems. Das Ergebnis dieses Tests sagt aus, wie schwer es ist, eine bestehende Verbindung des Zielsystems zu uebernehmen. Dies ist dann nuetzlich, wenn auf IP-Adressen basierende Vertrauensbeziehungen (z.B. rlogin und Firewall-Filter) missbraucht oder die Quelle eines Angriffs versteckt werden sollen. Die mitgelieferte Difficulty-Number ist statistisch berechnet und kann jeweils leicht abweichen. Zusaetzlich wird in knappen Worten (z.B. "worthy challenge" or "trivial joke") der Zustand beschrieben. All dies wird nur dann ausgegeben, wenn der Parameter -v mitangegeben wurde. .Sp Wenn die Option -O zusammen mit dem Verbose-Modus (-v) genutzt wird, wird ebenso die Sequenz-Generierung der IPID ausgewiesen. Die meisten Geraete werden als "incremental" klassifiziert, was bedeutet, dass sie fuer jedes verschickte Paket eine Inkrementierung des ID-Felds im IP-Header vornehmen. Ein solches Verhalten macht sie verwundbar gegen eine Reihe verschiedener Auswertungs- und Spoofing-Attacken. .TP .B -6 Diese Option aktiviert die IPv6-Unterstuetzung. Saemtliche Ziele muessen mit IPv6 zurecht kommen, sofern diese Option genutzt werden soll. Das Spezifizieren der Ziele kann ganz normal ueber den DNS-Namen (AAAA record) oder IPv6-Adresse (z.B. 3ffe:501:4819:2000:210:f3ff:fe03:4d0) geschehen. Momentan sind TCP connect()- und Ping-Scans von nmap unterstuetzt. Falls UDP- oder andere Scan-Typen genutzt werden sollen, lohnt sich ein Blick auf http://nmap6.sourceforge.net/ . .TP .B -I Hiermit wird das TCP reverse ident-Scanning aktiviert. Wie Dave Goldsmith in einem Bugtraq-Posting aus dem Jahre 1996 publiziert hat, ermoeglicht das ident-Protokoll (RFC 1413) das Identifizieren des Besitzers eines TCP-Dienstes. So kann zum Beispiel eine Verbindung zum HTTP-Port des Zielsystems hergestellt werden, um danach mittels ident herauszufinden, ob der Webserver als root laeuft. Dies kann nur mit der Hilfe eines full-connect TCP-Portscans (-sT) geschehen. Wenn .B -I aktiviert wird, wird der identd des Zielsystems fuer jeden als offen identifizierten Port abgefragt. Logischerweise funktioniert diese ganze Prozedur nicht, wenn das Zielsystem keinen identd aktiv hat. .TP .B -f Diese Option erreicht, dass der durchgefuehrte SYN-, FIN-, Xmas- oder Null-Scan mit fragmentierten IP-Paketen arbeitet. Die Idee ist, dass der TCP-Header ueber mehrere Pakete verteilt werden soll, wodurch eine Inspizierung durch Firewall- oder Intrusion Detection-Systeme erschwert wird. Bei dieser Funktion ist Vorsicht geboten, denn viele der verbreiteten Netzwerkanwendungen kommen mit derlei Datenverkehr nicht klar. Beispielsweise erhielt ich bei meinem liebsten Sniffer ein segemtation fault, nachdem das erste 36-byte Fragment eingelesen wurde. Danach kam gar ein 24-byte Paket! Waehrend diese Methode keinen Erfolg bei Elementen verspricht, die eine Warteschlange fuer IP-Fragmente haben (wie dies mittels der Option CONFIG_IP_ALWAYS_DEFRAG unter Linux normalerweise der Fall ist), koennen andere Umgebungen den enormen Aufwand fuer eine solche Analyse nicht tragen, verzichten darauf und koennen deshalb ausgetrickst werden. .Sp Es bleibt zu bemerken, dass diese Option nicht auf allen Betriebssystemen einwandfrei genutzt werden kann. Es arbeitet ohne Zwischenfaelle auf meinem Linux, FreeBSD und OpenBSD; einige Leute berichten gar, dass es auch auf anderen *NIX funktioniert. .TP .B -v Verbose-Modus: Diese, eine sehr zu empfehlende Option, ermoeglicht eine erweiterte Ausgabe von Informationen. Eine doppelte Nutzung ergibt einen doppelt so grossen Effekt. Ebenso kann .B -d einige Male aktiviert werden, falls Sie wirklich vor einem ueberlasteten Bildschirm verrueckt werden wollen! .TP .B -h Diese handliche Funktion zeigt eine Kurzreferenz der nmap-Parameter. Wie Sie vielleicht gemerkt haben, handelt es sich bei dieser man-Page nicht unbedingt um eine 'handliche Kurzreferenz' :) .TP .B -oN Dies protokolliert die Resultate des Scans in einem normalen, fuer .B Menschen lesbaren Format in eine durch ein Argument spezifizierte Datei. .TP .B -oX Dies protokolliert die Resultate des Scans als .B XML in die durch ein Argument spezifizierte Datei. Dadurch koennen andere Programme unkompliziert die durch nmap generierten Informationen auswerten und verarbeiten. Durch das Argument '-' (ohne Anfuehrungszeichen) kann die Ausgabe auf stdout (fuer Pipeline-Verarbeitung, etc.) umgeleitet werden. In diesem Fall wird die normale Bildschirmausgabe unterdrueckt. Achtung vor Fehlermeldungen (diese werden nach wie vor nach stderr geschickt). Ebenso ist wichtig, dass '-v' in den meisten Faellen einige zusaetzliche Informationen gewaehrleisten koennen wird. Die Dokumententypendefinition (engl. Document Type Definition, abk. DTD), die fuer die XML-Ausgabe genutzt wird, steht unter http://www.insecure.org/nmap/data/nmap.dtd bereit. .TP .B -oG Dies protokolliert die Resultate des Scans in eine .B grepbare Form in eine durch ein Argument spezifizierte Datei. Dadurch wird ein simples Format angestrebt, welches alle Informationen auf einer Zeile ausgibt, weshalb ganz einfach ein grep fuer Ports, OS-Informationen oder IP-Adressen umgesetzt werden kann. Dieses einfache Format stellt meistens nicht so viele Informationen bereit, wie dies bei anderen Ausgabevarianten der Fall ist. Diese Form war die urspruenglich, fuer die Verarbeitung durch externe Programme vorgehesene Dokumentierungs-Ausgabe. Mittlerweile ist jedoch XML empfohlen (-oX). Einmal mehr kann die Angabe von '-' (ohne Anfuehrungszeichen) eine Ausgabe auf stdout erzwingen (fuer Pipeline-Verarbeitung, etc.). Auch hier wird die normale Ausgabe unterdrueckt. Ebenso werden Fehlermeldungen wie ueblich auf stderr ausgegeben. Und '-v' wird in den meisten Faellen einige zusaetzliche Informationen gewaehrleisten koennen. .TP .B -oA Dies veranlasst nmap in der Form ALLER wichtigen Formate (normal, grepbar und XML) zu protokollieren. Sie geben den Dateinamen an, wobei nmap die Erweiterungen in Form von basis.nmap, basis.gnmap und basis.xml automatisch anfuegen wird. .TP .B -oS Dies protokolliert die Resultate der Scans in einem fuer .B s| Ein Netzwerk-Scan, der durch das Druecken von Control-C unterbrochen wurde, kann durch diese Option reaktiviert werden. Der Protokoll-Dateiname muss entweder eine normale (-oN) oder durch Maschinen verarbeitbare (-oM) Scan-Protokoll-Datei sein. Die Angabe abweichender oder zusaetzlicher Optionen ist nicht moeglich - Sie werden vom abgebrochenen Scan uebernommen. nmap wird mit der zuletzt in der Protokoll-Datei erfolgreich gescannt vermerkten Maschine starten. .TP .B --append_output Weist nmap an, die Scan-Resultate an die spezifizierten Protokoll-Datei anzuhaengen, anstatt die besagten Dateien zu ueberschreiben. .TP .B -iL Liest die Ziel-Spezifizierung ZUERST von der angegebenen Datei ein, und erst danach von der Kommandozeileneingabe. Die Datei sollte eine Liste von Hosts oder Netzwerken enthalten, die jeweils durch ein Leer-, Tabulator- oder Neuezeile-Zeichen getrennt sind. Benutzen Sie einen Bindestrich (-) als .I Eingabe-Dateiname , falls Sie wollen, dass nmap die Zielspezifizierungen von stdin liest (wie im Zusammenhang mit einer Pipe). Siehe den Absatz .I Ziel-Definition fuer zusaetzliche Informationen zu der gueltigen Ausdrucksweise. .TP .B -iR Diese Option weist nmap an, zufaellig generierte Hosts zu scannen :). Dies hat kein Ende. Eine solche Funktion ist zum Beispiel fuer eine statistische Auswertung innerhalb des Internets nuetzlich. Falls Sie einmal wirklich sehr gelangweilt sein sollten, so versuchen Sie .I nmap -sS -iR -p 80 um Webserver-Systeme zu finden. .TP .B -p Diese Option spezifiziert, welche Ports gescannt werden sollen. Zum Beispiel wird '-p 23' lediglich einen Zugriff auf den Port 23 (Telnet) der Zielsysteme durchfuehren. '-p 20-30,139,60000-' scannt die Ports zwischen 20 und 30, Port 139 und alle Ports groesser als 60000. Standardmaessig werden saemtliche well-known Ports zwischen 1 und 1024 sowie alle in der services-Datei von nmap gelisteten Dienste gescannt. Fuer einen IP-Protokoll-Scan (-sO) kann mit dieser Option die zu scannende Protokoll-Nummer (0-255) angegeben werden. .Sp Werden gleichzeitig TCP- und UDP-Ports gescannt, so kann das jeweilige Protokoll durch ein vorangestelltes "T:" oder "U:" angewaehlt werden. Die mitgegebenen Ports gelten so lange fuer das spezifizierte Uebertragungsprotokoll, bis ein anderes angegeben wird. Zum Beispiel werden mit dem Argument "-p U:53,111,137,T:21-25,80,139,8080" die UDP-Ports 53, 111 und 137 sowie die TCP-Ports 21 bis 25, 80, 139 und 8080 gescannt. Wichtig ist, dass bei einem gleichzeitigen TCP- und UDP-Scan neben der Angabe von -sU mindestens eine TCP-Scan-Variante mitangegeben werden muss (zum Beispiel -sS, -sF oder -sT). Wird bei der Wahl der Zielports auf das spezifizieren eines Protokolls verzichtet, bezieht sich die Option auf saemtliche Uebertragungsprotokolle. .TP .B -F Schneller Scan-Modus (engl. Fast scan mode): Dies gibt an, dass Sie lediglich die in der services-Datei von nmap gelisteten Dienste scannen wollen (oder bei -sO die Protokolle der protocols-Datei). Selbstverstaendlich ist dies viel schneller, als saemtliche 65535 Ports eines Hosts zu ueberpruefen. .TP .B -D Veranlasst einen sogenannten Decoy-Scan (dt. Lockvolgel). Bei diesem sieht es so aus, als wuerde eine Reihe zusaetzlicher Hosts die Zielumgebung scannen. Ein Intrusion Detection-System wird zwischen 5 und 10 Portscans verschiedener IP-Adressen protokollieren, wobei ohne weiteres nicht genau festgestellt werden kann, welches System den Scan wirklich durchfuehrt. Waehrend diese Methode durch Router Path Traceing, Response-Dropping und andere "aktive" Mechanismen niedergeschlagen werden kann, ist es doch eine extrem effektive Technik, um die eigene IP-Adresse zu verstecken. .Sp Die jeweiligen Lockvoegel koennen durch ein Komma getrennt werden. Optional kann durch die Angabe von 'ME' (dt. mich) die eigene Position in der Zugriffsreihenfolge gewaehlt werden. Falls 'ME' in die sechste oder noch eine spaetere Position gesetzt wird, sind einige Portscan-Detektoren (z.B. Solar Designers scanlogd) nicht in der Lage, die richtige IP-Adresse anzuzeigen. Falls Sie 'ME' nicht mitangeben, wird nmap eine zufaellige Position bestimmen. .Sp Achtung, die als Decoys angegebenen Hosts sollten vom Zielsystem erreichbar sein. Andernfalls ist es durchaus moeglich, dass dieses durch einen SYN-Flood in die Knie gezwungen wird. Zudem ist es relativ einfach zu erkennen, welches System den Scan durchfuehrt, wenn nur dieses eine System wirklich im Netzwerk aktiv ist. Es lohnt sich IP-Adressen anstatt Hostnamen bei der Spezifizierung der Lockvogel-Systeme anzugeben (so ist keine Namensaufloesung noetig und die Protokoll-Eintraege in den Nameservern bleibt aus). .Sp Ebenso weisen einige (dumme) "Portscan-Detektoren" Firewalling-Funktionalitaet auf, und sie unterbinden die Verbindungsmoeglichkeit jeglichen Systems, das einen Portscan durchfuehrt. So kann es durchaus sein, dass die Verbindungsmoeglichkeit des Zielsystems zu den Lockvoegeln verhindert wird. Dies ist dann problematisch, wenn es sich um ein wichtiges System, wie zum Beispiel das Standard-Gateway, handelt. Also, es gilt vorsichtig im Umgang mit dieser Option zu sein. Die Moral dieser Geschichte ist, dass Portscan-Detektoren mit automatisierter Strike-Back Funktionalitaet keine gute Idee sind - Hinter jedem Portscan koennte sich ein Lockvogel verbergen! .Sp Die Lockvoegel werden im initialen Ping-Scan (ICMP, SYN oder ACK) und waehrend der eigentlichen Portscan-Phase verwendet. Ebenso finden sie beim Durchfuehren einer Betriebssystem-Erkennung ( .B -O ) Verwendung. .Sp Es bleibt zu sagen, dass zu viele Lockvoegel einen Scan verlangsamen und ineffizienter machen koennen. Ebenso filtern einige ISPs gespoofte Pakete heraus, obwohl dies zur Zeit die wenigsten machen. .TP .B -S Unter bestimmten Umstaenden ist .I nmap nicht in der Lage, Ihre Quell-IP-Adresse zu identifizieren ( .I nmap wird Ihnen dies mitteilen). In einer solchen Situation kann mit der Hilfe der Option -S die IP-Adresse (der gewuenschten Schnittstelle) festgelegt werden. .Sp Eine andere Moeglichkeit dieser Option ist die Quelle des Scans zu spoofen, so dass das Zielsystem glaubt, dass .B jemand anderes die Zugriffe durchfuehrt. Stellen Sie sich vor, dass eine Firma ploetzlich von ihrem Konkurrenten einen Scan verzeichnet! Dies ist nicht der Hauptnutzen dieser Option. Ich denke lediglich, dass diese Theorie einen guten Grund bereitstellt, nicht sofort jeden als Scanner zu beschimpfen, nur weil es scheint, dass von ihm ein Scan gestartet wurde. .TP .B -e Weist nmap an, ueber welche Schnittstelle die Daten verschickt und empfangen werden sollen. nmap sollte in der Lage sein diesen Umstand von sich aus zu erkennen. Falls dem nicht so ist, kann diese Option herangezogen werden. .TP .B -g Definiert den Quellport fuer die Scans. Einige naive Firewall-Implementierungen machen bei DNS (53) und FTP-DATA (20) eine Ausnahme und lassen solcherlei Verbindung entgegen der Bestimmungen im Regelwerk zu. Obschon dieser Umstand ganz einfach durch Angreifer ausgenutzt werden kann, um sich als FTP- oder DNS-System maskierend einen Vorteil zu verschaffen. Fuer einen UDP-Scan sollte 53 als erstes ausprobiert werden. Bei einem TCP-Scan bieten sich 20 und 53 an. Achtung, es handelt sich bei dieser Option lediglich um eine Anfrage, die nicht zwingend in jeder Situation von nmap umgesetzt werden will und kann. Zum Beispiel ist eine ISN-Analyse nicht von System:Port zu System:Port moeglich, so dass nmap eine dynamische Portzuweisung durchfuehrt, auch wenn anderes durch -g angegeben wurde. .Sp Seien Sie gewarnt, dass diese Option bei einigen Scan-Varianten Performance-Einbussen mit sich bringt. .TP .B --data_length Normalerweise verschickt nmap moeglichst kleine Pakete, die lediglich aus dem Header bestehen. So weisen TCP-Datagramme im Normalfall eine Laenge von 40 und ICMP echo request-Anfragen 28 Bytes auf. Diese Option weist nmap an, die verschickten Pakete um Null-Bytes zu verlaengern. Pakete zur Erkennung des Betriebssystens (-O) sind nicht betroffen. Ganz im Gegensatz zu Ping-Zugriffen und Portscan-Paketen. Dies verlangsamt natuerlich die Zugriffe unter Umstaenden - Aber ebenso kann es die Unauffaelligkeit des Scans erhoehen. .TP .B -n Sagt nmap, dass .B NIE reverse DNS-Aufloesungen von als aktiv identifizierten IP-Adressen durchgefuehrt werden sollen. Da DNS oft langsam ist, kann diese Option die Zugriffe beschleunigen. .TP .B -R Sagt nmap, dass .B IMMER reverse DNS-Aufloesungen von als Ziel spezifizierten IP-Adressen durchgefuehrt werden sollen. Dies wird im Normalfall nur immer dann durchgefuehrt, wenn ein Zielsystem als aktiv identifiziert werden konnte. .TP .B -r Sagt nmap, dass .B KEINE zufaellige Wahl beim Scannen der Ports gewuenscht ist. .TP .B --ttl