19 de Octubre, 2004

Bloqueo dinámico de sshd

Este tipo de contramedidas automatizadas son un arma de doble filo, pero en este caso, al tratarse de un servicio privado como SSH, no es mala idea.

Seguro que algo hemos leído en distintas bitácoras sobre la última tendencia en ataques al servicio de SSH. Se trata de un script que prueba por fuerza bruta distintos pares usuarios/contraseñas habituales buscando un demonio SSH mal configurado.

Las entradas en /var/log/authlog son algo así:

... Did not receive identification string from x.y.z.k
... User nobody not allowed because not listed in AllowUsers
... input_userauth_request: illegal user nobody
... Failed password for illegal user nobody from x.y.z.k port 56731 ssh2
... Received disconnect from x.y.z.k: 11: Bye Bye

Aunque mi sshd está perfectamente configurado, estos ataques son muy molestos.

Ayer comentaba Wu en la lista userbsd que había programado un pequeño script en Python que recorría los authlog añadiendo a un bloqueo con el Packet Filter de OpenBSD las IPs de atacantes.

La propuesta es interesante. Un acceso legítimo a SSH nunca dará el error Failed password for illegal user, con lo que podemos bloquear tranquilamente el acceso al puerto 22 (SSH) a todas las IPs referenciadas así en los logs.

La configuración de PF es sencilla. En nuestro /etc/pf.conf añadimos:

table <sshscan> persist
block in log quick on $OUT_IF proto tcp from <sshscan> to any port 22

Siendo $OUT_IF nuestra interfaz de red expuesta a los ataques.

Luego pondremos el script de Wu en cron para que procese el authlog periódicamente añadiendo IPs a la tabla sshscan definida en PF.

Como no tengo Python instalado en blackshell, me he hecho una versión en shell (su historial de cambios aka ChangeLog). Funciona igual respecto a la configuración de PF, y las pequeñas diferencias se pueden ojear en la documentación que acompaña al script.

Actualización (dic-2004): De vez en cuando voy introduciendo mejoras/corrigiendo errores. Para ver el estado en el que se encuentra el script, consultar el ChangeLog. Para descargar la última versión, bajar ssh_blocker-sh_current.tar.gz.

Anotación por Juan J. Martínez.

Hay 1 comentario

Gravatar

Para bloquear los servicios privados puede ir muy bien el daemon knockd, así los puertos están cerrados y solo se abren cuando necesitas acceder, haciendo previamente el knock a los puertos que hayas configurado.

http://www.zeroflux.org/knock/

por ivan, en 2004-10-19 11:59:18

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.