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 es ampliamente reconocido como la principal tecnología para asegurar las comunicaciones entre redes (LAN a LAN) y desde usuarios remotos hasta la puerta de enlace de la red (acceso remoto), sirviendo como la columna vertebral para soluciones de VPN empresariales.
El establecimiento de una asociación de seguridad (SA) entre dos puntos es gestionado por IKE, que opera bajo el paraguas de ISAKMP, un protocolo diseñado para la autenticación y el intercambio de claves. Este proceso se desarrolla en varias fases:
Fase 1: Se crea un canal seguro entre dos puntos finales. Esto se logra mediante el uso de una Clave Precompartida (PSK) o certificados, empleando ya sea el modo principal, que involucra tres pares de mensajes, o modo agresivo.
Fase 1.5: Aunque no es obligatorio, esta fase, conocida como la Fase de Autenticación Extendida, verifica la identidad del usuario que intenta conectarse al requerir un nombre de usuario y una contraseña.
Fase 2: Esta fase está dedicada a negociar los parámetros para asegurar los datos con ESP y AH. Permite el uso de algoritmos diferentes a los de la Fase 1 para asegurar la Perfect Forward Secrecy (PFS), mejorando la seguridad.
Puerto por defecto: 500/udp
La configuración de IPSec puede estar preparada solo para aceptar una o unas pocas transformaciones. Una transformación es una combinación de valores. Cada transformación contiene una serie de atributos como DES o 3DES como el algoritmo de cifrado, 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 la vida útil.
Entonces, lo primero que tienes que 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 única propuesta con ocho transformaciones dentro de ella.
Dependiendo de la respuesta, puedes obtener información sobre el punto final:
Como puedes ver en la respuesta anterior, hay un campo llamado AUTH con el valor PSK. Esto significa que el vpn está configurado 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 returned handshake; 0 returned notify: Esto significa que el objetivo no es una puerta de enlace IPsec.
1 returned handshake; 0 returned notify: Esto significa que el objetivo está configurado para IPsec y está dispuesto a realizar la negociación IKE, y uno o más de los transformaciones que propusiste son aceptables (una transformación válida se mostrará en la salida).
0 returned handshake; 1 returned notify: 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 estás en el tercer caso, entonces necesitas forzar un poco para encontrar una transformación válida:
Primero que todo, necesitas crear todas las transformaciones posibles:
Y luego fuerza bruta cada uno usando ike-scan (esto puede tardar varios minutos):
Si el ataque de fuerza bruta no funcionó, tal vez el servidor esté respondiendo sin handshakes incluso a transformaciones válidas. Entonces, podrías intentar el mismo ataque de fuerza bruta pero utilizando el modo agresivo:
Esperemos que una transformación válida sea devuelta. Puedes intentar el mismo ataque usando iker.py. También podrías intentar forzar transformaciones con ikeforce:
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 indica evitar el uso de los grupos DH 1 y 2 porque no son lo suficientemente fuertes. Los expertos creen que los países con muchos recursos pueden romper fácilmente la encriptación de datos que utilizan estos grupos débiles. Esto se hace utilizando un método especial que los prepara para descifrar los códigos rápidamente. Aunque cuesta mucho dinero establecer este método, permite a estos países poderosos leer los datos encriptados en tiempo real si están utilizando un grupo que no es fuerte (como 1,024-bit o menor).
Luego, puedes usar ike-scan para intentar descubrir el proveedor del dispositivo. La herramienta envía una propuesta inicial y deja de reproducir. Luego, analiza la diferencia de tiempo entre los mensajes recibidos del servidor y el patrón de respuesta correspondiente, 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 de ID de proveedor (VID) con IKE.
Especifica la transformación válida si es necesario (usando --trans)
Si IKE descubre quién es el proveedor, lo imprimirá:
Esto también se puede lograr con el script de nmap ike-version
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 conocerás el nombre del grupo válido, así que tendrás que forzarlo. Para hacerlo, te recomendaría 2 métodos:
Primero que nada, intenta hacer una solicitud con un ID falso tratando de recopilar el hash ("-P"):
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á un hash falso para una ID falsa, por lo que este método no será confiable para forzar la ID. Por ejemplo, podría devolverse un hash falso (esto ocurre en versiones modernas):
Pero si, como he dicho, no se devuelve ningún hash, entonces deberías intentar forzar nombres de grupo comunes usando ike-scan.
Este script intentaré forzar posibles IDs y devolverá las IDs donde se devuelve un apretón de manos válido (este será un nombre de grupo válido).
Si has descubierto una transformación específica, agrégala en el comando ike-scan. Y si has descubierto varias transformaciones, siéntete libre de agregar 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 forzarlos:
Or use this dict (es una combinación de los otros 2 dicts sin repeticiones):
iker.py también utiliza ike-scan para hacer bruteforce a posibles nombres de grupo. Sigue su propio método para encontrar un ID válido basado en la salida de ike-scan.
ikeforce.py es una herramienta que se puede usar para hacer bruteforce a IDs también. Esta herramienta intenta explotar diferentes vulnerabilidades que podrían usarse para distinguir entre un ID válido y un ID no válido (podría tener falsos positivos y falsos negativos, por eso prefiero usar el método ike-scan si es posible).
Por defecto, ikeforce enviará al principio algunos IDs aleatorios para verificar el comportamiento del servidor y determinar la táctica a usar.
El primer método es hacer bruteforce a los nombres de grupo buscando la información de Dead Peer Detection DPD de los sistemas Cisco (esta información solo es respondida por el servidor si el nombre del grupo es correcto).
El segundo método disponible es verificar el número de respuestas enviadas a cada intento porque a veces se envían más paquetes cuando se usa 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 verificaciones, ikeforce intentará hacer bruteforce al servidor y verificar si cuando se envía el ID correcto, el servidor responde con algún paquete. Obviamente, el objetivo de hacer bruteforce al ID es obtener el PSK cuando tienes un ID válido. Luego, con el ID y el PSK tendrás que hacer bruteforce al 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 agregar un nuevo bucle para probarlas todas (deberías probarlas todas hasta que una de ellas funcione correctamente).
(Del libro Network Security Assessment: Know Your Network): También es posible obtener nombres de usuario válidos al esnifar la conexión entre el cliente VPN y el servidor, ya que el primer paquete del modo agresivo que contiene el ID del cliente se envía en claro.
Finalmente, si has encontrado una transformación válida y el nombre del grupo y si se permite el modo agresivo, entonces puedes capturar muy fácilmente el hash que se puede romper:
El hash se guardará dentro de hash.txt.
Puedes usar psk-crack, john (usando ikescan2john.py) y hashcat para crackear el hash:
El modo agresivo IKE combinado con una clave precompartida (PSK) se emplea comúnmente para autenticación de grupo. Este método se complementa con XAuth (Autenticación Extendida), que sirve para introducir una capa adicional de autenticación de usuario. Tal autenticación típicamente aprovecha servicios como Microsoft Active Directory, RADIUS o sistemas comparables.
Al pasar a IKEv2, se observa un cambio notable donde se utiliza EAP (Protocolo de Autenticación Extensible) en lugar de XAuth con el propósito de autenticar usuarios. Este cambio subraya una evolución en las prácticas de autenticación dentro de los protocolos de comunicación segura.
Así puedes capturar los datos de inicio de sesión usando fiked y ver si hay algún nombre de usuario predeterminado (Necesitas redirigir el tráfico IKE a fiked
para el sniffing, lo cual se puede hacer con la ayuda de ARP spoofing, más info). Fiked actuará como un punto final de VPN y capturará las credenciales de XAuth:
También, usando IPSec intenta realizar un ataque MitM y bloquear todo el tráfico al puerto 500, si el túnel IPSec no se puede establecer, tal vez el tráfico se enviará en claro.
Para realizar fuerza bruta del XAUTH (cuando conoces un nombre de grupo id válido y el psk) puedes usar un nombre de usuario o una lista de nombres de usuario y una lista de contraseñas:
De esta manera, ikeforce intentará conectarse utilizando cada combinación de nombre de usuario:contraseña.
Si encontraste una o varias transformaciones válidas, simplemente úsalas como en los pasos anteriores.
En Kali, VPNC se utiliza para establecer túneles IPsec. Los perfiles deben estar ubicados en el directorio /etc/vpnc/
. Puedes iniciar estos perfiles utilizando el comando vpnc.
Los siguientes comandos y configuraciones ilustran el proceso de configuración de una conexión VPN con VPNC:
En esta configuración:
Reemplace [VPN_GATEWAY_IP]
con la dirección IP real del gateway VPN.
Reemplace [VPN_CONNECTION_ID]
con el identificador de la conexión VPN.
Reemplace [VPN_GROUP_SECRET]
con el secreto del grupo de la VPN.
Reemplace [VPN_USERNAME]
y [VPN_PASSWORD]
con las credenciales de autenticación de la VPN.
[PID]
simboliza el ID del proceso que se asignará cuando vpnc
inicie.
Asegúrese de que se utilicen valores reales y seguros para reemplazar los marcadores de posición al configurar la VPN.
Network Security Assessment 3rd Edition
port:500 IKE
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)