Tablas Rainbow

23
\\\\\\\\\\\\ CURSO orientación HACKER ////////////// //////////// By DarKh|s.exe ³ (n+1) \\\\\\\\\\\\\\ http://www.cursohacker.com [email protected] Disclamer: NO se asume ninguna responsabilidad debida al mal empleo de la información aquí contenida, puesto que este texto solamente tiene fines educativos y en ningún caso pretende incitar a nadie a cometer ningún delito ya sea informático o de otra índole. Tablas Rainbow en detalle (Criptografía) Se preguntaran que son las tablas Rainbow o "tablas arcoiris" :P. La respuesta es relativamente simple, son un tipo de tablas de búsqueda especial que permiten recuperar passwords usando sus hashes. Estas tablas están basadas en la teoría de cambio de tiempo por espacio. La teoría de cambio de tiempo por espacio (tiempo-espacio) es como una balanza, en este caso, necesitaremos más espacio para reducir el tiempo, y como el tiempo es oro, las tablas rainbow son muy rápidas, y en este manual veremos como funcionan básicamente. Philippe Oechslin (a que no pueden pronunciarlo ;P) fue el primero quien utilizó estas tablas en el programa Ophcrack. Ophcrack es una herramienta para crackear contraseñas de Windows, y está basado justamente en las tablas Rainbow. Oechslin se basó en la teoría de cambio de tiempo por espacio, desarrollada en el año 1980 por Martin Hellman, luego fue usada por Ron Rivest en el año 1982, y desde entonces no fue optimizado ni desarrollado nuevos avances, Philippe logró crear un análisis criptográfico más eficiente basado en las teorías anteriores. Ahora las tablas rainbow se utilizan para romper gran variedad de hashes y algoritmos criptográficos. Es importante mencionar que cada tabla rainbow está creada para sólo una función hash, es decir, hay tablas rainbow solamente para MD5, LM, NTLM, etc.

Transcript of Tablas Rainbow

Page 1: Tablas Rainbow

\\\\\\\\\\\\ CURSO orientación HACKER ////////////// //////////// By DarKh|s.exe ³ (n+1) \\\\\\\\\\\\\\

http://www.cursohacker.com [email protected]

Disclamer: NO se asume ninguna responsabilidad debida al mal

empleo de la información aquí contenida, puesto que este texto solamente tiene fines educativos y en ningún caso pretende incitar a

nadie a cometer ningún delito ya sea informático o de otra índole.

Tablas Rainbow en detalle (Criptografía)

Se preguntaran que son las tablas Rainbow o "tablas arcoiris" :P. La respuesta es relativamente simple, son un tipo de tablas de búsqueda

especial que permiten recuperar passwords usando sus hashes. Estas tablas están basadas en la teoría de cambio de tiempo por espacio.

La teoría de cambio de tiempo por espacio (tiempo-espacio) es como

una balanza, en este caso, necesitaremos más espacio para reducir el tiempo, y como el tiempo es oro, las tablas rainbow son muy rápidas,

y en este manual veremos como funcionan básicamente.

Philippe Oechslin (a que no pueden pronunciarlo ;P) fue el primero quien utilizó estas tablas en el programa Ophcrack. Ophcrack es una

herramienta para crackear contraseñas de Windows, y está basado justamente en las tablas Rainbow.

Oechslin se basó en la teoría de cambio de tiempo por espacio,

desarrollada en el año 1980 por Martin Hellman, luego fue usada por Ron Rivest en el año 1982, y desde entonces no fue optimizado ni

desarrollado nuevos avances, Philippe logró crear un análisis criptográfico más eficiente basado en las teorías anteriores.

Ahora las tablas rainbow se utilizan para romper gran variedad de hashes y algoritmos criptográficos. Es importante mencionar que

cada tabla rainbow está creada para sólo una función hash, es decir, hay tablas rainbow solamente para MD5, LM, NTLM, etc.

Page 2: Tablas Rainbow

Estas tablas pueden crackear fácilmente una contraseña de entre 1 y 16 caracteres.

Ya sabemos que la función de hash es unilateral, o sea, no existe una función inversa, luego de encriptar texto plano, por ejemplo una clave

de acceso, convirtiéndola en un hash, luego el hash no puede ser desencriptado para saber que escondía, básicamente porque los

hashes funcionan así, quizá recuerden las propiedades de los hashes en la lección de la semana de criptografía, si no la recuerden léanla o

esperen a que les llegue ;-).

Si se quiere averiguar que texto se oculta bajo determinado hash,

hay dos métodos básicos:

- Hashear cada texto que se ocurra uno por uno, y compararlo

