lunes, 1 de diciembre de 2008

¿Es cierto que Microsoft ha corregido ahora una vulnerabilidad de hace siete años? (I)

Mucho está dando que hablar el boletín MS08-68 de Microsoft. Se dice que por fin, ha corregido una vulnerabilidad conocida desde hace siete años. Pero esto, como cualquier simplificación, no es del todo cierto. No es una vulnerabilidad como tal, ni ha sido corregida por completo, porque no se puede. Vamos a intentar aclarar algunos asuntos en dos entregas.

El protocolo NTLM

Es un protocolo de autenticación basado en un intercambio desafío-respuesta, usado por Microsoft desde hace muchos años. Sirve para autenticar a un ordenador que quiere, por ejemplo, acceder a una unidad compartida de una red en otro sistema, sin que la contraseña viaje en texto claro. Durante el protocolo de autenticación, se intercambian tres (tipos de) mensajes desafío-respuesta.

* Mensaje 1: El cliente le cuenta al servidor los distintos tipos de características de cifrado y otros parámetros, para que los dos sepan qué es lo que pueden soportar y esperar uno del otro.

* Mensaje 2: Este es el que devuelve el servidor al cliente que se quiere autenticar. En él viaja el desafío, que no es más que un trozo de datos aleatorios con el que el servidor desafía al cliente: "Si sabes manipular este trozo de datos correctamente con tu contraseña, entonces sé que eres quien dices ser".

* Mensaje 3: En él se encuentran las respuestas que ha calculado el cliente, esto es, el cálculo de la combinación contraseña-desafío con el que el cliente pretende autenticarse.

Hay que destacar que el protocolo NTLM se usa para SMB (compartición de archivos) principalmente, pero también puede usarse para autenticación HTTP, POP3, SMTP... es importante porque el uso combinado de dos protocolos sirve para otros tipos de ataque que veremos en la próxima entrega.

El problema

El protocolo NTLM fue bien acogido y muy implantado en sistemas de todo tipo. Pero en 2001 se publicó un ataque que se aprovechaba de este diseño, y que resultaba inherente al protocolo. No se trata de una vulnerabilidad sino de un fallo de diseño, y esto, virtualmente, lo hace insalvable. Un protocolo no puede cambiar de la noche a la mañana, y menos cuando lleva tantos años implantado.

El mecanismo de autenticación de NTLM garantiza la confidencialidad de la contraseña gracias al uso de un desafío, pero no es posible para el cliente verificar el origen de este desafío ni la integridad del paquete. Un servidor SMB creado por el atacante podría proporcionar al cliente un desafío obtenido en otra conexión, y utilizar el resultado de la autenticación para autenticarse en esa otra conexión. Ni siquiera tiene la necesidad de conocer la contraseña en texto claro. Simplificando, se trata de "engañar" a un cliente para que cifre un desafío y usar su respuesta para autenticarte en otro sistema como si fueras el cliente engañado. Para engañarlo sólo es necesario montar un servidor SMB por ejemplo y que la víctima se conecte. Se retiene la conexión y se realiza el ataque cuando se obtenga la respuesta.

Esta vulnerabilidad es conocida como "replay attack". Sin saber la contraseña de la víctima, se puede deambular por una red accediendo a los recursos como si se fuese el sistema atacado, replicando la respuesta al desafío. En 2001, Sir Dystic (miembro de The Cult of the Dead Cow) publicó la primera herramienta capaz de realizar ataques de "replay attack" contra el protocolo NTLM, llamada SmbRelay. Era muy inestable y sólo válida para NT. Más adelante existió una herramienta más sofisticada llamada SmbRelay2. Basándose en el mismo fallo, se puede hablar del "reflection attack", que implica usar el desafío de la víctima para devolvérselo firmado por ella misma y entrar en su sistema con las credenciales del usuario (pero sin saberlas). En vez de utilizarlas para acceder a otro recurso de red, se usan para entrar en el sistema que ha "picado" con el ataque.

¿Qué ha hecho Microsoft durante estos siete años para atajar estos problemas? ¿Está totalmente corregido este fallo con esta actualización? Lo veremos en la próxima entrega.


Sergio de los Santos
ssantos@hispasec.com


Más información:

Microsoft Security Bulletin MS08-068 -- Important
http://www.microsoft.com/technet/security/bulletin/ms08-068.mspx

Andrés Tarascó
http://www.tarasco.org/security/smbrelay/paper_smbrelay_ES.pdf

No hay comentarios:

Publicar un comentario en la entrada