Usar reglas para mejorar un ataque de diccionario

Kali LinuxBeginner
Practicar Ahora

Introducción

Un ataque de diccionario es un método para acceder a un sistema protegido por contraseña mediante la introducción sistemática de cada palabra de una lista (un diccionario) como contraseña. Sin embargo, este enfoque básico a menudo falla porque los usuarios rara vez utilizan palabras sencillas de diccionario como contraseñas. A menudo añaden números, símbolos o cambian las mayúsculas para cumplir con los requisitos de complejidad.

Aquí es donde las "reglas de manipulación" (mangling rules) se vuelven increíblemente potentes. Las reglas de manipulación son un conjunto de instrucciones que transforman las palabras de tu diccionario antes de que se prueben. Por ejemplo, una regla puede añadir un número, capitalizar la primera letra o sustituir letras por símbolos (como 'a' por '@').

En este laboratorio, utilizarás la popular herramienta de cracking de contraseñas, John the Ripper (JtR), para ver esto en acción. Primero intentarás un ataque de diccionario estándar y verás que falla. Luego, aplicarás un conjunto de reglas de manipulación para mejorar el ataque y descifrar con éxito una contraseña más compleja.

Comprender el poder de las reglas de manipulación

En este paso, primero realizará un ataque de diccionario estándar para ver sus limitaciones. Hemos preparado un archivo llamado shadow.txt que contiene la contraseña hasheada de un usuario, y un archivo wordlist.txt que contiene una palabra base potencial para la contraseña.

Ejecutemos John the Ripper con nuestra lista de palabras contra el archivo de hash. Este comando le dice a john que intente cada palabra de wordlist.txt como contraseña.

john --wordlist=wordlist.txt shadow.txt

Verá una salida similar a esta, indicando que el ataque se está ejecutando.

Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2])
Cost 1 (algorithm [1:descrypt]...[3:DES]) is 50400 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
0g 0:00:00:00 DONE (2023-10-27 10:30) 0g/s 1845Kp/s 1845Kc/s 1845KC/s secdec..secret
Session completed

Observe el mensaje final: "Session completed". John the Ripper intentó la palabra "secret" y sus variaciones comunes, pero no logró descifrar la contraseña. Esto se debe a que la contraseña real es más compleja que una simple palabra de diccionario. Esto demuestra la necesidad de una técnica más avanzada.

Localizar los archivos de reglas integradas en el directorio /rules/

En este paso, exploraremos dónde John the Ripper almacena sus potentes reglas de manipulación. En la mayoría de los sistemas Linux, incluido este, las reglas no se encuentran en un directorio /rules/ separado, sino que están definidas dentro del archivo de configuración principal, john.conf.

Listemos el contenido del directorio /etc/john/ para encontrar este archivo de configuración.

ls -l /etc/john/

Debería ver el archivo john.conf en la salida.

total 148
-rw-r--r-- 1 root root 148233 Jan 20  2022 john.conf

Este archivo john.conf contiene numerosos conjuntos de reglas predefinidos, como KoreLogic, best64 y all. Estos conjuntos de reglas son colecciones de instrucciones de manipulación individuales que se pueden aplicar a un ataque de diccionario. En el siguiente paso, examinaremos uno de estos conjuntos de reglas más de cerca.

Seleccionar un archivo de reglas común como best64.rule

En este paso, examinará un conjunto específico de reglas. Para su conveniencia, ya hemos extraído un conjunto de reglas popular y efectivo, best64, de john.conf y lo hemos guardado como best64.rule en su directorio de proyecto actual (~/project).

Inspeccionemos las primeras 10 líneas de este archivo para tener una idea de cómo son las reglas. Utilice el comando head:

head -n 10 best64.rule

Verá una salida similar a esta:

#
## best64.rule, a selection of the best 64 rules from the over 14,000
## rules in all.rule.
#
## Rule syntax:
## http://www.openwall.com/john/doc/RULES.shtml
#
## The following rules are commented out because they are slow.
#
:
l
u