con el hash original - Hashear cada texto que se ocurra uno por uno, pero guardarlos

en una tabla ordenada, para que luego la comparación sea más rápida, entonces no generamos nuevamente los hashes.

Por tanto ganamos en velocidad, y se utilizan menos recursos de memoria Ram y procesador que hasheando cada posibilidad y

comparando. Las tablas rainbow son una optimización eficiente del segundo punto, te dan todo en bandeja de plata :D.

Ok, entonces las tablas rainbow son para realizar ataques por fuerza

bruta, pero de forma bastante eficiente, y sin duda lo que caracteriza utilizar estas tablas es que además de utilizar bastante espacio en

disco, es que las búsquedas son muy rápidas, veamos su

funcionamiento:

En las tablas rainbow se utiliza una función de reducción que ingresa hashes y devuelve texto plano, pero NO es una función inversa, la

función de reducción nunca resultará en el texto que produjo el hash.

Por ejemplo si pasamos una clave a través de la función MD5,

tendríamos:

MD5("493823") -> "222f00dc4b7f9131c89cff641d1a8c50".

Y para este caso aplicaremos una función de reducción R() que simplemente recogerá los primeros seis números del hash:

R("222f00dc4b7f9131c89cff641d1a8c50") -> "222004".

Y obtenemos un texto plano de 6 dígitos del hash reducido, eso es básicamente lo que hace la función de reducción, y en esto se basan

las tablas rainbow.

Page 3: Tablas Rainbow

Ventajas y desventajas de utilizar tablas rainbow:

Ventajas

La principal ventaja de utilizar tablas rainbow es el menor espacio de almacenamiento necesario en comparación con guardar todas las

posibles claves y sus hashes y el menor tiempo de búsqueda. Además existe mayor probabilidad de encontrar contraseñas a partir de un

hash que utilizando ataques de diccionario, pero este sistema no es tan exitoso como la fuerza bruta.

Luego de tener las tablas generadas, el tiempo para crackear un hash es poco. Las tablas rainbow están generadas para un amplio rango de

algoritmos de hash, como MD5, SHA-1, LM, RIPEMD, etc.

El número de búsquedas es reducido, comparado con el método de fuerza bruta convencional.

Desventajas

La gran desventaja es el tiempo en el cual se pre-computan las

tablas, o sea, el tiempo de generación y el esfuerzo que requiere. Además, si se cambia el juego de caracteres, se deberán rehacer las

tablas.

Mientras el largo de la contraseña aumente, aumentará el número de

posibilidades, y mientras el espacio de claves (cantidad de caracteres distintos) aumente, con ello más lento se hará factible realizar un

ataque a hashes utilizando tablas rainbow. Esto se debe al aumento de tamaño de la tabla.

Además, sí el juego de caracteres aumenta mucho, el tiempo de pre-computación se convierte en un largo y lento proceso y la

probabilidad de éxito disminuye. Por ejemplo, sí el juego de caracteres es alpha-numeric-symbol la cantidad de caracteres es 7614

y para generar una tabla óptima y eficiente se tardaría más de 3 meses o muchos GB en disco para generarla.

Comparación técnicas de cracking de contraseñas:

# Ataque de diccionario

Fuerza bruta Tablas Rainbow

Espacio de claves 23.109 8.031.810.176 8.031.810.176

Tiempo de pre-computo

1.05 segundos 96,54 horas (estimado)

20,15 horas

Tiempo de búsqueda

< 1 segundo (0,165)

Depende del orden/función de

búsqueda

2,6 segundos máximo

Almacenamiento ~947 KB 300 GB! ~611 MB

Page 4: Tablas Rainbow

requerido

Como se construye una tabla rainbow

En las tablas rainbow no se almacenan todas las posibles combinaciones y sus correspondientes hash, sino que solamente se

almacenan algunas de ellas. Se guardan de tal manera que se puede deducir las que no están guardadas a partir de las que están.

Esto se puede gracias a la función de reducción, en la tabla se guardan cadenas de hash a partir de esta función.

La función de reducción ingresa un hash y devuelve texto plano. Se puede elegir cualquier algoritmo criptográfico (MD5, LM, SHA1, etc),

siempre que cumpla con lo anterior.

Para generar una cadena de hashes, se comienza calculando el hash

de una contraseña elegida al azar. El resultado es pasado a una función de reducción, el texto plano devuelto es hasheado

nuevamente, el cual pasa, otra vez, a la función de reducción. Así sucesivamente.

Al final se desecha toda la cadena con excepción de la primera

contraseña y el último hash calculado, los cuales son almacenados dentro de la tabla. La primera contraseña y el último hash de la

cadena comprenden una entrada en la tabla rainbow.

