Administración de la seguridad. Octubre de 2004

Grandes debates: Contraseñas y frases usadas como tales. Parte 1 de 3

Publicado: octubre 1, 2004
Security Management

Jesper M. Johansson, Ph.D., ISSAP, CISSP
Director de programa de seguridad,  Microsoft Corporation

Consulte otras columnas de administración de la seguridad.

*

La información sobre la seguridad da lugar a unos debates muy interesantes. Hay aspectos con distinta importancia, pero todos ellos prueban que el tema es cada vez más amplio. Me gustaría hacer un resumen de algunos de estos debates y ofrecer mis propias opiniones. En el primer grupo de estos artículos, voy a tratar el tema de las contraseñas y enfrentarme al problema de las contraseñas en contraposición a las frases usadas como tales.

Es posible que "contraseñas en contraposición a frases usadas como tales" sea otro tipo de debate, o el tipo de debate aburrido que interesa a muy poca gente. En cualquier caso, ¿son más seguras las contraseñas o las frases usadas como tales? La respuesta no es tan sencilla como podría parecer.

Para analizar correctamente el problema de las contraseñas en contraposición con las frases usadas como tales, he dividido el artículo en tres partes. En esta primera parte voy a tratar de los aspectos esenciales de las contraseñas y las frases usadas como tales, voy a describir cómo se almacenan, etc. El mes que viene trataré de la eficacia relativa de cada una de ellas y aplicaré enfoques matemáticos para determinar cuáles son más fuertes. En la tercera parte, terminaré la serie y proporcionaré instrucciones sobre cómo elegir contraseñas y configurar una directiva de contraseñas.

Aspectos fundamentales

En primer lugar, es esencial comprender la diferencia entre contraseñas y frases usadas como tales. La mayoría de los usuarios, al elegir una contraseña, eligen una palabra, como “Contraseña” o una cadena de símbolos aleatorios, como “X2!aZ@<dF:”; también se puede elegir una combinación de ambas cosas, por ejemplo “C0ntr@$eña”. Una frase usada como una contraseña es eso, una frase, como “Ésta es una frase usada como contraseña muy complicada”. Normalmente, una frase usada como contraseña es mucho más larga que una contraseña y contiene espacios. Algunos usuarios crean una contraseña escribiendo, sin espacios, las primeras letras de las palabras de una frase. Dicha contraseña no es una frase, si no una contraseña creada con una lógica interesante. Por el contrario, una frase usada como contraseña, es otro tipo de contraseña basada en símbolos, en que los símbolos son palabras en lugar de símbolos de un conjunto de caracteres. Una frase usada como contraseña no tiene por qué ser una oración completa, con la ortografía correcta o carente de símbolos de sustitución, como la utilizada en el ejemplo.

Las diferencias principales entre las contraseñas y las frases usadas como tales son:

(1) Una frase usada como contraseña contiene espacios y las contraseñas no.

(2) Una frase usada como contraseña es mucho más larga que la mayoría de las palabras y, lo que es más importante, más larga que una cadena aleatoria de letras que sea fácil de recordar para los usuarios.

Si bien una frase usada como contraseña se podría considerar sencillamente una contraseña muy larga, por lo general está formada por una secuencia de palabras o elementos parecidos a palabras. Además, las frases usadas como contraseña que se describen aquí se pueden utilizar legalmente en Windows 2000 y versiones posteriores. Hay otros productos que utilizan frases usadas como contraseña que tienen otras características, o no las admiten.

En segundo lugar, es necesario conocer la diferencia entre adivinación de contraseñas y descifrado de contraseñas. La adivinación de contraseñas consiste en que un usuario, en una consola o un equipo remoto, pruebe distintas contraseñas. Este aspecto no nos interesa en este artículo, porque si la contraseña de una cuenta es relativamente compleja, será muy difícil adivinarla. Si se consigue adivinarla, la causa es la pura casualidad o que la contraseña no era lo suficientemente segura.

Veamos un ejemplo: Recordemos que las contraseñas admiten cuatro categorías de símbolos: letras mayúsculas, letras minúsculas, números y símbolos que no son alfanuméricos. Los símbolos que no son alfanuméricos pueden ser cualquiera de los que contiene el teclado, así como otros que no aparecen en el teclado, por ejemplo los caracteres Unicode. Hay quienes consideran los caracteres Unicode y los símbolos del teclado dos categorías diferentes, pero en estos artículos los vamos a incluir en una misma definición. Más aún, para lo que nos interesa aquí, el término “carácter” se referirá a las cuatro categorías de forma colectiva. Por ejemplo, asumamos que las contraseñas son palabras no reales de ocho caracteres con al menos tres de los cuatro tipos de caracteres y que caducan en 70 días. Para que un usuario no autorizado, sin conocimiento previo de dichas contraseñas, adivinara unas de ellas antes de su caducidad el equipo necesitaría un ancho de banda de red de 53.000 T-3 (44,736 Mbps cada una). Esto es lo necesario sólo para enviar el tráfico de autenticación requerido para probar la mitad de todas las contraseñas posibles (asumiendo que todas tienen la misma probabilidad).

