So testen Sie Ihre Firewall-Konfiguration mit Nmap und Tcpdump

Einführung

Das Einrichten einer Firewall für Ihre Infrastruktur ist eine hervorragende Möglichkeit, grundlegende Sicherheit für Ihre Dienste bereitzustellen. Nachdem Sie eine Richtlinie entwickelt haben, mit der Sie zufrieden sind, müssen Sie im nächsten Schritt Ihre Firewall-Regeln testen. Es ist wichtig, eine gute Vorstellung davon zu bekommen, ob Ihre Firewall-Regeln das tun, was Sie glauben, und sich einen Eindruck davon zu verschaffen, wie Ihre Infrastruktur für die Außenwelt aussieht.

In diesem Handbuch werden einige einfache Tools und Techniken vorgestellt, mit denen Sie Ihre Firewall-Regeln überprüfen können. Dies sind einige der gleichen Tools, die böswillige Benutzer möglicherweise verwenden, sodass Sie sehen können, welche Informationen sie finden können, indem Sie Anforderungen an Ihre Server richten.

Voraussetzungen

In diesem Handbuch wird davon ausgegangen, dass auf mindestens einem Server eine Firewall konfiguriert ist. Sie können mit der Erstellung Ihrer Firewall-Richtlinie beginnen, indem Sie eine oder mehrere dieser Anleitungen befolgen:

In diesem Handbuch rufen wir den Server auf, der die Firewall-Richtlinien enthält, mit denen Sie dietarget testen möchten. Zusätzlich zu Ihrem Ziel müssen Sie auch Zugriff auf einen Server haben, von dem aus Sie testen können. Dieser Server befindet sich außerhalb des Netzwerks, das Ihre Firewall schützt. In diesem Handbuch verwenden wir einen Ubuntu 14.04-Server als Prüfmaschine.

Sobald Sie einen Server zum Testen und die auszuwertenden Ziele haben, können Sie mit diesem Handbuch fortfahren.

Warnung

[.warning] # Sie sollten die in diesem Handbuch beschriebenen Aktivitäten nur für die von Ihnen kontrollierte Infrastruktur zum Zweck der Sicherheitsüberwachung ausführen. Die Gesetze zum Scannen von Häfen sind in vielen Ländern ungewiss. Es ist bekannt, dass ISPs und andere Anbieter Benutzer verbieten, bei denen Port-Scans gefunden werden.
#

Die Tools, die wir zum Testen von Firewall-Richtlinien verwenden werden

Es gibt eine ganze Reihe verschiedener Tools, mit denen wir unsere Firewall-Richtlinien testen können. Einige von ihnen haben überlappende Funktionen. Wir werden nicht jedes mögliche Werkzeug behandeln. Stattdessen werden einige allgemeine Kategorien von Prüfungswerkzeugen behandelt und die in diesem Handbuch verwendeten Werkzeuge beschrieben.

Paketanalysatoren

Mit Paketanalysatoren kann der gesamte Netzwerkverkehr, der über eine Schnittstelle übertragen wird, detailliert überwacht werden. Die meisten Paketanalysatoren haben die Möglichkeit, in Echtzeit zu arbeiten, die gesendeten oder empfangenen Pakete anzuzeigen oder Paketinformationen in eine Datei zu schreiben und zu einem späteren Zeitpunkt zu verarbeiten. Mit der Paketanalyse können wir detailliert feststellen, welche Arten von Antworten unsere Zielcomputer an Hosts im offenen Netzwerk zurücksenden.

Für die Zwecke unseres Handbuchs verwenden wir das Tooltcpdump. Dies ist eine gute Option, da sie auf Linux-Systemen leistungsstark, flexibel und allgegenwärtig ist. Wir werden es verwenden, um die Rohpakete zu erfassen, während wir unsere Tests durchführen, falls wir das Transkript für eine spätere Analyse benötigen. Einige andere beliebte Optionen sind Wireshark (odertshark, sein Befehlszeilen-Cousin) undtcpflow, mit denen ganze TCP-Konversationen auf organisierte Weise zusammengesetzt werden können.

Port-Scanner

Um den Datenverkehr und die Antworten für die Erfassung durch unseren Paketanalysator zu generieren, verwenden wir einen Port-Scanner. Mit Port-Scannern können verschiedene Pakettypen erstellt und an Remote-Hosts gesendet werden, um den vom Server akzeptierten Verkehrstyp zu ermitteln. Böswillige Benutzer verwenden dieses Tool häufig als Erkennungswerkzeug, um nach anfälligen Diensten zu suchen, die ausgenutzt werden können (ein Teil des Grundes für die Verwendung einer Firewall). Wir werden es daher verwenden, um zu ermitteln, was ein Angreifer entdecken könnte.