Así una cadena que contiene miles de funciones de un solo sentido,

se representa en un texto y un hash.

Page 5: Tablas Rainbow

Al final la tabla contara con entradas parecidas a lo siguiente:

Primer contraseña de cadena Último hash calculado

ntvglaband 108a21b81de05cc7448b992678be3e33

S0rdromo 9179538774ac2c0caad3b435b51404ee

merkk99 19fd2590e6f8dd8a25e6c6a091ddab09

: :

192i6877 3f6288969a7cab11c633b63571044597

Pueden crackear esos hashes LM para probar, diviértanse ;) Si aún no saben hacerlo, sigan leyendo...

Por tanto, cuanto más filas se tenga más combinaciones de contraseñas tendremos y más probabilidad de encontrar una clave a

partir de su hash.

Cuando crackean claves, o sea, cuando buscamos la contraseña que

esconde un hash, se realiza el siguiente proceso: Se busca el hash original en la tabla, si no se encuentra, se aplica la

función de reducción al hash, el resultante texto plano se hashea y este se busca en la tabla. Esto se repite hasta que el hash aparece en

la tabla.

Luego de encontrado el hash, se conoce la cadena que cuenta con la

contraseña que produjo el hash. Lo único que falta hacer es volver a hashear esa cadena y comparar los resultados con el hash original.

Notar que no es posible ir hacia atrás desde el punto dónde encontramos coincidencias.

Page 6: Tablas Rainbow

La función de reducción es usada para generar la tabla como para buscar resultados en ella. La estructura de la tabla y su función de

reducción, garantiza que el hash coincidirá con el hash final de alguna de las cadenas.

El contenido de la tabla no depende de la entrada del algoritmo. Es creada una vez y luego utilizada repetidamente para las búsquedas

sin sufrir alteración alguna.

El resultado final de la generación, es una tabla que contiene

estadísticamente una alta probabilidad de revelar una contraseña en un corto período de tiempo, generalmente menos de un minuto. El

tiempo depende de cómo se haya creado la tabla, pero si es eficiente no se tardará más de un minuto encontrar el texto plano que generó

el hash.

La probabilidad de éxito de la tabla depende en los parámetros que

se hayan usado para generarla, esto es muy importante (ya lo veremos cuando generemos nuestra propias tablas). Esto incluye el

juego de caracteres usado, largo de las contraseñas, largo de las cadenas, cantidad de cadenas (filas) de la tabla.

La probabilidad de acierto está definida por la probabilidad de encontrar un texto plano a partir de uno encriptado. En el caso de

contraseñas, la contraseña es el texto plano, y el hash de la password el cifrado/encriptado, por lo tanto, la probabilidad de éxito, es la

probabilidad de recuperar la contraseña original a partir del hash.

RainbowCrack

No, no es una nueva droga callejera... Este programa sirve para

crackear contraseñas, fue desarrollado por Zhu Shuanglei, luego de que nuestro amigo Philippe Oechslin desarrollara tablas rainbow

eficientes. RainbowCrack es un programa disponible tanto para sistemas Windows como para GNU/Linux. Es libre (código fuente

disponible) y muy personalizable, permite romper gran cantidad de hashes, podremos crear nuestras propias tablas rainbow, utilizando

herramientas sencillas, que iremos viendo en este manual.

El programa se descarga desde su página oficial:

http://www.antsight.com/zsl/rainbowcrack/

Luego de descomprimir o compilar el programa, tendremos el

programa rcrack para empezar a crackear, pero antes necesitamos las tablas, estas las podemos descargar de Internet, o bien,

generarlas nosotros.

Page 7: Tablas Rainbow

Pueden encontrar tablas rainbow para usar en: http://www.freerainbowtables.com/

http://rainbowtables.ddl.cx/

Ya saben dónde las pueden descargar, ahora les explicaremos como

generar sus propias tablas.

Generando nuestras tablas

Para esto tenemos herramientas que nos ayudaran en nuestro camino a la gloria. Rtgen es una aplicación que se distribuye junto al

paquete de RainbowCrack. En su versión 1.2 (última al día de hoy) permite generar tablas para hashes lm, md5 y sha1.

Démosle manija y echémosle andar...

Si ejecutamos rtgen sin parámetros nos dará la clásica ayuda, como debe ser. Los parámetros que debemos pasarle son estos:

rtgen algoritmo hash \ juego de caracteres \ largo mínimo contraseña \ largo máximo \ index de tabla \ largo de cadena \ cantidad de

cadenas \ sufijo de archivo \ [-bench]

Ejemplos:

rtgen lm alpha 1 7 0 100 16 test

rtgen md5 byte 4 4 0 100 16 test

rtgen sha1 numeric 1 10 0 100 16 test

rtgen lm alpha 1 7 0 –bench

Explicación de los parámetros:

El primer parámetro a pasar obligatoriamente, es el algoritmo hash, los disponibles son lm, md5 y sha1 que son los más comunes y

utilizados.

El segundo parámetro a pasar es el juego de caracteres, se debe

pasar un nombre del juego de caracteres representado en el archivo charset.txt, el cual debe estar dentro del mismo directorio de

ejecución. (Recomendación ver el archivo charset.txt)

Largo mínimo de contraseña, se refiere a cuantos caracteres tendrán

los texto plano de los hashes. Largo máximo es la cantidad máxima de caracteres que tendrá. Claro que cuanto más largo sea el texto

plano del hash, más posibilidades habrá y más cadenas que generar.

Index de tabla es el índice de la tabla, se refiere al número que

tendrá el nombre del archivo.

Page 8: Tablas Rainbow

Largo de cadena indica la cantidad en caracteres que tendrán las cadenas a generar. Cantidad de cadenas será cuantas cadenas hay

que generar (filas de la tabla)

Sufijo de archivo, es para diferenciar entre archivos con iguales

características, me refiero a haber creado otros archivos con los mismos parámetros anteriores, entonces para diferencias se coloca

un sufijo.

El parámetro –bench (de benchmark) es para simular, probar los

tiempos y resultados de crear esa tabla.

Generando tablas en modo gráfico

Una opción más linda visualmente, que nos da mucho más

posibilidades que rtgen. Winrtgen una especie de front-end recargado de rtgen, que añade nuevas funciones.

En primer lugar pueden descargar este programa desarrollado para sistemas MS Windows desde la siguiente dirección:

Winrtgen: http://www.oxid.it/downloads/winrtgen.zip

Luego de descomprimir el archivo descargado y ejecutar el archivo

winrtgen.exe observarán una ventana que tiene dos columnas y varias filas, además 6 botones en su parte inferior. Para configurar

los parámetros de nuestra nueva tabla debemos elegir el primer botón “Add Table” y les aparecerá algo similar a lo correspondiente

en la siguiente imagen.

Page 9: Tablas Rainbow

Podrán percibir que el Winrtgen tiene los mismos parámetros que el

rtgen, por lo tanto no los explicaré de nuevo.

En primer lugar elegimos el algoritmo para usar en la tabla, en la

opción “Hash”, podrán notar que disponen de más algoritmos que con rtgen.

Min Len y Max Len se refieren al largo mínimo y máximo que tendrán las contraseñas a crackear. Chain Len es el largo de la cadena,

cuanto más larga es la cadena más tiempo de procesamiento y más probabilidad de éxito, pero el tamaño de la tabla no se afecta.

Chain Count, indica cuantas cadenas generar, cuanto mayor sea el número, más grande será la tabla y más posibilidad de éxito, se

puede ver en tiempo real en “Table properties” (propiedades de tabla) como varían los indicadores.

Las propiedades de tabla indican cuantas claves son posibles con el juego de caracteres seleccionado (Charset)

En “Nº of tables” se indica cuantas tablas generar. ¿ Porqué crear

más de una tabla ? Para tener mayor probabilidad de éxito una sola tabla sería muy

grande y tardaría más en el proceso de búsqueda. Por ello creamos

Page 10: Tablas Rainbow

varias, ya que creando una sola muy grande deberemos ordenarla, lo que llevaría bastante tiempo de proceso y de búsqueda. Reduciendo

el tamaño de cada tabla y dividiéndola en varias, tendremos un uso más eficiente de la memoria y el ordenamiento de cada una sería

más veloz.

Debemos elegir el juego de caracteres que queremos utilizar,

podemos utilizar las que vienen predefinidas o editar el archivo charset.txt nosotros mismos, creando o modificando juegos de

caracteres.

Muy importante es el botón de “Benchmark” este realizará un

simulacro de la generación de la tabla con los parámetros y opciones indicados.

En la imagen se observa un Benchmark de generar tablas,

explicaremos los datos que nos entrega:

Hash speed será la velocidad de generar hashes por segundo. Step

speed la cantidad de pasos que hará por segundo al generar la tabla.

Table precomputation time, es el tiempo que llevará generar una

tabla en ese computador. Total precomputation time, es el tiempo total de generar las tablas, en la imagen creamos 3 tablas, por tanto

será el tiempo de creación de cada tabla multiplicado por 3, los tiempos pueden ser horas, días, años, etc...

Max cryptanalysis time, tiempo máximo de criptoanálisis, es el tiempo que llevaría encontrar una coincidencia en las tablas, cuanto

