Nmap: ein „Hacker-Tool“ für Sicherheitsexperten

Nmap: ein „Hacker-Tool“ für Sicherheitsexperten

von Justin Hutchens

security-326154_640

Der Begriff des „ethischen Hackers“ war schon immer ironisch. Die sich entwickelnden Trends des ethischen Hackens und der offensiven Sicherheit haben die Informationssicherheitsbranche zu einer der sich am meisten selbst erhaltenden Branchen der Welt gemacht.

Die Software und Tools, die zum Sichern anfälliger Informationsressourcen verwendet werden, sind dieselben Tools, mit denen sie ausgenutzt werden können. Vielleicht ist es umgekehrt. Vielleicht werden die Tools, die ausschließlich zum Zweck der Nutzung von Informationsressourcen erstellt wurden, jetzt verwendet, um sie zu schützen. Ich nehme an, dies ist eine Debatte, die ewig andauern könnte und wirklich nur ein weiterer Fall von „Was zuerst kam … das Huhn oder das Ei?“

Der Zweck dieses Aufsatzes besteht nicht darin, die philosophische Frage der Absicht zu diskutieren. Meine Absichten sind bescheidener. Ich versuche lediglich, die Bedeutung eines Tools zu rechtfertigen, das konsequent als bösartige Hacking-Software bezeichnet wurde. Das Tool, auf das ich mich beziehe, ist Network Mapper oder kurz nmap. Egal, ob Sie ein verrückter Schurkenagent sind, der eine globale Revolution anstiften möchte, oder ein Netzwerksicherheitsexperte (hoffentlich eher der letztere als der erstere), nmap sollte einen festen Platz in Ihrem Toolkit haben. Vielleicht sollten wir, anstatt Kritik an einem äußerst funktionalen Netzwerktool zu üben, Einzelpersonen für ihre Handlungen zur Rechenschaft ziehen und über den bekannten Benjamin Parker-Vorbehalt nachdenken … „Mit großer Macht kommt große Verantwortung.“ Trotz einiger gegenteiliger Behauptungen ist nmap keine bösartige Software. Und ich denke, der einzige Grund, warum es oft als solches bezeichnet wird, ist seine sehr beeindruckende Liste von Funktionen. Trotz seines Schadenspotenzials kann nmap sicherlich eine wichtige Rolle bei der Sicherung einer Netzwerkinfrastruktur in einem professionellen Umfeld spielen.

Nmap hat sich im Laufe der Jahre von einem einfachen Scan-Dienstprogramm zu einer umfassenden Penetrationstestplattform entwickelt. Es kann in jedem Schritt des Sicherheitsauditprozesses verwendet werden, einschließlich Netzwerkerkennung, Port-Scanning, Service-Enumeration, Schwachstellenzuordnung und sogar Ausnutzung. In diesem Artikel werde ich die Funktionen von nmap erläutern, die sich auf jeden Schritt im Penetrationstestprozess beziehen.

Installation und Vorbereitung

Offensichtlich ist es vor der Verwendung von nmap wichtig, dass eine funktionsfähige Version auf dem von Ihnen verwendeten System installiert ist. Standardmäßig ist nmap bereits auf den meisten Betriebssystemen für Penetrationstests und Netzwerksicherheit wie Kali-Linux, Backtrack, DEFT, Node-Zero, Security Onion und NST installiert. Es kann jedoch auch auf fast jede Plattform Ihrer Wahl geladen werden. Nmap kann problemlos auf allen gängigen Betriebssystemen installiert werden, einschließlich Windows, Linux und OSX. Es gibt auch Dokumentation für die Installation auf obskuren Plattformen, einschließlich BSD, Solaris, AIX und AmigaOS. Installationspakete und Anweisungen zur Durchführung der Installation auf einem dieser Systeme finden Sie unter http://nmap.org/book/install.html.

Zenmap – Grafische Oberfläche

Neben der traditionellen Befehlszeilenschnittstelle für nmap gibt es auch eine grafische Front-End-Schnittstelle namens Zenmap. Zenmap ist auch in viele der verschiedenen Penetrationstestplattformen integriert, die zuvor besprochen wurden. Es ist jedoch nicht standardmäßig in Kali-Linux installiert (der Plattform, die ich für dieses Tutorial verwenden werde). Glücklicherweise befindet es sich im Installations-Repository und kann einfach mit einem einzigen Befehl installiert werden:

apt-get install zenmap

Die Point-and-Click-Oberfläche von Zenmap rationalisiert nicht nur effektiv, was sonst komplizierte Befehle erfordern würde, sondern kann auch ein äußerst nützliches Werkzeug sein, um zu lernen, wie man nmap verwendet. Es verwendet ‚Profile‘, um häufig verwendete Scan-Konfigurationen zur späteren Änderung und / oder Verwendung zu speichern. Schauen Sie sich das Bild der Zenmap-Schnittstelle an, das in Abbildung 1 bereitgestellt wird, und wir werden kurz auf jede der Komponenten eingehen.

f1

Abbildung 1. Zenmap Graphical Interface

