1997 erblickte Nmap das Licht der Welt. Der freie Portscanner wurde vom bekannten Hacker Fyodor entwickelt. Heutzutage kennt man ihn aber eher unter seinem bürgerlichen Namen Gordon Lyon. Er und sein Team erweitern Nmap noch immer kontinuierlich. Handelte es sich anfangs eher um ein Werkzeug zum reinen Portscanning, kann man nun auch andere, spannende Dinge damit anstellen.
So lässt sich beispielsweise im Handumdrehen das eingesetzte Betriebssystem des Zielsystems ermitteln. Darüber hinaus lassen sich die aktiven Dienste und deren Software-Versionen auslesen. Ebenfalls ist es möglich, alle aktiven Hosts eines Netzwerks zu ermitteln und so Schatten-IT aufzudecken. Nmap ist aber nicht nur unter Hackern und Pentestern ein beliebtes Tool.
Administratoren schätzen die Software vor allem aufgrund ihrer Effizienz, der großen Zuverlässigkeit sowie der einfachen Bedienung. Im Kern ist Nmap heutzutage ein schlankes Tool zur Netzwerküberwachung. Am häufigsten genutzt wird es in der Kommandozeile von Linux, Free BSD und Gentoo. Doch das ist längst nicht alles, was man rund um Nmap wissen sollte.
Im Folgenden werde ich dir erklären, wie du detaillierte Informationen über jede IP-Adresse im Netzwerk ermitteln kannst. Weiterhin zeige ich dir, wie man alle aktiven Geräte im Netzwerk aufspüren kann und diese genauer unter die Lupe nimmt. Schließlich musst du ja gute von bösartigen Systemen unterscheiden können. Aber genügend um den heißen Brei geredet. Lass uns endlich loslegen!
Wie funktioniert Nmap im Detail?
Der Portscanner lässt sich nicht unter Unix in Betrieb nehmen. Auch auf Windows- oder macOS-Rechnern lässt sich Nmap binnen weniger Minuten installieren. Wer besonders tief in die Materie eintauchen will, sollte sich mit Metasploitable vertraut machen. Hiermit lassen sich unter VMware oder VirtualBox Maschinen aufsetzen, die dann nach Herzenslust auf Schwachstellen gescannt werden können.
Und keine Sorge, hier wirst du so einiges an Sicherheitslücken finden. Denn genau für diesen Zweck wurde das Projekt ins Leben gerufen. Seit Metasploitable3 musst du auch nicht mehr ausschließlich mit Linux arbeiten. Es gibt jetzt nämlich auch eine Windows-Version. Neben Nmap solltest du zum Scannen aber noch andere Tools benutzen.
Aber darum soll es heute nicht gehen. Kommen wir wieder zur Funktionsweise von Nmap zurück. Als Administrator möchte man nicht nur bestimmte Systeme scannen, sondern gleich mal das ganze Netzwerk durchsuchen. Dies gelingt dir mithilfe der in Nmap integrierten Host Discovery Scans. Die auch als Ping-Scan bekannte Vorgehensweise lässt sich granular steuern.
Hat man sich einen Überblick über die Hosts im eigenen Netzwerk verschafft, sollte man nun jedes Gerät gründlich scannen. Auch hierfür gibt es wieder jede Menge Optionen. So lassen sich zum Beispiel nur UDP- oder TCP-Ports scannen. Wer will, kann auch gleich noch die Betriebssystem- und Versionserkennung aktivieren. Hier wird dann mithilfe von Fingerprints gearbeitet.
Ein Scan führt nicht selten zu vielen Punkten, die akribisch abgearbeitet werden müssen. Daher sollte man das Scan-Ergebnis in eine eigene Datei schreiben. Auf Wunsch kann hier beispielsweise das Dateiformat XML eingesetzt werden. Nun weißt du im ganz groben, wie man beim Scan eines Netzwerkes vorgeht. Aber natürlich blicken wir noch detaillierter hinter die Kulissen.
Wie lässt sich ein gesamtes Netzwerk einlesen?
Die Syntax bei diesem Tool ist recht einfach: nmap [Art des Scans] {Optionen} Ziel. Da wir im Rahmen dieses Artikels ein ganzes Netzwerk scannen möchten, nutzen wir den Befehl nmap 10.100.100.0/24. Allerdings dauert es nun sehr lange, bis man endlich eine Ausgabe zu Gesicht bekommt. Abhilfe schafft in diesem Fall die Option -T5.
Hiermit sagen wir nmap, dass wir einen schnellen und oberflächlichen Scan durchführen möchten. Will man schon während des Suchlaufs einen Output in der Shell haben, kann auf die Option -v zurückgegriffen werden. Damit aktiviert man den Verbose-Modus. Und nun habe ich genügend Theorie vorgekaut, scanne doch mal ein kleines Testnetzwerk mit der oben erklärten Vorgehensweise.
Und falls du noch genauer in die Welt der Host Discovery einsteigen möchtest, findet du im Folgenden noch ein paar Kommandos:
# Mögliche Optionen für Ping-Scans:
-sn: Hiermit wird die Erreichbarkeit von Zielsystemen überprüft. Ein detaillierter Portscan wird nicht durchgeführt. Zum Aufspüren der aktiven Hosts wird auf ICMP-Echo-Requests, TCP-SYN-Pakete auf Port 443, TCP-ACK-Paket auf Port 80 und ICMP-Timestamp-Requests zurückgegriffen.
-Pn: Standardmäßig testet nmap vor einem vollen Portscan, ob das System überhaupt existiert und erreichbar ist. Diese Option schaltet das ab und wird benötigt um Hosts zu scannen, auf denen kein Webserver läuft und die auch noch einen Ping blockieren.
-sL: Beim sogenannten List-Scan werden die IP-Adressen in Hostnamen aufgelöst. Hier wird nur ein Reverse-Lookup durchgeführt. Ports werden keine gescannt.
-PE: Hier werden die Hosts via ICMP-Typ 8 angepingt und danach startet ein regulärer Scan.
# Scan auf Basis eines FQDN:
nmap myhost.mydomain.com
# Scan einer einzelnen IP-Adresse:
nmap 10.100.100.10
# Scan zweier, spezifizierter IP-Adressen:
nmap 10.100.100.1 10.100.100.2
# Scan einer Range mit Ausnahme von einer IP:
nmap 10.100.100.1-20 --exclude 10.100.100.14
Welche Scan-Optionen gibt es?
Das Kernfeature von Nmap sind die zahlreichen Scan-Typen. So lassen sich beispielsweise bewusst falsche TCP-Pakete an Ports senden, um eine Antwort des dahinter liegenden Dienstes zu provozieren. Wer gänzlich inkognito scannen möchte, kann auf 2 Methoden zurückgreifen. Da wäre im Rahmen der TCP-Scans der sogenannte SYN-Stealth-Scan.
Hier wird zuerst eine SYN-Anfrage von unserem Nmap-System geschickt. Die gegenüberliegende Seite beantworte diese im besten Fall mit einem Syn-Ack. Wir schicken nun aber kein Ack zurück, sondern ein Rst. Damit wurde der Verbindungsaufbau in letzter Sekunde durch uns gekappt. Viele Firewalls protokollieren diese Art von Portscan nicht.
Möchten wir hingegen den vollen 3-Wege-Handshake absolvieren, also dem Anderen mit einem Ack antworten, sollten wir einen Zombie zur Kommunikation nutzen. Wir verschicken dann die Pakete mit seiner IP als Source und prüfen, anhand seiner IP ID, ob der Port antwortet oder nicht. Dies klappt aber nicht immer, da viele Systeme nicht mehr stur hochzählen.
Auf die genaue Funktionsweise dieses Idle-Scans möchte ich an dieser Stelle aber nicht weiter eingehen. Zu bedenken ist bei diesem Scan-Typ, dass man hiermit sehr gut innerhalb privater Netzwerke arbeiten kann. Sobald man Targets im Internet scannt, ist das Vorgehen aber meist reine Zeitverschwendung. Dank NAT gehen eh alle Anfragen mit derselben öffentlichen IP raus.
Zumindest gilt dies für einen Standard-DSL-Anschluss. Für dich als Admin dürfte es aber in der Regel egal sein, ob die Verwendung von Nmap von deinen eigenen Systemen protokolliert wird oder nicht. Trotzdem wollte ich in diesem Absatz aus Sicht eines Hackers schreiben. Das führt meiner Meinung nach zu einem besseren Verständnis des Vorgehens.
Nun kommen wir aber zu den wichtigsten Portscans für dich als ITler:
# Scan-Techniken:
-sS: Hierbei handelt es sich um den Standard-Scan bei TCP-Ports. Beim Half-Open-Scan wird kein kompletter Handshake durchgeführt. Du arbeitest also im Stealth-Modus.
-sT: Hier wird ein voller Handshake ausgeführt. Erst kommt von uns die SYN-Anfrage. Das Gegenüber antwortet mit einem Syn-Ack und wir schließlich mit einem weiteren Ack. Im Rahmen des TCP-Protokolls ist die Verbindung nun vollständig aufgebaut.
-sU: Häufig vergessen wird der Scan von UDP-Ports. Aber auch hier laufen nicht selten Dienste, die gehärtet werden müssen. Man denke da nur mal an DNS, DHCP oder auch Syslog.
-sA: Hier wird dem Zielhost einfach ein Paket mit gesetzter Ack-Flag übermittelt. Besonders gut eignet sich diese Optionen, wenn eine Firewall im Spiel ist.
# Versionserkennung:
-sV: Aufgrund dieser Option versucht Nmap sowohl das Betriebssystem als auch die lauschenden Services samt deren Softwarestand zu ermitteln.
# Sonstige Optionen:
-p {Ports}: Schränkt die zu scannenden Ports ein. Mit einem T:{Ports} oder U:{Ports} kann festgelegt werden, ob es sich TCP- oder UDP-Ports handelt.
Was bedeutet der Output nach einem Scan genau?
So ein Suchlauf kann eine Menge Ergebnisse liefern. So lässt sich beispielsweise unter der Ausgabe des SSH-Ports schnell erkennen, ob hier Ubuntu, Debian, SUSE oder RHEL eingesetzt wird. Auch die Apache-Version ist schnell ausgelesen. Für uns als Admin kann das nur eines bedeuten: Wir deaktivieren diese Meldungen, um es einem Angreifer schwieriger zu machen.
Doch was bedeuten eigentlich dieses ganzen Portzustände in der Ausgabe? Genau das habe ich mir beim ersten Mal gedacht und war etwas überfordert. Deshalb möchte es dir nun ganz detailliert erläutern:
- Open: Dieser Port ist erreichbar und antwortet auf TCP- oder UDP-Anfragen.
- Closed: Hier erhalten wir bei TCP-Tests keine Antwort oder es kommt eine ICMP-Typ 3 Meldung zurück. Die Rede ist von Port unreachable
- Filtered: Entweder erhalten wir gar keine Antwort oder es kommt eine, die den Einsatz einer Firewall oder anderer, ähnlicher Mechanismen nahelegt. Dies können bei UDP diverse Meldungscodes des Typ 3 sein.
- Unfiltered: Der Port kann erreicht werden, aber es lässt sich nicht eindeutig feststellen, ob er offen oder geschlossen ist. Dieses Ergebnis erhalten wir aber nur, wenn wir mit einem TCP-ACK-Scan arbeiten. Zur genaueren Betrachtung empfiehlt sich der Einsatz weiterer Scans.
- Open | Filtered: Hier ist sich Nmap nicht sicher, ob der Port offen oder gefiltert ist. Vorkommen kann dieses Ergebnis bei diesen Scan-Methoden: FIN-, NULL-, XMAS-, UDP- oder dem IP-Protokoll-Scan.
- Closed | Filtered: Auch hier kann Nmap nicht eindeutig feststellen, ob der Port geschlossen oder gefiltert ist. Dieses Ergebnis bekommst du aber nur beim IP-ID-Idle-Scan.
Wie lässt sich Nmap pimpen?
Die Standardfeatures von Nmap sind bereits von unfassbar großem Wert für uns als Admins. Es lassen sich ganze Netzwerke durchsuchen, man kann Ports prüfen und sogar noch das Betriebssystem sowie die lauschenden Dienste identifizieren. Aber als ambitionierter Admin will man noch mehr aus einer Netzwerkanalyse herausholen. Und genau hier kommt die NSE ins Spiel.
Es handelt sich hierbei um ein Akronym für Nmap Scripting Engine. Im Verzeichnis /usr/share/nmap/scripts findet man eine Menge Skripte, die in der Programmiersprache LUA geschrieben worden sind. Jede Datei enthält dabei sowohl eine kurze Funktionsbeschreibung am Anfang sowie die Aufrufoptionen.
Die Skripte können beispielsweise für folgendes genutzt werden:
- Portscans erweitern: Ermittle noch mehr Informationen über einen Port und den darauf lauschenden Dienst.
- Schwachstellen aufdecken: Sobald eine Sicherheitslücke dem breiteren Publikum bekannt wird, findet man auch schon ein passendes Nmap-Skript, um seine Hosts auf diese Schwachstelle zu testen.
- Brut-Force-Angriffe durchführen: Viele der Skripte können dafür eingesetzt werden, um bestehende Systeme auf einfach zu ermittelnde Benutzernamen und Passwörter zu testen.
Das Ausnutzen von Schwachstellen oder das Cracken von Passwörtern ist nicht legal. Du brauchst immer die Erlaubnis des Systemverantwortlichen für Scans & Co. Ansonsten kannst du aufgrund deines rechtswidrigen Vorgehens jederzeit straf- und zivilrechtlich belangt werden.