Crackeo de passwords mediante HashCat

Si vamos a utilizar la versión compatible con OpenCL/CUDA debemos recompilar el driver de la tarjeta gráfica e instalar las herramientas necesarias, en mi caso se trata de una tarjeta NVIDIA:
echo ">=x11-drivers/nvidia-drivers-340.76 uvm" >> /etc/portage/package.use/nvidia
emerge x11-drivers/nvidia-drivers
echo "=dev-util/nvidia-cuda-toolkit-6.5.14 NVIDIA-CUDA" > /etc/portage/package.license/nvidia
emerge dev-util/nvidia-cuda-toolkit
Para hacer la prueba vamos a generar un usuario en el sistema cuyo password es alfaexploit
useradd test00
passwd test00
alfaexploit
grep test00 /etc/shadow
test00:$6$bwbfkx6h$1qPTzJWY.mK71F0MjLA5iihgUpr/AJmp0CPZY1qUhe46cWyZDzmJketQYfX.MIYY/vQw5Cyg877GZDbWmX3Mn/:16641:0:99999:7:::
El hash en un sistema linux se compone de varios elementos:
$6$bwbfkx6h$1qPTzJWY.mK71F0MjLA5iihgUpr/AJmp0CPZY1qUhe46cWyZDzmJketQYfX.MIYY/vQw5Cyg877GZDbWmX3Mn/
$6: Tipo de hash, en este caso SHA-512
$bwbfkx6h: Grano de sal, cadena de carácteres aleatorios empleados como entrada en el algoritmo de cifrado, hay sistemas que almacenan los granos de sal a parte aumentando de este modo la seguridad, hascat permite indicar un fichero de granos de sal independiente.
$1qPTzJWY.mK71F0MjLA5iihgUpr/AJmp0CPZY1qUhe46cWyZDzmJketQYfX.MIYY/vQw5Cyg877GZDbWmX3Mn/: Hash del password combinado con el grano de sal

Para poder romper el password es necesario indicarle a hashcat de que tipo de cifrado se trata, un modo rápido de hacerlo es consultando el siguiente enlace con ejemplos:
Los principales algoritmos son:
$0 = DES
$1 = MD5 Hashing
$2 = Blowfish
$2A = eksblowfish
$5 = SHA256
$6 = SHA512

Otro modo de averiguar el tipo de hash es mediante este script en python(lo alojaré en mi propio servidor también por si se eliminase de Inet):wget https://raw.githubusercontent.com/SmeegeSec/HashTag/master/HashTag.py wget www.alfaexploit.com/ficheros_web/uploads/ficheros/HashTag.py
Comprobamos que efectivamente se trata de SHA512 y además nos indica el id a utilizar en hashcat:python HashTag.py -sh '$6$bwbfkx6h$1qPTzJWY.mK71F0MjLA5iihgUpr/AJmp0CPZY1qUhe46cWyZDzmJketQYfX.MIYY/vQw5Cyg877GZDbWmX3Mn/' [*] sha512crypt, SHA512(Unix) - Hashcat Mode 1800


Dependiendo de si vamos a utilizar la gráfica debemos descargarnos una versión u otra:

GPU
cd /usr/src
wget http://hashcat.net/files/cudaHashcat-1.36.7z
wget www.alfaexploit.com/ficheros_web/uploads/ficheros/cudaHashcat-1.36.7z
emerge app-arch/p7zip
p7zip -d cudaHashcat-1.36.7z
cd cudaHashcat-1.36
CPU
cd /usr/src
wget http://hashcat.net/files/hashcat-0.50.7z
wget www.alfaexploit.com/ficheros_web/uploads/ficheros/hashcat-0.50.7z
p7zip -d hashcat-0.50.7z
cd hashcat-0.50
Podemos ver los diferentes algortimos soportados con:

GPU
./cudaHashcat64.bin -h
CPU
./hashcat-cli64.bin -h
Generamos el fichero de hash y el diccionario:

vi hash
$6$bwbfkx6h$1qPTzJWY.mK71F0MjLA5iihgUpr/AJmp0CPZY1qUhe46cWyZDzmJketQYfX.MIYY/vQw5Cyg877GZDbWmX3Mn/
vi dict
1
2
3
alfaexploit
A hashcat hay que indicarle el tipo de hash: 1800, la técnica de crackeo a utilizar: 0, el fichero de hash y el de diccionario:
GPU
./cudaHashcat64.bin -m 1800 -a 0 hash dict
ERROR: Shader Model 1.0 - 1.3 based GPU detected. Support for CUDA was dropped by NVidia.
Mi gráfica ya no está soportada por CUDA :(
CPU
./hashcat-cli64.bin -n 2 -m 1800 -a 0 hash dict
$6$bwbfkx6h$1qPTzJWY.mK71F0MjLA5iihgUpr/AJmp0CPZY1qUhe46cWyZDzmJketQYfX.MIYY/vQw5Cyg877GZDbWmX3Mn/:alfaexploit
                                             
All hashes have been recovered
Input.Mode: Dict (dict)
Index.....: 1/1 (segment), 4 (words), 18 (bytes)
Recovered.: 1/1 hashes, 1/1 salts
Speed/sec.: - plains, - words
Progress..: 4/4 (100.00%)
Running...: 00:00:00:01
Estimated.: --:--:--:--
NOTA: -n 2 me permite utilizar los dos cores de mi core2duo
Modos de crackeo:
0 = Straight: Simplemente corre todas las palabras del diccionario contra la lista de hashes, teniendo un buen diccionario aumentarán las posibilidades de recuperar el hash.
1 = Combination: Combina las palabras del diccionario dado. Ejemplo: aa bb -> aa, bb, aabb, bbaa
2 = Toggle-Case: Cambia todas las letras minúsculas a mayúsculas y viceversa. Dígitos y caracteres especiales son ignorados.
3 = Brute-force: Fuerza bruta debe ser usado como último recurso, no es efectivo contra contraseñas largas y puede consumir mucho tiempo, deberemos indicarle la longitud min/max a probar y el charset.
4 = Permutation: Toma las letras de una palabra y las reordena. Ejemplo: abc se vuelve abc, acb, bca, bac.
5 = Table-Lookup: Rompe la palabra del diccionario en carácteres individuales y aplica una regla definida en table-file=FILE a cada uno. Por ejemplo password es roto en cada carácter: p a s s w o r d.
Entonces hashcat mira en la tabla por las reglas que deben ser aplicadas a cada carácter. En este caso nuestra tabla tendría:
vi tabla.table
a=a
a=A
p=p
p=P
o=o
o=O
o=0 (cero)
Ahora cada carácter que coincida será cambiado y probado. Así que por cada a -> a y A será probada, por cada p -> p y P será probado y por cada o -> o, O y 0 será probado.
Para este tipo de ataque hay que indicar el fichero table y la longituda min/max de las palabras del diccionario, por defecto no comprueba palabras mayores de 10 carácteres.
--table-file=./tabla.table --table-min=1 --table-max=20
En este web podemos encontrar una buena lista de diccionarios:
Crackeo de passwords mediante HashCat Crackeo de passwords mediante HashCat Reviewed by PDFREEBOOK on 13:25 Rating: 5