más filas/más cadenas (Chain Count) tenga la tabla más rápido será el proceso de encontrar una coincidencia, pero la tabla será más

grande, nunca olviden la teoría de cambio de tiempo por espacio.

Los datos del simulacro se cumplen en la realidad cuando se genera la tabla con un pequeño margen de error.

Page 11: Tablas Rainbow

Casos prácticos

Tablas Rainbow Vs. Brute Force

Compararemos dos técnicas de cracking de hashes; tablas rainbow y

brute force.

En primer lugar demostraremos de forma práctica como crackear contraseñas con el juego de caracteres ASDFGHJKL. Generaremos

una tabla rainbow utilizando winrtgen, y crackearemos con rainbowcrack. Posteriormente crackearemos contraseñas utilizando

jtr y el mismo juego de caracteres. Quien será el ganador para este primer reto, se lo imaginan ?

Vamos a ensuciarnos las manos un poco... ;)

Especificamos los parámetros como se muestra en la imagen. La

tabla de 458 MB se generará en 13 minutos aproximadamente, tendrá una probabilidad de éxito del 100%

También se pudiera haber realizado la misma tabla con el siguiente comando de rtgen:

Page 12: Tablas Rainbow

rtgen lm CursoHacker 1 7 0 24 30000000 algo

Les comento que generar tablas utiliza toda la capacidad del

procesador, al igual que crackear contraseñas con rainbowcrack.

Luego de dar ok dos veces se comenzará a generar la tabla, como

mostramos en la imagen a continuación.

Mientras avance, se mostrará el progreso de generación. Luego de completado tendremos el archivo.

Se habrán dado cuenta que los archivos se generan con una

nomenclatura especial, los archivos que son generados dentro del directorio de winrtgen, tienen la particularidad que sus nombres

comienzan con el algoritmo hash que fueron generadas esas tablas, luego el nombre del juego de caracteres usado, que debe estar

especificado en el archivo charset.txt también dentro del mismo directorio, luego del primer símbolo de numeral # indica el mínimo y

máximo número de caracteres que contiene la contraseña.

El nombre del archivo contiene todos los parámetros que

especificamos al crearla, el nombre del archivo no debe ser cambiado, porque es parte de los datos que toma el programa

crackeador, por ejemplo el rainbowcrack.

Luego de tener la tabla generada, pasamos a ejecutar el

rainbowcrack. No olviden que deben tener el archivo con las passwords, pueden haberlo obtenido con pwdump. En nuestro caso

utilizamos pwdump2 y dejamos solamente tres usuarios en el archivo de hashes. Nuestro archivo de hashes contiene lo siguiente:

ganja:1005:b44789a28ab64d03aad3b435b51404ee:970acf0644a6cb7e6da9e10174827590:::

kuntakinte:1006:85367c4a7c154243b94745df070199fd:e83f97aacf40bf7cc3248ad3b6bf3ddf:::

salomon:1004:1c82ca536a599f103e04f4ef84e62dfa:f05eda915b93554aa8a0ebfd2fcaf2e9:::

Los usuarios son, ganja, kuntakinte y salomon.

Page 13: Tablas Rainbow

Primero debemos copiar el archivo charset.txt desde el directorio de winrtgen hacía el directorio del rainbowcrack, esto es para tener el

mismo juego de caracteres en ambos, de lo contrario al crackear nos dará error de redundancia, al comprobar que el juego de caracteres

no existe.

Abrimos una consola de comandos, y luego nos ubicamos en el

directorio de los ejecutables de rainbowcrack. El primer paso es reordenar la tabla rainbow, para ello utilizamos el programa rtsort

utilizando el comando con su propio nombre.

Luego de reordenarla, pasamos al cracking con tablas rainbow, el

momento esperado, dónde la magia se hace realidad, y develamos el secreto del ratón Pérez ;P

El ejecutable de rainbowcrack es rcrack lo ejecutamos y observamos

maravillados:

Luego de haber ejecutado el comando : rcrack.exe lm_CursoHacker#1-7_0_24x30000000_oxid#000.rt –f

hashes.local

Page 14: Tablas Rainbow

El primer parámetro es la tabla rainbow a utilizar, que es justamente la que creamos anteriormente, luego del parámetro –f especificamos

el archivo de hashes que ya saben cual era el contenido, porque lo dije en la página anterior ;P

Como habrán podido observar en la imagen anterior, todas las contraseñas fueron descubiertas, el tiempo que llevó realizar toda la

operación fue de 19.75 segundos, de los cuales 19.72 segundos fueron de la lectura y verificación del archivo de tablas. Y 0.03