In diesem Handbuch verwenden wir das Netzwerkzuordnungs- und Port-Scan-Tool vonnmap. Wir könnennmap verwenden, um Pakete verschiedener Typen zu senden, um herauszufinden, welche Dienste sich auf unserem Zielcomputer befinden und welche Firewall-Regeln ihn schützen.

Einrichten des Überwachungscomputers

Bevor wir anfangen, sollten wir sicherstellen, dass wir über die oben diskutierten Tools verfügen. Wir könnentcpdump aus Ubuntus Repositories erhalten. Mit dieser Methode können wir auchnmap erhalten, aber die Repository-Version ist wahrscheinlich veraltet. Stattdessen werden wir einige Pakete installieren, um uns bei der Software-Kompilierung zu unterstützen, und diese dann selbst aus dem Quellcode erstellen.

Aktualisieren Sie den lokalen Paketindex und installieren Sie die Software, falls diese noch nicht verfügbar ist. Wir werden auchnmap von unserem System löschen, wenn es bereits installiert ist, um Konflikte zu vermeiden:

sudo apt-get update
sudo apt-get purge nmap
sudo apt-get install tcpdump build-essential libssl-dev

Nachdem wir nun unsere Kompilierungswerkzeuge und die SSL-Entwicklungsbibliothek haben, können wir die neueste Version vonnmap von der Download-Seite aufofficial site herunterladen. Öffnen Sie die Seite in Ihrem Webbrowser.

Scrollen Sie nach unten zum Abschnitt "Source Code Distribution". Unten sehen Sie einen Link zum Quellcode für die neueste Version vonnmap. Zum Zeitpunkt des Schreibens sieht es so aus:

Nmap latest version

Klicken Sie mit der rechten Maustaste auf den Link und kopieren Sie die Linkadresse.

Wechseln Sie auf Ihrem Prüfgerät in Ihr Ausgangsverzeichnis und laden Sie mitwget den eingefügten Link herunter. Stellen Sie sicher, dass Sie den folgenden Link aktualisieren, um die aktuellste Version wiederzugeben, die Sie von der Site kopiert haben:

cd ~
wget https://nmap.org/dist/nmap-6.49BETA4.tar.bz2

Dekomprimieren Sie die heruntergeladene Datei und verschieben Sie sie in das resultierende Verzeichnis, indem Sie Folgendes eingeben:

tar xjvf nmap*
cd nmap*

Konfigurieren und kompilieren Sie den Quellcode, indem Sie Folgendes eingeben:

./configure
make

Sobald die Kompilierung abgeschlossen ist, können Sie die resultierenden ausführbaren Dateien und unterstützenden Dateien auf Ihrem System installieren, indem Sie Folgendes eingeben:

sudo make install

Bestätigen Sie Ihre Installation, indem Sie Folgendes eingeben:

nmap -V

Die Ausgabe sollte mit der Version übereinstimmen, die Sie von dernmap-Website heruntergeladen haben:

