Archivos para contraseñas

Les voy a contar una historia.

Prologo: el descubrimiento

Todo empezó hace unos días, leyendo el siguiente post: “How to Crack a Window’s Password in 5 Minutes” (en español, Cómo crackear el password de Windows en 5 minutos). El post decía, entre otras cosas:

Sin importar cuál sea la razón para necesitarlo, encontrar la contraseña de Windows se generalmente simple, y puede ser realizado en un periodo corto de tiempo.”

“Para encontrar la contraseña de Windows, usted necesitará un programa llamado Ophcrack. Es completamente gratuito y funciona muy bien”

“… el Live CD iniciará las tablas rainbow y automaticamente comenzará a trabajar por la contraseña. Para la mayoría de las contraseñas de usuarios, solo tomará unos segundos crackearlas. Para contraseñas alfanuméricas más extensas, tomrá unos minutos, pero es la exepción, no la regla.”

“Una vez que encuentre la contraseña, anotala por ahí, quitá el CD y reiniciá el sistema. Ingresá la contraseña en el login y luego hace lo que quieras.”

“Nota: el sentido común indica que esto solo debe ser utilizado en computadoras donde usted está autorizado a acceder. Si utiliza esto para computadoras no autorizadas, eso es ilegal. Este artículo es solo confines informativos.”

Nota de mundobinario: hago extensiva la última nota a este post. ;-)

Primer estadio: escepticismo

La realidad es que luego de leer el artículo, pensé que esto se trataba de un titular, no digo amarillista, pero sí ventajoso. Supuse que el sistema funcionaría con contraseñas simples pero que ante contraseñas complejas (como la mía) esto no podía funcionar. Mis aprendizajes sobre ataques de fuerza bruta me hacían comprender que, a mayor complejidad, y dada la función exponencial, llega un momento en que el tiempo para calcular una contraseña va más allá de lo útil. La verdad, descreí…

Segundo estadio: las pruebas

De todas formas, más allá de mi opinión, creí que valía la pena realizar las pruebas pertinentes. Descargué el LiveCD y lo probé en una máquina virtual con Windows XP. El CD bootea y arranca a trabajar. El resultado, en la imagen a continuación:

crakpass

Como podrán observar, ofusqué cierta información ya que la password que efectivamente el sistema encontró, es una que utilizo normalmente. Observar que:

  • el primer recuadro azul marca la contraseña del usuario “Administrador”. El tiempo que demoró en encontrar la contraseña fue de aproximadamente 10 minutos.
  • el segundo recuadro marca la contraseña (vacía) de un usuario que tengo configurado así. El tiempo que demoró fue unos pocos segundos (literalmente).
  • abajo a la derecha se ve el tiempo total de finalizar todo el proceso aunque, como ya mencioné en el ítem 1, la password de administrador ya figuraba desde el minuto diez.

Finalmente hice dos pruebas más:

  1. Modifiqué la contraseña a “123456″ y esta fue encontrada en un minto y medio (ver imágen).
  2. Modifiqué la contraseña por una más compleja que la mía aún: “UnWi-*%$Np98ww”. La misma no fue encontradada luego de media hora (ver imágen).

Por lo tanto, pude concluir que este sistema de una u otra forma estaba utilizando algún método mejor que el clásico de fuerza bruta, que podía obtener contraseñas complejas… pero no tanto.

De todas formas estaba anonadado. Toda mi teoría sobre seguridad en contraseñas destruida en diez minutos. ¡Qué contraseña iba a utilizar ahora que la mía era fácil de obtener!

Tercer estadio: la comprensión

Nota de mundobinario: todos los méritos de esta sección para este post.

Definitivamente las pruebas me superaron, asumí mi derrota y pensé: “no hay derrota si hay aprendizaje”. Por lo tanto, decidí leer un poco a ver por qué este método funcionaba.

Como primer conclusión estaba claro que, como ya mencioné, esto no utilizaba un ataque de fuerza bruta clásico; y comprendí que justamente esto de las tablas rainbow no se trataba de este tipo de técnicas. Luego decidí ver qué decía el sitio oficial, que describe que se utilizan ataques de fuerza bruta para contraseñas simples y tablas rainbow para complejas. Incluso se pueden descargar las tablas que son muy pesadas (¡muy! desde 500 Mb. hasta varios Gigas).

