20 KiB
500/udp - Pentesting IPsec/IKE VPN
Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks beworben sehen möchten oder HackTricks als PDF herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merch
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud Github-Repositories einreichen.
Grundlegende Informationen
IPsec wird weithin als die Haupttechnologie zur Sicherung von Kommunikationen zwischen Netzwerken (LAN-zu-LAN) und von entfernten Benutzern zum Netzwerkgateway (Remote Access) anerkannt und dient als Grundlage für Unternehmens-VPN-Lösungen.
Die Einrichtung einer Sicherheitsvereinbarung (SA) zwischen zwei Punkten wird von IKE verwaltet, der 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: Es wird ein sicherer Kanal zwischen zwei Endpunkten erstellt. Dies wird durch die Verwendung eines Pre-Shared Key (PSK) oder Zertifikate erreicht, wobei entweder der Hauptmodus, der drei Paare von Nachrichten umfasst, oder aggressiver Modus verwendet wird.
- Phase 1.5: Obwohl nicht obligatorisch, überprüft diese Phase, bekannt als Erweiterte Authentifizierungsphase, die Identität des Benutzers, der versucht, sich zu verbinden, 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 erhöhen.
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)
Finden einer gültigen Transformation
Die IPSec-Konfiguration kann so vorbereitet werden, dass sie nur eine oder 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 vorab gemeinsam vereinbarten Schlüssel als Authentifizierungstyp, Diffie-Hellman 1 oder 2 als Algorithmus für die Schlüssel verteilung und 28800 Sekunden als Lebensdauer.
Daher ist es das erste, was Sie tun müssen, eine gültige Transformation zu finden, 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 vereinbarten 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, IKE-Verhandlungen durchzuführen, und dass einer oder mehrere der von Ihnen vorgeschlagenen Transformationen akzeptabel sind (eine gültige Transformation wird im Output 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).
Dann, in diesem Fall haben wir bereits eine gültige Transformation, aber wenn Sie im 3. Fall sind, 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 jedes einzelne mit ike-scan per Brute-Force angreifen (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 nicht funktioniert hat, antwortet der Server möglicherweise auch ohne Handshakes auf gültige Transformationen. In diesem Fall könnten Sie denselben Brute-Force-Vorgang im aggressiven Modus versuchen:
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 Bruteforce zu erzwingen:
./ikeforce.py <IP> # No parameters are required for scan -h for additional help
Im 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 der 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 eine Gruppe verwendet wird, die nicht stark ist (wie 1.024-Bit oder kleiner).
Server-Fingerprinting
Dann können Sie ike-scan verwenden, um zu versuchen, den Hersteller des Geräts zu entdecken. Das Tool sendet einen ersten Vorschlag und stoppt das Wiederholen. Anschließend wird analysiert, wie lange die Zeitdifferenz zwischen den empfangenen Nachrichten vom Server und dem übereinstimmenden Antwortmuster ist, damit der Pentester erfolgreich den VPN-Gateway-Hersteller identifizieren kann. Darüber hinaus verwenden einige VPN-Server die optionale Vendor ID (VID)-Nutzlast mit IKE.
Geben Sie die gültige Transformation an, wenn erforderlich (mit --trans)
Wenn IKE den Hersteller erkennt, wird er ihn ausdrucken:
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.
Ermittlung der richtigen ID (Gruppenname)
Um den Hash erfassen zu dürfen, benötigen Sie eine gültige Transformation, die den Aggressive-Modus unterstützt, sowie die richtige ID (Gruppenname). Wahrscheinlich kennen Sie den gültigen Gruppennamen nicht, daher müssen Sie ihn per Brute-Force ermitteln.
Dazu empfehle ich Ihnen 2 Methoden:
Brute-Force-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, wird wahrscheinlich diese Methode des Brute-Forcing funktionieren. Wenn ein Hash zurückgegeben wird, bedeutet dies, dass ein gefälschter Hash für eine gefälschte ID zurückgesendet wird, daher wird diese Methode nicht zuverlässig sein, um die ID per Brute-Force zu ermitteln. Zum Beispiel könnte ein gefälschter Hash zurückgegeben werden (das passiert in modernen Versionen):
Aber wie bereits erwähnt, wenn kein Hash zurückgegeben wird, sollten Sie versuchen, gängige Gruppennamen mit ike-scan per Brute-Force zu ermitteln.
Dieses Skript wird versuchen, mögliche IDs per Brute-Force zu ermitteln und die IDs zurückgeben, bei denen ein gültiger Handshake erfolgt (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 gerne eine neue Schleife hinzufügen, um sie alle auszuprobieren (Sie sollten sie alle ausprobieren, bis eine davon ordnungsgemäß funktioniert).
Sie können das Wörterbuch von ikeforce oder das in 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
Bruteforcing ID mit Iker
iker.py verwendet auch 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 auch zum Brute-Forcen von IDs verwendet werden kann. Dieses Tool wird versuchen, verschiedene Schwachstellen auszunutzen, die verwendet werden könnten, um eine gültige von einer ungültigen ID zu unterscheiden (es könnte falsche Positiv- und falsche Negativ-Ergebnisse geben, deshalb bevorzuge ich die Verwendung der ike-scan-Methode, wenn möglich).
Standardmäßig sendet ikeforce zu Beginn einige zufällige IDs, um das Verhalten des Servers zu überprüfen und die Taktik zu bestimmen.
- Die erste Methode besteht darin, die Gruppennamen durch Suchen nach Informationen zum Dead Peer Detection DPD von Cisco-Systemen zu brute-forcen (diese Informationen werden nur vom Server zurückgespielt, wenn der Gruppenname korrekt ist).
- Die zweite verfügbare Methode besteht darin, die Anzahl der Antworten zu überprüfen, die auf jeden Versuch gesendet werden, 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, wenn der Server auf die Überprüfungen nicht antwortet, wird ikeforce versuchen, den Server zu brute-forcen und überprüfen, ob der Server bei Senden der richtigen ID mit einem Paket antwortet.
Offensichtlich besteht das Ziel des Brute-Forcens der ID darin, den PSK zu erhalten, wenn Sie eine gültige ID haben. Dann müssen Sie mit der ID und dem PSK das XAUTH brute-forcen (falls es aktiviert ist).
Wenn Sie eine spezifische Transformation entdeckt haben, fügen Sie sie dem 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 davon 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 abfängt, da das erste aggressive Modus-Paket, das den Client-ID enthält, im Klartext gesendet wird.
Erfassen & 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 hash.txt gespeichert sein.
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
Aggressive mode IKE kombiniert mit einem Pre-Shared Key (PSK) wird häufig für Gruppenauthentifizierungszwecke eingesetzt. Diese Methode wird durch XAuth (Extended Authentication) ergänzt, die eine zusätzliche Schicht der Benutzerauthentifizierung einführt. 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 EAP (Extensible Authentication Protocol) anstelle von XAuth zur Authentifizierung von Benutzern verwendet wird. Diese Änderung verdeutlicht eine Entwicklung in den Authentifizierungspraktiken innerhalb sicherer Kommunikationsprotokolle.
Man-in-the-Middle-Angriff im lokalen Netzwerk zur Erfassung von Anmeldedaten
So können Sie die Daten des Logins mit fiked erfassen und prüfen, ob ein Standardbenutzername vorhanden ist (Sie müssen den IKE-Verkehr zur fiked
zur Überwachung umleiten, was mit Hilfe von ARP-Spoofing erfolgen kann, weitere Informationen). Fiked wird als VPN-Endpunkt fungieren und die XAuth-Anmeldeinformationen erfassen:
fiked -g <IP> -k testgroup:secretkey -l output.txt -d
Man-in-the-Middle-Angriff und Blockieren des Datenverkehrs auf Port 500 mit IPSec
Um einen Man-in-the-Middle-Angriff durchzuführen und den gesamten Datenverkehr auf Port 500 zu blockieren, können Sie IPSec verwenden. Wenn der IPSec-Tunnel nicht hergestellt werden kann, wird der Datenverkehr möglicherweise im Klartext gesendet.
Brute-Force-Angriff auf XAUTH-Benutzername und Passwort mit ikeforce
Um das XAUTH-Passwort zu brute-forcen (wenn Sie einen gültigen Gruppennamen id und den psk kennen), können Sie einen Benutzernamen oder eine Liste von Benutzernamen sowie 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, eine Verbindung mit jeder Kombination von Benutzername:Passwort herzustellen.
Wenn Sie einen oder mehrere gültige Transforms gefunden haben, verwenden Sie diese 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 zum Einrichten 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 diesem Setup:
- 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 Authentifizierungsdaten des VPN. [PID]
symbolisiert die Prozess-ID, die zugewiesen wird, wennvpnc
initiiert wird.
Stellen Sie sicher, dass tatsächliche, sichere Werte verwendet werden, um die Platzhalter beim Konfigurieren des VPNs zu ersetzen.
Referenzmaterial
- PSK-Knackpapier
- SecurityFocus Infocus
- Scannen einer VPN-Implementierung
- Netzwerksicherheitsbewertung, 3. Auflage
Shodan
port:500 IKE
Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks beworben sehen möchten oder HackTricks im PDF-Format herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merch
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repositories einreichen.