segundos fueron del análisis criptográfico.

Ahora vamos con JTR (John The Ripper), lo primero es crear el juego

de caracteres y configurar el archivo john.ini, les explicamos como:

Si todavía no lo tienen en su sistema se lo descargan desde:

http://www.openwall.com/john/

Luego de tenerlo y orejearlo un poco, debemos editar el archivo

john.pot y dejarlo solamente con la siguiente línea:

$LM$:ASDFGHJKL

Eso indica el juego de caracteres que vamos a utilizar. Para crear el

archivo con el juego de caracteres ejecutamos el siguiente comando:

john-386.exe --make-charset=CursoHacker.chr

En pocos segundos tendremos el archivo con el juego de caracteres. A continuación editamos con cualquier editor de textos el archivo

john.ini, buscamos el texto “# Incremental modes” (sin comillas) allí encontraremos las opciones para el crackeo por fuerza bruta.

Agregamos la siguientes líneas:

[Incremental:CH]

File = $JOHN/CursoHacker.chr MinLen = 0

MaxLen = 7 CharCount = 9

Como sabrán, o no? Lo que allí se indica es el archivo que contiene el juego de caracteres, el largo mínimo y máximo de las contraseñas, y

la cantidad de caracteres distintos del juego de caracteres.

Luego de guardar todos los cambios en los archivos, nos dirigimos a

la consola de comandos. Ahora es el momento de la verdad, no se asusten y continúen...

Page 15: Tablas Rainbow

Ejecutamos john-386.exe –i:CH hashes.local

Yyyy…. magia !!

Tan solo 3 segundos !! Tenemos un ganador !!

Como podrán observar muy rápido, las contraseñas las separa en 2, porque así trabaja el algoritmo LM. Por tanto nosotros debemos

unirlas.

En este primer reto, concluimos que era más simple y eficiente

utilizar JTR que generar las tablas rainbow, y crackear con ellas, claro, las tablas se podrían haber echo más grandes y así consumir

menos tiempo, pero de todas formas necesitaríamos tiempo de procesamiento en generarlas y/o descargarlas de internet, por tanto

y sin dudas JTR es más eficiente, hagamos otra prueba para comprobar cuando utilizar una opción u otra.

Prueba Nº 2

En esta prueba práctica crackearemos contraseñas con el juego de

caracteres alfa (solo letras), generamos la tabla rainbow, como ya sabemos, y seleccionamos el juego de caracteres alpha.

Crackeamos las contraseñas de 3 usuarios utilizando rainbowcrack:

Page 16: Tablas Rainbow

Como habrán observado, se descubrieron todas las contraseñas en un

tiempo total de 50 segundos.

Ahora veamos que tal nos va con el JTR. Ejecutaremos el JTR

también utilizando el juego de caracteres alpha, y hemos probado solamente descifrar una de las contraseñas, para ello utilizamos el

parámetro –u para indicar la contraseña de que usuario queremos crackear:

JTR tardó 26 minutos en descifrar una sola de las contraseñas, mientras que con rainbowcrack y una tabla rainbow eficiente (99%

probabilidad de éxito y 700MB de espacio) tardó 50 segundos en las contraseñas de 3 usuarios !

Con estas pruebas prácticas concluimos que:

Cuanto más contraseñas a deducir tengamos, es preferible utilizar

tablas rainbow. Cuando se generen las tablas es importante saber que cuanto más filas/cadenas más rápida será la búsqueda pero más

grande será la tabla. Y que cuanto más largas las cadenas y más cantidad de cadenas por tabla, más probabilidad de éxito. Utilizando

winrtgen pueden ir viendo y probando todo esto, no olviden tener un equilibrio, entre tamaño de la tabla y tiempo de generación de la

misma.

Page 17: Tablas Rainbow

Estas gráficas aclararán su mente:

Por último decirles que es posible crackear un solo hash, utilizando el

parámetro –h de rcrack. Supongamos que tenemos la siguiente línea de un archivo de hashes generado por pwdump:

salomon:1004:0c2951af971ffcd13bef6036f4d71807:de0e4eea4e5898f4a0d5a0c3638befc5:::

Lo primero que tenemos es el nombre del usuario y su UID (User ID, número identificador de usuario), el usuario es salomon y su UID es

1004, luego vienen los hashes de la contraseña, recuerden que en LM se descompone la contraseña en 2 secciones de 7 caracteres y luego

se hashean por separado y se juntan en una, por tanto para crackear debemos pasarle el hash verdadero que son 16 caracteres.

Entonces a las manos:

rcrack.exe lm_CursoHacker#1-7_0_24x30000000_oxid#000.rt –h

0c2951af971ffcd1