Die erste Komponente ist das Zielfeld (Abbildung 1. Ein). In diesem Feld können Sie die Remotesysteme angeben, für die Sie einen Scan ausführen möchten. Sie können eine einzelne IP-Adresse eingeben (z. B. 192.168.1.1), Sie können einen fortlaufenden Bereich von IP-Adressen eingeben (z. B. 192.168.1.0-255) oder Sie können die CIDR-Notation verwenden, um ein gewünschtes Subnetz anzugeben (z. B. 192.168.1.0/24). Die zweite Komponente ist das Profilfeld (Abbildung 1. B). Sie können auf den Dropdown-Pfeil rechts neben diesem Feld klicken, um mehrere vorkonfigurierte Profile für das Scannen anzuzeigen. Mit Profilen können Sie häufig verwendete Scan-Konfigurationen für die zukünftige Verwendung speichern. Sie können auch eigene Profile erstellen, die dann in dieser Liste angezeigt werden (wie dies später in diesem Artikel beschrieben wird). Die dritte Komponente ist das Befehlsfeld (Abbildung 1. C). Dieses Feld gibt den Befehl an, der an das Backend gesendet werden soll. Um den in diesem Feld angezeigten Befehl zu starten, klicken Sie einfach auf die Schaltfläche Scannen. Sie können den Wert in diesem Feld direkt ändern; er wird jedoch automatisch basierend auf den Werten des Zielfelds und des ausgewählten Profils ausgefüllt. Wenn Sie neu in nmap sind, sollten Sie dieses Feld genau beachten, da es Ihnen ein besseres Verständnis der geeigneten Syntax und der Verwendung verschiedener nmap-Befehle vermittelt. Die vierte Komponente ist die Host/Service-Liste (Abbildung 1. D). Sobald Sie Scans durchgeführt haben, werden Informationen in diese Liste aufgenommen. Wenn Sie die Schaltfläche Hosts ausgewählt haben, werden alle erkannten Host-IP-Adressen aufgelistet. Wenn Sie die Schaltfläche Dienste ausgewählt haben, werden alle erkannten Netzwerkdienste aufgelistet. Die letzte Komponente (Abbildung 1. E) Hier können Sie alle Informationen sortieren, die von allen von Ihnen durchgeführten Scans erstellt wurden. Die Registerkarte Nmap-Ausgabe zeigt die genaue Ausgabe an, die bereitgestellt würde, wenn der Befehl über die Befehlszeilenschnittstelle eingegeben worden wäre. Der Inhalt der Registerkarte Ports / Hosts hängt davon ab, ob Sie die Schaltfläche Hosts oder Services für Ihre Liste ausgewählt haben. Wenn die Schaltfläche Hosts ausgewählt ist, spiegeln die Informationen auf der Registerkarte Ports / Hosts die Dienste wider, die auf der aktiv hervorgehobenen IP-Adresse in der Liste identifiziert wurden. Andernfalls, wenn die Schaltfläche Dienste ausgewählt ist, identifizieren die Informationen auf der Registerkarte Ports / Hosts alle Hosts, auf denen der in der Liste hervorgehobene Dienst gefunden wurde. Die Registerkarte Topologie bietet eine grafische Darstellung der logischen Topologie des Netzwerks, einschließlich aller Hosts, die durch Scannen erkannt wurden. Es werden zurückgegebene TTL-Werte (Time-To-Live) verwendet, um die logische Ausrichtung der Hosts relativ zueinander anzuzeigen. Auf der Registerkarte Hostdetails finden Sie den Großteil der Informationen, die zu einem ausgewählten Host ermittelt wurden. Diese Informationen umfassen MAC-Adressen, IP-Adressen, offene Ports, identifizierte Dienste, Betriebssysteminformationen und alle zusätzlichen Informationen, die gesammelt wurden. Schließlich bietet die Registerkarte Scans einen Verlauf der Scans, die während der Sitzung durchgeführt wurden.

Am oberen Bildschirmrand sehen Sie verschiedene Dropdown-Menüs mit Scan, Tools, Profil und Hilfe. Das Hilfemenü ist selbsterklärend. Das Scan-Menü enthält Optionen zum Erstellen neuer Scans, zum Speichern von Scans oder zum Öffnen zuvor gespeicherter Scans. Das Menü Extras bietet einige zusätzliche Funktionen, mit denen Sie die während Ihrer Scans gesammelten Informationen sortieren und organisieren können. Das Profilmenü bietet Optionen zum Erstellen neuer Scan-Profile oder zum Bearbeiten vorhandener Profile.

Wir werden nun kurz besprechen, wie Sie ein neues Profil erstellen und dann einen Scan mit diesem Profil starten. Wählen Sie zunächst das Dropdown-Menü Profil und dann „Neues Profil oder Befehl“.“ Dadurch wird eine Profilkonfigurationsoberfläche geöffnet, die in Abbildung 2 zu sehen ist.

f2

Abbildung 2. Zenmap-Profileditor

Auf der ersten Registerkarte (Registerkarte Profil) können Sie einen eindeutigen Namen und eine eindeutige Beschreibung für das Profil erstellen. Auf allen anderen Registerkarten geben Sie verschiedene Konfigurationen an, die für Ihren Scan verwendet werden. Wie Sie auf der Registerkarte Scannen in Abbildung 2 sehen können, ist das Erstellen eines Scanprofils so einfach wie das Aktivieren der Kontrollkästchen für die zu aktivierenden Optionen, das Eingeben von Werten, damit diese Optionen effektiv verwendet werden können, oder das Auswählen aus vordefinierten Optionen im Dropdown-Menü. Wenn Sie sich über die Funktion oder die angemessene Verwendung einer Option hier nicht sicher sind, können Sie mit der Maus darüber fahren, und die Hilfespalte auf der rechten Seite des Bildschirms wird automatisch mit Informationen darüber gefüllt, was die spezifische Option tut, und entsprechende Werte und Syntax für alle angeforderten Eingabefelder. Bei jeder geringfügigen Anpassung, die Sie an der Scan-Konfiguration vornehmen, wird das Befehlsfeld oben entsprechend angepasst. Diese Funktion macht Zenmap zu einem äußerst effektiven Werkzeug, um zu lernen, wie man nmap-Befehle richtig verwendet. Sobald Sie die Scan-Optionen nach Ihren Wünschen konfiguriert haben, können Sie entweder die Scan-Schaltfläche oben rechts auf dem Bildschirm zur einmaligen Verwendung auswählen oder unten rechts die Option Änderungen speichern auswählen. Die Schaltfläche Änderungen speichern speichert das Profil mit dem auf der ersten Registerkarte angegebenen Namen Konfigurationen und kann dann sofort oder zu einem späteren Zeitpunkt verwendet werden, indem Sie es nach Namen aus dem Dropdown-Menü Profil auf der Zenmap-Hauptoberfläche auswählen. Obwohl Zenmap sehr leistungsfähig ist, sollten Sie nicht zulassen, dass es zu einer Krücke wird, die Sie daran hindert, die Befehlszeilenfunktionen von nmap zu lernen. Obwohl Zenmap viele der gleichen Funktionen ausführen kann, hat es immer noch seine Grenzen und ist nicht so leistungsfähig wie nmap. Um nmap effektiv und in vollem Umfang nutzen zu können, ist es wichtig, sich mit der Befehlszeilenschnittstelle vertraut zu machen.

