Nmap
Network Mapper (nmap)
- Nmap ist ein freier Portscanner zum Scannen und Auswerten von Hosts in einem Rechnernetz.[1]
- Der Name steht für Network Mapper.
- Ursprünglich für Linux entwickelt.
- Mit Einschränkungen auch für Windows-Systeme nutzbar (seit 2000).[2]
Netzwerke scannen
Was ist Network Scanning?
- Netzwerke scannen und analysieren
- angeschlossene und aktiven Systeme erkennen
- Details zu Diensten, Konfigurationen und Versionen bestimmen
- Netzwerk-Inventarisierung
- Dienste-Aktualisierungen prüfen
- Überwachung von Betriebszeiten, Hosts oder Diensten
Zenmap
- Neben der textbasierten Variante gibt es noch die grafische Benutzeroberfläche NmapFE zur komfortablen Einstellung von Nmap.
- Wurde mittlerweile durch die Zenmap[3] genannte GUI abgelöst.
Syntax
nmap [Scan Type(n)] [Optionen] {Ziel}
Einfacher Portscan
nmap ohne Optionen
- Es geht darum herauszufinden, ob ein Port offen ist, welche Anwendung dahinter läuft und ob dort Sicherheitslücken und Schwachstellen zu vermuten sind.
- Ein einfacher Port-Scanner wird alle Ports pauschal in zwei oder drei Zustände einteilen:
- offen,
- geschlossen,
- gefiltert (offen/geschlossen).
Bedeutung der Ausgabe
- Der Zustand "Offen" bedeutet, dass eine Anwendung oder ein Dienst bereit ist TCP-Verbindungen oder UDP-Pakete auf diesem Port anzunehmen.
- Um Kommunikationsverbindungen betreiben zu können, bedarf es offener Ports.
- Anzahl offener Ports begrenzen, um die Angriffsfläche so klein wie möglich zu halten.
- Offene Ports werden zusätzlich geschützt oder Verbindungsmöglichkeiten eingeschränkt.
- Der Zustand "Geschlossen" bedeutet, dass keine Anwendung und kein Dienst an diesem Port auf eingehende Datenpakete und Verbindungsversuche lauscht bzw. hört.
- Auf ihm sind keine Kommunikationsverbindungen möglich.
- Ein geschlossener Port ist nur so lange geschlossen, wie eine Anwendung auf diesen Port hört und Verbindungen und Pakete annimmt.
- Um offene, aber auch geschlossene Ports zu schützen, setzen Systemadministratoren einen Portfilter (Firewall) ein.
- So verhindert man z.B. die Verbindungsversuche durch Port-Scans.
- Ein Port-Scan soll nur den Zustand eines Ports ermitteln, aber keine echte Verbindung aufbauen.
- Weil er die dahinterliegende Anwendung nicht kennt, kann er nur Testpakete an einen Port schicken.
- Der Filter verhindert, dass diese Testpakete durchkommen.
- In der Regel werden diese Pakete verworfen.
- Dann kann für diesen Port weder der Status "offen" oder "geschlossen" gelten.
- Dafür gibt es den Zustand "gefiltert" oder "blockiert".
Ziele festlegen
- NMAP ist bei der Angabe des Scan-Ziels sehr flexibel.
- Das kann ein Domain-Name sein, eine IP-Adresse oder ein ganzes Subnetz.
Domain: www. XXX.XX IP-Adresse: 192.168.1.1 Subnetz: 192.168.1.1/24 Subnetz: 192.168.1.*
- Man sollte einen Port-Scan nicht auf ein ganzes Subnetz anwenden.
- Ein ganzes Subnetz zu scannen, kann sehr lange dauern, wenn die Hosts gefilterte Ports haben.
- Die Anzahl der Ports reicht von 1 bis 65.535.
- NMAP scannt standardmäßig nur etwa 1.000 der meistgenutzten Ports, die in der Datenbank "nmap-services" aufgelistet sind.
- Mit der Option "-F" (für engl. fast, dt. schnell) kann man den Port-Scan sogar auf die 100 meistgenutzten Ports beschränken.
- Interessante Ports scannen mit der Option "-p":
- Für den Port 22 verwendet man die Option "-p22".
- Für die Ports 22, 25 und 80 verwendet man die Option "-p22,25,80".
- Für die Ports von 1 bis 100 verwendet man die Option "-p-100".
- Für die Ports von 80 bis 88 verwendet man die Option "-p80-88".
- Für alle Ports über 60.000 verwendet man die Option "-p60000-".
- Alle Ports von 1 bis 65.535 scannen: Option "-p-".
Einzelne Rechner
- Der Zielbereich ist eine einzelne IP-Adresse
- Standardmäßig arbeitet Nmap mit IPv4 (es geht aber auch IPv6)
- Hier wurde ein Linux-PC von einem Windows-7-Rechner aus gescannt:
- nmap 172.16.24.102 (Nmap scan report for)
- Die IP-Adresse gehört also dem Linux-Rechner, den wir mit Nmap auf offene Ports hin überprüfen.
- Das Ergebnis:
- 997 Ports erkennt Nmap als geschlossen (closed ports)
- Drei Ports sind offen:
- Port 21 für FTP (open ftp)
- Port 80 für einen Webserver (open http) und
- Port 110 für POP3 (open pop3)
Netzwerkbereiche
Bereich auswählen
- Nmap betrachtet alles in der Kommandozeile, was keine Option (oder ein Argument einer Option) ist, als Bezeichnung eines Zielhosts.
- Der einfachste Fall ist die Beschreibung einer IP-Zieladresse oder eines Zielhostnamens zum Scannen.
- Manchmal möchten Sie ein ganzes Netzwerk benachbarter Hosts scannen.
- Dafür unterstützt Nmap Adressen im CIDR-Stil [extern:[4]].
- Sie können an eine IPv4-Adresse oder einen Hostnamen angefügt werden, und Nmap wird alle IP-Adressen scannen, bei denen die ersten <numbits> mit denen der gegebenen IP oder des gegebenen Hostnamens übereinstimmen.
- Z.B.: würde 192.168.10.0/24 die 256 Hosts zwischen 192.168.10.0 (binär: 1100.0000.1010.1000.0000.1010.0000.0000) und 192.168.10.255 (binär: 1100.0000.1010.1000.0000.1010.1111.1111, inklusive) scannen.
- 192.168.10.40/24 würde genau dieselben Ziele scannen.
- Dadurch, dass der Host
scanme.nmap.org
die IP-Adresse 64.13.134.52 hat, würde die Angabe
scanme.nmap.org/16
die 65.536 IP-Adressen zwischen 64.13.0.0 und 64.13.255.255 scannen.
- Der kleinste erlaubte Wert ist /0, der das gesamte Internet scannt.
- Der größte Wert ist /32 und scannt lediglich den Host mit angegebenem Namen oder IP-Adresse, da alle Adressen-Bits festgelegt sind.
Teilbereich auswählen
- Die CIDR-Notation ist kurz, aber nicht immer flexibel genug.
- So möchte man z.B. 192.168.0.0/16 scannen, aber IPs auslassen, die mit .0 oder .255 enden, weil sie als Unternetzwerk und Broadcast-Adressen benutzt werden können.
- Nmap unterstützt das in Form einer Oktett-Bereichsadressierung.
- Statt eine normale IP-Adresse anzugeben, kann man eine mit Kommata getrennte Liste von Zahlen oder Bereichen für jedes Oktett angeben.
- Z.B. überspringt 192.168.0-255.1-254 alle Adressen im Bereich, die mit .0 oder .255 enden, und 192.168.3-5,7.1 scannt die vier Adressen 192.168.3.1, 192.168.4.1, 192.168.5.1 und 192.168.7.1.
- Beide Bereichsgrenzen können weggelassen werden, die Standardwerte sind 0 für die linke und 255 für die rechte Grenze.
- Wenn Sie allein -benutzen, ist das identisch mit 0-255.
- Im ersten Oktett dann 0- benutzen, damit die Zielangabe nicht wie eine Kommandozeilenoption aussieht.
- Die Angabe 0-255.0-255.13.37 führt einen internetweiten Scan über alle IP-Adressen aus, die mit 13.37 enden.
- Diese Art von breiter Abtastung kann bei Internet-Umfragen und -Forschungen hilfreich sein.
IPv6
- IPv6-Adressen können nur durch ihre vollständige IPv6-Adresse oder ihren Hostnamen angegeben werden.
- CIDR und Oktettbereiche werden für IPv6 nicht unterstützt, weil sie selten nützlich sind.
Zielauswahl
- Auch wenn Ziele normalerweise in der Kommandozeile angegeben werden, gibt es auch die folgenden Optionen, um die Zielauswahl zu steuern:
-iL <inputfilename> (Eingabe aus einer Liste)
- Eine sehr lange Liste von Hosts in der Kommandozeile anzugeben ist oft sehr umständlich, kommt aber sehr häufig vor.
- Der DHCP-Server z.B. exportiert vielleicht eine Liste von 10.000 aktuellen Adresszuweisungen (engl. leases), die Sie scannen möchten.
- Möchte man alle IP-Adressen außer denjenigen scannen, um Hosts zu finden, die unautorisierte statische IP-Adressen benutzen.
- Die Liste der zu scannenden Hosts und übergibt deren Dateinamen als Argument zur Option -iL an Nmap.
- Die Einträge dürfen alle Formate haben, die Nmap auf der Kommandozeile akzeptiert (IP-Adresse, Hostname, CIDR, IPv6 oder Oktettbereiche).
- Alle Einträge müssen durch ein oder mehrere Leerzeichen, Tabulatoren oder Zeilenumbrüche getrennt sein.
- Wenn man einen Bindestrich (-) als Dateinamen angibt, liest Nmap die Hosts von der Standardeingabe statt aus einer normalen Datei.
-iR <num hosts> (zufällige Auswahl von Zielen)
Internetumfragen
- Für internetweite Umfragen und andere Forschungsaktivitäten möchte man Ziele vielleicht zufällig auswählen.
- Das kann man mit der Option -iR, die als Argument die Anzahl der zu erzeugenden IPs annimmt.
- Nmap lässt automatisch bestimmte unerwünschte IPs aus, wie solche in privaten, Multicast- oder unbesetzten Adressbereichen.
- Für einen endlosen Scan kann man das Argument 0 angeben.
Beispiele
- Befehl
nmap -sS -PS80 -iR 0 -p 80
sucht Webserver , auf denen man stöbern kann.
- Befehl
--exclude <host1>[,<host2>[,...]] (Ziele ausklammern)
gibt eine mit Kommata getrennte Liste von Zielen an, die vom Scan ausgeschlossen sein sollen, selbst wenn sie in den angegebenen Netzwerkbereich fallen.
- Die übergebene Liste benutzt die normale Nmap-Syntax und kann folglich Hostnamen, CIDR-Netzblöcke, Oktettbereiche usw. enthalten.
- Das kann nützlich sein, wenn das zu scannende Netzwerk hochkritische Server und Systeme enthält, die man nicht anfassen darf, weil sie bekanntermaßen ungünstig auf Port-Scans reagieren.
- Oder Unternetze, die von anderen Leuten administriert werden.
- Befehl
--excludefile<-exclude_file> (Liste aus Datei ausklammern)
- Das bietet dieselbe Funktionalität wie die Option --exclude.
- Unterschied: die ausgeklammerten Ziele in der mit Zeilenumbrüchen, Leerzeichen oder Tabulatoren getrennten Datei <exclude_file> statt auf der Kommandozeile angegeben werden.
Dienste identifizieren
- Die Ports 25/tcp, 80/tcp und 53/udp sind offen.
- Dank der Datenbank in nmap-services gibt Nmap noch aus, dass diese Ports wahrscheinlich jeweils zu einem Mailserver (SMTP), Webserver (HTTP) und Nameserver (DNS) gehören.
- Selbst wenn Nmap recht hat und auf dem Server im obigen Beispiel SMTP-, HTTP- und DNS-Server laufen, ist das nicht besonders viel an Information.
- Eine genaue Versionsnummer hilft bei der Bestimmung der Exploits, für die ein Server anfällig ist.
- Die Versionserkennung hilft Ihnen, an diese Information heranzukommen.
- Nachdem TCP- und/oder UDP-Ports mit einer der anderen Scan-Methoden entdeckt wurden, fragt die Versionserkennung diese Ports ab.
- Die Datenbank in nmap-service-probes enthält Testpakete für die Abfrage verschiedenster Dienste und Ausdrücke für den Vergleich und das Parsen der Antworten.
- Nmap versucht, das
- Dienstprotokoll zu bestimmen (z.B. FTP, SSH, Telnet, HTTP), aber auch
- Anwendungsnamen (z.B. ISC BIND, Apache httpd, Solaris telnetd),
- Versionsnummer,
- Hostnamen, Gerätetyp (z.B. Drucker, Router),
- die Betriebssystemfamilie (z.B. Windows, Linux) und manchmal verschiedene Details:
- etwa ob ein X-Server Verbindungen annimmt,
- die SSH-Protokollversion
- oder der KaZaA-Benutzername.
Ausgabe steuern
Formate
- Nmap erzeugt seine Ausgabe in fünf verschiedenen Formaten.
- Das Standardformat heißt interaktive Ausgabe und wird an die Standardausgabe stdout gesendet.
- Es gibt auch die normale Ausgabe, die ähnlich zur interaktiven Ausgabe ist, außer dass sie weniger Laufzeitinformation und Warnungen ausgibt
- Man geht davon aus, dass sie erst nach Abschluss des Scans analysiert wird und nicht, während sie noch läuft.
- Die XML-Ausgabe ist eines der wichtigsten Ausgabeformate, da sie einfach nach HTML konvertiert, von Programmen wie Nmap-GUIs geparst oder in Datenbanken importiert werden kann.
- Die zwei verbleibenden Ausgabeformate sind einfache grepbare[[5]] Ausgaben, in der die meiste Information über einen Zielhost in einer einzigen Zeile enthalten ist.
- Und script KiDDi3 0utput für Benutzer, die sich selbst als root sehen.
Syntax
- Die interaktive Ausgabe ist standardmäßig vorgegeben und verfügt über keine eigenen Kommandozeilenoptionen.
- Die anderen vier Formate benutzen dieselbe Syntax.
- Sie erwarten ein Argument, den Namen der Datei, in der die Ergebnisse gespeichert werden sollen.
- Es können mehrere Formate angegeben werden, aber jedes nur einmal.
- Eine normale Ausgabe für eine eigene Untersuchung speichern und eine XML-Ausgabe desselben Scans für eine programmbasierte Analyse.
- Das erreicht man mit den Optionen -oX myscan.xml und -oN myscan.nmap.
- Obwohl myscan.xml benutzt wird, empfehlen sich aussagekräftigere Namen.
- Der Befehl nmap -oX myscan.xml target XML speichert in myscan.xml'.
- Mit einem Minuszeichen als Argument für eines der Formate eingeben. Dann schaltet Nmap die interaktive Ausgabe ab.
- Das heißt, der Befehl nmap -oX - target schreibt nur die XML-Ausgabe auf die Standardausgabe.
- Nmap bietet auch Optionen zur Steuerung der Scan-Ausführlichkeit und Optionen, um an Ausgabedateien anzuhängen, statt sie zu überschreiben.
Nmap-Ausgabeformate
-oN <filespec>
(normale Ausgabe)
- Verlangt, dass eine normale Ausgabe in der angegebenen Datei gespeichert wird.
- Wie oben erwähnt, unterscheidet sich das leicht von der interaktiven Ausgabe.
-oX <filespec>
(XML-Ausgabe)
- Verlangt, dass eine XML-Ausgabe in der angegebenen Datei gespeichert wird.
- Nmap fügt eine DTD (Document Type Definition) hinzu, mit der XML-Parser Nmaps XML-Ausgabe validieren können.
- Diese ist für die Benutzung durch Programme gedacht, kann aber auch bei der Interpretation von Nmaps XML-Ausgabe helfen.
- Die DTD definiert die gültigen Elemente des Formats und zählt an vielen Stellen die dafür erlaubten Attribute und Werte auf.
- XML bietet ein stabiles Format, das man mit Software leicht parsen kann.
- Solche XML-Parser sind für alle wichtigen Programmiersprachen wie C/C++, Perl, Python und Java verfügbar.
- Beispiele sind Nmap::Scanner und Nmap::Parser für Perl in CPAN.
Optionen
- Die XML-Ausgabe verweist auf ein XSL-Stylesheet, mit dem man die Ergebnisse als HTML formatieren kann.
- Nutzung: XML-Ausgabe in einem Webbrowser wie Firefox oder IE laden.
- Funktioniert nur auf dem Rechner, auf dem Sie Nmap ausgeführt haben (oder auf einem, der ähnlich konfiguriert ist).
- Der Pfad zu nmap.xsl ist darin festkodiert.
- Um portable XML-Dateien zu erzeugen, die auf allen mit dem Web verbundenen Rechnern als HTML angezeigt werden, nutzt man die Optionen --webxml oder --stylesheet.
Optionen für Ausführlichkeit und Debugging
-v
(größere Ausführlichkeit)
- Erhöht die Ausführlichkeit, d.h. Nmap gibt mehr Informationen über den laufenden Scan aus.
- Offene Ports werden angezeigt, direkt nachdem sie gefunden werden.
- Es werden Schätzungen für die Dauer bis zur Fertigstellung angegeben.
- Noch mehr Information erhält man, wenn man diese Option zweimal oder noch öfter angibt.
- Allerdings gibt es in den anderen Modi einige Änderungen, bei denen die Ausgabegröße durch Weglassen einiger Details erheblich reduziert wird.
-d [level]
(erhöhe oder setze Debugging-Stufe)
- Beim Debugging noch wesentlich mehr Daten bekommen.
- Die Debug-Stufe auch als Argument an -d übergeben. So setzt z.B. -d9 die Stufe neun.
- Das ist die höchste verfügbare Stufe.
--reason
(Gründe für Host- und Portzustände)
- Gibt die Gründe an, warum ein Port auf einen bestimmten Zustand gesetzt wurde und warum ein Host als ein- oder ausgeschaltet betrachtet wird.
- Diese Option zeigt die Paketart an, die einen Port- oder Hostzustand ermittelt hat.
- Die Information, die Nmap angeben kann, hängt von der Art des Scans oder Pings ab.
- Der SYN-Scan und der SYN-Ping (-sS und -PS) sind sehr detailliert.
- Der TCP-Connect-Scan (-sT) wird durch die Implementierung des connect-Systemaufrufs beschränkt.
--stats-every
(periodische Timing-Statistik ausgeben)
- Gibt periodisch eine Timing-Statusmeldung nach einem Intervall der Länge
--packet-trace
(gesendete und empfangene Pakete und Daten mitverfolgen)
- Bewirkt, dass Nmap für jedes gesendete oder empfangene Paket eine Zusammenfassung ausgibt.
--open
(zeige nur offene (oder möglicherweise offene) Ports an)
- Manchmal interessieren nur offene Ports, und nicht Ports, die geschlossen, gefiltert und geschlossen|gefiltert sind.
--iflist
(liste Schnittstellen und Routen auf)
- Gibt die Liste der Schnittstellen und Systemrouten aus, die Nmap entdeckt hat. .
--log-errors
(protokolliere Fehler/Warnungen in eine Datei im normalen Ausgabeformat)
- Von Nmap ausgegebene Warnungen und Fehlermeldungen gehen nur auf den Bildschirm (interaktive Ausgabe).
- Eine Alternative zu --log-errors ist die Umleitung der interaktiven Ausgabe (inklusive des Standardfehlerstroms) in eine Datei.
Weitere Ausgabeoptionen
--append-output
(an Ausgabedateien hinzufügen, statt sie zu überschreiben)
- Wenn man einen Dateinamen für ein Ausgabeformat wie z.B. -oX oder -oN angibt, wird diese Datei standardmäßig überschrieben.
- Wenn man deren Inhalt lieber behalten und die neuen Ergebnisse anhängen möchten, benutzen Sie die Option --append-output. .
--resume <filename>
(abgebrochenen Scan fortsetzen)
- Manche umfangreichen Nmap-Läufe benötigen sehr viel Zeit – in der Größenordnung von Tagen.
- Solche Scans laufen nicht immer bis zum Ende.
- Es gibt Beschränkungen, die verhindern, dass man Nmap während der
- normalen Arbeitszeit ausführen kann,
- das Netzwerk könnte abstürzen,
- der Rechner, auf dem Nmap läuft, könnte einen geplanten oder ungeplanten Neustart erleben oder
- Nmap selbst könnte abstürzen.
--stylesheet <path or URL>
(setze XSL-Stylesheet, um eine XML-Ausgabe zu transformieren)
- Die Nmap-Distribution enthält ein XSL-Stylesheet namens nmap.xsl zum Betrachten oder Übersetzen einer XML-Ausgabe nach HTML.
--webxml
(lade Stylesheet von Nmap.Org)
- Diese bequeme Option ist nur ein Alias für --stylesheet[[6]].
--no-stylesheet
(lasse XSL-Stylesheet-Deklaration im XML weg)
- Geben Sie diese Option an, wenn Nmap in seiner XML-Ausgabe auf keinerlei XSL-Stylesheet verweisen soll.
- Die xml-stylesheet-Anweisung wird dann weggelassen.
Quellen
- https://www.elektronik-kompendium.de/sites/net/2103061.htm
- https://nmap.org/man/de/man-target-specification.html
- https://nmap.org/man/de/man-output.html
- https://www.elektronik-kompendium.de/sites/net/2103021.htm
Links
intern
- https://wiki.itw-berlin.net/index.php?title=Portscan-Typen
- https://wiki.itw-berlin.net/index.php?title=Nmap-Zusatzfunktionen
Linux
3. https://wiki.itw-berlin.net/index.php?title=Netzwerke:Befehl:zenmap
Windows
extern
1. https://de.wikipedia.org/wiki/Nmap
4. https://de.wikipedia.org/wiki/Classless_Inter-Domain_Routing
5. http://mikiwiki.org/wiki/grep
6. https://svn.nmap.org/nmap/docs/nmap.xsl
7. https://nmap.org/man/de/man-os-detection.html
Bildnachweis
- Alle Bilder aus MediaWiki: https://www.mediawiki.org/wiki/MediaWiki/de,
- damit frei und offen