Usar Hashcat Brain para Ataques Distribuidos

Kali LinuxBeginner
Practicar Ahora

Introducción

Hashcat es una herramienta de recuperación de contraseñas de renombre mundial, conocida por su velocidad y versatilidad. Al realizar ataques de contraseñas a gran escala, es común utilizar múltiples sistemas para atacar la misma lista de hashes. Este enfoque distribuido puede generar ineficiencia, ya que diferentes sistemas pueden perder tiempo intentando los mismos candidatos a contraseñas.

Para resolver este problema, Hashcat introdujo la función "Brain". El Hashcat Brain actúa como un servidor centralizado que mantiene un registro de cada candidato a contraseña que ha sido intentado. Antes de que un cliente intente una contraseña, consulta al Brain. Si la contraseña ya ha sido intentada anteriormente, el cliente la omite, ahorrando tiempo y recursos valiosos.

En este laboratorio, aprenderá a:

  • Iniciar un servidor Hashcat Brain.
  • Conectar un cliente Hashcat al servidor.
  • Ejecutar un ataque de contraseñas y observar cómo el Brain previene el trabajo redundante.

Comprender el Concepto de Hashcat Brain

En este paso, cubriremos brevemente el concepto central del Hashcat Brain y el problema que está diseñado para resolver. Este paso es puramente conceptual y no se requieren comandos.

En un escenario típico de cracking de contraseñas, tienes una lista de hashes y una lista de contraseñas potenciales (una wordlist). Hashcat prueba cada contraseña de la wordlist contra los hashes. Ahora, imagina que tienes dos computadoras separadas (o clientes) trabajando en la misma tarea.

El Problema: Sin coordinación, tanto el Cliente A como el Cliente B podrían intentar la misma contraseña exacta, como "123456", en diferentes momentos. Esto es un desperdicio de poder computacional, ya que el trabajo se está duplicando.

La Solución (Hashcat Brain): El Hashcat Brain actúa como un servidor central inteligente. El flujo de trabajo es el siguiente:

  1. Un cliente (por ejemplo, Cliente A) quiere probar la contraseña "123456".
  2. Primero envía una solicitud al Servidor Brain: "¿Se ha intentado '123456' antes?"
  3. El Servidor Brain consulta su base de datos. Si es la primera vez, responde: "No, no se ha intentado".
  4. El Cliente A procede a probar la contraseña. Después de terminar, informa al Servidor Brain: "Ya he probado '123456'". El Servidor Brain lo registra.
  5. Más tarde, si el Cliente B quiere intentar "123456", pregunta al Servidor Brain. El servidor ahora responderá: "Sí, ya se ha intentado".
  6. El Cliente B omite inmediatamente esta contraseña y pasa a la siguiente, ahorrando tiempo y electricidad.

Este mecanismo asegura que cada candidato a contraseña en toda la red distribuida se pruebe solo una vez, mejorando drásticamente la eficiencia de los ataques a gran escala.

Iniciar el Servidor Hashcat Brain

En este paso, iniciará el servidor Hashcat Brain. Este servidor escuchará las conexiones de los clientes Hashcat y gestionará la base de datos de contraseñas intentadas.

Para este laboratorio, ejecutaremos el servidor y el cliente en la misma máquina, pero se comunicarán a través de la red como si estuvieran en sistemas separados.

El comando para iniciar el servidor es hashcat con la bandera --brain-server. También especificaremos un puerto en el que escuchará. Por seguridad, Hashcat puede generar automáticamente una contraseña para el servidor.

Primero, creemos un directorio para nuestros archivos del brain dentro de la carpeta de nuestro proyecto.

mkdir -p ~/project/brain

Ahora, ejecute el siguiente comando en su terminal para iniciar el servidor. Escuchará en el puerto 7890 y almacenará sus datos en el directorio ~/project/brain/.

Nota: Este comando ocupará su terminal actual. Para los siguientes pasos, necesitará abrir una nueva pestaña de terminal haciendo clic en el ícono + en el panel de la terminal.

hashcat --brain-server --brain-port 7890 --brain-session-path ~/project/brain/

Después de ejecutar el comando, verá una salida que indica que el servidor se está ejecutando. Preste mucha atención a la línea que dice Password..:, ya que esta es la contraseña generada automáticamente que necesitará para que el cliente se conecte.

Starting brain server on 0.0.0.0:7890...

Password..: 82b5d1a3e... (a long hex string)

Accepting clients...

Deje esta terminal en ejecución. No la cierre. Abra una nueva terminal para los siguientes pasos.

Obtener la Contraseña del Servidor Brain

En este paso, aprenderá cómo recuperar la contraseña del servidor Brain de su archivo de sesión. Si bien la contraseña se mostró en la terminal al iniciar el servidor, también se almacena en un archivo para facilitar el acceso, lo cual es útil en entornos automatizados.

El archivo de sesión, por defecto, se llama hashcat.brain. Dado que especificamos una ruta personalizada con --brain-session-path, nuestro archivo se encuentra en ~/project/brain/hashcat.brain.

En su nueva pestaña de terminal, use el comando cat para mostrar el contenido de este archivo. Este contenido es la contraseña del servidor.

cat ~/project/brain/hashcat.brain

La salida será una cadena larga de caracteres hexadecimales, que es la contraseña.

82b5d1a3e4c9a0f7d6b3c1a9f8e7d6c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1f0e9

Esta contraseña es requerida por cualquier cliente que desee conectarse a su servidor Brain. En los siguientes pasos, utilizaremos un comando para leer esta contraseña directamente del archivo y evitar errores de copiar y pegar.

Configurar un Cliente Hashcat para Conectarse al Brain

En este paso, configurará un cliente Hashcat para usar el servidor Brain. Esto se hace agregando varias opciones --brain-* a un comando hashcat estándar.

Ejecutaremos un comando de "simulación" (dry-run) para probar la conexión. La opción --show en Hashcat se utiliza para mostrar hashes previamente descifrados, pero cuando se combina con las opciones del cliente Brain, sirve como una buena manera de verificar la conexión sin iniciar un ataque completo.

Las opciones de cliente requeridas son:

  • --brain-client: Indica a Hashcat que opere en modo cliente.
  • --brain-host: La dirección IP del servidor. Usaremos 127.0.0.1 ya que está en la misma máquina.
  • --brain-port: El puerto en el que el servidor está escuchando, que es 7890.
  • --brain-password: La contraseña para el servidor. Podemos usar sustitución de comandos $(cat ...) para leerla directamente del archivo.

Ejecute el siguiente comando en su nueva pestaña de terminal:

hashcat --show -m 0 ~/project/hashes.txt --brain-client --brain-host=127.0.0.1 --brain-port=7890 --brain-password=$(cat ~/project/brain/hashcat.brain)

Este comando no producirá mucha salida en la terminal del cliente. Sin embargo, si vuelve a su primera pestaña de terminal (la que ejecuta el servidor), debería ver una nueva línea que dice Client connected from 127.0.0.1. Esto confirma que el cliente se conectó exitosamente al servidor.

## En la terminal del servidor
Accepting clients...
Client connected from 127.0.0.1

Esto confirma que su configuración de cliente es correcta.

Ejecutar un Ataque y Observar la Comunicación del Brain

En este paso, realizará un ataque de diccionario y verá el Hashcat Brain en acción. Utilizaremos los archivos hashes.txt y wordlist.txt que se prepararon para usted.

Primero, ejecute el ataque. El comando es un ataque de diccionario estándar (-a 0) para hashes MD5 (-m 0), con las opciones del cliente Brain añadidas.

Ejecute esto en su terminal de cliente (la segunda pestaña):

hashcat -m 0 -a 0 ~/project/hashes.txt ~/project/wordlist.txt --brain-client --brain-host=127.0.0.1 --brain-port=7890 --brain-password=$(cat ~/project/brain/hashcat.brain)

El ataque se ejecutará y verá que encuentra rápidamente la contraseña.

...
5f4dcc3b5aa765d61d8327deb882cf99:password
...
Session..........: hashcat
Status...........: Cracked
...

Ahora, aquí está la parte importante. Ejecute exactamente el mismo comando de nuevo.

hashcat -m 0 -a 0 ~/project/hashes.txt ~/project/wordlist.txt --brain-client --brain-host=127.0.0.1 --brain-port=7890 --brain-password=$(cat ~/project/brain/hashcat.brain)

Observe la salida esta vez. El ataque debería finalizar casi instantáneamente. Preste atención a la línea Status.

...
Session..........: hashcat
Status...........: Exhausted
...

El estado es Exhausted porque el cliente Brain preguntó al servidor sobre cada contraseña en wordlist.txt, y el servidor respondió: "Sí, todas estas ya se han intentado antes". El cliente supo entonces que no había trabajo que hacer y salió inmediatamente. Esto demuestra el poder y la eficiencia del Hashcat Brain.

Resumen

En este laboratorio, exploró con éxito el Hashcat Brain, una potente función para optimizar las operaciones de descifrado de contraseñas distribuidas.

Ha aprendido:

  • El concepto central detrás de Hashcat Brain y cómo evita el trabajo redundante.
  • Cómo iniciar un servidor Hashcat Brain y permitirle generar una contraseña segura.
  • Cómo localizar el archivo de sesión del servidor para recuperar la contraseña.
  • Cómo configurar un cliente Hashcat con las banderas necesarias para conectarse al Brain.
  • Cómo ejecutar un ataque y observar el Brain en acción, presenciando cómo omite inteligentemente las contraseñas intentadas previamente.

Al dominar el Hashcat Brain, puede mejorar significativamente la eficiencia de cualquier campaña de recuperación de contraseñas a gran escala o de larga duración, ahorrando tiempo y recursos computacionales.