Debilidad en protocolo de autenticación NTLM
Todas las versiones de Windows utilizan el protocolo SMB para los servicios de compartición de archivos e impresoras.
Cuando un cliente se conecta a un recurso de la red, se utiliza la autenticación NTLM para enviar las credenciales de usuario incluyendo la contraseña. Un servidor SMB malévolo puede utilizar esta información para autenticarse en el cliente, llegando a poder obtener pleno control sobre los recursos compartidos en el cliente (incluyendo, por ejemplo, a C$).
SMB (Server Message Block) es el protocolo utilizado para la compartición de recursos (carpeta compartida, una impresora, un puerto serie o mecanismos de comunicación como pueden ser los named pipes) entre máquinas basadas en los sistemas operativos Windows. Para las funciones de autenticación de usuarios se utiliza otro protocolo, NTLM (NT Lan Manager).
El proceso de autenticación NTLM es, de forma resumida, el siguiente: cuando el cliente se conecta a un servidor, éste responde enviando un testigo generado aleatoriamente (el desafío). El cliente aplica una función hash a este testigo utilizando la contraseña del usuario y envía el resultado al servidor. En el momento en que éste recibe la respuesta, comprueba su validez verificando que coincide con el resultado de aplicar al desafío enviado la misma función hash con la contraseña almacenada en su base de datos. Gracias a este método, se puede verificar la identidad del usuario sin que sea necesario que la contraseña circule por la red.
Por diseño, en el momento en que un cliente accede a un recurso compartido realiza un intento de autenticación utilizando las credenciales del usuario activo. Si estas credenciales no son aceptadas por el servidor, la máquina cliente muestra al usuario una ventada para que introduzca el usuario y contraseña para acceder al recurso compartido.
Es precisamente esta característica, la de intentar autenticarse automáticamente con las credenciales del usuario activo, la que puede permitir a un servidor malicioso obtener la información de las credenciales del usuario.
Todas las versiones de Windows son vulnerables
Como ejemplo de ataque, el atacante envía a la víctima un mensaje HTML que contiene un objeto que reside en un recurso compartido del servidor malévolo (SM1). Al visualizar este mensaje, la máquina cliente (C1) intentará conectar con el recurso compartido.
El servidor malévolo (SM1) cuando recibe la petición de desafío, en lugar de enviar éste lo que hace es una petición de conexión a un recurso compartido a una estación cliente (C2). Este cliente malévolo, C2, responde enviando una petición al servidor SMB de la víctima (SC1).
El servidor SC1 envía su desafío a la máquina cliente del atacante, C2. A continuación, C2, envía el desafío al servidor malévolo (SM1) y éste a su vez lo envía a la máquina cliente (C1).
El cliente C1 recibe el desafío y aplica la función hash con su contraseña. A continuación devuelve la respuesta al servidor malévolo (SM1).
El servidor malévolo (SM1) reenvía esta respuesta a la máquina cliente C2. Éste último, C2, redirecciona esta respuesta hacia el servidor SMB de la víctima (SC1). En este punto, SC1 recibe la respuesta y la considera como válida.
Como resultado de este galimatías, la máquina cliente del atacante (C2) dispone de una conexión de red validada contra la máquina cliente (C1).
Resumiendo y simplificando: el ataque consiste en aprovechar una petición de autorización de acceso a un recurso compartido en un servidor malévolo para construir y validar una conexión autenticada contra la máquina que está realizando la petición.
Como puede comprobarse, el ataque es relativamente complejo y para poder ser aprovechado es preciso disponer de un buen conocimiento del funcionamiento de los protocolos SMB y NTLM.
No obstante, se tiene constancia de la existencia de pruebas de concepto que muestran la viabilidad de este ataque. Todas las versiones de Windows son vulnerables, incluyendo Windows 9x/ME (vulnerable, aunque no se ha verificado), Windows NT 4 (vulnerable, aunque no se ha verificado), Windows 2000 Professional/Server (verificado), Windows XP (verificado) y Windows 2003 Server (vulnerable, aunque no se ha verificado).
La respuesta es afirmativa. Este ataque sólo puede utilizarse en los sistemas que utilicen la autenticación NTLM. Aquellos que utilicen la autenticación NTLM2 no son vulnerables. NTLMv2 está desactivado por defecto, pero está disponible en NT 4.0 (a partir del Service Pack 4) y versiones posteriores. NTLMv2 dispone de mecanismos adicionales de seguridad mediante la utilización de claves de sesión únicas.
El ataque tampoco puede utilizarse cuando se utiliza la autenticación Kerberos, que es el mecanismo de autenticación utilizado por defecto en el Active Directory (Windows 2000 y posterior).