John the Ripper

John the Ripper es una herramienta para recuperación de contraseñas. Originalmente desarrollado para el sistema operativo Unix, puede funcionar en quince plataformas diferentes (once de las cuales son versiones específicas de la arquitectura Unix, DOS, Win32, BeOS y OpenVMS).

Es una de las herramientas para descifrado de contraseñas más utilizada,​ ya que combina varios descifradores de contraseñas en un solo paquete, auto-detecta los tipos de hash de las contraseñas e incluye un descifrador personalizable.

Puede ser ejecutado contra varios formatos de contraseñas cifradas, incluyendo varios tipos de hash de contraseñas criptográficas que se encuentran comúnmente en varias versiones de Unix (basadas en DES, MD5 o Blowfish), Kerberos AFS, y hash LM en Windows NT/2000/XP/2003. Los módulos adicionales han ampliado su capacidad para incluir hashes de contraseñas basados en MD4 y contraseñas almacenadas en LDAP, MySQL y otros.

Tipos de ataque John the Ripper

Uno de los modos que puede utilizar John es el ataque de diccionario. Toma muestras de cadenas de texto (normalmente de un archivo, llamado lista de palabras, que contiene palabras encontradas en un diccionario o contraseñas reales crackeadas con anterioridad), cifrándolas en el mismo formato que la contraseña que se está examinando (incluyendo tanto el algoritmo de cifrado como la clave), y comparando el resultado con la cadena cifrada.

También puede realizar una variedad de alteraciones a las palabras del diccionario y probarlas (añade números, signos, mayúsculas y minúsculas, cambia letras, combina números, etc.).

Muchas de estas alteraciones también se utilizan en el modo ataque individual de John, que modifica un texto plano asociado (como un nombre de usuario con una contraseña cifrada) y comprueba las variaciones con los hashes.

John también ofrece un modo fuerza bruta. En este tipo de ataque, prueba todos los posibles textos sin formato (crea combinaciones de letras, números y símbolos), aplicando un hash a cada uno de ellos y comparándolo con el hash de entrada. John utiliza distribución de frecuencias de caracteres para probar primero los textos sin formato que contienen los caracteres más utilizados. Este método es útil para descifrar contraseñas que no aparecen en las listas de palabras del diccionario, pero tarda mucho en ejecutarse.

La puedes descargar de su web oficial https://www.openwall.com/john/

Cómo usar John the Ripper

Ahora que sabemos qué es John, miremos tres modos que te ofrece. Estarás usando uno de estos tres para la mayoría de tus casos de usos:

Miremos a cada uno en detalle.

¿Qué es el modo de descifrado simple?

En modo de descifrado simple, John toma una cadena y genera variaciones de esa cadena para generar un conjunto de contraseñas.

Por ejemplo, si nuestro nombre de usuario es stealth y la contraseña es StEaLtH, podemos usar el modo simple de John para generar variaciones de contraseña (STEALTH, Stealth, STealth, y así sucesivamente).

Usamos el comando formato para especificar el tipo hash y el comando single para hacer saber a John que queremos usar el modo de descifrado simple. También crearemos una archivo crack.txt el cual contendrá el nombre de usuario y el valor de hash de la contraseña.

stealth:d776dd32d662b8efbdf853837269bd725203c579

Ahora podemos usar el siguiente comando para usar el modo de descifrado simple:

$ john --single --format=raw-sha1 crack.txt

Y aquí está el resultado. Puedes ver que ha encontrado la contraseña correcta StEaLtH con éxito.

Modo de descifrado simple de John
Modo de descifrado simple de John the Ripper

Ahora miremos al modo diccionario para descifrar contraseñas más complicadas.

¿Qué es modo diccionario?

En modo diccionario, proveeremos a John the Ripper una lista de contraseñas. John the Ripper generará hashes al momento y los comparará con nuestro hash de contraseña.

Para este ejemplo, usaremos la lista de palabras RockYou. Si estás usando Kali, puedes encontrarlo en /usr/share/wordlists/rockou.txt. También tendremos un archivo crack.txt con el hash de la contraseña solamente.

edba955d0ea15fdef4f61726ef97e5af507430c0

Este es el comando para ejecutar John en modo diccionario usando la lista de palabras.

$ john --wordlist=/usr/share/wordlists/rockyou.txt --format=raw-sha1 crack.txt

Y John the Ripper encuentra la contraseña bastante rápido.

Modo lista de palabras de John
Modo lista de palabras de John the Ripper

Cuanto más débil sea la contraseña, más rápido lo puede encontrar. Por eso siempre se recomienda tener contraseñas fuertes.

¿Qué es el modo incremental?

El modo incremental es el modo más poderoso provisto por John the Ripper. Prueba todas las combinaciones de caracteres posibles como contraseñas.

Esto suena genial, pero hay un problema. El descifrado puede llevar bastante tiempo si la contraseña es demasiado larga o si es una combinación de caracteres alfanuméricos y símbolos.

Raras veces usarás este modo a menos que no tengas otra opción. En casos típicos, una combinación de ataques de Ingeniería Social y modo de lista de palabras te ayudará a descifrar la mayoría de los hashes.

Si te gustaría intentar el modo incremental, esta es la sintaxis.

$ john -i:digits passwordfile.txt

Aquí, el comando -i le dice que queremos usar el modo incremental. El marcador de posición digits puede ser usado para establecer el número máximo de dígitos en la contraseña.

También puedes agregar la opción format para que le sea más fácil a John empezar a descifrar.

Casos de uso para John the Ripper

Ahora que entiendes los diferentes modos del programa, miremos a unos pocos casos de uso.

Lo usaremos para descifrar tres tipos de hashes: una contraseña de Windows NTLM, una contraseña alternativa de Linux, y la contraseña para un archivo zip.

Cómo descifrar una contraseña de Windows

Comencemos con Windows. En Windows, los hashes de contraseña están almacenados en la base de datos SAM. SAM usa el formato de hash LM/NTLM para las contraseñas, así que estaremos usando John para descifrar una.

Obtener contraseñas de la base de datos SAM está fuera del alcance para este artículo, pero asumamos que has adquirido un hash de contraseña para un usuario de Windows.

Este es el comando para descifrarlo:

$ john --format=lm crack.txt

El crack.txt contendrá el hash de la contraseña. Si John no es capaz de descifrar la contraseña usando su lista de palabras por defecto, puedes usar la lista de palabras RockYou usando el comando --wordlist.

Cómo descifrar una contraseña de Linux

Ahora, vamos a descifrar una contraseña de Linux. En Linux, hay dos archivos importantes guardados en la carpeta /etc: passwd y shadow.

  • /etc/passwd -> almacena información como nombre de usuario, id de usuario, shell de inicio de sesión, y así sucesivamente.
  • /etc/shadow -> contiene hash de contraseñas, expiración de contraseñas, y así sucesivamente.

Además del comando john, viene con un par de otras utilidades. Uno de ellos se llama unshadow.

El comando unshadow combina los archivo passwd y shadow juntos en un solo archivo. Esto después puede ser usado por John para descifrar contraseñas.

Así es como usamos el comando unshadow:

$ unshadow /etc/passwd /etc/shadow > output.db

Este comando combinará los archivos juntos y creará un archivo output.db. Ahora podemos descifrar el archivo output.db.

$ john output.db

Intentara encontrar la contraseña para todos los usuarios en el archivo passwd y generara la salida con la lista de contraseñas descifradas. De nuevo, puedes usar listas de palabras personalizadas con el comando --wordlist.

Cómo descifrar una contraseña de un archivo Zip

Ahora vamos a descifrar una contraseña de un archivo zip. Para hacer eso, primero tenemos que obtener el hash de la contraseña del archivo zip.

Como unshadow, tiene otra utilidad llamado zip2john. zip2john nos ayuda en obtener el hash de los archivos zip. Si estás descifrando un archivo .rar, puedes usar la utilidad rar2john.

Esta es la sintaxis para obtener el hash de la contraseña de un archivo zip:

$ zip2john file.zip > zip.hashes

El comando de arriba obtendrá el hash de un archivo zip y lo almacenará en el archivo zip.hashes. Luego puedes usar John para descifrar el hash.

$john zip.hashes

También tiene muchas otras funcionalidades que te ayudarán a descifrar una variedad de contraseñas. Puedes encontrar la documentación completa para John aquí.

Cómo defenderse de ataques de contraseña

Hasta ahora hemos visto cómo descifrar contraseñas con John the Ripper. Pero, ¿Cómo nos defendemos de estos tipos de ataques de fuerza bruta?

La forma más sencilla para defenderse de ataques de contraseñas es estableciendo una contraseña fuerte. Cuánto más fuerte es la contraseña, más difícil es descifrarlo.

El segundo paso es dejar de usar las mismas contraseñas en múltiples sitios. Si un sitio es hackeado, tu contraseña será expuesta al internet. Un hacker luego puede usar la combinación email/contraseña para probar tus credenciales en otros sitios. Puedes verificar si tu contraseña está en el internet aquí.

El paso final sería generar contraseñas aleatorias y usar un gestionador de contraseñas. Hay una variedad de opciones, incluyendo la extensión Google password manager de Chrome. Si usas una contraseña fuerte para cada sitio que usas, se vuelve extremadamente difícil de descifrar tus contraseñas.

Resumen

Cómo veras es una herramienta de descifrado de contraseñas poderoso y popular. Frecuentemente, es usado tanto por pen-testers y hackers de sombrero negro por su versatilidad y facilidad de uso.