John the Ripper: la navaja suiza para auditoría de contraseñas en Linux

Introducción

En el mundo de la seguridad informática, probar la robustez de las contraseñas es un paso fundamental para fortalecer cualquier sistema. En entornos Linux, John the Ripper (JtR) se ha convertido en la herramienta de referencia para realizar auditorías de contraseñas gracias a su versatilidad, velocidad y amplio soporte para diferentes tipos de hashes. Este artículo te guiará desde la instalación básica hasta las técnicas más avanzadas de cracking, mostrando cómo aprovechar al máximo JtR en tu flujo de trabajo de pentesting.

¿Qué es John the Ripper?

John the Ripper es un cracker de contraseñas de código abierto desarrollado inicialmente por Solar Designer. Su objetivo principal es descubrir contraseñas débiles a partir de sus representaciones hash almacenadas en archivos como /etc/shadow, bases de datos de aplicaciones o capturas de tráfico. JtR soporta una gran variedad de algoritmos (DES, MD5, SHA‑1, SHA‑256, bcrypt, scrypt, LM, NTLM, etc.) y permite combinar ataques de diccionario, fuerza bruta incremental y reglas de transformación para aumentar la probabilidad de éxito.

Instalación en distribuciones Linux populares

La mayoría de las distribuciones incluyen John the Ripper en sus repositorios oficiales. A continuación, los comandos típicos para instalarlo:

  • Debian / Ubuntu:
    sudo apt update
    sudo apt install john
  • Fedora:
    sudo dnf install john
  • Arch Linux:
    sudo pacman -S john
  • Desde código fuente (útil para obtener la última versión con optimizaciones):
    git clone https://github.com/openwall/john.git
    cd john/src
    ./configure && make -s
    sudo make install
    

Tras la instalación, el binario john estará disponible en tu $PATH. Puedes verificar la versión con john --version.

Modos de funcionamiento básicos

John the Ripper ofrece varios modos de ataque que se pueden combinar según las necesidades:

  • Modo de diccionario: utiliza una lista de palabras (wordlist) para intentar coincidir con el hash.
  • Modo incremental (fuerza bruta): genera todas las combinaciones posibles de caracteres según un conjunto definido.
  • Modo de reglas: aplica transformaciones (mayúsculas/minúsculas, sustituciones, reversiones, etc.) a cada palabra de un diccionario.
  • Modo de máscara: similar al incremental pero permite especificar posiciones fijas y variables, útil cuando se conoce parte de la contraseña.

Ejemplo sencillo de ataque de diccionario sobre un hash SHA‑256 almacenado en hashes.txt:

john --wordlist=/usr/share/wordlists/rockyou.txt --format=raw-sha256 hashes.txt

Preparación de wordlists y reglas personalizadas

La efectividad de un ataque de diccionario depende en gran medida de la calidad de la wordlist. Algunas fuentes populares incluyen:

  • rockyou.txt (una de las más grandes y usadas).
  • SecLists (repositorio de múltiples listas para distintos propósitos).
  • Listas específicas de la industria o de filtraciones conocidas.

John permite crear reglas propias en el archivo john.conf bajo la sección [List.Rules:Wordlist]. Por ejemplo, la regla Az"["[" duplica cada palabra y la convierte a mayúsculas. Puedes probar una regla con:

john --wordlist=mi_lista.txt --rules --format=raw-md5 hashes.txt

Ataques incrementales y de máscara

Cuando no se dispone de una wordlist adecuada o se quiere agotar todas las posibilidades, el modo incremental es la opción. John incluye varios conjuntos de caracteres predefinidos (por ejemplo, Alpha, Digits, LANMAN, All). Puedes especificar uno con el parámetro --incremental=Mode:

john --incremental=Alpha --format=lm hashes.txt

Para mayor control, el modo de máscara permite definir patrones como ?d?d?d?d?d?d (seis dígitos) o ?l?l?l?l?u?u?u?u (cuatro minúsculas seguidas de cuatro mayúsculas). Ejemplo:

john --mask=?l?l?l?l?d?d?d?d --format=nt hashes.txt

Aceleración con GPU y modo OpenCL

Las versiones recientes de John incluyen soporte para aceleración mediante GPU usando OpenCL. Esto puede incrementar significativamente la velocidad de cracking para algoritmos como md5, sha1 o NTLM. Para habilitarlo, asegúrate de tener los controladores OpenCL instalados y ejecuta:

john --format=raw-md5 --opencl hashes.txt

El rendimiento dependerá de la tarjeta gráfica y del algoritmo; en pruebas típicas, una GPU moderna puede ser hasta 10‑20 veces más rápida que la CPU sola para ciertos hashes.

Buenas prácticas y defensa contra John the Ripper

Entender cómo funciona John también ayuda a defender los sistemas. Algunas medidas recomendadas:

  • Usar algoritmos de hash lentos y con sal (bcrypt, scrypt, Argon2) en lugar de funciones rápidas como MD5 o SHA‑1.
  • Implementar políticas de contraseñas fuertes (longitud mínima, complejidad, cambio periódico).
  • Monitorizar intentos de acceso y bloquear cuentas tras varios fallos.
  • Realizar auditorías periódicas con John (en modo de prueba) para detectar contraseñas débiles antes que los atacantes.

Recuerda que el uso de John the Ripper debe estar siempre autorizado y dentro del marco legal de pruebas de penetración o auditorías de seguridad propias.

Conclusión

John the Ripper sigue siendo una de las herramientas más poderosas y flexibles para evaluar la seguridad de contraseñas en entornos Linux. Desde su sencilla instalación hasta sus avanzados modos de ataque incremental, de máscara y con aceleración GPU, JtR se adapta a casi cualquier escenario de auditoría. Conocer su funcionamiento no solo te permite realizar pruebas de seguridad efectivas, sino también aplicar las contramedidas necesarias para proteger tus sistemas contra ataques de fuerza bruta y diccionario. ¡Incorpora John the Ripper a tu kit de herramientas de pentesting y lleva la seguridad de tus contraseñas al siguiente nivel!

Esta obra está bajo una Licencia Creative Commons Atribución 4.0 Internacional para Francesc Roig francesc@vivaldi.net .

EspañolesEspañolEspañol