Download - 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.
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.
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
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.
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.
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.
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.
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.
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
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.
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:
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.
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
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...
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:
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.
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
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
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:
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:
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.
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/
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.