En nuestro reciente artículo Exploring an NTLM Brute Force Attack with Bloodhound (Análisis de un ataque de fuerza bruta a NTLM con Bloodhound) examinábamos cómo los agresores siguen explotando el protocolo de autenticación NTLM. En esta publicación, hablaremos de forma más general sobre los ataques básicos contra la SAM, los secretos LSA, la clave SYSKEY y el servicio LSASS. Para subrayar la importancia de que los equipos de seguridad controlen estos métodos, explicaremos cómo los delincuentes los utilizan para obtener credenciales de una máquina Windows. Aunque se trata de ataques de robo de credenciales relativamente sencillos y bien conocidos, se siguen utilizando en Internet, lo que indica que hay equipos de seguridad que subestiman estas técnicas probadas y acreditadas.
Para los agresores tiene gran valor buscar credenciales de texto no cifrado mediante LSASS, hacerse con la SAM para obtener los NTLM o acceder a las claves o los secretos LSA. No les basta con acceder a un equipo cuando pueden hacer mucho más con las credenciales válidas que tienen a su disposición en los múltiples pasos de la «cadena de eliminación» o kill chain.
Por eso, los ciberdelincuentes suelen utilizar el volcado de credenciales durante el desplazamiento lateral. Tras obtener los nombres y las contraseñas de inicio de sesión de las cuentas, pueden seguir propagándose por la red de la empresa, acceder a datos restringidos y ejecutar comandos y programas con mayores privilegios.
Descripción de la filtración de credenciales
En concreto, lo que el posible agresor desea hacer es lo siguiente:
1. Obtener los hashes NTLM para descifrarlos y manipularlos offline.
- HKLM\SAM: contiene los hashes NTLMv2 de las contraseñas de usuario
- HKLM\security: contiene secretos/claves LSA de los registros de dominio almacenados en caché
- HKLM\system (también conocido como SYSKEY): contiene claves que pueden utilizarse para cifrar los secretos LSA y la base de datos SAM
2. Volcar el LSASS, ya sea para obtener contraseñas no cifradas o solo los hashes NTLM (dependiendo de la versión de Windows atacada).
Nota: la funcionalidad y la información guardada pueden variar. Por ejemplo, hay diferencias entre las máquinas que están en un dominio de Active Directory y las que no lo están.
Profundicemos ahora en los detalles de los distintos componentes mencionados antes.
1. SAM: HKLM\SAM
La base de datos Security Account Manager (SAM) es donde Windows almacena información sobre las cuentas de usuario. Guarda nombres de usuario y hashes de contraseñas de usuario y sirve para autenticar a los usuarios cuando intentan iniciar sesión e introducir su contraseña.
La longitud y la complejidad del hash dependen del algoritmo utilizado para cifrar la contraseña. Puede tratarse de un simple algoritmo de cifrado LM (Lan Manager) basado en DES o de una de las dos versiones del algoritmo NTHash, NTLMv1 o NTLMv2, que generan 32 dígitos hexadecimales y proceden de la síntesis MD4.
Uno de los métodos más habituales para conseguir contraseñas de usuario es volcar la base de datos SAM, ya sea con una herramienta capaz de extraer los hashes de contraseña o bien copiando el Registro directamente en un archivo [reg.exe save hklmSAM
] para manipularlo offline con una herramienta de software que extraiga los hashes de contraseña de las cuentas de usuario.
Una vez obtenido el hash LM o NTLM, es posible manipularlo offline con fuerza bruta, como se explica en detalle más adelante en este texto.
2. Secretos LSA: HKLM\Security
Los secretos LSA se guardan en un espacio de almacenamiento que utiliza la autoridad de seguridad local (LSA) de Windows.
El propósito de la LSA es gestionar la directiva de seguridad local de un sistema. Por definición, significa que almacena, entre otras cosas, datos privados sobre los inicios de sesión de los usuarios, su autenticación y sus secretos LSA. El acceso al espacio de almacenamiento de secretos LSA solo se concede a procesos de la cuenta del sistema (SYSTEM).
Los secretos LSA almacenan datos confidenciales del sistema, como:
- Contraseñas de usuario
- Contraseñas de Internet Explorer
- Contraseñas de cuentas de servicio (servicios de la máquina que requieren autenticación con secreto)
- Clave de cifrado de contraseña del dominio en caché
- Contraseñas SQL
- Contraseñas de cuentas del sistema
- Contraseñas de cuentas para tareas programadas configuradas
- Tiempo restante hasta la caducidad de una copia no activada de Windows
Y mucho más. Las primeras implementaciones de secretos LSA no tardaron en descifrarse y hay herramientas como mimikatz que, en algunas versiones de Windows, también pueden volcar los secretos LSA de la memoria y los subárboles del Registro.
3. SYSKEY: HKLM\System
Syskey, conocida también como herramienta de bloqueo de SAM, existía en las versiones antiguas de Windows. Esta función tiene como fin cifrar la base de datos del administrador de cuentas de seguridad (SAM) y así proporcionar una capa adicional de protección a la SAM durante el arranque del equipo.
Syskey solo protege los datos de seguridad cuando no está ejecutándose el sistema operativo. Una vez iniciado el SO, el valor de Syskey se carga en la memoria para después poder descifrar la SAM. HKLM\SAM está vinculada a la subclave SECURITY en HKLM\SECURITY\SAM.
La función syskey se ha eliminado desde 2017, pero en las versiones relevantes de Windows puede encontrarse activada y configurada en hklm\system.
4. Volcado de credenciales con LSASS
Hasta el lanzamiento de Windows 8, utilizando mimikatz en Windows era posible obtener las credenciales en texto no cifrado del Servicio de subsistema de autoridad de seguridad local (LSASS).
Con el tiempo se propusieron varias correcciones, cada una de las cuales endurece el uso del LSASS al dificultar incluso la obtención de la contraseña con hash. Windows 10 Enterprise además dispone de Credential Guard para aislar el proceso de LSASS también frente a usuarios con privilegios del sistema.
Extracción de contraseñas con mimikatz en Windows 7:
Podemos comprobar las diferencias cuando la herramienta se ejecuta en Windows 10. No vemos la contraseña en texto no cifrado, pero sí obtenemos el hash NTLMv1.
Extracción de contraseñas del hash NTLMv2
Hay muchas maneras de obtener el hash NTLM sin tener acceso local al equipo seleccionado.
La herramienta “Responder” es una de las más utilizadas para esta tarea.
Ejemplo de hash NTLMv2 extraído con la herramienta “Responder”:
admin::M57oDBrlht:08ca45b7d6da58ee:88dcbe4346168966a153a0064958dae6:5b6740315c7830310000000000000b45c67103d07d7b95acd12dea11230e0000000052920b85f78d013c31cdb3b92f5d765c783030
Esta herramienta tiene numerosas funciones, pero la que aquí viene al caso es la capacidad de pedir a los usuarios que introduzcan sus credenciales cuando se solicitan determinados servicios de red. Como resultado, se obtienen contraseñas de texto no cifrado o hashes de contraseña.
En este ataque, la herramienta sirve para capturar paquetes LLMNR y extraer el hash del desafío/respuesta. Configuramos la herramienta para escuchar los paquetes correctos en la red y después, desde la máquina de la víctima, intentamos obtener un recurso de red que en realidad no existe. De este modo podemos capturar el tráfico y a partir de ahí obtener el hash NTLM.
Cuando intenté acceder desde una máquina Windows a un recurso compartido inexistente denominado «MadeUpNetworkShare», la herramienta se ejecutó en un equipo de la misma red y registró el desafío/respuesta, lo que reveló los hashes NTLM.
¿Cómo podemos utilizar los hashes de contraseña?
Una vez obtenido el hash, tenemos un par de opciones para intentar extraer la contraseña de texto no cifrado.
Ataque de diccionario/ataque de fuerza bruta: este método implica comparar una lista de palabras con las contraseñas. Para este tipo de trabajo podemos utilizar herramientas disponibles públicamente, como John the Ripper, hashcat, Cain & Abel y Ophcrack, entre otras.
Ataque de tabla arco iris: este ataque resulta más práctico cuando se intenta descifrar un hash, pero requiere tener previamente una base de datos existente de contraseñas posibles y sus hashes precalculados.
Ejemplo de contraseña NTLMv1 descifrada con tabla de arco iris (tomado de https://crackstation.net/):
Tenga en cuenta que de esta manera solo los hashes conocidos y débiles pueden revertirse a contraseñas.
Si la contraseña es demasiado difícil de descifrar, tenemos otras opciones, como el ataque pass the hash, consistente en aprovechar cualquier servicio de la red que autentique a partir del hash de la contraseña en lugar de la contraseña propiamente dicha. Tenemos un buen ejemplo en psexec y otros servicios que se comunican a través de SMB.
Recomendaciones para evitar la filtración de credenciales
Para evitar el volcado y la filtración de credenciales, es recomendable que las empresas se aseguren de que ningún sistema antiguo de la red tenga todavía contraseñas con cifrado LM en la base de datos SAM y que en los sistemas nuevos no esté activado LM (desactivado de forma predeterminada). Las contraseñas LM utilizan únicamente un conjunto limitado de caracteres y son fáciles de descifrar.
También es recomendable desactivar NTLMv1. Extraer la contraseña de un hash NTLMv1 es relativamente sencillo y, a menos que estén configurados de otro modo, la mayoría de los servicios que funcionan con NTLMv1 suelen hacerlo también con NTLMv2.
Una manera de asegurarse de que tanto LM como NTLMv1 están desactivados es desde la página de GPO:
Para evitar el uso de NTLMv1, realice los siguientes cambios de configuración en el GPO:
Si la contraseña es larga y única, no es fácil descifrar el hash NTLMv2. Además, el agresor no saca ventaja necesariamente por tener el hash si no hay servicios que autentiquen con hashes NTLM.
También es recomendable activar Credential Guard en los equipos Windows 10 que lo admiten para añadir protección a las credenciales NTLM y Kerberos.
Para una empresa, la forma más eficaz de reducir la superficie de ataque y protegerse de la filtración de credenciales es desplegar una solución de seguridad de próxima generación como SentinelOne que utilice aprendizaje automático y EDR activa.
Reflexiones finales
Estos ataques básicos pueden impedirse prestando atención a su arquitectura de red y a los servicios que se utilizan en su entorno. En particular, este tipo de ataques son más eficaces contra objetivos de Windows 7 (e inferiores) que, a pesar de haber llegado a su fin de vida, siguen utilizándose en las redes de numerosas empresas. Hoy en día, para evitar exactamente el tipo de vulnerabilidades aquí expuestas, muchas organizaciones utilizan con acierto implementaciones más seguras, como Kerberos en un dominio de grupo, y, para proteger sus dispositivos y su red, despliegan también una plataforma de seguridad para endpoints fiable de próxima generación.
Referencias de MITRE ATT&CK
Volcado de credenciales: T1003
Pass the Hash: T1075
Fuerza bruta: T1110