500/udp - Pentesting IPsec/IKE VPN
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
IPsec è ampiamente riconosciuto come la principale tecnologia per la sicurezza delle comunicazioni tra reti (LAN-to-LAN) e da utenti remoti al gateway di rete (accesso remoto), fungendo da spina dorsale per le soluzioni VPN aziendali.
L'istituzione di una security association (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. Questo viene realizzato attraverso l'uso di una Pre-Shared Key (PSK) o certificati, impiegando sia la modalità principale, che prevede tre coppie di messaggi, sia la modalità aggressiva.
Fase 1.5: Sebbene non sia 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'uso di algoritmi diversi da quelli della Fase 1 per garantire la Perfect Forward Secrecy (PFS), migliorando la sicurezza.
Porta predefinita: 500/udp
La configurazione IPSec può essere preparata per accettare solo una o poche trasformazioni. Una trasformazione è una combinazione di valori. Ogni trasformazione contiene un 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 della chiave e 28800 secondi come durata.
Quindi, la prima cosa che devi fare è trovare una trasformazione valida, affinché il server possa comunicare con te. A tal fine, puoi utilizzare lo strumento ike-scan. Per impostazione predefinita, 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, puoi ottenere alcune informazioni sul punto finale:
Come puoi vedere nella risposta precedente, c'è un campo chiamato AUTH con il valore PSK. Questo significa che il vpn è configurato utilizzando una chiave precondivisa (e questo è davvero buono per un pentester). Il valore dell'ultima riga è anche molto importante:
0 restituito handshake; 0 restituito notify: Questo significa che il target è non un gateway IPsec.
1 restituito handshake; 0 restituito notify: Questo significa che il target è configurato per IPsec ed è disposto a eseguire la negoziazione IKE, e uno o più dei trasformazioni che hai proposto sono accettabili (una trasformazione valida sarà mostrata nell'output).
0 restituito handshake; 1 restituito notify: I gateway VPN rispondono con un messaggio notify quando nessuna delle trasformazioni è accettabile (anche se alcuni gateway non lo fanno, nel qual caso dovrebbe essere tentata un'analisi ulteriore e una proposta rivista).
Poi, in questo caso abbiamo già una trasformazione valida, ma se sei nel 3° caso, allora devi forzare un po' per trovare una trasformazione valida:
Prima di tutto, devi creare tutte le possibili trasformazioni:
E poi eseguire un attacco di forza bruta su ciascuno utilizzando ike-scan (questo può richiedere diversi minuti):
Se il brute-force non ha funzionato, forse il server sta rispondendo senza handshake anche a trasformazioni valide. Allora, potresti provare lo stesso brute-force ma utilizzando la modalità aggressiva:
Speriamo che una trasformazione valida venga restituita. Puoi provare lo stesso attacco usando iker.py. Puoi anche provare a forzare le trasformazioni con ikeforce:
In DH Group: 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 credono che i paesi con molte risorse possano facilmente rompere la crittografia dei dati che utilizzano questi gruppi deboli. Questo viene fatto utilizzando un metodo speciale che li prepara a decifrare i codici rapidamente. Anche se costa molto denaro impostare questo metodo, consente a questi paesi potenti di leggere i dati crittografati in tempo reale se utilizza un gruppo che non è forte (come 1.024-bit o più piccolo).
Poi, puoi usare ike-scan per cercare di scoprire il fornitore del dispositivo. Lo strumento invia una proposta iniziale e smette di riprodurre. Poi, analizzerà la differenza di tempo tra i messaggi ricevuti dal server e il corrispondente modello di risposta, il pentester può identificare con successo il fornitore del gateway VPN. Inoltre, alcuni server VPN utilizzeranno il payload opzionale Vendor ID (VID) con IKE.
Specifica la trasformazione valida se necessario (utilizzando --trans)
Se IKE scopre quale è il fornitore, lo stamperà:
Questo può essere ottenuto anche con lo script nmap ike-version
Per essere autorizzati a catturare l'hash, è necessario un 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:
Prima di tutto, prova a fare una richiesta con un ID falso cercando di raccogliere l'hash ("-P"):
Se non viene restituito alcun hash, allora probabilmente questo metodo di brute forcing funzionerà. Se viene restituito un hash, questo significa che un hash falso verrà inviato 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, allora dovresti provare a forzare i nomi di gruppo comuni utilizzando ike-scan.
Questo script cercherà di forzare gli ID possibili e restituirà gli ID dove viene restituita una handshake valida (questo sarà un nome di gruppo valido).
Se hai scoperto una trasformazione specifica, aggiungila nel 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 non funziona correttamente).
Puoi usare il dizionario di ikeforce o quello in seclists di nomi di gruppo comuni per forzarli:
Or use this dict (è una combinazione degli altri 2 dict senza ripetizioni):
iker.py utilizza anche ike-scan per bruteforcare possibili nomi di gruppo. Segue il proprio metodo per trovare un ID valido basato sull'output di ike-scan.
ikeforce.py è uno strumento che può essere utilizzato per bruteforcare anche gli ID. Questo strumento cercerà di sfruttare diverse vulnerabilità che potrebbero essere utilizzate per distinguere tra un ID valido e uno non valido (potrebbero esserci 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 controllare il comportamento del server e determinare la tattica da utilizzare.
Il primo metodo è bruteforcare i nomi dei gruppi cercando le informazioni Dead Peer Detection DPD dei sistemi Cisco (queste informazioni vengono riprodotte dal server solo se il nome del gruppo è corretto).
Il secondo metodo disponibile è controllare il numero di risposte inviate a ciascun tentativo perché a volte vengono inviati più pacchetti quando viene utilizzato l'ID corretto.
Il terzo metodo consiste nel cercare "INVALID-ID-INFORMATION" in risposta a un ID errato.
Infine, se il server non risponde a nessuno dei controlli, ikeforce cercherà di bruteforcare il server e controllare se quando viene inviato l'ID corretto il server risponde con qualche pacchetto. Ovviamente, l'obiettivo di bruteforcare l'ID è ottenere il PSK quando si ha un ID valido. Poi, con l'ID e il PSK dovrai bruteforcare 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 finché una di esse non funziona correttamente).
(Dal libro Network Security Assessment: Know Your Network): È anche possibile ottenere nomi utente validi sniffando la connessione tra il client VPN e il server, poiché il primo pacchetto in modalità aggressiva contenente l'ID del client viene inviato in chiaro.
Infine, se hai trovato una trasformazione valida e il nome del gruppo e se la modalità aggressiva è consentita, allora puoi facilmente acquisire l'hash crackabile:
L'hash sarà salvato all'interno di hash.txt.
Puoi usare psk-crack, john (utilizzando ikescan2john.py) e hashcat per crackare l'hash:
La modalità aggressiva IKE combinata con una chiave pre-condivisa (PSK) è comunemente impiegata per scopi di autenticazione di gruppo. Questo metodo è potenziato da XAuth (Autenticazione Estesa), che serve a introdurre un ulteriore livello di autenticazione dell'utente. Tale autenticazione sfrutta tipicamente servizi come Microsoft Active Directory, RADIUS o sistemi comparabili.
Passando a IKEv2, si osserva un cambiamento notevole in cui EAP (Protocollo di Autenticazione Estensibile) è utilizzato al posto di XAuth per l'autenticazione degli utenti. Questo cambiamento sottolinea un'evoluzione nelle pratiche di autenticazione all'interno dei protocolli di comunicazione sicura.
Quindi puoi catturare i dati di accesso utilizzando fiked e vedere se c'è qualche nome utente predefinito (Devi reindirizzare il traffico IKE a fiked
per sniffare, il che può essere fatto con l'aiuto di ARP spoofing, maggiori informazioni). Fiked agirà come un endpoint VPN e catturerà le credenziali XAuth:
Also, usando IPSec prova a fare un attacco MitM e blocca tutto il traffico sulla porta 500, se il tunnel IPSec non può essere stabilito forse il traffico verrà inviato in chiaro.
Per forzare la XAUTH (quando conosci un nome di gruppo valido id e il psk) puoi usare un nome utente o un elenco di nomi utente e un elenco di password:
In questo modo, ikeforce cercherà di connettersi utilizzando ogni combinazione di username:password.
Se hai trovato una o più trasformazioni valide, usale come nei passaggi precedenti.
In Kali, VPNC viene utilizzato per stabilire tunnel IPsec. I profili devono trovarsi nella directory /etc/vpnc/
. Puoi avviare questi profili utilizzando il comando vpnc.
I seguenti comandi e configurazioni illustrano il processo di impostazione di una connessione VPN con VPNC:
In questa configurazione:
Sostituisci [VPN_GATEWAY_IP]
con l'indirizzo IP effettivo del gateway VPN.
Sostituisci [VPN_CONNECTION_ID]
con l'identificatore per la 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 sarà assegnato quando vpnc
viene avviato.
Assicurati di utilizzare valori reali e sicuri per sostituire i segnaposto durante la configurazione della VPN.
Network Security Assessment 3rd Edition
port:500 IKE
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)