Hemos cubierto cómo guardar contraseñas de forma segura para sistemas de autentificación desde el lado defensivo. Veámoslo desde el lado ofensivo ahora. Dados un hash, ¿cómo reconocemos el tipo, lo rompemos y obtenemos la contraseña?
Existen herramientas automatizadas de reconocimiento de hash como hashID pero no son del todo fiables.
Contraseñas de Linux
En Linux, los hashes de las contraseñas se guardan en /etc/shadow, que es normalmente sólo leíble por root. Solía guardarse en /etc/passwd, que era leíble por todos.
Cada línea en /etc/shadow contiene 9 campos separados por :. Los primeros dos campos son el nombre y la contraseña encriptada.
El campo de la contraseña encriptada contiene la contraseña con 4 componentes: prefijo (id de algoritmo), opciones (parámetros), salt y hash. El prefijo hace que sea fácil identificar el tipo de algoritmo.
Aquí una tabla de prefijos listado en orden descendente de fortaleza:
| Prefijo | Algoritmo |
|---|---|
$y$ | yescrypt es un esquema de hashing escalable por defecto recomendado en sistemas nuevos. |
$gy$ | gost-yescrypt usa la función hasheadora GOST R 34.11-2012 y el método yescrypt. |
$7$ | scrypt es una función basada en contraseñas |
$2b$, $2y$, $2a$, $2x$ | bcrypt es un hash basado en el bloque de cifrado Blowfishdesarrollado por OpenBSD. |
$6$ | sha512crypt es un hash basado en SHA-2 con output de 512-bits originalmente desarrollado for GNU libc y comunmente usado en sistemas Linux antiguos. |
$md5 | SunMD5 es un hash basado en el algoritmo MD5 originalmente desarrollado por Solaris |
$1$ | md5crypt es un hash basado en el algoritmo MD5 originalmente desarrollado por FreeBSD |
Contraseñas de Linux Moderno
Considera la siguiente línea de un sistema Linux moderno del archivo shadow:
root@TryHackMe# sudo cat /etc/shadow | grep strategos strategos:$y$j9T$76UzfgEM5PnymhQ7TlJey1$/OOSg64dhfF.TigVPdzqiFang6uZA4QA1pzzegKdVm4:19965:0:99999:7:::
En el ejemplo vemos cuatro partes separadas por $:
yindica el algoritmo de hasheado utilizado, yescrypt.j9Tes un parámetro pasado al algoritmo.76UzfgEM5PnymhQ7TlJey1es la salt usada./OOSg64dhfF.TigVPdzqiFang6uZA4QA1pzzegKdVm4es el valor hash.
Contraseñas de MS Windows
Las contraseñas de Windows MS se hashean usando NTLM, una variante de MD4. Son visualmente idénticas a los hashes MD4 y MD5.
En MS Windows, los hashes de contraseñas se guardan en SAM (Security Accounts Manager). MS Windows intenta prevenir a los usuarios normales de verlas pero existen herramientas como mimikatz para bypassear la seguridad de Windows. Los hashes que encontramos allí se dividen entre hashes NT y hashes LM.
Un buen lugar para encontrar más formatos de hashing y prefijos de contraseñas es la página Hashcat Example Hashes. Para otros tipos, normalmente tendrás que comprobar la longitud o codificación o incluso realizar una investigación en la aplicación que los generó.
