viernes, 18 de julio de 2008

Romper contraseñas con John the Ripper

John the ripper es probablemente el descifrador de contraseñas más rápido, eficaz y potente. Admite 6 esquemas de codificaciones diferentes, que cubren varias versiones de Unix diferentes y los resúmenes codificados de LANMan de Windows, también llamado NTLM (usados en NT, 2000 y XP). Puede utilizar lista de palabras especializadas o reglas de contraseñas basadas en el tipo de carácter y su ubicación. Funciona en, al menos, 13 sistemas operativos diferentes y admite varios procesadores.

Podemos descargar John the ripper de aquí
Una vez tengamos el programa compilado y instalado toca descifrar y reventar las contraseñas.

DESCIFRAR Y ROMPER CONTRASEÑAS:

John aceptará 3 formatos de archivo de contraseñas diferentes. Puede reventar cualquier tipo de contraseñas que se encuentren en el formato de la opción -test. Lo único que tenemos que hacer es convertirlo en uno de los formatos que acepta la aplicación. Si estamos usando un archivo passwd de Unix o el resultado de la herramienta pwddump, no será necesario modificar el formato del archivo.

Para descifrar un archivo de contraseña usando las opciones predeterminadas de John, proporcionamos el nombre de archivo como argumento.

Usamos John passwd, en mi caso no hay contraseñas a descifrar.

Todas las contraseñas descifradas se guardan en el archivo John.pot, que es un archivo de texto que aumentará de tamaño a medida que aumenta el número de contraseñas obtenidas.

Las contraseñas que son débiles, independientemente de su esquema de codificación, pueden descifrarse en un periodo de tiempo muy corto. Decodificar las contraseñas más seguras puede tardar semanas o meses; sin embargo, podemos utilizar algunos trucos para descifrarla más rapidamente, usando complicados archivos de diccionario.
El diccionario predeterminado del john es el password.lst. Este archivo contiene contraseñas comunes que aparecen entre los usuarios, aunque podemos encontrar diccionarios alternativos en la red.
Usamos la opción -wordfile para indicar a John que use un diccionario alternativo.

Podemos especificar cualquier rango de caracteres para insertarlos. Toda la lista de palabras volverá a usarse por cada caracter adicional. Por ejemplo, una lista de palabras con 1000 palabras se convertirá en una lista de palabras con 10.000 palabras si se anteponen cada una los dígitos del 0 al 9. A continuación mostraré algunos caracteres útiles para añadirlos a palabras básicas:

