Detener los ataques de Hydra de forma anticipada

HydraBeginner
Practicar Ahora

Introducción

En este laboratorio aprenderás a detener anticipadamente los ataques de Hydra mediante opciones que limitan el número de intentos. Primero configurarás un servidor FTP con vsftpd y crearás varias cuentas de usuario, testuser1 y testuser2, cada una con su propia contraseña. Esta configuración permitirá simular un escenario en el que Hydra intenta descifrar varias cuentas simultáneamente.

A continuación, usarás la opción -f para detener Hydra después del primer inicio de sesión correcto y la opción -F junto con una lista de varios hosts. Por último, compararás el comportamiento de -f y -F para comprender cómo pueden utilizarse para mitigar los ataques de Hydra.

Configurar FTP con varias credenciales

En este paso configurarás un servidor FTP con varias credenciales de usuario. Esto permitirá comprobar la capacidad de Hydra para descifrar varias cuentas simultáneamente. Utilizarás vsftpd (Very Secure FTP Daemon) como servidor FTP.

Primero, instala vsftpd. Abre la terminal y ejecuta el siguiente comando:

sudo apt update
sudo apt install vsftpd -y

A continuación, configura vsftpd. Comenzaremos creando una copia de seguridad del archivo de configuración original. Es una buena práctica antes de modificar archivos de configuración del sistema.

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak

Ahora edita el archivo de configuración /etc/vsftpd.conf con nano. Este archivo controla el comportamiento del servidor FTP.

sudo nano /etc/vsftpd.conf

Dentro del editor nano, añade o modifica las siguientes líneas. Estos ajustes deshabilitarán el acceso anónimo, habilitarán los inicios de sesión de usuarios locales, permitirán la escritura y confinarán a los usuarios locales en sus directorios personales para mejorar la seguridad.

anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
listen=YES
listen_ipv6=NO

Para guardar el archivo en nano, pulsa Ctrl + X, pulsa Y para confirmar que deseas guardarlo y, después, pulsa Enter para confirmar el nombre del archivo.

Después de guardar el archivo, comprueba que los cambios se hayan aplicado correctamente mediante el siguiente comando:

sudo cat /etc/vsftpd.conf | grep -E "^(anonymous_enable|local_enable|write_enable|chroot_local_user|listen)"

Asegúrate de que la salida muestre la misma configuración que has añadido.

Ahora crea varias cuentas de usuario. Crearás dos usuarios: testuser1 y testuser2, y establecerás una contraseña para cada uno. Hydra utilizará estos usuarios para intentar iniciar sesión.

Crea testuser1 con un directorio personal:

sudo useradd -m testuser1

Establece la contraseña de testuser1 mediante un comando no interactivo:

echo 'testuser1:password123' | sudo chpasswd

Crea testuser2 con un directorio personal:

sudo useradd -m testuser2

Establece la contraseña de testuser2 mediante un comando no interactivo:

echo 'testuser2:password456' | sudo chpasswd

Estos comandos no son interactivos y crean los usuarios directamente sin solicitar datos, lo que los hace más fiables en entornos automatizados.

Ahora debes corregir los permisos de los directorios personales para la configuración de confinamiento. Cuando chroot_local_user=YES está habilitado, el directorio personal del usuario no debe poder ser escrito por él mismo por motivos de seguridad:

sudo chmod 755 /home/testuser1
sudo chmod 755 /home/testuser2

Crea un subdirectorio con permisos de escritura para cada usuario, donde puedan cargar archivos:

sudo mkdir /home/testuser1/files
sudo mkdir /home/testuser2/files
sudo chown testuser1:testuser1 /home/testuser1/files
sudo chown testuser2:testuser2 /home/testuser2/files

A continuación, reinicia el servicio vsftpd para aplicar los cambios realizados en el archivo de configuración y reconocer a los nuevos usuarios.

sudo service vsftpd restart