Si restringimos el conjunto de caracteres usado para la adivinación, y asumimos que la contraseña se elige al azar, o así se lo parece al usuario no autorizado, entre los 76 símbolos más comunes, hay 1.11 x 10^15 contraseñas de 8 caracteres posibles. Si el usuario no autorizado adivina 300 de ellas por segundo, lo que es muy improbable incluso con los mejores programas, llevaría 58.783 años adivinar la contraseña. Si el atacante simplemente escribe la secuencia de comandos del comando “net use”, es probable que sólo disponga de dos o tres intentos por segundo, de manera que necesitaría 5.878.324 años para adivinar una contraseña.

El descifrado, por otro lado, se lleva a cabo una vez que el atacante ha obtenido los algoritmos hash puros. Un algoritmo hash es una expresión matemática usada a menudo para almacenar contraseñas. Los describiremos pormenorizadamente más adelante. El atacante genera contraseñas de prueba, genera sus algoritmos hash y compara el resultado con el algoritmo hash almacenado. El descifrado es mucho más rápido que la adivinación. Incluso con un hardware de tipo medio, un atacante puede generar y probar tres millones de contraseñas por segundo. Un ataque para descifrar todas las contraseñas de 8 caracteres posibles usando el conjunto de 76 caracteres, basándonos en esa velocidad de pruebas, llevaría seis años. Desde luego, muchas de las contraseñas se descubrirán en mucho menos tiempo y, estadísticamente, una contraseña dada se descubrirá en la mitad de ese tiempo. Si las contraseñas sólo tienen 7 caracteres, descifrar todo el conjunto llevaría sólo unos 28 días.

Cómo obtiene el atacante los algoritmos hash puros está abierto a debate, lo mismo que si el descifrado es una preocupación prioritaria. Tenga en cuenta que en Windows el atacante necesita tener acceso de nivel de sistema en el controlador de dominio para descifrar contraseñas de dominio. Si un atacante ya ha conseguido tener acceso a un controlador de dominio, el descifrado de contraseñas pasa a ser un problema secundario. Y, sin embargo, la mayoría de los atacantes descifran contraseñas. ¿Por qué? Principalmente, el atacante confía en que alguien tenga una cuenta en otro sistema de otro dominio con el mismo nombre de usuario y contraseña. Esto se conoce como dependencia administrativa, tema se tratará en un artículo posterior. Puesto que el único secreto utilizado en un protocolo de desafío-respuesta es el propio algoritmo hash de la contraseña, el descifrado de contraseñas es totalmente superfluo, porque los algoritmos hash son todo lo que necesita el atacante para tener acceso a una cuenta. En todo caso, los atacantes suelen descifrar contraseñas y su nivel de éxito es un problema grave.

No olvidemos que los sistemas operativos modernos, normalmente, no utilizan contraseñas de texto sin formato ni frases usadas como contraseña. Por lo general, el valor almacenado es el resultado de una función de un sólo sentido, por ejemplo un algoritmo hash. En los sistemas operativos basados en Windows NT (como Windows 2000, XP y Server 2003) la contraseña se almacena de varias formas distintas. Las representaciones principales son los algoritmos hash LM y NT. En lo que concierne a este artículo, no necesita saber exactamente cómo funcionan. Sólo tiene que saber tres cosas:

El algoritmo hash LM no distingue entre mayúsculas y minúsculas, mientras que el algoritmo hash NT sí lo hace.

El algoritmo hash LM tiene un conjunto de caracteres limitado a 142 caracteres, mientras que el algoritmo hash NT admite prácticamente todo el conjunto de caracteres Unicode, que son 65.536.

El algoritmo hash NT calcula el algoritmo hash en función de la contraseña completa que escribe el usuario. El algoritmo hash LM divide la contraseña en dos grupos de 7 caracteres, rellenando los huecos como sea necesario.

Los dos tipos de algoritmo hash generan un valor almacenado de 128 bits.. La mayor parte de los atacantes, descifran primero el algoritmo hash LM, y después descifran el algoritmo hash NT simplemente probando todas las combinaciones posibles de mayúscula y minúsculas de la contraseña sin distinción de mayúsculas y minúsculas que ha descifrado el algoritmo hash LM.

