Firewall-Beschränkungen mit Nmap erkennen und umgehen

NmapBeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie, wie Sie Nmap verwenden können, um Firewall-Einschränkungen im Bereich der Netzwerksicherheit zu erkennen und zu umgehen. Firewalls sind wichtige Sicherheitskomponenten, die den Netzwerkverkehr gemäß vordefinierten Regeln filtern. Als Sicherheitsexperte ist es von entscheidender Bedeutung, zu verstehen, wie man Firewalls umgehen kann, um umfassende Sicherheitsbewertungen durchzuführen und Schwachstellen zu identifizieren.

Wir werden verschiedene Techniken zur Umgehung von Firewalls mit Nmap, einem leistungsstarken Netzwerk-Scanning-Tool, untersuchen. Diese Techniken ermöglichen es Sicherheitsexperten, die Netzwerksicherheit zu testen, indem sie die Versuche potenzieller Angreifer nachahmen, Sicherheitsmaßnahmen zu umgehen. Am Ende dieses Labs haben Sie praktische Erfahrungen mit den Funktionen von Nmap zur Umgehung von Firewalls gesammelt und verstehen deren Anwendungen in der Netzwerksicherheit.

Einrichten eines lokalen Dienstes für das Scannen

Bevor wir mit der Übung von Nmap-Scanning-Techniken beginnen können, ist es wichtig, einen Ziel-Dienst zum Scannen zu haben. Stellen Sie sich das wie ein Ziel auf einer Schießbahn vor. In diesem Schritt werden wir einen einfachen HTTP-Server auf unserem lokalen Rechner erstellen. Dieser Server wird als Ziel für alle unsere Scanning-Übungen dienen.

Zunächst müssen wir ein Terminal öffnen. Ein Terminal ist wie ein Befehlszentrum, in dem wir unserem Computer Anweisungen geben können. Sobald das Terminal geöffnet ist, erstellen wir eine Verzeichnisstruktur für unseren HTTP-Dienst. Ein Verzeichnis ist ähnlich wie ein Ordner auf Ihrem Computer und hilft uns, unsere Dateien zu organisieren.

mkdir -p /home/labex/project/http_service

Der Befehl mkdir steht für "make directory" (Verzeichnis erstellen). Die Option -p stellt sicher, dass, falls irgendwelche Zwischenverzeichnisse im Pfad nicht existieren, sie erstellt werden. Somit erstellt dieser Befehl ein Verzeichnis namens http_service im Pfad /home/labex/project.

Als Nächstes müssen wir in das neu erstellte Verzeichnis wechseln. Genauso wie Sie auf Ihrem Computer einen Ordner öffnen, um auf dessen Inhalt zuzugreifen, verwenden wir den Befehl cd, um in das Verzeichnis zu wechseln.

cd /home/labex/project/http_service

Jetzt erstellen wir eine einfache HTML-Datei. HTML ist die Sprache, die zur Erstellung von Webseiten verwendet wird. Unser HTTP-Server wird diese HTML-Datei an alle Personen ausliefern, die darauf zugreifen.

echo "<html><body><h1>Welcome to the StarPath Exploration Server</h1></body></html>" > index.html

Der Befehl echo gibt den Text innerhalb der Anführungszeichen aus. Das Symbol > leitet diese Ausgabe in eine Datei namens index.html um. Somit erstellt dieser Befehl eine Datei namens index.html mit dem angegebenen einfachen HTML-Inhalt.

Um sicherzustellen, dass die Datei korrekt erstellt wurde, können wir ihren Inhalt anzeigen. Wir verwenden dazu den Befehl cat.

cat index.html

Der Befehl cat liest den Inhalt einer Datei und zeigt ihn im Terminal an. Sie sollten den HTML-Inhalt sehen, den wir gerade erstellt haben:

<html><body><h1>Welcome to the StarPath Exploration Server</h1></body></html>

Jetzt ist es an der Zeit, einen einfachen HTTP-Server zu starten. Wir verwenden das integrierte Modul http.server von Python. Python ist eine Programmiersprache, und dieses Modul ermöglicht es uns, schnell einen Webserver einzurichten.

python3 -m http.server 8000

Die Option -m in Python wird verwendet, um ein Modul als Skript auszuführen. Hier führen wir das Modul http.server aus und sagen ihm, auf Port 8000 zu lauschen. Ein Port ist wie eine Tür, durch die Daten in einen Computer hinein- und hinausgehen.

Nachdem Sie diesen Befehl ausgeführt haben, sollten Sie eine Ausgabe ähnlich der folgenden sehen:

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

Diese Ausgabe zeigt an, dass der HTTP-Server läuft und auf Verbindungen auf Port 8000 wartet. Es ist wichtig, dieses Terminalfenster geöffnet zu lassen, denn wenn Sie es schließen, wird der Server stoppen.

Sie haben erfolgreich einen lokalen Dienst eingerichtet. In den folgenden Schritten werden wir diesen Dienst als Ziel für unsere Nmap-Scanning-Übungen verwenden.

Grundlegender Nmap-Scan mit Umgehung der Host-Ermittlung

In diesem Schritt werden wir unseren ersten Nmap-Scan durchführen. Bevor wir beginnen, verstehen wir zunächst ein wichtiges Konzept. Viele Firewalls sind so konfiguriert, dass sie ICMP-Echoanfragen (allgemein bekannt als "Ping") blockieren. Nmap verwendet normalerweise diese Ping-Anfragen, um zu prüfen, ob ein Host online ist, bevor es mit dem Scannen der Ports beginnt. Indem wir diese Phase der Host-Ermittlung umgehen, können wir die Ziele dennoch scannen, auch wenn der ICMP-Verkehr von der Firewall blockiert wird.

Stellen Sie zunächst sicher, dass der HTTP-Server im vorherigen Terminal weiterhin läuft. Öffnen Sie dann ein neues Terminalfenster. In diesem neuen Terminal müssen wir in das Projektverzeichnis wechseln. Im Projektverzeichnis werden alle relevanten Dateien und Konfigurationen für dieses Experiment gespeichert. Dazu verwenden wir den Befehl cd, der für "change directory" (Verzeichnis wechseln) steht. Hier ist der Befehl:

cd /home/labex/project

Jetzt, da wir im richtigen Verzeichnis sind, ist es an der Zeit, einen grundlegenden Nmap-Scan gegen unseren lokalen HTTP-Server durchzuführen. Wir verwenden die Option -Pn im Nmap-Befehl. Diese Option teilt Nmap mit, den Schritt der Host-Ermittlung zu überspringen und anzunehmen, dass das Ziel online ist. Hier ist der Befehl:

nmap -Pn --reason -p 8000 localhost

Lassen Sie uns die Befehlsoptionen aufschlüsseln, um zu verstehen, was jede Option bewirkt:

  • -Pn: Diese Option überspringt den Prozess der Host-Ermittlung. Anstatt zu prüfen, ob das Ziel online ist, indem es einen Ping sendet, nimmt Nmap direkt an, dass das Ziel online ist und beginnt mit dem Scannen der Ports.
  • --reason: Diese Option lässt Nmap den Grund anzeigen, warum ein Port sich in einem bestimmten Zustand befindet. Wenn beispielsweise ein Port geöffnet ist, wird uns Nmap sagen, warum er als geöffnet betrachtet wird.
  • -p 8000: Diese Option teilt Nmap mit, nur Port 8000 zu scannen. Wir interessieren uns für diesen bestimmten Port, weil unser lokaler HTTP-Server auf ihm läuft.
  • localhost: Dies ist das Ziel, das wir scannen möchten. In diesem Fall bezieht sich localhost auf unseren lokalen Rechner.

Nachdem Sie den Befehl ausgeführt haben, sollten Sie eine Ausgabe ähnlich der folgenden sehen:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-05 15:30 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up, received localhost-response (0.000097s latency).

PORT     STATE SERVICE      REASON
8000/tcp open  http-alt     syn-ack

Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds

Die Ausgabe zeigt, dass Port 8000 geöffnet ist und einen HTTP-Dienst ausführt. Die Spalte "REASON" sagt "syn-ack", was bedeutet, dass Nmap beim Versuch, eine Verbindung zum Port herzustellen, eine SYN-ACK-Paket von diesem Port erhalten hat. Dies ist eine Standardmethode für einen Server, um eine Verbindungsanfrage im TCP-Protokoll anzunehmen.

Als Nächstes möchten wir die Scanergebnisse in einer Datei speichern. Das Speichern der Ergebnisse ist nützlich, da es uns ermöglicht, sie später zu analysieren, mit anderen zu teilen oder mit zukünftigen Scans zu vergleichen. Um die Ergebnisse zu speichern, verwenden wir das Symbol >, das die Ausgabe des Nmap-Befehls in eine Datei umleitet. Hier ist der Befehl:

nmap -Pn --reason -p 8000 localhost > /home/labex/project/nmap_scan.txt