Con ello tendremos la primer parte de la contraseña, luego

deberemos crackear la segunda sección.

OphCrack

Otro programa que pueden utilizar es el OphCrack, sencillo y efectivo. Sus tablas están más optimizadas que las de rainbowcrack. Y de

regalo les voy a dar una pequeña introducción práctica para que disfruten, sólo por esta vez, que no se les haga costumbre pedir más

;P

Page 18: Tablas Rainbow

OphCrack se distribuye tanto como liveCD, o sea, un CD booteable que en este caso ejecuta un sistema operativo GNU/Linux,

específicamente SLAX, que a su vez es derivado de Slackware. Este liveCD ya contiene tablas rainbow para LM y NTLM.

También se distribuyen programas para ser utilizados tanto en GNU/Linux como en MS Windows, ambos utilizan las librerías GTK+.

Luego de descargarnos el programa ophcrack-win32-installer-2.4.1.exe para Windows desde SourceForge (la red más grande de

distribución y alojamiento de software libre) pasamos a la instalación. El mismo nos da la posibilidad de descargar las tablas rainbow

(Ophcrack no cuenta con generador de tablas).

Las tablas:

La primera opción es para instalar las tablas para NTLM desde DVD. Nosotros y ustedes por un tema práctico instalaremos la versión

descargable por internet de 776 MB. Esta contiene hashes LM del 99,9% de todas las combinaciones alfanuméricas, contraseñas con

combinaciones de letras y números (cerca de 80 billones de hashes!).

Los hashes LM no son case sensitive por eso la diferencia con los

hashes NTLM. La tabla que indicamos tiene 283 passwords.

La tabla de 8.5 GB contiene hashes NTLM es utilizado cuando se deshabilitó LM en la pc, tiene el 99% de hashes posibles, son más de

7 trillones de hashes!

Algunas pruebas prácticas con passwords:

Aquí tenemos una tabla que muestra en cuantos segundos fueron descubiertas las siguientes passwords (utilizando hashes LM y la tabla

antes mencionada):

0d1n 120 segundos

virtualpc 450 segundos m4r1hu4n4 500 segundos

Page 19: Tablas Rainbow

abracadabra 615 segundos elvelozmurciélagohindúcomíafelizcardilloykiwi 700 segundos

Contraseña no encontrada: 4+Y>!6i

La última contraseña no la encontró, porque esta contiene caracteres

que no están en el juego de caracteres alfanuméricos.

Luego de instalado y ejecutado:

En primer lugar debemos tomar un archivo que tenga las contraseñas, si queremos tomar automáticamente el archivo de

hashes de la maquina local como se ve en la imagen, presionamos en Load.. > From local SAM

Nos cargará los usuarios del sistema y datos sobre sus contraseñas. Luego en el botón Tables... podremos elegir que tablas rainbow

utilizar. Para comenzar el crackeo le damos al botón Launch.

Luego de 2 minutos en nuestro caso, encontramos la contraseña del

usuario VirtualOdin que era 0d1n, y luego de 45 minutos terminó por recorrer todas las tablas para descifrar las otras contraseñas que

tenían passwords fuertes y no pudieron ser descubiertas, veamos la imagen:

Page 20: Tablas Rainbow

Como verán muy fácil de utilizar.

Encuentran este hermoso programa en:

http://ophcrack.sourceforge.net/

El índice de éxito de encontrar contraseñas con Ophcrack es del

99,9% para hashes LM y NTLM, o sea, para Windows. También para RainbowCrack utilizando las tablas rainbow que distribuyen para

romper varios hashes.

Como defenderse de las tablas rainbow en nuestros sistemas?

En primera instancia las medidas de seguridad a implementar son:

Limitar el acceso físico, enforzar las contraseñas para que sea más

difícil o imposible descubrirlas por métodos de fuerza bruta, utilizando caracteres especiales. Utilizar protocolos de autenticación fuertes,

protocolos de acceso remoto fuertes, comunicaciones seguras (encriptadas con algoritmos fuertes).

Proteger las bases de datos de passwords, investigar las técnicas de password cracking. Forzar políticas de passwords y realizar

entrenamientos de concientización y auditorías de passwords. Tener el sistema actualizado. Como medidas básicas y generales, ahora en

cuanto a las tablas rainbow:

Page 21: Tablas Rainbow

Las tablas rainbow no sirven para crackear hashes generados con bits aleatorios. Los llamados “salts” o semillas aleatorias, son muy

efectivos, ya que añaden complejidad y extienden el largo del hash. Actualmente se guardan hashes con salt nativamente en sistemas

tipo Unix, BSD, GNU/Linux. El resultado de añadir semillas es un hash derivado del original.