El algoritmo hash LM es una función de un sólo sentido muy sencilla que se utiliza para almacenar contraseñas. Se inventó originalmente para el sistema operativo LAN Manager y se incluyó en Windows NT por razones de compatibilidad con versiones anteriores. Todavía se sigue incluyendo por esta razón. Como consecuencia de la forma en que se calcula el algoritmo hash LM, ninguna contraseña con un algoritmo hash LM es más fuerte que una contraseña de siete caracteres seleccionada entre un conjunto de 142 caracteres.

Eliminar los algoritmos hash LM

Existen varios métodos para garantizar que el algoritmo hash LM no se almacena. Uno de ellos consiste en usar contraseñas o frases usadas como tales de más de 14 caracteres. También se puede usar el modificador NoLMHash, que en la Directiva de grupo de Windows Server 2003 y Windows XP como “Seguridad de red: no almacenar el valor del algoritmo hash LAN Manager la próxima vez que se cambie la contraseña”. El uso de dicho modificador desactiva globalmente el almacenamiento de los algoritmos hash LM de todas las cuentas. El cambio surtirá efecto la próxima vez que se cambie la contraseña. Los algoritmos hash LM existentes de las contraseñas actual y anteriores no se eliminan mediante el simple uso del modificador. Además, el hecho de que el modificador no funcione inmediatamente significa que, de momento, no se advertirán los posibles problemas de interoperabilidad causados por no almacenar los algoritmos hash LM. Consulte el artículo 299656 de Knowledge Base (en inglés) para obtener más información. Este artículo de KB también contiene información sobre el uso del modificador NoLMHash con Windows 2000.

El algoritmo hash LM también se puede eliminar usando ciertos caracteres en la contraseña. Se admite generalizadamente que el uso de los “caracteres ALT” en la contraseña impide que se genere el algoritmo hash LM. En realidad, sólo algunos de los caracteres Unicode hacen que desaparezca el algoritmo hash. Por ejemplo, los caracteres Unicode entre el 0128 y el 0159 hacen que no se genere el algoritmo hash LM. Algunos caracteres Unicode se convierten en otros caracteres antes de generar el algoritmo hash.

La eliminación de los algoritmos hash LM presenta inconveniente: hace que algunas cosas no funcionen. Una de las razones por las que los algoritmos hash LM se activan de manera predeterminada es que su eliminación inactiva cualquier aplicación que utilice la autenticación basada en UDP para RPC. Esto sucede, por ejemplo, con los Servicios de Cluster Server de Windows, Real Time Communications Server y, probablemente, otras aplicaciones. Estos problemas se resuelven activando la opción NtlmMinClientSec, que se muestra como “Seguridad de red: seguridad de sesión mínima para clientes basados en NTLM SSP (incluido RPC)” en la Directiva de grupo de Windows Server 2003. NtlmMinClientSec se debe establecer, como mínimo, en "Require message integrity" y "Require NTLMv2 Session security (0x80010)". Cuando se configura así, RPC utiliza la autenticación NTLMv2, que usa el algoritmo hash NT. (Consulte el artículo 828861 de KB para obtener más información sobre problemas de clúster si no se tiene un algoritmo hash LM). Otras aplicaciones también dejarán de funcionar si no se tiene un algoritmo hash LM. Por ejemplo, Outlook 2001 para Macintosh requiere que todas las cuentas que utiliza lo tengan. Windows 3.x dejará de funcionar si un algoritmo hash LM, y Windows 95 y 98 lo harán en ciertas circunstancias. Además, hay productos de otros fabricantes, como dispositivos de almacenamiento conectados redes, que pueden requerir algoritmos hash LM.

Conclusión

En esta primera parte de la serie de artículos sobre contraseñas se ha hablado de los principios básicos de las contraseñas. En la parte siguiente trataremos de analizar si las frases usadas como contraseña tiene ventajas sobre las contraseñas. Con todo, teniendo en cuenta el reducido número de usuarios que las utiliza, disponemos de muy pocos datos reales sobre las frases usadas como contraseñas. Para poder conocerlas mejor, deseamos pedirle un favor. Para ayudarnos, piense una frase usada como contraseña que podría utilizar (mejor no la que utilice en la actualidad) y envíenosla por correo electrónico a passstud@microsoft.com. Confiamos en obtener suficientes resultados para poder llevar a cabo análisis sobre las frases usadas como contraseña y saber como se forman en la realidad.

No olvide que esta columna es para ustedes. Si hay algo que desea que tratemos o le podemos ayudar a proteger sus sistemas de alguna otra forma, háganoslo saber. Sólo tiene que hacer clic en el botón “Comentarios” y enviarnos una nota.


Principio de la páginaPrincipio de la página