Optimizar el Rendimiento de las Reglas
En este paso, aprenderás sobre la optimización del rendimiento de las reglas. Si bien las reglas complejas son potentes, también pueden ser computacionalmente intensivas. John the Ripper proporciona mecanismos para optimizar la aplicación de reglas, principalmente al comprender el orden de las operaciones y evitar reglas redundantes.
Una forma de optimizar es asegurarse de que tus reglas sean lo más específicas posible y evitar generar candidatos innecesarios. Por ejemplo, si sabes que una contraseña siempre comenzará con una letra mayúscula, aplicar una regla que capitalice cada letra es ineficiente.
Considera el archivo complex_rules.rule del paso anterior. Cada regla aplica todas las sustituciones de Leet Speak antes de agregar algo. Si tuvieras muchas reglas de este tipo, repetir las sustituciones podría ser menos eficiente que aplicarlas una vez y luego ramificar. Sin embargo, para casos simples, encadenar dentro de una sola regla suele ser lo suficientemente eficiente.
Para conjuntos de reglas muy grandes o escenarios específicos, John the Ripper permite una sintaxis de reglas más avanzada y archivos de reglas externos. Para este laboratorio, nos centraremos en una comprensión conceptual de la optimización.
Una técnica de optimización común es filtrar tu lista de palabras o apuntar a patrones específicos con conjuntos de reglas separados y más pequeños en lugar de un único conjunto de reglas masivo y que lo abarque todo.
Demostremos un concepto de optimización simple creando una regla que solo se aplica si la palabra es más corta que una cierta longitud, utilizando la regla l (longitud). Esto puede evitar la aplicación de reglas complejas a palabras que ya son demasiado largas para ser contraseñas comunes.
Crea un nuevo archivo de reglas llamado optimized_rules.rule en tu directorio ~/project.
nano ~/project/optimized_rules.rule
Agrega el siguiente contenido al archivo optimized_rules.rule:
: l<10 s/e/3 A!
l<10 significa "solo aplica esta regla si la longitud de la palabra es menor a 10 caracteres".
s/e/3 sustituye 'e' por '3'.
A! agrega un signo de exclamación.
Guarda el archivo presionando Ctrl+X, luego Y, luego Enter.
Ahora, probemos esta regla con nuestro wordlist.txt.
john --wordlist=~/project/wordlist.txt --rules=~/project/optimized_rules.rule --stdout
Deberías ver una salida similar a esta:
s3cr3t!
p4ssw0rd!
Tanto "password" (8 caracteres) como "secret" (6 caracteres) tienen menos de 10 caracteres, por lo que la regla se aplica. Si tuvieras una palabra como "superlongpassword" (17 caracteres), esta regla no se aplicaría a ella, ahorrando así cómputo.
Comprender cómo aplicar selectivamente reglas basadas en condiciones como la longitud puede mejorar significativamente el rendimiento de tus intentos de descifrado al reducir el número de candidatos innecesarios generados.