Ahora comprueba el servidor FTP para asegurarte de que funciona correctamente y de que los nuevos usuarios pueden iniciar sesión. Puedes utilizar el cliente de línea de comandos ftp para conectarte al servidor. Como el servidor se ejecuta localmente, puedes conectarte a localhost.

ftp localhost

El sistema solicitará un nombre de usuario. Introduce testuser1 y, después, la contraseña password123. Si todo está configurado correctamente, aparecerá un mensaje indicando que has iniciado sesión.

Connected to localhost.
220 (vsFTPd 3.0.3)
Name (localhost:labex): testuser1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

Puedes escribir bye para salir del cliente FTP.

ftp> bye
221 Goodbye.

Ahora prepara los archivos que Hydra utilizará para el ataque. Ve al directorio ~/project, que es tu directorio de trabajo predeterminado.

cd ~/project

Crea un archivo llamado users.txt en el directorio ~/project. Este archivo contendrá los nombres de usuario que Hydra intentará utilizar.

nano users.txt

Añade los siguientes nombres de usuario a users.txt:

testuser1
testuser2

Guarda el archivo y sal de nano.

A continuación, crea un archivo llamado passwords.txt en el directorio ~/project. Este archivo contendrá una lista de contraseñas, incluidas las correctas para los usuarios de prueba y algunas contraseñas incorrectas habituales.

nano passwords.txt

Añade las siguientes contraseñas a passwords.txt:

password123
password456
password
123456
qwerty

Guarda el archivo y sal de nano.

Ya tienes un servidor FTP configurado con varias cuentas de usuario, además de una lista de nombres de usuario y contraseñas que Hydra puede utilizar para intentar descifrar las cuentas.

Ejecutar con -f para detenerse después del primer par válido

En este paso utilizarás la opción -f de Hydra. Esta opción indica a Hydra que se detenga después de encontrar el primer par válido de nombre de usuario y contraseña para un único objetivo. Resulta útil cuando solo necesitas encontrar una cuenta válida en un servicio específico y no quieres que Hydra siga probando otras combinaciones después de un inicio de sesión correcto.

Asegúrate de estar en el directorio ~/project.

cd ~/project

Ahora ejecuta Hydra contra el servidor FTP utilizando las listas de nombres de usuario y contraseñas creadas en el paso anterior. Incluye la opción -f.

hydra -L users.txt -P passwords.txt localhost ftp -f

Desglosemos este comando:

  • hydra: herramienta de línea de comandos para realizar ataques de fuerza bruta.
  • -L users.txt: especifica el archivo que contiene la lista de nombres de usuario (users.txt en el directorio actual).
  • -P passwords.txt: especifica el archivo que contiene la lista de contraseñas (passwords.txt en el directorio actual).
  • localhost: dirección del servidor FTP objetivo.
  • ftp: protocolo del servicio que se atacará, FTP en este caso.
  • -f: opción fundamental que indica a Hydra que se detenga después de encontrar el primer par válido de nombre de usuario y contraseña.

Observa la salida en la terminal. Hydra intentará iniciar sesión utilizando los nombres de usuario y las contraseñas de las listas. En cuanto encuentre una combinación válida, por ejemplo, testuser1:password123, mostrará el inicio de sesión correcto y detendrá la operación.

La salida debería parecerse a la siguiente:

Hydra v9.6 (c) 2024 by van Hauser/THC & David Maciejak - Please use caution!

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-29 14:41:46
[DATA] max 10 tasks per 1 server, overall 10 tasks, 10 login tries (l:2/p:5), ~1 try per task
[DATA] attacking ftp://localhost:21/
[21][ftp] host: localhost   login: testuser1   password: password123
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-29 14:41:47

Observa que Hydra se detuvo inmediatamente después de encontrar la primera combinación válida (testuser1:password123). Sin la opción -f, Hydra habría seguido probando todas las demás combinaciones del archivo passwords.txt para testuser1 y, después, habría pasado a testuser2 para probar también todas sus contraseñas.

Esta opción resulta especialmente útil al probar un servicio concreto cuando solo necesitas verificar que al menos una cuenta es vulnerable, ya que permite ahorrar una cantidad considerable de tiempo y recursos.

Probar -F con una lista de varios hosts

En este paso explorarás la opción -F de Hydra. A diferencia de -f, que se detiene después de encontrar el primer par de credenciales válido para un único host, -F se detiene después de encontrar el primer par válido entre todos los hosts de una lista. Esto resulta especialmente útil cuando se atacan varios sistemas y solo necesitas encontrar una entrada vulnerable entre ellos.

Para demostrarlo, simularás un escenario con varios hosts. Como solo dispones de una máquina virtual, utilizarás varias veces localhost en la lista de hosts para simular distintos objetivos.

Primero, asegúrate de estar en el directorio ~/project.

cd ~/project

Ahora crea un archivo llamado hosts.txt en el directorio ~/project. Este archivo contendrá una lista de hosts objetivo.

nano hosts.txt

Añade las siguientes líneas a hosts.txt:

localhost
localhost

Guarda el archivo y sal de nano. Al incluir localhost dos veces, indicas a Hydra que lo trate como dos objetivos distintos, aunque ambos apunten a la misma máquina.

Ahora ejecuta Hydra con la opción -F, apuntando a la lista de hosts especificada en hosts.txt.

hydra -L users.txt -P passwords.txt -M hosts.txt ftp -F

Desglosemos este comando:

  • -L users.txt: especifica el archivo que contiene la lista de nombres de usuario.
  • -P passwords.txt: especifica el archivo que contiene la lista de contraseñas.
  • -M hosts.txt: esta es la nueva opción. Especifica el archivo que contiene la lista de hosts objetivo (hosts.txt en el directorio actual).
  • ftp: protocolo del servicio que se atacará.
  • -F: opción fundamental que indica a Hydra que se detenga después de encontrar el primer inicio de sesión correcto entre todos los hosts de la lista.

Observa la salida en la terminal. Hydra intentará iniciar sesión en cada host del archivo hosts.txt utilizando los nombres de usuario y las contraseñas de las listas. En cuanto encuentre una combinación válida en cualquiera de los hosts, mostrará el inicio de sesión correcto y dejará de atacar todos los hosts incluidos en hosts.txt.

La salida debería parecerse a la siguiente:

Hydra v9.6 (c) 2024 by van Hauser/THC & David Maciejak - Please use caution!

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-05-29 14:42:10
[DATA] max 10 tasks per 2 servers, overall 20 tasks, 10 login tries (l:2/p:5), ~1 try per task
[DATA] attacking ftp://(2 targets):21/
[21][ftp] host: localhost   login: testuser1   password: password123
[STATUS] attack finished for localhost (valid pair found)
2 of 2 targets successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-05-29 14:42:11

Aunque hosts.txt contiene dos entradas localhost, Hydra se detiene después de encontrar el primer inicio de sesión correcto en la primera instancia de localhost. No continúa intentando encontrar credenciales para la segunda entrada, lo que demuestra el efecto de la opción -F.

La opción -F resulta muy útil cuando se atacan varios sistemas y solo necesitas encontrar un sistema vulnerable para alcanzar tu objetivo. Puede ahorrar una cantidad considerable de tiempo y recursos computacionales, ya que detiene el ataque en cuanto encuentra una vulnerabilidad en cualquiera de los objetivos enumerados.

Comparar el comportamiento de -f y -F

En este paso compararás directamente el comportamiento de las opciones -f y -F para afianzar la comprensión de sus diferencias. Utilizarás la misma configuración de los pasos anteriores: un servidor FTP ejecutándose en localhost, los archivos users.txt y passwords.txt, y el archivo hosts.txt con dos entradas para localhost.

Primero, vuelve a ejecutar el comando con la opción -f. Este comando se dirige a un único host (localhost) y se detiene después de encontrar la primera credencial válida para ese host concreto.

hydra -L users.txt -P passwords.txt localhost ftp -f

Como observaste en el paso 2, Hydra encontrará testuser1:password123 y se detendrá. No intentará encontrar testuser2:password456 en localhost.

Ahora vuelve a ejecutar el comando con la opción -F. Este comando se dirige a una lista de hosts (hosts.txt) y se detiene después de encontrar la primera credencial válida en cualquiera de los hosts de la lista.

hydra -L users.txt -P passwords.txt -M hosts.txt ftp -F

Como observaste en el paso 3, Hydra encontrará testuser1:password123 en la primera entrada localhost de hosts.txt y se detendrá. No continuará comprobando la segunda entrada localhost del archivo hosts.txt.

La diferencia principal está en cómo Hydra interpreta el objetivo y en qué momento decide detenerse:

  • -f (objetivo único): cuando especificas un único objetivo, por ejemplo, localhost, -f indica a Hydra que se detenga en cuanto encuentre cualquier par válido de nombre de usuario y contraseña para ese objetivo concreto. No seguirá buscando otras credenciales válidas en el mismo objetivo.

  • -F (lista de varios hosts): cuando especificas una lista de objetivos mediante -M, -F indica a Hydra que se detenga en cuanto encuentre cualquier par válido de nombre de usuario y contraseña en cualquiera de los hosts de la lista. No seguirá buscando otras credenciales válidas en el mismo host ni continuará comprobando los hosts posteriores de la lista.

Para ilustrar aún más la diferencia, imagina que estás analizando una red con varios servidores FTP: ftp1.example.com, ftp2.example.com y ftp3.example.com.

  • Si utilizas -f y apuntas a ftp1.example.com, Hydra encontrará la primera credencial válida en ftp1.example.com y se detendrá. Si después quieres comprobar ftp2.example.com, tendrás que ejecutar un comando de Hydra independiente para ese host.

  • Si incluyes los tres servidores en un archivo hosts.txt y utilizas -F, Hydra empezará comprobando ftp1.example.com. Si encuentra allí una credencial válida, detendrá inmediatamente toda la operación, sin intentar siquiera conectarse a ftp2.example.com o ftp3.example.com.

En resumen:

  • Usa -f cuando te centres en un único objetivo y quieras encontrar al menos una credencial válida para él.
  • Usa -F cuando analices varios objetivos y quieras detener toda la operación en cuanto se encuentre cualquier credencial válida en cualquiera de ellos.

Con esto concluye el laboratorio. Has configurado correctamente un servidor FTP, creado varias cuentas de usuario y utilizado Hydra para descifrarlas, explorando las opciones -f y -F para controlar el comportamiento del ataque.

Resumen

En este laboratorio has aprendido a controlar el comportamiento de los ataques de Hydra mediante las opciones -f y -F. Comenzaste configurando un servidor FTP local con vsftpd y creando varias cuentas de usuario (testuser1 y testuser2) para simular un escenario real. También preparaste los archivos users.txt y passwords.txt que Hydra utilizaría.

Después empleaste la opción -f para indicar a Hydra que se detuviera tras encontrar el primer par válido de nombre de usuario y contraseña en un único objetivo, demostrando cómo encontrar de forma eficiente una cuenta vulnerable. A continuación, exploraste la opción -F con una lista de varios hosts (hosts.txt) y aprendiste cómo Hydra puede detener un ataque contra varios objetivos en cuanto encuentra una sola credencial válida en cualquiera de los hosts enumerados.

Por último, comparaste el comportamiento específico de -f y -F y comprendiste sus respectivos casos de uso: -f para detenerse tras el primer éxito en un único objetivo y -F para detenerse tras el primer éxito entre varios objetivos. Estos conocimientos son fundamentales para optimizar los ataques de fuerza bruta y gestionar los recursos de forma eficaz.