Por ejemplo con la siguiente función tendríamos un hash derivado utilizando semillas aleatorias (salt):

hash = MD5 (password . salt)

(El punto es un operador de concatenación)

Sistemas Windows NT/2000, XP y Vista (por compatibilidad hacia

atrás) utilizan Lan Manager (LM) y NT Lan Manager (NTLM), que no emplean salts, es por eso que la mayoría de las tablas rainbow que

pueden encontrar serán para romper estos sistemas poco seguros.

LM utiliza DES, cifrando con la clave del usuario la constante

“KGS!@#$%”. El hash se divide en dos bloques de 7 caracteres. Si la clave tiene menos de 14 caracteres, se rellena con null.

Las contraseñas con hash LM son más proclives a ataques de fuerza bruta y menos seguras que NTLM (NTLMv1 utiliza md4, NTLMv2

utiliza md5), por lo tanto si no es necesaria la compatibilidad hacia atrás con sistemas Windows, es mejor desactivar LM, para conocer el

procedimiento, les recomiendo esta lectura:

http://support.microsoft.com/kb/299656/

Para contraseñas que se guardan en Active Directory de Windows, es mejor utilizar el protocolo Kerberos.

Por lo tanto una buena defensa además de utilizar salts, para evitar este tipo de ataques, es incluir espacios y caracteres raros en las

contraseñas y aumentar su longitud, por tanto hacerlas más “fuertes” ya que todo lo que aumente la complejidad del password será en

beneficio de la seguridad.

Page 22: Tablas Rainbow

Conclusiones

Las tablas rainbow se utilizan para descubrir el texto plano que

esconden determinados hashes, las tablas son creadas para algoritmos específicos, luego de crear las tablas se pueden utilizar

indefinidamente sin modificar su contenido.

Se basan en la teoría de cambio de tiempo por espacio. Se utiliza la

función de reducción para crear las tablas y para realiza búsquedas en ellas.

Dependiendo del caso, nos será más efectivo utilizar las tablas rainbow u otro sistema de crackeo. Utilizando tablas rainbow destaca

su velocidad y probabilidad de éxito en casos de tener muchas contraseñas a deducir.

Por último, se debe tener en cuenta una política de contraseñas,

(muchas de estas serán obvias luego de leer todo el material

entregado):

* Cambiar las contraseñas cada cierto tiempo.

* Deben de contener, idealmente, una mezcla de letras, números y

otros caracteres.

* Deben de tener cierta cantidad de caracteres, ya que cuanto más

cortas, más fáciles de descubrir.

* No se debe usar la misma contraseña para sitios distintos.

* No deben de contener información personal de ningún tipo.

* No debe de ser alguna palabra conocida o pertenecer a otro idioma (contramedida para ataques de diccionario).

* No deberían ser mutaciones simples de palabras, estas son contraseñas débiles: unouno, tr3s, casa23, elgoog (google al revés).

* Aunque al mismo tiempo ha de ser fácilmente recordable, porque no se debe escribir en ningún lugar.

* No se deben anotar en ningún lugar, nada de pegatinas en el monitor que diga; “Usuario de alumnoz.com es c4nibal contraseña

comohombrestmbmujeres” ;P

Les recomiendo una página interesante para crear contraseñas

fuertes y recordarlas: http://strongpasswordgenerator.com/

Page 23: Tablas Rainbow

Este sitio nos da la posibilidad de crear contraseñas fuertes de largo entre 5 y 21 caracteres, utilizar símbolos, y lo más interesante nos da

una pauta de cómo recordar la contraseña, por ejemplo:

La contraseña dR5h"75 será recordada como disney RADIO 5 harry "

7 5. Ya me olvidé ;P

Claro que utilizando este método pueden generar sus propias

contraseñas fuertes y recordarlas, la mía es mb1vaAySt3< (la recuerdo como: “Me baño 1 vez al Año y Se tapa 3l <año” XD)

Otro servicio muy útil que les caerá como anillo al dedo si quieren comprobar que tan fuerte es una contraseña, es:

http://www.passwordmeter.com/

Dónde además de decirnos que tan fuerte es una contraseña, nos dará consejos de cómo mejorarla para hacerla más fuerte e

indeducible?

Happy cracking !

FIN DEL MANUAL

Autor: 0d1n Fecha última revisión: 29/05/2008

Elaborada con material ofrecido por autores Anónimos y elaboración

propia. El presente material se promueve con fines completamente educativos, por lo que el Autor no se responsabiliza de malos usos o

de usos de terceros. Esta prohibida la reproducción parcial o total del material aquí contenido sin expresa autorización de cursohacker.com.