Schließlich überprüfen wir die gespeicherten Scanergebnisse. Wir verwenden den Befehl cat, der für "concatenate" (zusammenfügen) steht. Dieser Befehl liest den Inhalt einer Datei und zeigt ihn im Terminal an. Hier ist der Befehl:

cat /home/labex/project/nmap_scan.txt

Sie sollten die gleichen Scanergebnisse sehen, die zuvor im Terminal angezeigt wurden.

Dieser grundlegende Scan zeigt uns, wie die Option -Pn verwendet werden kann, um Firewall-Regeln zu umgehen, die Ping-Sonden blockieren. In einer realen Situation kann diese Technik sehr nützlich sein, wenn Sie Hosts scannen müssen, die von Firewalls geschützt sind, die ICMP-Verkehr blockieren.

Fortgeschrittene Firewall-Umgehung mit Paketfragmentierung

In diesem Schritt werden wir eine fortschrittlichere Technik zur Umgehung von Firewalls erkunden, die als Paketfragmentierung (packet fragmentation) bezeichnet wird. Bevor wir tiefer in das Thema eintauchen, verstehen wir zunächst, was Paketfragmentierung ist. Wenn Daten über ein Netzwerk gesendet werden, werden sie in kleinere Einheiten aufgeteilt, die als Pakete bezeichnet werden. Einige Firewalls und Intrusion Detection Systems (IDS) sind so konzipiert, dass sie diese Pakete auf Anzeichen von bösartiger Aktivität untersuchen. Allerdings können diese Sicherheitssysteme Schwierigkeiten haben, fragmentierte Pakete zu verarbeiten, also Pakete, die in noch kleinere Teile aufgeteilt wurden. Diese Schwierigkeiten können uns die Möglichkeit geben, bestimmte Sicherheitsmaßnahmen während unserer Scans zu umgehen.

Wir werden weiterhin unseren lokalen HTTP-Server als Ziel für unseren Scan verwenden. Zunächst müssen wir im Terminal in das entsprechende Verzeichnis wechseln, in dem wir unseren vorherigen Scan durchgeführt haben. In diesem Verzeichnis befinden sich unsere Projekt-Dateien, und es ist wichtig, sich in diesem Verzeichnis zu befinden, damit unsere Befehle korrekt funktionieren. Dazu führen wir den folgenden Befehl aus:

cd /home/labex/project

Jetzt, da wir im richtigen Verzeichnis sind, sind wir bereit, einen Scan mit Nmap's Fragmentierungsoption durchzuführen. Diese Option teilt die IP-Pakete in kleinere Fragmente auf, wodurch es für Paketfilter schwieriger wird, unseren Scan zu erkennen. Hier ist der Befehl, den wir verwenden werden:

sudo nmap -f -Pn --reason -p 8000 localhost

Lassen Sie uns die zusätzliche Option -f in diesem Befehl aufschlüsseln. Die Option -f teilt Nmap mit, die IP-Pakete zu fragmentieren. Dadurch wird es für Paketfilter schwieriger, die Pakete zu analysieren und zu erkennen, dass wir einen Scan durchführen.

Nachdem Sie den Befehl ausgeführt haben, sollten Sie eine Ausgabe ähnlich der folgenden sehen:

