Recuperando una contraseña – Wordlist Mangling

Estaba hace unos días cambiando las contraseñas de acceso a varias aplicaciones y servicios que utilizo diariamente, cuando al introducir la clave en una de ellas me encuentro con el temido error: “Contraseña incorrecta”.

“Seguro que me ha bailado un dedo al escribir la contraseña” fue el primer pensamiento. Vuelvo a intentarlo. “Contraseña incorrecta” de nuevo. Me empieza a entrar el pánico. “¿Habrá dado error al cambiarla y no me he dado cuenta?” “¿Habré puesto la de otro servicio?”. Estas y otras preguntas me venían a la cabeza, pero todos los intentos manuales que hacía tenían el mismo resultado: “Contraseña incorrecta”.

Antes de darme por vencido tenía que intentar recuperar la contraseña como fuera, así que el siguiente paso estaba claro. Por un lado, buscar una aplicación que me permita generar un diccionario de posibles contraseñas, y por otro buscar una aplicación que me permita probar todas las contraseñas del diccionario generado contra el contenedor, esperando tener éxito.

La aplicación con la que probar todas las contraseñas la tenía clara: oclHashcat, versión para tarjetas gráficas de Hashcat, la herramienta de la que ya os hablé hace un tiempo. Pero la aplicación para generar el diccionario no la tenía para nada clara así que me puse a buscar, esperando que cumpliera con dos requisitos fundamentales:

  • Debería aceptar una contraseña base, a partir de la cual construir todo el diccionario de posibles contraseñas. Con suerte la contraseña correcta sería similar a la que yo creía que había utilizado.
  • Debería poder realizar varios tipos de cambios a la contraseña base, como sustituciones y adiciones de letras, que suelo utilizar para generar mis contraseñas (conocidas como Wordlist Mangler/Mangling Rules). Por ejemplo, las sustituciones de caracteres al estilo Leet Speak, o la adición de símbolos de puntuación. Esto también me serviría para cubrir el caso de haber pulsado sin querer dos o más teclas a la vez.

Con todo esto, encontré en GitHub un pequeño script llamado transmute.py, publicado por el usuario Zeroskill. Una ejecución de prueba nos muestra sus capacidades:

$ python zeroskill-transmute.py -h
Usage: transmute [opts] [inputFile]

Generates transmutations of input words according to selected options.

If inputFile is - or not provided, and -w is not provided, stdin is used.

 -h,--help    	Display this help
 -w     	Supply a single  as input, via command line argument
 -t           	Perform some typical transmutations (-l -p 3 -P 2 -c -n -s)
 -l           	Create leet transmutations
 -p        	Append up to X places
 -P        	Prepend up to X places
 -i        	Insert up to X places, permutated through each inside position
 -I        	Insert up to X places, permutated through each position, including ends
 -n           	Added characters include numbers
 -s           	Added characters include symbols
 -a           	Added characters include lower alpha
 -A           	Added characters include upper alpha
 --list=   Provide a custom list of characters to use for additions
 -c           	Capitalize letters
 -d           	Include debug output (to stderr)

Order of operations (unused operations are skipped):
    - InsertEnds Loop
    - Insert Loop
    - Prepend Loop
    - Append Loop
    - Caps
    - Perform leet mixes

Destacados en negrita están los parámetros que vamos a utilizar, de acuerdo a las necesidades que hemos comentado anteriormente. Esto nos genera un diccionario de algo más de 1.7 millones de contraseñas. Le toca ahora el turno a oclHashcat. Debemos tener en cuenta que, al utilizar la tarjeta gráfica para realizar los cálculos, tenemos que tener instalada una versión concreta del driver gráfico para que la aplicación funcione correctamente.

Lanzamos la aplicación y …

Captura

… ¡éxito! Ahora sólo nos queda celebrarlo.

Esta vez hemos tenido suerte, ya que las condiciones de partida nos han permitido reducir mucho la complejidad del problema y por tanto abordarlo en un tiempo razonable. Sin estas ayudas, recorrer todas las posibles combinaciones de 15 caracteres (la longitud que tenía la contraseña utilizada) con mi tarjeta gráfica hubiera costado alrededor de 620 cuadrillones (620*1015) de años. Casi nada.

Comments

  1. Buenos días

    ¿Has probado maskprocessor (también de la gente de ocl-hashcat?

    https://hashcat.net/wiki/doku.php?id=maskprocessor

    Cuando el número de contraseñas a generar partiendo de los patrones indicados es muy grande es lo más rápido que he probado.

    Un saludo

  2. Buenas neofito,

    No conocía maskprocessor, acabo de darle un vistazo rápido y tiene muy buena pinta, sobre todo como bien dices para generar diccionarios MUY grandes dada la rapidez en tiempo de cómputo. Con esta aplicación y el oclhashcat nos podemos montar una buena estufa para el invierno :-P

    Lo único que me parece más complicado tanto de maskprocessor como de oclhashcat es la forma de definir las máscaras, y más teniendo en cuenta la casuística particular de este ejemplo.

    Muchas gracias por leernos y por tu comentario.

    Saludos,

    Jose.