Las líneas que comienzan con # son comentarios. Las líneas de un solo carácter como :, l y u son reglas reales.

  • : es una regla de no operación (no-op), que significa "intentar la palabra tal cual".
  • l convierte la palabra a minúsculas.
  • u convierte la palabra a mayúsculas.

Más abajo en el archivo, encontraría reglas más complejas como c (poner en mayúscula la primera letra) y $1 (añadir el dígito '1'). Estas transformaciones simples aumentan drásticamente el número de candidatos a contraseña.

Aplicar un archivo de reglas a un ataque de diccionario con la bandera -r

Ahora es el momento de desatar el poder de las reglas de manipulación. En este paso, ejecutará el ataque de diccionario nuevamente, pero esta vez instruirá a John the Ripper para que use el archivo best64.rule.

Puede hacer esto agregando la bandera -r (abreviatura de --rules) al comando. Esto le dice a john que aplique cada regla en el archivo especificado a cada palabra en wordlist.txt.

Ejecute el siguiente comando en su terminal:

john --wordlist=wordlist.txt -r=./best64.rule shadow.txt

Esta vez, el ataque debería ser exitoso muy rápidamente. La salida se verá diferente.

Using default input encoding: UTF-8
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 SSE2])
Cost 1 (algorithm [1:descrypt]...[3:DES]) is 50400 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
Secret123        (testuser)
1g 0:00:00:00 DONE (2023-10-27 10:35) 10.00g/s 61538p/s 61538c/s 61538C/s Secret12..Secret123
Use the "--show" option to display all of the cracked passwords reliably
Session completed

¡Éxito! La línea Secret123 (testuser) indica que la contraseña ha sido descifrada. John the Ripper encontró la contraseña correcta aplicando reglas de best64.rule a la palabra "secret".

Comparar los resultados del ataque con y sin reglas

En este paso final, verá formalmente la contraseña descifrada y reflexionará sobre la diferencia que hicieron las reglas.

Aunque la contraseña se mostró en la salida del paso anterior, la forma estándar de ver todas las contraseñas descifradas para un archivo de hash dado es con la bandera --show.

Ejecute el siguiente comando:

john --show shadow.txt

Este comando mostrará todas las contraseñas que John ha descifrado con éxito para el archivo shadow.txt.

testuser:Secret123:17119:0:99999:7:::

1 password hash cracked, 0 left

La salida muestra claramente testuser:Secret123. Esto confirma la contraseña descifrada.

Al comparar los resultados, la conclusión es clara:

  • Sin reglas (Paso 1): El ataque falló porque "secret" no era la contraseña.
  • Con reglas (Paso 4): El ataque tuvo éxito. John tomó la palabra "secret", aplicó una regla de capitalización para obtener "Secret", y luego una regla de añadir número para obtener "Secret123", que fue una coincidencia.

Esto demuestra que las reglas de manipulación no son solo una característica útil; son esenciales para hacer que los ataques de diccionario sean efectivos contra los hábitos de contraseñas del mundo real.

Resumen

En este laboratorio, experimentó la diferencia práctica entre un ataque de diccionario simple y uno mejorado con reglas.

Aprendió a:

  • Ejecutar un ataque de diccionario básico con John the Ripper y ver sus limitaciones.
  • Comprender el concepto de reglas de manipulación y localizar dónde se almacenan.
  • Examinar la estructura de un archivo de reglas.
  • Aplicar un conjunto de reglas a un ataque de diccionario utilizando la bandera -r para mejorar en gran medida su efectividad.
  • Ver las contraseñas descifradas y confirmar el éxito del ataque basado en reglas.

Al transformar palabras de diccionario simples en miles de variaciones potenciales, las reglas de manipulación son una herramienta fundamental en el conjunto de herramientas de cualquier auditor de contraseñas o profesional de la seguridad.