Se me cayo un exploit

SEGURIDAD INFORMÁTICA

HACKING . PROGRAMACIÓN . ELECTRÓNICA . GNU/LINUX

Se me cayó un exploit en tu server.... por @UnaPibaGeek

[email protected]:~# ./Password-Cracking

Prohibido entrar en script-kiddismo :p

Funcionamiento de las Tablas Rainbow

tablas-rainbow.png

Es interesante la cara de espanto de la gente cuando les menciono que las tablas rainbow pueden pesar muchos Gigas, hasta Teras... automáticamente surge la pregunta "¿Por qué? ¿Que llevan en su interior para pesar tanto?" por ahí, en algunos textos que podemos encontrar usando Google, explican que las tablas rainbow contienen infinita (si, infinita) cantidad de pares: "texto plano = hash" y que el programa que lanza el ataque usando las tablas solo va comparando los hashes de la misma con el que se quiere crackear hasta que encuentra el equivalente en texto plano.

Eso si que es para espantarse. Las tablas rainbow NO contienen pares de texto plano = hash, su contenido es otro y tiene que ver con la complejidad con la que son creadas estas tablas, procedimiento que luego es utilizado de manera similar para crackear el hash. Antes de pasar a explicar detalladamente esto, quiero comentar algunas cosas:

Hoy en día - por suerte - lo más habitual es que las aplicaciones guarden las contraseñas representadas en formato hash y no en texto plano. Un hash NO contiene la contraseña cifrada, es sólo una representación alfanumérica de la misma cuya longitud y modo de generarse variará según la función hash utilizada (MD5, SHA1, SHA-256, LM, NTLM, etc). Siendo así, no podemos obtener la clave a partir de ese hash haciendo algún proceso de "reversa", lo que se hace para este fin es buscar el equivalente en texto plano de ese hash. Dicha búsqueda puede hacerse mediante diversas técnicas, desde utilizar alguna base de datos online que tenga muchos pares de texto plano = hash para comparar, hasta los clásicos ataques de diccionario y fuerza bruta. El uso de tablas rainbow es una técnica más, pero que difiere en muchos aspectos de las anteriores.

Al crackear un hash, uno de los factores que mas se tiene en cuenta es el tiempo que demorará lograrlo. Si bien hoy tenemos una excelente herramienta llamada HashCat - sobre la que hablaremos en otra nota - que utiliza la GPU y puede dar muy buenos resultados en velocidad con ataques de fuerza bruta, el funcionamiento de las tablas rainbow hace que su velocidad para crackear hashes, aún con claves algo complejas, sea sorprendente.

Entonces, vamos al punto, ¿Cuál es el contenido de las tablas rainbow? Duplas. Una gran cantidad de duplas de palabras (combinaciones de caracteres) compuestas por la palabra inicial y la palabra final de un proceso que realizan las tablas rainbow justamente para crear su contenido. Dicho proceso se lleva a cabo utilizando un algoritmo de resumen y otro de reducción; el algoritmo de resumen es simplemente la función hash soportada por la tabla, las tablas son específicas, si queremos crackear un hash md5 tendremos que usar una tabla que se haya creado con ese algoritmo de resumen. Por otro lado, el algoritmo de reducción se aplica sobre hashes para obtener nuevas palabras o combinaciones de caracteres.

A continuación vemos un gráfico donde se muestra el proceso que realizan las tablas rainbow para generar cada dupla, que finalmente almacenará en su contenido. Aquí se aplican los algoritmos de resumen y reducción:



Se inicia aplicando la función hash a una palabra, que denominamos palabra inicial. El resultado lógicamente será su representación en formato hash, al cual le aplicaremos el algoritmo de reducción para generar una nueva palabra y continuar el proceso. Esto mismo se repetirá unas 40.000 veces. Al final, se guardará en la tabla rainbow únicamente la palabra inicial y la última que se ha generado, es decir, la palabra final. A esto se lo conoce como dupla, por cada una se realiza todo este proceso, y como dijimos, las tablas están compuestas por muchísimas duplas.

Bien, entendido cómo se crea una tabla rainbow podemos explicar cómo las mismas crackean un hash. El proceso es similar al anterior, con la diferencia de que esta vez comenzamos utilizando el algoritmo de reducción y contemplaremos algunas cosas más. Se divide en dos pasos:

1) Buscar coincidencia con la palabra final de alguna de todas las duplas que almacena la tabla rainbow:



Tal como se ve en el esquema, se inicia aplicando una reducción al hash que se quiere crackear y luego se continúa de la misma manera que el proceso de creación de la tabla que hemos descrito anteriormente. Con la excepción de que cada vez que se obtiene una palabra, se la compara con las palabras finales de las duplas de la tabla rainbow, si coincide con alguna de ellas, el proceso se detiene y continuará con el siguiente paso:

2) Volver a generar las 40.000 combinaciones de la dupla donde la palabra final ha coincidido:



Cuando se vuelven a generar las 40.000 combinaciones de la dupla donde, en el paso anterior, ha coincidido la palabra final, se compara cada hash que se va generando con el que se quiere crackear. En algún momento coincidirá y la búsqueda se detiene, mostrando como resultado la palabra que ha generado el mismo hash que teníamos por objetivo, es decir, su equivalente en texto plano ¡Lo que queríamos! :p

Complejo, pero cuando lo explicamos podemos entender mucho mejor a qué se debe la velocidad de estas tablas. En definitiva, cada dupla "representa" a 40.000 posibles contraseñas, y cada tabla tiene muchos gigas de duplas. En realidad, cuanto mas complejas sean las claves que la tabla es capaz de romper, mayor será su tamaño. Por ejemplo, una tabla que solo sea capaz de romper contraseñas alfanuméricas pesará menos que una que también soporte símbolos. Lo mismo aplica para la longitud de las contraseñas.

Video demostrativo del uso de tablas rainbow con OphCrack y RainbowCrack: http://youtu.be/WU7lrUxMR9U

¿Te cansaste de leer? Tomate un café (share):

Fecha: 10/07/2015

¡Suscribite!

Aprendé más en...