Netzwerkerkennung

Der erste Schritt im Penetrationstestprozess, den wir diskutieren werden, ist die Netzwerkerkennung. Bevor Sie die Sicherheit von Informationssystemen in einem Netzwerk bewerten, müssen Sie zunächst feststellen, was Sie bewerten. Es gibt verschiedene Möglichkeiten, Hosts in einem Netzwerk mithilfe von nmap zu ermitteln. In diesem Abschnitt wird erläutert, wie mit nmap die Hosterkennung auf den Ebenen 2, 3 und 4 des OSI-Modells durchgeführt wird, und die jeweiligen Vor- und Nachteile. Ein Beispiel für einen Befehl zum Ausführen der Layer-2-Erkennung finden Sie hier:

nmap -PR -sn 192.168.1.0-255

Der Schalter -PR gibt einen ARP-Ping an. Dies verwendet Layer-2-ARP-Pakete (Address Resolution Protocol), um Live-Hosts innerhalb des angegebenen Bereichs zu identifizieren. Dies geschieht durch Senden einer ARP-Broadcast-Anforderung für jede der identifizierten IP-Adressen. Wenn sich im Netzwerk ein Live-Host mit einer dieser IP-Adressen befindet, sendet dieser Host eine ARP-Antwort mit seiner IP-Adresse und der entsprechenden Layer-2-MAC-Adresse an das Scansystem. Nmap sammelt Antworten von allen Live-Hosts und gibt dann eine Liste der erkannten Hosts zurück. Der -sn -Schalter wird verwendet, um nmap anzufordern, keine Port-Scans durchzuführen. Dies verhindert die Übertragung von zusätzlichem Datenverkehr, der über das hinausgeht, was für die Durchführung des Layer-2-Hosterkennungs-Sweeps erforderlich ist. Layer 2 Discovery ist effektiv, da es die schnellste aller drei Optionen ist. Es ist jedoch durch die Tatsache begrenzt, dass es nur für Hosts ausgeführt werden kann, die sich im selben lokalen Netzwerk befinden wie das System, das den Scan durchführt.

Für Remote-Hosts müssen Sie entweder Layer 3 oder Layer 4 Discovery verwenden. Ein Beispiel für einen Befehl, der zum Ausführen der Layer-3-Erkennung verwendet werden könnte, ist:

nmap -PE -sn 109.74.11.0-255

Dieser Befehl sendet eine Reihe von ICMP-Echoanforderungen an jede Layer-3-IP-Adresse in der Liste. Nmap sammelt alle empfangenen ICMP-Echoantworten und gibt eine Liste aller Live-Hosts zurück. Dieser Erkennungsscan ist langsamer als das Ausführen eines ARP-Pings, gibt jedoch Ergebnisse für Hosts in Remotenetzwerken zurück.

Angenommen, Sie versuchen, Remotesysteme zu ermitteln (sodass Layer 2 nicht verwendet werden kann), die sich hinter einer Firewall befinden, die den gesamten eingehenden ICMP-Datenverkehr löscht (sodass Layer 3 nicht verwendet werden kann). Um dieses Problem zu beheben, müssen Sie die Erkennung auf der Transportschicht (Schicht 4) durchführen. Es gibt verschiedene Möglichkeiten, Layer-4-Scans für die Erkennung zu verwenden. Eine effektive Methode ist die Verwendung eines UDP-Pings. Ein Beispiel für einen UDP-Ping-Befehl ist:

nmap -PU53 -sn 109.74.11.0-255

Dieser Befehl generiert eine Reihe von DNS-Serverstatusanforderungen für jede der Ziel-IP-Adressen. Eine Reihe von DNS-Abfrageantworten wird von Live-Hosts empfangen, und nmap gibt diese Ergebnisse zurück. Da DNS ein häufig verwendeter Dienst auf UDP-Port 53 ist, können mithilfe dieser Technik zusätzliche Live-Hosts identifiziert werden, die möglicherweise so konfiguriert wurden, dass sie nicht auf ICMP-Datenverkehr reagieren. Eine weitere effektive Layer-4-Alternative zu ICMP-Ping-Sweeps ist die Verwendung eines TCP-ACK-Pings. Ein Beispiel dafür ist unten zu sehen:

nmap -PA80 -sn 109.74.11.0-255

Dieser Befehl sendet eine Reihe unerwünschter ACK-Antworten an den angegebenen Port für alle Hosts im IP-Bereich. Da diese ACK-Pakete außerhalb des Kontexts einer etablierten Kommunikationsleitung lagen, antworten Live-Hosts mit einem TCP-RST-Paket, um anzuzeigen, dass die Kommunikation abgebrochen werden sollte. Nmap sammelt diese Antworten als Angabe von Live-Hosts und gibt dann eine Liste davon zurück.

Port-Scanning und Service-Enumeration

Nachdem wir nun die aktiven IP-Adressen im Netzwerk ermittelt haben, gegen die wir einen Penetrationstest durchführen, müssen wir als nächstes offene Ports auf jedem System und die auf diesen Ports ausgeführten Dienste identifizieren. Das Scannen von TCP-Ports auf Remote-Systemen ist die grundlegendste Funktion von nmap. Um einen TCP-Scan eines Zielsystems durchzuführen, verwenden Sie den Basisbefehl:

nmap 109.74.11.34

Wie andere nmap-Befehle kann dies auch verwendet werden, um Scans gegen mehrere Hosts durchzuführen, indem eine sequentielle Serie (192.168.1-255) oder CIDR-Notation (192.168.1.0/24). Dieser Standard-nmap-Befehl führt einen Scan an 1000 häufig verwendeten TCP-Ports durch. Alternativ können Sie einen einzelnen zu scannenden Port angeben, indem Sie den Schalter -p gefolgt von der zu scannenden Portnummer verwenden.

nmap 109.74.11.34 -p 21

Dieser obige Befehl scannt TCP-Port 21 auf dem angegebenen System. Sie können auch eine Reihe von Ports scannen, indem Sie den Schalter -p verwenden und dann die gewünschten Ports auflisten und durch Kommas trennen.

nmap 109.74.11.34 -p 80,443

Dieser Befehl scannt die Ports 80 und 443 auf dem Zielsystem. Sie können einen sequenziellen Bereich von Ports scannen, indem Sie den Schalter -p gefolgt vom ersten Wert im Bereich, einem Bindestrich und dem letzten Wert im Bereich verwenden.

nmap 109.74.11.34 -p 0-100

Der obige Befehl scannt die ersten 100 Ports. Verwenden Sie den folgenden Befehl, um alle 65.536 TCP-Ports auf einem Ziel zu scannen:

nmap 109.74.11.34 -p 0-65535

Sie können einen TCP-ACK-Scan verwenden, um gefilterte Ports zu identifizieren. Verwenden Sie dazu den Schalter -sA. Sie können dann einen Port oder eine Reihe von Ports angeben. Keine Portspezifikation scannt die standardmäßigen 1.000 Ports. Dies gibt dann eine Liste der gefilterten Ports zurück. Ein Beispiel für diesen Befehl ist unten zu sehen:

nmap 109.74.11.34 -sA

Penetrationstester und Sicherheitsexperten suchen manchmal nur nach offenen TCP-Ports auf Zielsystemen. Das Übersehen von UDP-Diensten kann dazu führen, dass eklatante Sicherheitslücken vollständig übersehen werden, die leicht zu Kompromissen führen können. Verwenden Sie den folgenden Befehl, um auf einem Zielsystem nach UDP-Diensten zu suchen:

nmap 109.74.11.34 -sU

Da UDP-Dienste nicht wie TCP-Dienste verbindungsorientiert sind, dauert dies länger als ein typischer TCP-Scan. Der Zeitaufwand für die Durchführung von UDP-Scans kann durch Scannen nach bestimmten Ports reduziert werden. Sie können Ports wie bei TCP-Scans angeben.

nmap 109.74.11.34 -sU -p 69

Der obige Befehl führt einen Scan des UDP-Ports 69 durch, der häufig für TFTP (Trivial File Transport Protocol) verwendet wird. Es ist auch möglich, die Version und die Versionsnummer für jeden einzelnen Dienst zu identifizieren. Verwenden Sie dazu den Schalter -sV.

nmap 109.74.11.34 -sV

Dieser Befehl verwendet eine Kombination aus Banner-Grabbing und Probe-Response-Analyse, um zu versuchen, den Dienst und die Versionsnummer dieses Dienstes für jeden gescannten Port zu identifizieren. Mit ähnlichen Techniken ist es auch möglich, dass nmap versucht, das Betriebssystem zu bestimmen, das auf dem Ziel ausgeführt wird. Verwenden Sie dazu den Schalter -O.

nmap 109.74.11.34 -O

Nach Abschluss wird entweder eine positive Identifizierung des Betriebssystems zurückgegeben oder es wird eine beste Vermutung und dann eine Liste anderer möglicher Betriebssysteme angezeigt.

Erweiterte Scantechniken

Bei der Durchführung eines Penetrationstests in mittleren bis großen Unternehmensnetzwerken tritt häufig ein Problem auf. Die meisten Unternehmen und Organisationen sind heutzutage sicherheitsbewusster geworden und verfügen wahrscheinlich über Firewalls oder Intrusion Detection-Systeme, die zwischen Ihnen und den Systemen stehen, die Sie scannen möchten. Um solche Systeme zu scannen, müssen wir einige fortgeschrittenere Scantechniken anwenden. Eine Möglichkeit, Firewalls und / oder Intrusion Detection-Systeme potenziell zu umgehen, besteht darin, einige herkömmliche Stealth-Scan-Techniken zu verwenden, die in nmap integriert sind. Eine Methode, die verwendet werden kann, ist die Verwendung einer langsameren Timing-Vorlage. Timing-Vorlagen reichen von -T0 (paranoider Scan) bis hin zu -T5 (Wahnsinniger Scan). Je niedriger der Wert der Timing-Vorlage ist, desto langsamer wird der Scan ausgeführt. Langsamere Scans werden weniger wahrscheinlich von Intrusion Detection-Systemen markiert. Ein Beispiel für einen paranoiden Scan wäre:

nmap 109.74.11.0-255 -T0

Eine andere Technik, mit der Sie Ihren Scan maskieren können, besteht darin, das Netzwerk mithilfe des Switches -D mit zusätzlichem Lockverkehr zu überfluten. Mit dieser Funktion können Sie mehrere Adressen angeben, um den Datenverkehr zu fälschen, oder Sie können die Option RND verwenden, um den Datenverkehr von zufälligen Adressen zu fälschen.

nmap 109.74.11.0-255 -D RND:5

Zusätzlich zum herkömmlichen TCP-Port-Scan der Zielsysteme wird mit dem obigen Befehl auch der Datenverkehr von 5 zufälligen Adressen gefälscht, um den tatsächlichen Scan-Datenverkehr zu verschleiern. Eine andere Technik, die verwendet werden kann, besteht darin, die Paketlänge Ihrer übertragenen Anforderungen zu variieren. Einige Intrusion Detection Systeme und Firewalls werden Pakete basierend auf Signaturpaketlängen löschen. Um dies zu verhindern, können Sie die Datenlänge mit dem Schalter --data-length gefolgt von der Paketgröße in Byte angeben.

nmap 109.74.11.0-255 –data-length 15

Dieser Befehl sendet den gesamten Scanverkehr in Paketen mit einer Länge von 15 Byte. Während dies hilfreich sein könnte, um einige signaturbasierte Intrusion Detection-Systeme zu vermeiden, könnte das konsistente Senden von Paketen mit einer ungewöhnlich angegebenen Paketlänge ein Anomalie-basiertes Intrusion Detection-System kennzeichnen. Network Intrusion Detection-Systeme kennzeichnen auch den Datenverkehr, wenn Sie beginnen, nacheinander eine Verbindung zu Systemen innerhalb eines bestimmten Netzwerkbereichs herzustellen. Um zu vermeiden, dass Ihre Scans nacheinander ausgeführt werden, können Sie den Schalter --randomize-hosts verwenden.

nmap 109.74.11.0-255 –randomize-hosts

Dieser Befehl oben scannt zufällig jeden Host im Bereich, anstatt sie nacheinander auszuführen (109.74.11.0, dann 109.74.11.1, dann 109.74.11.2, etc …). Während Sie Ihre IP-Adresse nicht fälschen können (da Sie nicht die Antworten erhalten würden, die zur Ermittlung offener Ports erforderlich sind), können Sie Ihre MAC-Adresse fälschen. Dazu können Sie den Schalter –spoof-mac verwenden, gefolgt von einer Hersteller-ID, einer bestimmten MAC-Adresse oder 0.

nmap 109.74.11.0-255 –spoof-mac 0

Wenn Sie 0 als Argument verwenden, wird eine zufällige MAC-Adresse auf Ihren Scan-Verkehr angewendet. Eine letzte erwähnenswerte Technik ist die Verwendung des Schalters -f zum Fragmentieren von Paketen.

nmap 109.74.11.0-255 -f

Durch das Fragmentieren von Paketen werden die Datennutzlasten Ihres Scan-Datenverkehrs in mehrere Pakete aufgeteilt, sodass sie Intrusion Detection-Systeme oder Firewalls für die Inhaltsinspektion einfacher umgehen können. Während alle diese Techniken zum Scannen öffentlich zugänglicher Server hinter einer Firewall wirksam sein können, reichen sie für das Scannen von Hosts in einem internen Netzwerk normalerweise nicht aus. Während bestimmte öffentlich zugängliche Server zum Scannen zur Verfügung stehen, wird ein Großteil der internen Infrastruktur tiefer im Netzwerk liegen und nicht so leicht zugänglich sein. Betrachten Sie das Diagramm in Abbildung 3. Dies ist ein einfaches Beispiel für eine allgemeine Konfiguration in Unternehmensnetzwerken.

f3

Abbildung 3. Allgemeine Netzwerkkonfiguration

Das Problem, auf das wir hier stoßen, besteht darin, dass das interne Netzwerk hinter einer internen Firewall liegt, die im Vergleich zur externen Firewall strengere Regeln für den eingehenden Datenverkehr hat. Diese interne Firewall blockiert wahrscheinlich eingehenden Datenverkehr von Remoteadressen im Web; Es ist jedoch möglich, dass die Systeme in der DMZ mit den internen Systemen kommunizieren können. Um diese internen Systeme scannen zu können, müssen wir die Systeme in der DMZ für uns arbeiten lassen. Wir werden verschiedene Möglichkeiten diskutieren, dies zu tun, einschließlich Proxy-Scanning, Zombie-Scanning und FTP-Bounce-Scanning.

Der wahrscheinlich einfachste Weg, die internen Systeme zu scannen, ist die Verwendung einer Proxy-Kette. Nehmen wir an, wir haben Zugriff auf einen Proxy-Dienst innerhalb der DMZ erhalten, indem wir einen Open-Access-Proxy-Dienst gefunden, einen Proxy-Dienst mit Hydra Brute-Forcing erzwungen oder einen Proxy-Dienst auf einem bereits kompromittierten Computer installiert haben. Nachdem Sie Ihr System so konfiguriert haben, dass der Datenverkehr über diesen Proxy geleitet wird, können Sie nmap-Scans mithilfe eines vollständigen Verbindungsscans (-sT) durchführen.

nmap 10.1.1.0-255 -sT

Wenn kein Proxy-Dienst verfügbar ist, gibt es einige clevere Möglichkeiten, wie Sie Maschinen in der DMZ nutzen können, um Scanergebnisse auf internen Systemen zu erhalten. Eine Möglichkeit, dies zu tun, besteht darin, Zombie-Scanning zu verwenden, das auch als Idle-Scanning bezeichnet wird. Um einen Zombie-Scan gegen die Systeme im internen LAN durchzuführen, müssen wir einen brauchbaren Zombie-Host innerhalb der DMZ finden. Ein Zombie-Host ist jedes relativ untätige System, das inkrementelle IPID-Sequenzierung verwendet. Um einen Zombie-Host zu finden, können wir ein nmap-Skript verwenden, um die DMZ nach einem System zu durchsuchen, das dieser Beschreibung entspricht.

nmap –script ipidseq 109.74.11.0-255

Dieses Skript sendet eine Reihe von Paketen an jeden Host und verfolgt die IPID-Nummern für alle empfangenen Antworten. Anschließend werden diese IPID-Nummern analysiert, um jedes System entweder als zufällige Sequenz, alle Nullen oder inkrementell zu klassifizieren. Ein Beispiel für die Ausgabe eines Inkrementalsystems finden Sie in Abbildung 4.