¿Qué son las Rainbow Tables?

Cuando un usuario asigna su contraseña, el sistema operativo necesita guardar esa contraseña. Para no hacerlo en texto plano (sería muy simple encontrarla), lo que hace es aplicar una función Hash y almacenar el resultado de dicha función en un archivo (en el caso de Windows en C:\Windows\System32\config\SAM).

Una función Hash es una función que devuelve un valor casi único por cualquier cadena de texto (o incluso archivos, directorios, etc.). Es decir, si yo le aplico un Hash MD5 (un tipo de Hash) a la palabra “Sebastián”, el resultado será “c2d628ba98ed491776c9335e988e2e3b“. Y si hago lo mismo con “unmundobinario.com”, el resultado será “373e838e5050faca627b0433768aedef“. Claramente el resultado de una función Hash dista bastante de almacenar el texto plano.

Sin embargo, las funciones Hash tienen un inconveniente. Siempre que yo ponga la misma cadena obtendré el mismo resultado. Y aquí aparecen las tablas rainbow.

Basicamente a alguien se le ocurrió lo siguiente: no necesito hacer un ataque de fuerza bruta (prueba-error) para obtener la contraseña. Si conozco la función Hash, conozco la contraseña.

Una tabla rainbow es una colección enorme de Hashes con los algoritmos más conocidos. De esta forma, lo que antes era un ataque de fuerza bruta ahora es una búsqueda en unas tablas gigantes (literalmente). Obviamente el gran problema de estas técnicas es el espacio. De hecho, aunque aquí fue explicado de forma resumida, se utilizan funciones de reducción para no tener que ocupar tanto espacio de almacenamiento.

Entendido el método (¿entendido?) se entiende por qué en las pruebas que hice no se encontró en un caso el password: el motivo fue que no estaba cargada la función HASH de dicho password en la tabla de Hashes utilizada por la aplicación.

Nota de mundobinario: además del post citado en este estadio, pueden ver más información aún (en inglés) aquí.

Cuarto estadio: la conclusión

Cabe mencionar que, según el post que me ayudó a comprender esto, existen dos alternativas para poder segurizar las contraseñas almacenadas con Hash:

  1. Utilizar espacios en blanco en las contraseñas. Esto lo probé con una contraseña muy simple (“esp acio”) y el programa no pudo encontrar la contraseña.
  2. Añadir variables aleatorias en la generación del Hash. Es decir, que si pongo dos veces de contraseña Sebastián, obtener dos Hash válidos con una parte fija (siempre igual) y otra variable.

Luego de “experimento” podemos agregar que contraseñas MUY complejas también zafan (por ahora, y según las tablas que se utilicen) de este método.

Como conclusión, y en primer lugar está claro que todos los días se aprende algo nuevo. :mrgreen:

Las técnicas de “hacking” están aprovechando los avances informáticos (y en materia de Inteligencia Artificial). Podrán observar que estas herramientas están al alcance de cualquiera asi que tengan cuidado a quién prestan su PC.

Por otro lado, me queda la duda por qué los Sistemas Operativos existiendo estas técnicas, no aplican funciones aleatorias a los Hash antes de guardar la contraseña. Debo seguir leyendo para dilusidar una respuesta pero espero que algún lector que sepa más que yo nos adelante por qué no se implementan medidas para segurizar este aspecto.

Bueno, espero que hayan disfrutado este post tanto como yo. Les debía un post así de largo y portense bien y usen esta herramienta solo para probarla (o como mucho con algún amigo o hermano para hacerle una joda. Hasta ahí se lo permitimos…). ;-)

Interesante gráfico que me encontré hoy dando vueltas por la web: las contraseñas son como la ropa interior.

password

Contraseñas son como la ropa interior…

…cambialas seguido.

…no las compartas con amigos.

…cuanto más largas, mejor. ;-)

…no las dejes tiradas por ahí.

…se misterioso.

Fuente: Things That Do Not Matter (sí, el nombre del blog es interesante)

Otros post sobre contraseñas: