Usar John the Ripper para Descifrar Hashes NTLM

Kali LinuxBeginner
Practicar Ahora

Introducción

En este laboratorio, obtendrá experiencia práctica en el descifrado de hashes NTLM (NT LAN Manager) utilizando John the Ripper, una potente herramienta para descifrar contraseñas. Los hashes NTLM se utilizan comúnmente en entornos Windows para almacenar contraseñas de usuario. Comprender cómo se pueden descifrar estos hashes es crucial para entender las vulnerabilidades de seguridad de las contraseñas e implementar medidas de seguridad más sólidas.

Comenzará simulando la extracción de hashes NTLM, luego aprenderá a formatearlos correctamente para John the Ripper. Posteriormente, utilizará dos métodos de descifrado principales: ataques de diccionario con una lista de palabras y ataques de fuerza bruta utilizando el modo incremental. Finalmente, reflexionará sobre las implicaciones de seguridad de los hashes NTLM y la importancia de políticas de contraseñas robustas. Este laboratorio proporciona un enfoque práctico a un concepto fundamental en ciberseguridad.

Extracción de Hashes NTLM de un Sistema

En este paso, simulará la extracción de hashes NTLM. En un escenario del mundo real, los hashes NTLM se pueden extraer de varias fuentes, como la base de datos Security Account Manager (SAM) en sistemas Windows, Active Directory o tráfico de red. Para este laboratorio, ya hemos proporcionado un archivo llamado hashes.txt en su directorio ~/project, que contiene hashes NTLM de ejemplo.

Primero, verifiquemos la presencia del archivo hashes.txt y examinemos su contenido. Este archivo contiene varias líneas, cada una representando una entrada de usuario con su hash NTLM. El formato típicamente incluye nombre de usuario, ID de usuario, hash LM (a menudo vacío o predeterminado), hash NTLM y otros campos. Nos centraremos en la parte del hash NTLM.

Utilice el comando ls para listar los archivos en su directorio actual y luego utilice el comando cat para mostrar el contenido de hashes.txt.

ls -l ~/project/hashes.txt
cat ~/project/hashes.txt

Debería ver una salida similar a esta, mostrando los detalles del archivo y su contenido:

-rw-r--r-- 1 labex labex 300 Mar 10 10:00 /home/labex/project/hashes.txt
user1:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
user2:501:aad3b435b51404eeaad3b435b51404ee:209c6174efb4b710:209c6174efb4b710:::
user3:502:aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad065adec1000000:::
user4:503:aad3b435b51404eeaad3b435b51404ee:e52cac67419a9a224a30370a31323334:::
user5:504:aad3b435b51404eeaad3b435b51404ee:d41d8cd98f00b204e9800998ecf8427e:::

El hash NTLM es el cuarto campo en cada línea, separado por dos puntos. Por ejemplo, para user1, el hash NTLM es 31d6cfe0d16ae931b73c59d7e0c089c0.

Formatear Hashes NTLM para John the Ripper

En este paso, preparará los hashes NTLM para John the Ripper. Si bien John the Ripper a menudo puede manejar varios formatos de hash automáticamente, es una buena práctica comprender la entrada esperada. Para los hashes NTLM, John the Ripper típicamente espera el formato nombre_usuario:hash_NTLM.

Nuestro archivo hashes.txt contiene campos adicionales. Necesitamos extraer solo el nombre de usuario y el hash NTLM. Podemos usar el comando cut para lograr esto. El comando cut puede extraer secciones de cada línea de los archivos. Usaremos : como delimitador y seleccionaremos el primer y cuarto campo.

Ejecute el siguiente comando para extraer y formatear los hashes, luego redirija la salida a un nuevo archivo llamado ntlm_hashes.txt en su directorio ~/project.

cut -d ':' -f 1,4 ~/project/hashes.txt > ~/project/ntlm_hashes.txt
cat ~/project/ntlm_hashes.txt

Debería ver los hashes formateados, listos para John the Ripper:

user1:31d6cfe0d16ae931b73c59d7e0c089c0
user2:209c6174efb4b710
user3:8846f7eaee8fb117ad065adec1000000
user4:e52cac67419a9a224a30370a31323334
user5:d41d8cd98f00b204e9800998ecf8427e