f4

Abbildung 4. Zombie-Host mit IPID-Sequenzskript

Sobald wir eine IP-Adresse für unser Zombie-System erworben haben, können wir unseren Zombie-Scan versuchen. Bevor ich mich mit der Durchführung des Scans befasse, werde ich kurz erläutern, wie der Scan funktioniert. Abbildung 5 zeigt, was passiert, wenn ein Zombie-Scan an einem offenen Port durchgeführt wird.

f5

Abbildung 5. Zombie-Scan gegen offenen Port

Zunächst ermittelt unser nmap-Scanner den aktuellen IPID-Wert des Zombie-Systems, indem er ein unerwünschtes SYN / ACK-Paket sendet. Da ursprünglich kein SYN-Paket vom Zombie-System gesendet wurde, um eine Verbindung herzustellen, antwortet der Zombie unserem Scanner mit einem ERSTEN Paket. Unser Scansystem verwendet dann die IPID des ERSTEN Pakets als Referenzpunkt. Dann wird unser Scansystem dies sofort mit einem gefälschten SYN-Paket verfolgen, das unter Verwendung einer Quell-IP-Adresse des Zombie-Systems an das Zielsystem gesendet wird. Da die Quell-IP-Adresse eine in der DMZ ist, kann diese Verbindungsanforderung mit größerer Wahrscheinlichkeit die Firewall passieren. Wenn das Ziel das Paket empfängt und der Zielport geöffnet ist, gibt das Ziel ein SYN / ACK-Paket an das Zombie-System zurück (von dem es glaubt, dass es das ursprüngliche SYN-Paket gesendet hat). Da dieses SYN / ACK-Paket außerhalb des Kontexts empfangen wird, antwortet das Zombie-System dem Zielsystem mit einem ERSTEN Paket und erhöht dadurch seinen IPID-Wert um eins. Schließlich sendet unser Scanner ein letztes SYN / ACK-Paket an das Zombie-System. Die nachfolgende ERSTE Antwort des Zombies erhöht die IPID noch einmal. Wenn also der Zielport auf dem Remote-System geöffnet ist, ist der endgültige zurückgegebene IPID-Wert zwei Zahlen höher als der ursprüngliche Wert. Alternativ zeigt Abbildung 6, was passiert, wenn der Port des Zielsystems geschlossen wird.

f6

Abbildung 6. Zombie-Scan gegen geschlossenen Port

Wenn der Port auf dem Zielsystem geschlossen ist, erhält das Zombie-System keine unerwünschte Antwort vom Ziel und wird daher nicht veranlasst, ein ERSTES Paket an das Ziel zu senden. Wenn also der IPID-Wert der endgültigen ERSTEN Antwort nur um eins erhöht wurde, können wir daraus schließen, dass der Port geschlossen ist, da keine SYN / ACK-Antwort an das Zombie-System gesendet wurde, um eine ERSTE Antwort auszulösen. Andernfalls, wenn der endgültige IPID-Wert um zwei vom ursprünglichen Wert erhöht wurde, können wir ableiten, dass der Port auf dem Zielsystem geöffnet werden muss, da er auf den Zombie geantwortet haben muss, der die Antwort ausgelöst hat, die den IPID-Wert des Zombie-Systems erhöht hat.

Während dies extrem kompliziert klingen mag; lassen Sie sich von der Beschreibung nicht einschüchtern, da nmap fast die ganze Arbeit für Sie erledigt. Um einen Zombie-Scan tatsächlich durchzuführen, müssen Sie nur einen einfachen Befehl eingeben.

nmap -sI 192.168.199.132 -Pn 192.168.199.130

Der Schalter -sI weist nmap an, einen Zombie-Scan mit der folgenden IP-Adresse als Zombie-Host (192.168.199.132) durchzuführen. Der Schalter -Pn verhindert, dass nmap vor dem Versuch des Scans einen anfänglichen ICMP-Ping auf dem Zielsystem ausführt. Die endgültige IP-Adresse im Befehl identifiziert also das Zielsystem. Die Ausgabe für diesen Befehl ist in Abbildung 7 zu sehen.

f7

Abbildung 7. Zombie-Scan gegen geschlossenen Port

Es ist zu beachten, dass der IP-Bereich, mit dem ich diesen Zombie-Scan demonstriert habe, ein privater Bereich in meinem internen Netzwerk ist. Damit dies effektiv gegen ein Remote-Netzwerk funktioniert, wie im ursprünglichen Szenario beschrieben, müssen sich die Systeme sowohl in der DMZ als auch im internen Netzwerk in öffentlich routingfähigen IP-Bereichen befinden. Wenn das interne Netzwerk in einem privaten Bereich hinter einem NAT-Server (Network Address Translation) konfiguriert ist, kann der nmap-Scanner das gefälschte SYN-Paket nicht von seinem Remotestandort an die interne Adresse senden.

Eine andere Möglichkeit, Systeme innerhalb der DMZ zu verwenden, um Hosts im internen Netzwerk zu scannen, besteht darin, FTP-Server zu verwenden. Einige ältere FTP-Server unterstützen die Übertragung von Dateien an ein Drittanbietersystem. Wenn Sie einen FTP-Server in der DMZ entdeckt haben, der eine anonyme Anmeldung zulässt oder den Sie mit Hydra brutal erzwungen haben, können Sie den FTP-Server testen, um festzustellen, ob er FTP-Bounce unterstützt. Verwenden Sie dazu das ftp-Bounce-Skript.

nmap –script ftp-bounce –script-args

ftp-bounce.username=anonymous,

Dieser Befehl verwendet das nmap-Skript mit Benutzername- und Kennwortargumenten für den FTP-Server. Nach Abschluss dieses Scans wird angezeigt, ob ein FTP-Bounce möglich ist oder nicht. Wenn das Skript anzeigt, dass FTP Bounce funktioniert, können Sie den FTP-Server verwenden, um einen Port-Scan für andere Systeme im Netzwerk durchzuführen. Abbildung 8 zeigt, wie dies funktioniert.

f8

Abbildung 8. FTP-Bounce-Scan

Der Scanner versucht, Binärdaten über die FTP-Bounce-Funktion an einem bestimmten Port an das Zielsystem zu senden. Wenn die Daten übertragen werden, meldet der FTP-Server dies dem Scanner zurück und zeigt an, dass der Port auf dem Zielsystem geöffnet ist. Um einen FTP-Bounce-Scan durchzuführen, verwenden Sie den Schalter -b .

nmap -b ftpuser::21 10.1.1.128-255

In diesem Befehl wird die Funktion -b verwendet, um einen FTP-Bounce-Scan mit dem Benutzernamen „ftpuser“ und dem Kennwort PassW0rd gegen den FTP-Server am 192.168.11.201 durchzuführen, der auf TCP-Port 21 gehostet wird. Die im obigen Diagramm beschriebenen Aktionen werden dann für jeden der gemeinsamen 1000s-Ports auf jedem der Zielhosts von 10.1.1.128 bis 10.1.1.255 ausgeführt.

Vulnerability Mapping and Exploitation with NSE

Sobald Sie Live-Hosts im Zielnetzwerk entdeckt und es geschafft haben, offene Ports und/oder laufende Dienste auf diesen Hosts aufzulisten, können Sie mit dem Testen und Ausnutzen von Schwachstellen beginnen. Mit der neu integrierten NSE (Nmap Scripting Engine) gibt es eine Reihe von vorinstallierten Skripten, die mit der Standard-nmap-Installation geliefert werden. Diese Skripte haben eine breite Palette von verschiedenen Funktionen von der grundlegenden Informationsbeschaffung (wie die beiden, die wir bereits besprochen haben), Vulnerability Mapping, Brute Forcing, Denial of Service und sogar Remote Exploitation. Alle diese Skripte befinden sich in Ihrem nmap-Installationsverzeichnis. In Kali-Linux finden Sie sie unter /usr/share/nmap/scripts/ . Verwenden Sie die folgenden Befehle, um zu diesen Skripten zu navigieren und mit ihnen zu arbeiten:

cd /usr/share/nmap/scripts/

ls

Der Befehl cd ändert das Verzeichnis in den Speicherort der NSE-Skripte, und der Befehl ls zeigt den Inhalt des Verzeichnisses an. Sie können dann alle Skripte anzeigen, indem Sie den Befehl cat verwenden, gefolgt vom Namen des Skripts, das Sie anzeigen möchten. Für diese Demonstration verwenden wir ftp-vuln-cve2010-4221.nse. Verwenden Sie den folgenden Befehl, um den Inhalt dieses Skripts anzuzeigen:

cat ftp-vuln-cve2010-4221.nse

f9

Abbildung 9. NSE-Skriptinhalt

Abbildung 9 zeigt den Inhalt dieses Skripts an. Wenn Sie zum Anfang des Skriptinhalts navigieren, werden mehrere hilfreiche Informationen angezeigt, darunter eine Beschreibung des Skripts, eine Liste zusätzlicher Ressourcen als Referenz sowie die geeignete Verwendung und Syntax des Skripts. Das Sortieren dieser Skripte im Verzeichnis und das Auffinden eines Skripts, das eine bestimmte Funktion ausführt, kann jedoch sehr mühsam sein. Meiner Meinung nach ist dies, wo Zenmap (die grafische Oberfläche, die wir zuvor diskutiert hatten) wirklich durchscheint. Um zu demonstrieren, wie hilfreich die Zenmap-Oberfläche bei der Arbeit mit NSE-Skripten sein kann, öffnen Sie sie erneut über die Befehlszeile mit dem Befehl:

zenmap

Wählen Sie dann das Dropdown-Menü Profil und klicken Sie auf „Neues Profil oder Befehl.“ Nachdem der Profileditor geöffnet wurde, wählen Sie oben auf dem Bildschirm die Registerkarte Skripte. Abbildung 10 zeigt ein Bild der Zenmap Scripting-Schnittstelle.

f10

Abbildung 10. Zenmap Scripting Interface

Eine Liste aller verfügbaren Nmap-Skripte befindet sich auf der linken Seite des Bildschirms. Sie können eine davon auswählen, um sie in Ihren nmap-Befehl aufzunehmen. Einige Skripte benötigen Argumente, um korrekt ausgeführt werden zu können. Post-Authentifizierungsskripte erfordern häufig einen Benutzernamen und ein Kennwort für bestimmte Netzwerkdienste. Im Beispiel in Abbildung 10 können Argumente angegeben werden, um den Brute-Force-Angriff zu konfigurieren, der gegen den MySQL-Dienst ausgeführt werden soll. Sie können die Skriptargumente auch einfach übergeben, indem Sie die Werte in das Argumentfenster eingeben. Diese Argumente werden automatisch in den generierten Befehl nmap eingefügt. Das Fenster in der oberen Mitte enthält eine Beschreibung des ausgewählten Skripts, die geeignete Verwendung und Syntax sowie Kategorien zur Beschreibung der Funktionen des Skripts. Diese Kategorien können besonders hilfreich sein, wenn Sie versuchen, eine bestimmte Art von Aufgabe auszuführen, z. B. die Schwachstellenanalyse. Nachdem Sie ein NSE-Skript mit einem nmap-Befehl gestartet haben, sehen Sie die Ergebnisse in der Standard-NMAP-Ausgabe. Bei Brute-Force-Skripten zeigt die Ausgabe an, ob der Brute-Force-Angriff erfolgreich war, und zeigt in diesem Fall den entdeckten Benutzernamen und das Kennwort an. Bei Schwachstellenskripten zeigt die Ausgabe an, ob die Sicherheitsanfälligkeit auf den Zielsystemen vorhanden ist. Und im Falle von Exploitation-Skripten liefert die Ausgabe Informationen über die Nutzlast, die anschließend an das Zielsystem geliefert wurde.