* [0123456789] : Dígitos
* [!@#$^&*()] : Signos que están sobre dígitos
* [,.?!] : Puntuación

Podemos usar reglas de conversión para cambiar el tipo (mayúsculas, minúsculas, de e por 3) de los caracteres o para eliminar ciertos tipos:

* ?v: Vocales (a, e, i, o, u)
* s?v.: Sustituye las vocales por un punto (.).
* @@?v: Elimina todas las vocales.
* @@a: Elimina todas las a.
* sa4: Sustituye todas las a por 4.
* se3: Sustituye todas las e por 3.
* l*: Donde * es una letra minúsculas.
* u*: Donde * es una letra mayúscula.

Las reglas complejas y los amplios diccionarios no descifran todas las contraseñas. Esto nos lleva a usar ataques de fuerza bruta. En otras palabras, probaré todas las combinaciones posibles de caracteres para una determinada longitud de palabra. Por defecto, John pasa al modo fuerza bruta si no se introducen opciones en la linea de comandos. Para obligar a John a utilizar un método de fuerza bruta, usamos la opción -incremental:

$ john -incremental :LANMan passwd.LANMan

El archivo John.conf tiene 4 opciones incrementales diferentes:

* All : Minúsculas, Mayúsculas, dígitos, puntuación, Mayús-.
* Alpha : Minúsculas.
* Digits : Del 0 al 9.
* LANMan : Similar al All, pero sin minúsculas.

Cada opción incremental del archivo John.conf tiene 5 campos. La entrada LANMan contiene:

* [Incremental:LANMan]: Descripción de la opción.
* File = ./LANMan.chr: Archivo que se debe usar como lista de caracteres.
* MinLen = 0 : La longitud mínima del intento de contraseña que debe generarse.
* MaxLen = 7 : La longitud máxima del intento de contraseña que debe generarse.
* CharCount = 69 : Número de caracteres en lista.

Mientras que la entrada ALL contiene:

* [Incremental:All]: Descripción de la opción.
* File = ./all.chr: Archivo que se debe usar como lista de caracteres.
* MinLen = 0 : La longitud mínima del intento de contraseña que debe generarse.
* MaxLen = 8 : La longitud máxima del intento de contraseña que debe generarse.
* CharCount = 95 : Número de caracteres en lista.

Los campos MinLen y MaxLen son los más importantes, ya que se modifican para dirigir nuestro ataque. MaxLen nunca deberá de tener más de 7 caracteres para resumenes de codificación LANMan. Elevamos CharCount a la MaxLen potencia para hacernos una idea de cuántas combinaciones forman un ataque de fuerza bruta. Por ejemplo, el número total de combinaciones LANMan es de casi 7'6 Billones. El número total de combinaciones para All es de casi 6700 billones.

Si tenemos una lista de contraseñas de un sistema Unix, en el que sepamos que todas las contraseñas tienen exactamente 8 caracteres, deberemos modificar la opción incremental.

[Incremental:All]
File = ./all.chr
MinLen = 8
MaxLen = 8
CharCount = 95

Después ejecutamos John:

$ John -incremental:All passwd

Sólo se guardaran posibles contraseñas con 8 caracteres. Para verificarlo usamos la opción -stdout, esto mostrará cada posible contraseña en la pantalla.

$ john -incremental:All -stdout

Puede ser útil si queremos rederigir datos a un archivo, para crear una inmensa lista de palabras, para utilizarlo posteriormente.

Saber si John se está ejecutando en mi equipo:

El principal indicador de que John the Ripper se está ejecutando en nuestro sistema será la constante actividad de la CPU. También podemos ver las listas de procesos ( el comando ps en Unix, o mediante el visor de procesos de Windows) pero no es probable que aparezca John.

11 comentarios:

nyzer.sh dijo...

Buena entrada, no pensé yo que tuviera tantos parámetros el john the ripper. Desde hace mucho que e oido hablar de él, pero ni lo e probado ni habia leido nada, asi que gracias por la info. Ya te diré como me a ido cuando lo pruebe.
Enhorabuena por la web que cada dia tienes mas visitas =)
Un beso

Neztgul dijo...

@nyzer: muchas gracias por tu apoyo y felicitación. Pues sí el John the Ripper está muy completito aunque ha habido un par de cosas que no he explicado porque tampoco quiero profundizar al 100%, si hay dudas pues ya se explican.

Un saludo

Javier dijo...

si sabes como hacer clustering con john me mandas al mail yagamilightux@gmail.com
y te lo agradecere eternamente

Neztgul dijo...

@Javier: Lo siento pero desconozco totalmente la manera de realizar clustering con john.

Si sacas como realizarlo te agradecería que lo confirmaras a:
neztgul@gmail.com

Saludos y suerte

Anonymous dijo...

si buenas, esta muy buena la pagina, aguanta recomendarla, pero tengo una pregunta, se puede sacar otra clases de contraseñas, como las de windows xp, por favor si saben como utilizar john te ripper en xp avisenme, awakeelectronik@hotmail.com

Neztgul dijo...

Te respondí a la duda.

Saludos anonimo!

Anonymous dijo...

Hola, quiero crear una rchivo con los caracteres que yo creo pueden ser, pero no me deja.. alguna idea?

Neztgul dijo...

Hola Anónimo;

En caso de error, te recomiendo un programa que es mucho más sencillo de usar si tu objetivo es sacar una contraseña por fuerza bruta con palabras que creas que puede ser la clave.

El programa está explicado en este post:
http://neztgul-ntl6.blogspot.com/2009/01/obtener-contraseas-de-usuarios-usando.html

Un saludo!

Anonymous dijo...

Hola el jhon de ripper funciona para el linux? una cosa mas porfavor respondedme rapido si podeis puedo averiguar pas de un juego online atraves de este programa?

Neztgul dijo...

Si, puedes usar perfectamente john the ripper en sistemas Linux

Ahi tienes un enlace:

http://john-the-ripper.softonic.com/linux

O te lo puedes desargar desde la misma terminal de linux con el apt-get.

Lo de la passwd de un juego... no se a que passwd te refieres.

Saludos

Anónimo dijo...

Este programa sirve sólo para archivos o también vale para descifrar contraseñas de páginas web? Si es así, como lo hago? Muchísimas gracias, tienes un blog impresionante