Como Configurar un Honeypot SSH y detectar Hackers en tus Servidores

Advertencia
Este artículo se actualizó por última vez el 2022-03-04, el contenido puede estar desactualizado.

Antes de comenzar, quería contarles que hay una promoción en DigitalOcean donde te dan un crédito de USD 100.00 durante 60 días para que puedas probar los servicios que este Proveedor Cloud ofrece. Lo único que tienes que hacer es suscribirte a DigitalOcean con el siguiente enlace: https://bit.ly/digitalocean-itsm



Si tienes un servidor y tu u otra persona ha iniciado sesión de manera remota por SSH, probablemente te sea muy familiar la siguiente situación: Te conectas a tu servidor, revisas los logs de autenticación y descubres que alguien ha tratado de conectarse por SSH con las credenciales por defecto muchas veces. Si tienes una contraseña fuerte y usas autenticación con clave pública, estos intentos son bastantes inofensivos, aún así es un poco molesto saber que alguien está constantemente tratando de ingresar al servidor.

En este artículo te enseñaré una forma bastante divertida de configurar SSH de evitar este tipo de ataques y con suerte hacerles perder un poco de tiempo a los hackers.



La manera en que los hackers usualmente intentar acceder a los servidores es a través de un método denominado “Fuerza Bruta”, en la que tienen una lista de las contraseñas más populares (entiéndase como contraseñas no seguras) e intentará acceder mediante scripts automatizados y dado que, por defecto, SSH no tiene ningún tipo de captcha o mecanismo que expulse a los atacantes después de intentos fallidos, es muy fácil de automatizar y no requiere ningún tipo de intervención manual, por lo que el atacante puede simplemente iniciar su script y continuar con su vida mientras el script está haciendo el trabajo sucio.

Sin embargo, en las especificaciones de SSH incluyen algo llamado “banner” que es básicamente un texto que se muestra a todos los que intentan iniciar sesión en el servidor y no hay límite sobre cuánto tiempo puede ser y cuánto tiempo puede tomar para mostrar.

Chris Wellons tomó esta idea y desarrolló un software llamado endlessh en cuyo GitHub se encuentra el código.



La manera en que funciona, es basicamente, pones tu servidor SSH real en un puerto diferente (por ejemplo el 2222), luego ejecutas endlessh en el puerto 22 y pretende ser el servidor SSH real. Cada vez que alguien intenta iniciar sesión, básicamente se ve obligado a leer un mensaje de texto muy, muy largo infinitamente. Nunca habrá un timeout, no arrojará un mensaje de error y mostrará garabatos hasta que el proceso se detenga manualmente.

Dado que la mayoría de estos ataques son automatizados, puede llevar mucho tiempo hasta que el atacante se dé cuenta de que algo salió mal. Y sí, hay muchas formas normales y aburridas de proteger tus servidores como iptables o fail2ban pero con endlessh no solamente estarías protegiendo tus servidores de los atacantes, también le estarías haciendo perder su valioso tiempo en atacar otros servidores.


En este artículo, voy a usar Ubuntu en su versión 20.04.

Instalamos dependencias:

1
sudo apt-get install make gcc libc6-dev

Clonamos el repositorio con el código fuente de endlessh:

1
git clone https://github.com/skeeto/endlessh

Entramos al directorio:

1
cd endlessh

Compilamos:

1
make

Colocamos el ejecutable en el directorio /usr/local/bin:

1
sudo cp endlessh /usr/local/bin

Copiamos el archivo de configuración del servicio endlessh:

1
sudo cp util/endlessh.service /etc/systemd/system

Creamos el directorio donde va a ir la configuración del servicio:

1
sudo mkdir -p /etc/endlessh

Creamos el archivo de configuración y colocamos el puerto 22:

1
sudo echo "Port 22" | sudo tee /etc/endlessh/config

Iniciamos el servicio y lo configuramos para que arranque durante el inicio del sistema operativo:

1
sudo systemctl enable --now endlessh

Verificamos que el servicio esté escuchando:

1
netstat -tupln | grep endlessh

Ahora, abrimos una nuevo terminal e intentemos ingresar a nuestro servidor, como puedes ver, si especifico el puerto 2222, que es el puerto en el cual el servidor ssh real está ejecutándose, está todo bien, está iniciando sesión, no hay problema, pero si configuro el puerto 22, no sucede nada.

Si colocamos la opcion:

1
ssh usuario@host -p 22 -vvv

Veremos tras bastidores, que esas extrañas líneas aleatorias en el banner y este metraje en realidad se acelera porque en realidad cada línea tarda como 30 segundos en mostrarse y, como ya dije, el cliente realmente no trata este banner como parte del proceso de inicio de sesión, así que el atacante quedará atrapado en ese escenario.

Espero les haya gustado este tutorial, ¡hasta la próxima!


Si te pareció útil este artículo y el proyecto en general, considera brindarme un café :)

Buy me a coffeeBuy me a coffee