Starting Nmap 7.80 ( https://nmap.org ) at 2025-03-18 16:46 CST
Nmap scan report for localhost (127.0.0.1)
Host is up, received user-set (0.000062s latency).
Other addresses for localhost (not scanned): ::1

PORT     STATE SERVICE  REASON
8000/tcp open  http-alt syn-ack ttl 64

Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds

Diese Ausgabe zeigt uns die Ergebnisse unseres Scans. Sie sagt uns, dass der Host (localhost) erreichbar ist und dass Port 8000 geöffnet ist.

Als Nächstes möchten wir diese Ergebnisse in einer separaten Datei speichern. So können wir später auf sie zurückgreifen und sie mit anderen Scanergebnissen vergleichen. Um die Ergebnisse zu speichern, führen wir den folgenden Befehl aus:

sudo nmap -f -Pn --reason -p 8000 localhost > /home/labex/project/nmap_frag_scan.txt

Das Symbol > in diesem Befehl leitet die Ausgabe des Nmap-Scans in die angegebene Datei um.

Jetzt überprüfen wir den Inhalt dieser Datei, um sicherzustellen, dass die Ergebnisse korrekt gespeichert wurden. Wir verwenden den Befehl cat, der zum Anzeigen des Inhalts einer Datei verwendet wird:

cat /home/labex/project/nmap_frag_scan.txt

Die Scanergebnisse können ähnlich wie bei unserem vorherigen Scan aussehen, aber die zugrunde liegende Technik ist unterschiedlich. In diesem Fall hat Nmap die IP-Pakete in kleinere Teile aufgeteilt, was es für zustandslose Paketfilter schwieriger macht, den Scan zu erkennen.

Vergleichen wir die beiden Scan-Methoden, die wir bisher verwendet haben: den regulären Scan und den fragmentierten Scan. Wir erstellen eine neue Datei, um diesen Vergleich zu speichern. Hier sind die Befehle dazu:

echo "Comparing regular scan vs. fragmented scan:" > /home/labex/project/scan_comparison.txt
echo "---------------------------------------------" >> /home/labex/project/scan_comparison.txt
echo "" >> /home/labex/project/scan_comparison.txt
echo "1. Regular scan with -Pn:" >> /home/labex/project/scan_comparison.txt
cat /home/labex/project/nmap_scan.txt >> /home/labex/project/scan_comparison.txt
echo "" >> /home/labex/project/scan_comparison.txt
echo "2. Fragmented scan with -f -Pn:" >> /home/labex/project/scan_comparison.txt
cat /home/labex/project/nmap_frag_scan.txt >> /home/labex/project/scan_comparison.txt

Diese Befehle schreiben zunächst einen Header in die Vergleichsdatei und fügen dann die Ergebnisse des regulären Scans und des fragmentierten Scans zur Datei hinzu.

Jetzt untersuchen wir unseren Vergleich, indem wir den Inhalt der Vergleichsdatei anzeigen:

cat /home/labex/project/scan_comparison.txt

In unserer kontrollierten Umgebung können die Ergebnisse der beiden Scans ähnlich aussehen. In realen Szenarien können diese verschiedenen Techniken jedoch unterschiedliche Erfolgsraten bei verschiedenen Firewall-Konfigurationen haben. Die Paketfragmentierung (-f) ist besonders effektiv gegen zustandslose Paketfilter. Zustandslose Paketfilter untersuchen jedes Paket unabhängig voneinander und können die Fragmente oft nicht wieder zusammenfügen, um das vollständige Paket zu untersuchen. Dies gibt unserem fragmentierten Scan eine bessere Chance, diese Filter zu umgehen.

Für noch mehr Fragmentierung ermöglicht es Nmap, die Stufe zu erhöhen, indem Sie mehrere -f-Flags verwenden (z.B. -ff) oder indem Sie mit der Option --mtu eine benutzerdefinierte Maximum Transmission Unit (MTU)-Größe angeben. Die MTU ist die größte Größe eines Pakets, das über ein Netzwerk übertragen werden kann. Indem Sie eine benutzerdefinierte MTU angeben, können Sie steuern, wie die Pakete fragmentiert werden.

Diese Technik zeigt, wie die Paketfragmentierung als zusätzliche Methode zur Umgehung der Firewall-Erkennung bei der Durchführung von Sicherheitsbewertungen verwendet werden kann.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie Firewall-Einschränkungen identifizieren und umgehen können, indem Sie Nmap's Techniken zur Firewall-Umgehung nutzen. Zunächst haben Sie einen lokalen HTTP-Server als Ziel für den Scan eingerichtet, um eine sichere Umgebung zu schaffen, in der Sie verschiedene Scanning-Methoden üben können, ohne externe Systeme zu beeinträchtigen. Anschließend haben Sie einen grundlegenden Nmap-Scan mit der Option -Pn durchgeführt, um die Host-Ermittlung zu umgehen. Dies ist nützlich, wenn Firewalls ICMP-Echoanfragen blockieren. So konnten Sie Ports scannen, die möglicherweise hinter Firewall-Regeln verborgen sind.

Als Nächstes haben Sie eine fortschrittliche Umgehungstechnik erkundet: die Paketfragmentierung mit der Option -f. Diese Methode teilt IP-Pakete in Fragmente auf, wodurch es für zustandslose Paketfilter schwieriger wird, den Scan zu erkennen und zu blockieren. Durch den Vergleich der Ergebnisse beider Techniken haben Sie deren Unterschiede und Anwendungen verstanden. Diese Techniken sind für Sicherheitsfachleute unerlässlich, um gründliche Sicherheitsbewertungen durchzuführen. Denken Sie jedoch daran, sie nur in autorisierten Bewertungen mit entsprechender Genehmigung zu verwenden, um Gesetze und Richtlinien nicht zu verletzen.