Scripting mit Nmap

Zusätzlich zu seiner eigenen integrierten Scripting-Engine unterstützt nmap auch mehrere Ausgabeoptionen, die es einfach machen, traditionelle Skriptsprachen für die Durchführung von Ausgabeanalysen zu verwenden. Zwei Ausgabeformate, die für die Skripterstellung nützlich sein können, sind Greppable-Ausgabe (-oG) und XML-Ausgabe (-oX). XML kann für Skriptsprachen auf höherer Ebene wirksam sein, die über Module verfügen, die für die XML-Analyse importiert werden können, und Greppable-Ausgaben können in Verbindung mit dem Bash-Shell-Scripting verwendet werden, um die Analyse von NMAP-Ergebnissen zu optimieren. Um zu demonstrieren, wie diese Ausgabefunktion in Verbindung mit Skripten verwendet werden kann, werden wir ein einfaches 4-Zeilen-Bash-Shell-Skript überprüfen, das in Abbildung 11 angezeigt wird, um die Ergebnisse eines NMAP-Scans zu analysieren.

f11

Abbildung 11. Nmap-Ergebnisanalyse Bash-Skript

Stellen Sie sich ein Szenario vor, in dem ein NMAP-Scan bereits für ein sehr großes Netzwerk durchgeführt wurde und die Ausgabe des Scans in einem zuordenbaren Format in einem networkscan gespeichert wurde.txt-Datei. Angenommen, wir möchten Hydra verwenden, um einen Brute-Force-Angriff gegen alle FTP-Dienste im Netzwerk durchzuführen, möchten jedoch nicht die Zeit verschwenden, die erforderlich wäre, um Port 21 im gesamten Netzwerk erneut zu scannen. Dieses einfache Skript extrahiert alle Systeme, auf denen ein bestimmter Port geöffnet ist. Die erste Zeile fordert den Benutzer zur Eingabe einer Portnummer auf. In der zweiten Zeile wird dann der Wert der Benutzereingabe der Variablen ‚port‘ zugewiesen. Die dritte Zeile zeigt dem Benutzer an, dass alle Systeme mit diesem offenen Port aufgelistet werden. Und schließlich ist der letzte Befehl, wo wir die Ergebnisse aus der nmap greppable Ausgabe greppen. Das Skript extrahiert mit dem Befehl grep alle Zeilen aus der Ausgabedatei, die auf den angegebenen Port verweisen. Dazu gehören Zeilen, die jede Instanz auflisten, in der der Port geöffnet, geschlossen oder gefiltert ist. Dann leitet es diese Ausgabe an eine andere grep-Funktion weiter, die nur Instanzen extrahiert, in denen der angegebene Port geöffnet ist. Diese Ausgabe wird dann an die Cut-Funktion übergeben, die ein Leerzeichen als Trennzeichen angibt und dann das zweite Feld ausgibt. Auf diese Weise gibt unser Skript dann die IP-Adresse für jedes System aus, für das der angegebene Port geöffnet ist. Abbildung 12 zeigt die Ausgabe des Skripts.

f12

Abbildung 12. Nmap Result Analysis Script Output

Dies ist zwar ein sehr einfaches Skript, zeigt jedoch, wie einfach es sein kann, Informationen aus dem Greppable-Ausgabeformat zu extrahieren. Einmal erworben, könnten diese gesammelten Informationen leicht für die weitere Skripterstellung verwendet werden. Es könnte als Ausgangspunkt verwendet werden, um eine andere nachfolgende Aufgabe für jedes System auszuführen, bei dem festgestellt wurde, dass ein bestimmter Port geöffnet ist.

Ein All-In-One-Penetrationstest-Tool

Durch die Kombination seiner verschiedenen Funktionen könnte man leicht einen vollständigen Penetrationstest durchführen, indem man nmap allein verwendet. Es ist nicht zu leugnen, dass nmap mit seiner beeindruckenden Liste von Funktionen und Fähigkeiten ein wirklich mächtiges Werkzeug ist. Und im Laufe der Jahre wird es wahrscheinlich noch mächtiger werden, da immer mehr Menschen zu diesem Projekt beitragen. Wie ein Kind mit der Waffe seines Vaters kann nmap ein gefährliches Werkzeug in den falschen Händen sein. Bei richtiger Anwendung kann es jedoch von unschätzbarem Wert sein, um die Sicherheit Ihrer Netzwerkinfrastruktur zu gewährleisten. Denken Sie also immer daran, es weise und gut einzusetzen.

Über den Autor

jh

Justin Hutchens führt derzeit Netzwerk-Schwachstellenanalysen, Intrusion Detection und digitale Forensik für ein großes Unternehmensnetzwerk mit über 33.000 vernetzten Systemen durch. Er hat zahlreiche verschiedene Rollen im Bereich der Informationstechnologie besetzt, darunter Netzwerkdesign, Systementwicklung, Datenbankadministration und Netzwerksicherheit. Derzeit unterrichtet er auch Kurse zu Penetrationstests mit den Betriebssystemen Backtrack und Kali-Linux. Derzeit verfügt er über einen Bachelor-Abschluss in Informationstechnologie und mehrere professionelle Zertifizierungen, darunter CISSP (Certified Information System Security Professional), CEH (Certified Ethical Hacker), ECSA (EC-Council Certified Security Analyst) und CHFI (Computer Hacking Forensic Investigator).

Write a Comment

Deine E-Mail-Adresse wird nicht veröffentlicht.