OutputNmap version 6.49BETA4 ( https://nmap.org )
Platform: x86_64-unknown-linux-gnu
Compiled with: nmap-liblua-5.2.3 openssl-1.0.1f nmap-libpcre-7.6 nmap-libpcap-1.7.3 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: epoll poll select

Als Nächstes erstellen wir ein Verzeichnis, in dem wir unsere Scanergebnisse speichern können:

mkdir ~/scan_results

Um sicherzustellen, dass Sie saubere Ergebnisse erhalten, beenden Sie alle Sitzungen, die möglicherweise zwischen Ihrem Auditing-System und dem Zielsystem geöffnet sind. Dies umfasst SSH-Sitzungen, alle HTTP (S) -Verbindungen, die Sie möglicherweise in einem Webbrowser hergestellt haben usw.

Scannen Sie Ihr Ziel auf offene TCP-Ports

Nachdem wir den Server und die Dateien bereit haben, scannen wir zunächst unseren Zielhost auf offene TCP-Ports.

Es gibt tatsächlich einige TCP-Scans, dienmap ausführen können. Am besten beginnen Sie normalerweise mit einem SYN-Scan, der auch als "halboffener Scan" bezeichnet wird, da nie eine vollständige TCP-Verbindung ausgehandelt wird. Dies wird häufig von Angreifern verwendet, da sie sich auf einigen Intrusion Detection-Systemen nicht registrieren können, da sie niemals einen vollständigen Handshake ausführen.

Einrichten der Paketerfassung

Bevor wir scannen, richten wirtcpdump ein, um den durch den Test erzeugten Verkehr zu erfassen. Auf diese Weise können wir die gesendeten und empfangenen Pakete später genauer analysieren, wenn dies erforderlich ist. Erstellen wir ein Verzeichnis innerhalb von~/scan_results, damit wir die mit unserem SYN-Scan verbundenen Dateien zusammenhalten können:

mkdir ~/scan_results/syn_scan

Wir können die Erfassung vontcpdumptarten und die Ergebnisse mit dem folgenden Befehl in eine Datei in unserem Verzeichnis~/scan_results/syn_scanchreiben:

sudo tcpdump host target_ip_addr -w ~/scan_results/syn_scan/packets

Standardmäßig wirdtcpdump im Vordergrund ausgeführt. Um unserennmap-Scan im selben Fenster auszuführen, müssen wir dentcpdump-Prozess anhalten und ihn dann im Hintergrund neu starten.

Wir können den laufenden Prozess anhalten, indem wirCTRL-Z drücken:

CTRL-Z

Dies wird den laufenden Prozess anhalten:

Output^Z
[1]+  Stopped                 sudo tcpdump host target_ip_addr -w ~/scan_results/syn_scan/packets

Jetzt können Sie den Job im Hintergrund neu starten, indem Siebg eingeben:

bg

Sie sollten eine ähnliche Ausgabezeile sehen, diesmal ohne die Bezeichnung "Gestoppt" und mit einem kaufmännischen Und am Ende, um anzuzeigen, dass der Prozess im Hintergrund ausgeführt wird:

Output[1]+ sudo tcpdump host target_ip_addr -w ~/scan_results/syn_scan/packets &

Der Befehl wird jetzt im Hintergrund ausgeführt und sucht nach Paketen, die zwischen unserem Audit und den Zielcomputern gesendet werden. Wir können jetzt unseren SYN-Scan ausführen.

Führen Sie den SYN-Scan aus

Wenntcpdump unseren Datenverkehr zum Zielcomputer aufzeichnet, können wirnmap ausführen. Wir werden die folgenden Flags verwenden, umnmap zu erhalten, um die erforderlichen Aktionen auszuführen:

  • -sS: Hiermit wird ein SYN-Scan gestartet. Dies ist technisch gesehen der Standard-Scan, dennmap ausführt, wenn kein Scan-Typ angegeben ist. Wir werden ihn hier jedoch explizit einfügen.

  • -Pn: Dies weistnmap an, den Hosterkennungsschritt zu überspringen, wodurch der Test vorzeitig abgebrochen wird, wenn der Host nicht auf einen Ping reagiert. Da wir wissen, dass das Ziel online ist, können wir dies überspringen.

  • -p-: Standardmäßig versuchen SYN-Scans nur die 1000 am häufigsten verwendeten Ports. Dies weistnmap an, jeden verfügbaren Port zu überprüfen.

  • -T4: Hiermit wird ein Zeitprofil fürnmap festgelegt, das den Test beschleunigt, wenn das Risiko besteht, dass die Ergebnisse etwas ungenauer sind. 0 ist die langsamste und 5 die schnellste. Da wir jeden Port scannen, können wir diesen als Basiswert verwenden und später alle Ports erneut überprüfen, die möglicherweise falsch gemeldet wurden.

  • -vv: Dies erhöht die Ausführlichkeit der Ausgabe.

  • --reason: Hiermit wirdnmap angewiesen, den Grund anzugeben, warum der Status eines Ports auf eine bestimmte Weise gemeldet wurde.

  • -oN: Hiermit werden die Ergebnisse in eine Datei geschrieben, die wir für spätere Analysen verwenden können.

Note

[.note] # Eine Sache, die Sie beachten sollten, ist, dass Sie zum Überprüfen von IPv6 Ihren Befehlen das Flag-6hinzufügen müssen. Da die meisten vorausgesetzten Lernprogramme keinen IPv6-Datenverkehr akzeptieren, überspringen wir IPv6 für dieses Handbuch. Fügen Sie dieses Flag hinzu, wenn Ihre Firewall IPv6-Verkehr akzeptiert.
#

Zusammen sieht der Befehl ungefähr so ​​aus:

sudo nmap -sS -Pn -p- -T4 -vv --reason -oN ~/scan_results/syn_scan/nmap.results target_ip_addr

Selbst wenn die Zeitvorlage auf 4 eingestellt ist, wird der Scan wahrscheinlich einige Zeit in Anspruch nehmen, da er 65.535 Ports durchläuft (mein Testlauf dauerte ungefähr vierzig Minuten). Es werden Ergebnisse gedruckt, die ungefähr so ​​aussehen:

OutputStarting Nmap 6.49BETA4 ( https://nmap.org ) at 2015-08-26 16:54 EDT
Initiating Parallel DNS resolution of 1 host. at 16:54
Completed Parallel DNS resolution of 1 host. at 16:54, 0.12s elapsed
Initiating SYN Stealth Scan at 16:54
Scanning 198.51.100.15 [65535 ports]
Discovered open port 22/tcp on 198.51.100.15
Discovered open port 80/tcp on 198.51.100.15
SYN Stealth Scan Timing: About 6.16% done; ETC: 17:02 (0:07:52 remaining)
SYN Stealth Scan Timing: About 8.60% done; ETC: 17:06 (0:10:48 remaining)

. . .

Stoppen Sie die tcpdump-Paketerfassung

Sobald der Scan abgeschlossen ist, können wir unserentcpdump-Prozess wieder in den Vordergrund stellen und stoppen.

Bringen Sie es aus dem Hintergrund, indem Sie Folgendes eingeben:

fg

Beenden Sie den Vorgang, indem Sie die Steuertaste gedrückt halten und "c" drücken:

CTRL-C

Analyse der Ergebnisse

Sie sollten jetzt zwei Dateien in Ihrem~/scan_results/syn_scan-Verzeichnis haben. Einer mit dem Namenpackets, der durch den Lauf vontcpdump generiert wurde, und einer mit dem Namennmap mit dem Namennmap.results.

Schauen wir uns zuerst dienmap.results-Datei an:

less ~/scan_results/syn_scan/nmap.results

~/scan_results/syn_scan/nmap.results

# Nmap 6.49BETA4 scan initiated Wed Aug 26 17:05:13 2015 as: nmap -sS -Pn -p- -T4 -vv --reason -oN /home/user/scan_results/syn_scan/nmap.results 198.51.100.15
Increasing send delay for 198.51.100.15 from 0 to 5 due to 9226 out of 23064 dropped probes since last increase.
Increasing send delay for 198.51.100.15 from 5 to 10 due to 14 out of 34 dropped probes since last increase.
Nmap scan report for 198.51.100.15
Host is up, received user-set (0.00097s latency).
Scanned at 2015-08-26 17:05:13 EDT for 2337s
Not shown: 65533 closed ports
Reason: 65533 resets
PORT   STATE SERVICE REASON
22/tcp open  ssh     syn-ack ttl 63
80/tcp open  http    syn-ack ttl 63

Read data files from: /usr/local/bin/../share/nmap
# Nmap done at Wed Aug 26 17:44:10 2015 -- 1 IP address (1 host up) scanned in 2336.85 seconds

Der hervorgehobene Bereich oben enthält die Hauptergebnisse des Scans. Wir können sehen, dass Port 22 und Port 80 auf dem gescannten Host geöffnet sind, um SSH- und HTTP-Verkehr zuzulassen. Wir können auch sehen, dass 65.533 Häfen geschlossen wurden. Ein weiteres mögliches Ergebnis wäre "gefiltert". Gefiltert bedeutet, dass diese Ports als von einem Element im Netzwerkpfad gestoppt identifiziert wurden. Es kann sich um eine Firewall auf dem Ziel handeln, aber es können auch Regeln auf einem der Zwischenhosts zwischen dem Prüf- und dem Zielcomputer gefiltert werden.

Wenn wir den tatsächlichen Paketverkehr sehen möchten, der an das Ziel gesendet und von diesem empfangen wurde, können wir diepackets-Datei wie folgt intcpdump zurücklesen:

sudo tcpdump -nn -r ~/scan_results/syn_scan/packets | less

Diese Datei enthält die gesamte Konversation, die zwischen den beiden Hosts stattgefunden hat. Sie können auf verschiedene Arten filtern.

Um beispielsweise nur den Verkehrsent zum Ziel anzuzeigen, können Sie Folgendes eingeben:

sudo tcpdump -nn -r ~/scan_results/syn_scan/packets 'dst target_ip_addr' | less

Um nur den Antwortverkehr anzuzeigen, können Sie den Wert für "dst" in "src" ändern:

sudo tcpdump -nn -r ~/scan_results/syn_scan/packets 'src target_ip_addr' | less

Offene TCP-Ports würden auf diese Anfragen mit einem SYN-Paket antworten. Mit einem Filter wie diesem können wir direkt nach Antworten für diesen Typ suchen:

sudo tcpdump -nn -r ~/scan_results/syn_scan/packets 'src target_ip_addr and tcp[tcpflags] & tcp-syn != 0' | less

Dies zeigt nur die erfolgreichen SYN-Antworten an und sollte mit den Ports übereinstimmen, die Sie im Lauf vonnmapgesehen haben:

Outputreading from file packets, link-type EN10MB (Ethernet)
17:05:13.557597 IP 198.51.100.15.22 > 198.51.100.2.63872: Flags [S.], seq 2144564104, ack 4206039348, win 29200, options [mss 1460], length 0
17:05:13.558085 IP 198.51.100.15.80 > 198.51.100.2.63872: Flags [S.], seq 3550723926, ack 4206039348, win 29200, options [mss 1460], length 0

Sie können die Daten nach Belieben genauer analysieren. Es wurde alles für die asynchrone Verarbeitung und Analyse erfasst.

Scannen Sie Ihr Ziel auf offene UDP-Ports

Nachdem Sie nun einen guten Überblick über die Ausführung dieser Tests haben, können Sie einen ähnlichen Vorgang ausführen, um nach offenen UDP-Ports zu suchen.

Einrichten der Paketerfassung

Erstellen wir noch einmal ein Verzeichnis, in dem unsere Ergebnisse gespeichert werden:

mkdir ~/scan_results/udp_scan

Starten Sie die Erfassung vontcpdump erneut. Schreiben Sie diesmal die Datei in das neue Verzeichnis~/scan_results/udp_scan:

sudo tcpdump host target_ip_addr -w ~/scan_results/udp_scan/packets

Unterbrechen Sie den Vorgang und stellen Sie ihn in den Hintergrund:

CTRL-Z
bg

Führen Sie den UDP-Scan aus

Jetzt können wir den UDP-Scan ausführen. Aufgrund der Art des UDP-Protokolls dauert dieser Scan normalerweisesignificantly länger als der SYN-Scan. Tatsächlich kann es mehr als einen Tag dauern, wenn Sie jeden Port im System scannen. UDP ist ein verbindungsloses Protokoll. Wenn Sie also keine Antwort erhalten, kann dies bedeuten, dass der Port des Ziels blockiert ist, akzeptiert wurde oder das Paket verloren gegangen ist. Um zu versuchen, zwischen diesen zu unterscheiden, müssennmap zusätzliche Pakete erneut übertragen, um eine Antwort zu erhalten.

Die meisten Flags sind die gleichen, die wir für den SYN-Scan verwendet haben. Tatsächlich ist die einzige neue Flagge:

  • -sU: Hiermit wirdnmap angewiesen, einen UDP-Scan durchzuführen.

Beschleunigung des UDP-Tests

Wenn Sie sich Sorgen über die Zeit machen, die dieser Test in Anspruch nimmt, möchten Sie möglicherweise zunächst nur eine Teilmenge Ihrer UDP-Ports testen. Sie können nur die 1000 häufigsten Ports testen, indem Sie das Flag-p-weglassen. Dies kann Ihre Scan-Zeit erheblich verkürzen. Wenn Sie jedoch ein vollständiges Bild wünschen, müssen Sie später zurückgehen und Ihren gesamten Portbereich scannen.

Da Sie Ihre eigene Infrastruktur scannen, besteht die beste Möglichkeit, die UDP-Scans zu beschleunigen, darin, die ICMP-Ratenbeschränkung auf dem Zielsystem vorübergehend zu deaktivieren. Normalerweise begrenzen Linux-Hosts ICMP-Antworten auf 1 pro Sekunde (dies ist normalerweise eine gute Sache, aber nicht für unsere Prüfung), was bedeutet, dass ein vollständiger UDP-Scan über 18 Stunden dauern würde. Sie können diese Einstellung auf Ihrem Zielcomputer überprüfen, indem Sie Folgendes eingeben:

sudo sysctl net.ipv4.icmp_ratelimit
Outputnet.ipv4.icmp_ratelimit = 1000

Die "1000" ist die Anzahl der Millisekunden zwischen den Antworten. Wir können diese Geschwindigkeitsbegrenzung auf dem Zielsystem vorübergehend deaktivieren, indem wir Folgendes eingeben:

sudo sysctl -w net.ipv4.icmp_ratelimit=0

Es ist sehr wichtig, diesen Wert nach Ihrem Test wiederherzustellen.

Test ausführen

Stellen Sie sicher, dass Sie die Ergebnisse in das Verzeichnis~/scan_results/udp_scanchreiben. Insgesamt sollte der Befehl so aussehen:

sudo nmap -sU -Pn -p- -T4 -vv --reason -oN ~/scan_results/udp_scan/nmap.results target_ip_addr

Selbst wenn die ICMP-Ratenbeschränkung für das Ziel deaktiviert war, dauerte dieser Scan während unseres Testlaufs etwa 2 Stunden und 45 Minuten. Nachdem der Scan abgeschlossen ist, sollten Sie Ihr ICMP-Ratenlimit (falls Sie es geändert haben) auf dem Zielcomputer zurücksetzen:

sudo sysctl -w net.ipv4.icmp_ratelimit=1000

Stoppen Sie die tcpdump-Paketerfassung

Bringen Sie den Prozesstcpdumpauf Ihrem Prüfcomputer wieder in den Vordergrund, indem Sie Folgendes eingeben:

fg

Stoppen Sie die Paketerfassung, indem Sie die Taste gedrückt halten und "c" drücken:

CTRL-c

Analyse der Ergebnisse

Jetzt können wir uns die generierten Dateien ansehen.

Die resultierendenmap.results-Datei sollte der zuvor gezeigten ziemlich ähnlich sehen:

less ~/scan_results/udp_scan/nmap.results

~/scan_results/udp_scan/nmap.results

# Nmap 6.49BETA4 scan initiated Thu Aug 27 12:42:42 2015 as: nmap -sU -Pn -p- -T4 -vv --reason -oN /home/user/scan_results/udp_scan/nmap.results 198.51.100.15
Increasing send delay for 198.51.100.15 from 0 to 50 due to 10445 out of 26111 dropped probes since last increase.
Increasing send delay for 198.51.100.15 from 50 to 100 due to 11 out of 23 dropped probes since last increase.
Increasing send delay for 198.51.100.15 from 100 to 200 due to 3427 out of 8567 dropped probes since last increase.
Nmap scan report for 198.51.100.15
Host is up, received user-set (0.0010s latency).
Scanned at 2015-08-27 12:42:42 EDT for 9956s
Not shown: 65532 closed ports
Reason: 65532 port-unreaches
PORT    STATE         SERVICE REASON
22/udp  open|filtered ssh     no-response
80/udp  open|filtered http    no-response
443/udp open|filtered https   no-response

Read data files from: /usr/local/bin/../share/nmap
# Nmap done at Thu Aug 27 15:28:39 2015 -- 1 IP address (1 host up) scanned in 9956.97 seconds

Ein wesentlicher Unterschied zwischen diesem Ergebnis und dem früheren SYN-Ergebnis ist wahrscheinlich die Anzahl der mitopen|filtered gekennzeichneten Ports. Dies bedeutet, dassnmapnicht feststellen konnte, ob das Fehlen einer Antwort dazu führte, dass ein Dienst den Datenverkehr akzeptierte oder ob er von einer Firewall oder einem Filtermechanismus entlang des Übermittlungspfads gelöscht wurde.

Die Analyse der Ausgabe vontcpdumpist ebenfalls erheblich schwieriger, da keine Verbindungsflags vorhanden sind und ICMP-Antworten auf UDP-Anforderungen abgeglichen werden müssen.

Wir können sehen, wienmap viele Pakete an die Ports senden musste, die alsopen|filtered gemeldet wurden, indem wir nach dem UDP-Verkehr zu einem der gemeldeten Ports fragen:

sudo tcpdump -nn -Q out -r ~/scan_results/udp_scan/packets 'udp and port 22'

Sie werden wahrscheinlich etwas sehen, das so aussieht:

Outputreading from file /home/user/scan_results/udp_scan/packets, link-type EN10MB (Ethernet)
14:57:40.801956 IP 198.51.100.2.60181 > 198.51.100.15.22: UDP, length 0
14:57:41.002364 IP 198.51.100.2.60182 > 198.51.100.15.22: UDP, length 0
14:57:41.202702 IP 198.51.100.2.60183 > 198.51.100.15.22: UDP, length 0
14:57:41.403099 IP 198.51.100.2.60184 > 198.51.100.15.22: UDP, length 0
14:57:41.603431 IP 198.51.100.2.60185 > 198.51.100.15.22: UDP, length 0
14:57:41.803885 IP 198.51.100.2.60186 > 198.51.100.15.22: UDP, length 0

Vergleichen Sie dies mit den Ergebnissen, die wir von einem der gescannten Ports sehen, der als "geschlossen" markiert war:

sudo tcpdump -nn -Q out -r ~/scan_results/udp_scan/packets 'udp and port 53'
Outputreading from file /home/user/scan_results/udp_scan/packets, link-type EN10MB (Ethernet)
13:37:24.219270 IP 198.51.100.2.60181 > 198.51.100.15.53: 0 stat [0q] (12)

Wir können versuchen, den Prozess, dennmap durchläuft, manuell zu rekonstruieren, indem wir zuerst eine Liste aller Ports zusammenstellen, an die wir UDP-Pakete senden, indem wir Folgendes verwenden:

sudo tcpdump -nn -Q out -r ~/scan_results/udp_scan/packets "udp" | awk '{print $5;}' | awk 'BEGIN { FS = "." } ; { print $5 +0}' | sort -u | tee outgoing

Dann können wir sehen, welche ICMP-Pakete wir zurückerhalten haben und sagen, dass der Port nicht erreichbar war:

sudo tcpdump -nn -Q in -r ~/scan_results/udp_scan/packets "icmp" |  awk '{print $10,$11}' | grep unreachable | awk '{print $1}' | sort -u | tee response

Wir können sehen, welche UDP-Pakete niemals eine ICMP-Antwort erhalten haben, indem wir Folgendes eingeben:

comm -3 outgoing response

Dies sollte größtenteils mit der Liste der Ports übereinstimmen, dienmapgemeldet haben (es kann einige Fehlalarme von verlorenen Rückgabepaketen enthalten).

Host- und Service-Ermittlung

Wir können einige zusätzliche Tests für unser Ziel ausführen, um festzustellen, obnmap das laufende Betriebssystem oder eine der Dienstversionen identifizieren können.

Erstellen wir ein Verzeichnis, in dem unsere Versionsergebnisse gespeichert werden:

mkdir ~/scan_results/versions

Ermitteln der Dienstversionen auf dem Server

Wir können versuchen, die Versionen von Diensten, die auf dem Ziel ausgeführt werden, durch einen Prozess zu erraten, der als Fingerabdruck bezeichnet wird. Wir rufen Informationen vom Server ab und vergleichen sie mit bekannten Versionen in unserer Datenbank.

Eintcpdump wäre in diesem Szenario nicht allzu nützlich, daher können wir es überspringen. Wenn Sie es trotzdem erfassen möchten, befolgen Sie den Vorgang, den wir das letzte Mal verwendet haben.

Der von uns verwendetenmap-Scan wird durch das-sV-Flag ausgelöst. Da wir bereits SYN- und UDP-Scans durchgeführt haben, können wir genau die Ports übergeben, die wir mit dem-p-Flag betrachten möchten. Hier sehen wir uns 22 und 80 (die Ports, die in unserem SYN-Scan angezeigt wurden) an:

sudo nmap -sV -Pn -p 22,80 -vv --reason -oN ~/scan_results/versions/service_versions.nmap target_ip_addr

Wenn Sie die resultierende Datei anzeigen, erhalten Sie möglicherweise Informationen über den ausgeführten Dienst, abhängig davon, wie "gesprächig" oder sogar wie eindeutig die Antwort des Dienstes ist:

less ~/scan_results/versions/service_versions.nmap

~/scan_results/versions/service_versions.nmap

# Nmap 6.49BETA4 scan initiated Thu Aug 27 15:46:12 2015 as: nmap -sV -Pn -p 22,80 -vv --reason -oN /home/user/scan_results/versions/service_versions.nmap 198.51.100.15
Nmap scan report for 198.51.100.15
Host is up, received user-set (0.0011s latency).
Scanned at 2015-08-27 15:46:13 EDT for 8s
PORT   STATE SERVICE REASON         VERSION
22/tcp open  ssh     syn-ack ttl 63 OpenSSH 6.6.1p1 Ubuntu 2ubuntu2 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    syn-ack ttl 63 nginx 1.4.6 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Read data files from: /usr/local/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Thu Aug 27 15:46:21 2015 -- 1 IP address (1 host up) scanned in 8.81 seconds

Hier können Sie sehen, dass der Test die SSH-Serverversion und die Linux-Distribution, die ihn gepackt hat, sowie die akzeptierte SSH-Protokollversion identifizieren konnte. Es erkannte auch die Version von Nginx und identifizierte sie erneut als mit einem Ubuntu-Paket übereinstimmend.

Ermitteln des Host-Betriebssystems

Wir können versuchen,nmapdas Host-Betriebssystem anhand der Eigenschaften seiner Software und der Antworten erraten zu lassen. Dies funktioniert ähnlich wie die Versionierung von Diensten. Wir werden dentcpdump-Lauf dieses Tests erneut weglassen, aber Sie können ihn ausführen, wenn Sie möchten.

Das Flag, das wir zur Durchführung der Betriebssystemerkennung benötigen, ist-O (der großgeschriebene Buchstabe „O“). Ein vollständiger Befehl könnte ungefähr so ​​aussehen:

sudo nmap -O -Pn -vv --reason -oN ~/scan_results/versions/os_version.nmap target_ip_addr

Wenn Sie die Ausgabedatei anzeigen, wird möglicherweise Folgendes angezeigt:

less ~/scan_results/versions/os_version.nmap

~/scan_results/versions/os_versions.nmap

# Nmap 6.49BETA4 scan initiated Thu Aug 27 15:53:54 2015 as: nmap -O -Pn -vv --reason -oN /home/user/scan_results/versions/os_version.nmap 198.51.100.15
Increasing send delay for 198.51.100.15 from 0 to 5 due to 65 out of 215 dropped probes since last increase.
Increasing send delay for 198.51.100.15 from 5 to 10 due to 11 out of 36 dropped probes since last increase.
Increasing send delay for 198.51.100.15 from 10 to 20 due to 11 out of 35 dropped probes since last increase.
Increasing send delay for 198.51.100.15 from 20 to 40 due to 11 out of 29 dropped probes since last increase.
Increasing send delay for 198.51.100.15 from 40 to 80 due to 11 out of 31 dropped probes since last increase.
Nmap scan report for 198.51.100.15
Host is up, received user-set (0.0012s latency).
Scanned at 2015-08-27 15:53:54 EDT for 30s
Not shown: 998 closed ports
Reason: 998 resets
PORT   STATE SERVICE REASON
22/tcp open  ssh     syn-ack ttl 63
80/tcp open  http    syn-ack ttl 63
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=6.49BETA4%E=4%D=8/27%OT=22%CT=1%CU=40800%PV=N%DS=2%DC=I%G=Y%TM=55
OS:DF6AF0%P=x86_64-unknown-linux-gnu)SEQ(SP=F5%GCD=1%ISR=106%TI=Z%CI=Z%TS=8
OS:)OPS(O1=M5B4ST11NW8%O2=M5B4ST11NW8%O3=M5B4NNT11NW8%O4=M5B4ST11NW8%O5=M5B
OS:4ST11NW8%O6=M5B4ST11)WIN(W1=7120%W2=7120%W3=7120%W4=7120%W5=7120%W6=7120
OS:)ECN(R=Y%DF=Y%T=40%W=7210%O=M5B4NNSNW8%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+
OS:%F=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
OS:T5(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A
OS:=Z%F=R%O=%RD=0%Q=)T7(R=N)U1(R=Y%DF=N%T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPC
OS:K=G%RUCK=G%RUD=G)U1(R=N)IE(R=N)

Uptime guess: 1.057 days (since Wed Aug 26 14:32:23 2015)
Network Distance: 2 hops
TCP Sequence Prediction: Difficulty=245 (Good luck!)
IP ID Sequence Generation: All zeros

Read data files from: /usr/local/bin/../share/nmap
OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Thu Aug 27 15:54:24 2015 -- 1 IP address (1 host up) scanned in 30.94 seconds

Wir können sehen, dass in diesem Fallnmap keine Vermutungen für das Betriebssystem hat, basierend auf der Signatur, die es gesehen hat. Wenn es mehr Informationen erhalten hätte, würden wahrscheinlich verschiedene Prozentsätze angezeigt, die angeben, wie die Signatur des Zielcomputers mit den Betriebssystemsignaturen in seinen Datenbanken übereinstimmt. Sie können die Fingerabdrucksignatur sehen, dienmapvom Ziel empfangen hat, unterhalb derTCP/IP fingerprint:-Zeile.

Mithilfe der Betriebssystemidentifikation kann ein Angreifer feststellen, welche Exploits für das System nützlich sein können. Wenn Sie Ihre Firewall so konfigurieren, dass weniger Anfragen beantwortet werden, kann dies die Genauigkeit einiger dieser Erkennungsmethoden beeinträchtigen.

Fazit

Wenn Sie Ihre Firewall testen und ein Bewusstsein dafür aufbauen, wie Ihr internes Netzwerk für einen externen Angreifer aussieht, können Sie Ihr Risiko minimieren. Die Informationen, die Sie bei der Überprüfung Ihrer eigenen Infrastruktur erhalten, eröffnen möglicherweise eine Konversation darüber, ob Ihre Richtlinienentscheidungen überprüft werden müssen, um die Sicherheit zu erhöhen. Es kann auch Lücken in Ihrer Sicherheit aufdecken, die möglicherweise aufgrund falscher Regelreihenfolge oder vergessener Testrichtlinien aufgetreten sind. Es wird empfohlen, dass Sie Ihre Richtlinien regelmäßig mit den neuesten Scandatenbanken testen, um Ihr derzeitiges Sicherheitsniveau zu verbessern oder zumindest aufrechtzuerhalten.

Schauen Sie sichthis guide an, um sich ein Bild von einigen Richtlinienverbesserungen für Ihre Firewall zu machen.