Este archivo ntlm_hashes.txt ahora contiene solo el nombre de usuario y el hash NTLM correspondiente, que es el formato ideal para John the Ripper.

Descifrar Hashes NTLM con una Lista de Palabras

En este paso, utilizará John the Ripper para descifrar los hashes NTLM utilizando una lista de palabras (también conocida como ataque de diccionario). Una lista de palabras es un archivo que contiene una lista de contraseñas comunes, palabras de diccionario o contraseñas filtradas previamente. Este suele ser el método más eficaz para descifrar contraseñas débiles.

Hemos proporcionado un archivo de lista de palabras simple llamado wordlist.txt en su directorio ~/project. Primero, inspeccionemos su contenido.

cat ~/project/wordlist.txt

Debería ver el siguiente contenido:

password
123456
qwerty
admin
test

Ahora, utilice John the Ripper con wordlist.txt para descifrar los hashes en ntlm_hashes.txt. El comando john --format=NT --wordlist=wordlist.txt ntlm_hashes.txt especifica el formato del hash como NTLM (NT), la lista de palabras a usar y el archivo que contiene los hashes.

john --format=NT --wordlist=~/project/wordlist.txt ~/project/ntlm_hashes.txt

John the Ripper intentará descifrar los hashes. Es posible que vea una salida similar a esta, indicando qué hashes se descifraron:

Using default input encoding: UTF-8
Loaded 5 password hashes with no different salts (NT [MD4 HASHES])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
123456           (user4)
test             (user2)
password         (user1)
3g 0:00:00:00 DONE (2023-10-27 08:00) 100.0% (ETA: 08:00) 3.750g/s 11.25p/s 11.25c/s 11.25C/s 123456...test
Session completed.

Después del proceso de descifrado, puede ver las contraseñas descifradas usando el comando john --show.

john --show ~/project/ntlm_hashes.txt

La salida listará los hashes descifrados y sus contraseñas de texto plano correspondientes:

user1:password
user2:test
user4:123456

3 password hashes cracked, 2 left

Esto muestra que la contraseña de user1 era password, la de user2 era test y la de user4 era 123456. Los otros dos hashes (user3 y user5) no fueron descifrados por esta lista de palabras, lo que indica que sus contraseñas podrían ser más fuertes o no estar presentes en nuestra lista de palabras simple.

Descifrar Hashes NTLM con Modo Incremental

En este paso, explorará el modo incremental de John the Ripper, que realiza un ataque de fuerza bruta. A diferencia de los ataques con listas de palabras, el modo incremental prueba combinaciones de caracteres sistemáticamente, comenzando con combinaciones cortas y simples y aumentando gradualmente la complejidad. Este método es eficaz para descifrar contraseñas que no están en una lista de palabras, pero puede consumir mucho tiempo para contraseñas largas o complejas.

El modo incremental de John the Ripper utiliza conjuntos de caracteres y reglas para generar contraseñas. Para los hashes NTLM, podemos especificar el formato NT y usar la opción --incremental. John the Ripper tiene modos incrementales incorporados (por ejemplo, alnum, digits, all). Utilizaremos el modo incremental predeterminado, que prueba varios conjuntos de caracteres.

Antes de ejecutar el modo incremental, es una buena práctica restablecer la sesión de John the Ripper para evitar conflictos con hashes descifrados previamente.

john --session=reset

Ahora, ejecute John the Ripper en modo incremental contra el archivo ntlm_hashes.txt. Este proceso puede tardar unos momentos, dependiendo de la complejidad de los hashes restantes sin descifrar.

john --format=NT --incremental ~/project/ntlm_hashes.txt

Es posible que vea una salida similar a esta mientras John the Ripper intenta descifrar los hashes restantes:

Using default input encoding: UTF-8
Loaded 5 password hashes with no different salts (NT [MD4 HASHES])
Remaining 2 password hashes to crack
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
(user5)
(user3)
2g 0:00:00:00 DONE (2023-10-27 08:05) 100.0% (ETA: 08:05) 2.500g/s 7.500p/s 7.500c/s 7.500C/s
Session completed.

Una vez que el proceso se complete, verifique las contraseñas descifradas nuevamente usando john --show.

john --show ~/project/ntlm_hashes.txt

Ahora debería ver todos los hashes descifrados, incluidos user3 y user5. La contraseña de user3 es admin y la de user5 es una cadena vacía (que se representa como "" o nada después de los dos puntos).

user1:password
user2:test
user4:123456
user3:admin
user5:

5 password hashes cracked, 0 left

Esto demuestra la efectividad del modo incremental para descifrar contraseñas que podrían no estar en una lista de palabras, especialmente las cortas o simples.

Comprender la Seguridad de los Hashes NTLM

En este paso, reflexionará sobre las implicaciones de seguridad de los hashes NTLM y la importancia de las prácticas de contraseñas seguras. Ha visto cómo contraseñas relativamente simples pueden descifrarse rápidamente utilizando listas de palabras y cómo incluso contraseñas cortas y no de diccionario pueden encontrarse con métodos de fuerza bruta como el modo incremental.

Los hashes NTLM son conocidos por ser vulnerables debido a varios factores:

  • Falta de "Salting" (Sal): A diferencia de los algoritmos de hash modernos (por ejemplo, bcrypt, scrypt), los hashes NTLM no utilizan una "sal". Una sal es un dato aleatorio que se añade a una contraseña antes de aplicar el hash, lo que hace que cada hash sea único incluso para contraseñas idénticas. Sin sal, los atacantes pueden utilizar tablas precalculadas (tablas rainbow) para descifrar hashes rápidamente.
  • Algoritmo de Hash Débil: NTLM utiliza MD4, que es un algoritmo de hash relativamente antiguo y criptográficamente débil.
  • No Distinción de Mayúsculas y Minúsculas (para el hash LM, aunque NTLM distingue mayúsculas y minúsculas): Si bien NTLM en sí mismo distingue mayúsculas y minúsculas, su predecesor, el hash LM, no lo hacía, lo que generaba confusión y, a veces, prácticas de contraseñas más débiles.

Para mitigar los riesgos asociados con el descifrado de hashes NTLM, las organizaciones y los usuarios deben:

  • Aplicar Políticas de Contraseñas Robustas: Exigir contraseñas largas y complejas que combinen letras mayúsculas y minúsculas, números y caracteres especiales. Esto hace que tanto los ataques de lista de palabras como los de fuerza bruta sean significativamente más difíciles.
  • Implementar Autenticación Multifactor (MFA): La MFA añade una capa adicional de seguridad más allá de una simple contraseña, lo que dificulta mucho que los atacantes obtengan acceso no autorizado, incluso si descifran una contraseña.
  • Utilizar Algoritmos de Hash Modernos: Para sistemas nuevos o al migrar, prefiera algoritmos de hash modernos, con sal y adaptativos como bcrypt, scrypt o Argon2.
  • Auditar y Monitorizar Regularmente: Monitorice continuamente los intentos de inicio de sesión sospechosos y audite la fortaleza de las contraseñas.

Al comprender las vulnerabilidades de los hashes NTLM e implementar medidas de seguridad sólidas, puede mejorar significativamente la postura de seguridad de los sistemas y las cuentas de usuario.

Resumen

En este laboratorio, aprendió con éxito a utilizar John the Ripper para descifrar hashes NTLM. Comenzó comprendiendo cómo se estructuran los hashes NTLM y luego los formateó para un uso óptimo con John the Ripper. A continuación, aplicó dos técnicas comunes de descifrado de contraseñas: ataques con listas de palabras y ataques incrementales (fuerza bruta), demostrando su eficacia contra contraseñas débiles y simples.

También obtuvo información sobre las debilidades de seguridad de los hashes NTLM, como la falta de "salting" (sal) y el uso de un algoritmo de hash más débil. Esta comprensión es crucial para apreciar la importancia de las políticas de contraseñas seguras, la autenticación multifactor y la adopción de algoritmos de hash modernos y robustos para proteger información sensible. Esta experiencia práctica proporciona una comprensión fundamental de la seguridad de las contraseñas y las metodologías de descifrado comunes.