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? Lo veremos en una próxima entrega.
ssantos@hispasec.com
gran aporte broder. Gracias
gran aporte broder. Gracias