twitter
    Sigueme en el Twitter :-)

09 abril 2008

Las contraseñas de Microsoft


Ante el problema que supuso el pobre sistema de cifrado local de las
contraseñas (LM y NTLM), Microsoft introdujo una mejora en forma de
parche para Windows NT y de serie para Windows 2000 y posteriores. El
sistema se llamó "Syskey" (System key) y añade una nueva capa de seguridad. Aunque todos los Windows actuales lo utilizan y mantienen
activo, Syskey es una de las funcionalidades menos conocidas.
Básicamente, se cifra de nuevo con una contraseña maestra (System key)
las firmas o hashes LM y NTLM almacenados en la SAM para intentar
protegerlos.

Esto es, como suele ser habitual, una buena idea mal utilizada. En la
práctica resulta un sistema de seguridad con ciertas contraindicaciones.
Tras aplicar ingeniería inversa, se descubrió e hizo público el sistema
de cifrado de Microsoft para Syskey y existen programas de 'crackeo' que
permiten saltarse este método de seguridad sin mayor problema. Sin
embargo, si Syskey se utiliza correctamente, puede prácticamente
eliminar la posibilidad de un ataque "offline" en caso de que se robe el
disco duro, se tenga acceso a él arrancando con otro sistema operativo,
etc.

Posibilidades que ofrece Syskey

Se puede teclear 'syskey' (como administrador) en la línea de comandos
para comprobar que se tiene activo por defecto, normalmente sin ser
consciente (no hay forma de deshabilitarlo). Si se decide sacar provecho
real de Syskey, se debe saber que permite tres tipos de almacenamiento
diferentes para la contraseña maestra (con la que cifra la SAM), pero
muy pocos lo usan.

Opción 1: La contraseña Syskey para cifrar la SAM puede ser almacenada
en el registro a través de una algoritmo de ocultación ideado por
Microsoft. La contraseña es elegida por el propio sistema y el usuario
no tiene por qué conocerla. El algoritmo de ocultación de la contraseña
maestra no es en absoluto complejo y ha sido descifrado y hecho público.
Esta es la opción que usan todos los Windows por defecto.

Opción 2: Se le puede indicar al sistema que nos pida la contraseña
maestra al arrancar Windows. De esta forma el administrador elije la
"System key" y se tendrá que utilizar tanto esta clave maestra como la
contraseña habitual de usuario para poder presentarse. Doble
autenticación.

Opción 3: Por último, se puede almacenar la clave maestra en un
disquete. No la pedirá al iniciar Windows, la tomará directamente del
disquete introducido y el sistema no arrancará si no está presente.

Estas dos últimas opciones son las más seguras, pues al no permanecer la
"System key" en ningún archivo, un atacante con acceso al disco duro (o
a la SAM) tendría también que conseguir de alguna forma esa contraseña
maestra, ya sea su valor o el disquete que la aloja. ¿Solución ideal?

Desventajas de Syskey

Un importante impedimento es que si se activa alguna de estas dos
últimas opciones, al arrancar, el sistema no "funcionará" en red hasta
que no se le indique esa contraseña maestra. Arranca lo mínimo pero sin
'conectividad'. Una vez introducida la Syskey, levanta la red y pide la
contraseña 'normal'. Es un problema para un servidor que se reiniciase a
distancia, no podríamos conectarnos a él hasta que alguien físicamente
introdujese la contraseña maestra, pues no arrancaría por ejemplo el
Terminal Server ni cualquier otro servicio definido.

En caso de almacenar la contraseña maestra en disquete sería posible
dejarlo en la disquetera y el sistema lo leería automáticamente, pero
aunque más cómodo, también implica que si se deja introducido sin
vigilancia, no se consigue ninguna mejora de seguridad real. Además los
disquetes son sistemas de almacenamiento obsoletos, tendentes a
desaparecer y propensos a fallos. Sin embargo, Syskey bien usado no deja
de ser una opción interesante a considerar en algunos escenarios, pues
de esta forma se elevaría el nivel de autenticación a dos factores:
sería necesario algo que se sabe (la contraseña normal de Windows) y
algo que se tiene (el disquete físico), reduciendo así considerablemente
la posibilidad de éxito en ataques "offline" y acceso al sistema.

Por defecto Syskey viene activado con la primera opción. Una contraseña
elegida por el sistema y almacenada en el registro. Esto no es seguro
desde el momento en que es pública la forma de almacenarla y es posible,
a través de un programa, conocerla.

La llave bajo el felpudo

Cuando la contraseña es almacenada en el registro (primera opción), lo
hace "repartida" en diferentes puntos del registro. Windows realiza unas
permutaciones de estos datos para ofuscarla. Existe una herramienta
llamada bkhive que permite la recuperación de la contraseña Syskey. Si
se obtiene este dato y el archivo SAM, se podrá eliminar la capa de
seguridad introducida por Syskey sin problemas y obtener los hashes
LM/NTLM de las contraseñas. Y a efectos prácticos, quien tiene acceso a
la SAM tiene acceso a esa zona del registro que almacena la clave
maestra Syskey. Es como instalar una cancela de seguridad adicional ante
la puerta de casa, pero esconder su llave bajo el felpudo.

Por tanto, aunque el Syskey se mantenga activo en un Windows, un
atacante podría acceder a través de cualquier sistema al disco duro (de
nuevo una distribución "Live" de Linux, o usar el disco duro en otra
máquina...), tener acceso al fichero SAM, usar bkhive para obtener el
Syskey, combinar ambos datos con samdump, obtener los hashes LM/NTLM y
emplear por fin la fuerza bruta contra ellos. Aunque parezca complejo,
es un proceso de un par de pasos automáticos con los programas
adecuados.

Pero, una vez más ¿Por qué estos hashes LM/NTLM que en última instancia
usa Windows para almacenar sus contraseñas resultan tan sencillos de
romper con fuerza bruta?

No hay comentarios.: