Descifrando contraseñas con hashcat

Hoy le toca el turno a hashcat, una aplicación para obtener contraseñas a partir del hash de las mismas. Esto puede ser de utilidad cuando, en la realización de una auditoría, nos encontramos con una base de datos o un fichero que guarda credenciales cifradas de usuarios.

Tuve la oportunidad de probar hashcat hace unos días, y la verdad es que quedé gratamente sorprendido. Algunas de las características más destacables en mi opinión son:

  • Viene precompilada y optimizada para Windows, Linux y OSX, con versiones de 32 y 64 bits, evitando retrasos y problemas de compilación.
  • Su versatilidad. Tiene soporte multihilo, soporta muchos algoritmos (más de 50) y permite modos de trabajo avanzados utilizando reglas o tablas de permutación, entre otros.
  • Es muy ligera. Los hilos que se encargan del grueso de trabajo corren a una prioridad baja, por lo que puedes seguir utilizando el equipo mientras está procesando.
  • Tiene una versión que utiliza la tarjeta gráfica (GPU) para las operaciones de cómputo, lo que permite acelerar mucho el proceso de obtención de las contraseñas. Para probar su rendimiento la puse a descifrar contraseñas de Joomla! con mi equipo personal (Phenom II 955 y una ATI HD5770 con 1GB de memoria) y pasé, utilizando 2 cores de la CPU, de 11 millones de pruebas por segundo a más de 1400 millones utilizando la GPU. La única “pega” es que esta versión no está para OSX.

Si queréis descargarla u obtener más información podéis pasaros por la web de la versión “clásica” (la que utiliza la CPU). Para GPU dispone de dos versiones: oclhashcat-plus, que soporta más métodos de cifrado y entornos más grandes, y oclhashcat-lite, más básica.

La aplicación clásica tiene muchas opciones, pero vamos a enumerar las más comunes, que nos serán suficientes en la mayoría de los casos.
Una línea de órdenes genérica tiene esta pinta:

<ejecutable -hashcat> [opciones] fichero-hash [mascara|diccionario|directorio]

Como fichero ejecutable elegiremos el que corresponda a la distribución elegida (p. ej.: hashcat-cli32.bin o oclHashcat-plus64.exe).

De entre las opciones, destacan las siguientes:

  • -n <num> Número de hilos a utilizar (solo versión para CPU).
  • -m <num> Tipo de hash a descifrar. El listado completo aparece al mostrar la ayuda.
  • -a <num> Tipo de ataque a realizar. Generalmente utilizaremos ataque por diccionario (por defecto, a=0) o por fuerza bruta (a=3). Listado completo en la ayuda.
  • -o <fich> Fichero donde guardar los hash descifrados.
  • -c <num> Tamaño de la caché en RAM del diccionario, en MB.
  • -[1-4] <valor> Definición de conjuntos de caracteres personalizados, si queremos acotar los posibles caracteres que tendrá la aplicación. En la ayuda aparece un listado completo de las combinaciones.

El parámetro fichero-hash contendrá los hash que queramos descifrar, uno por línea. El último parámetro será o bien una máscara de caracteres si vamos a realizar un ataque por fuerza bruta, o un fichero o directorio con diccionarios sobre los que realizar las pruebas (se pueden encontrar diccionarios útiles y gratuitos en multitud de sitios web).

Os dejo con un par de ejemplos de ejecución:

$ ./hashcat-cli32.bin   Ejecutable de 32 bits bajo Linux.
-n 2                    Vamos a utilizar 2 cores de nuestra CPU.
-a 3                    Modo fuerza bruta.
-m 400                  Tipo de hash: phpass, MD5(WordPress), MD5(phpBB3).
-o wp.pass              Fichero de salida.
wordpress.hash          Fichero que contiene los hash a descifrar.
?l?l?l?l?l?l?l          Máscara, hasta 7 caracteres en minúsculas.
> hashcat-cli64.exe  Ejecutable de 64 bits bajo Windows.
-a 0                    Modo fuerza bruta.
-m 10                   Tipo de hash: md5($pass.$salt), utilizado en Joomla!.
-o joomla.pass          Fichero de salida.
joomla.hash             Fichero que contiene los hash a descifrar.
wordlist.dic            Diccionario sobre el que buscar los hash del parámetro anterior.

Si queréis ampliar la información al respecto podéis acudir a la Wiki oficial de hashcat. Si preferís la lengua de Cervantes, hace poco se publicó un manual en español (disponible aquí o aquí).

Comments

  1. buenisima informacion amigo lo has clavado y tu web de lujo gracias

  2. Muy interesante para descifrar contraseñas, cuanto tiempo tarda en descifrarla?