Emezeta.com

Port-Knocking, simple pero seguro


Ayer, hablando con el venerable Ruyk acerca de técnicas de seguridad para SSH salió a la luz una práctica de seguridad que no conocía, el Port-knocking.

Para situarnos en esta técnica debemos pensar en la necesidad de un control remoto, un acceso desde fuera de nuestro equipo que a veces podemos requerir para corregir algún suceso inesperado, activar o desactivar aplicaciones, descargar algún archivo o cientos de acciones diferentes.

Para ello, lo más común y simple es abrir el acceso desde un determinado puerto a nuestro equipo y protegerlo con un password, siempre teniendo en cuenta como se debe elegir una contraseña.

Asumiendo que tengamos una contraseña "dificil" de romper, al día se descubren miles de vulnerabilidades, denegaciones de servicio, escaladas de privilegio y tantos otros problemas que podrían dejar a nuestro equipo unos segundos fatídicos para la seguridad de nuestros datos.

Aquí es donde entra la técnica del Port-Knocking. Con ella tenemos un firewall establecido de manera que nadie (ni nosotros mismos!) pueda acceder al sistema. En el ejemplo posterior, vemos como un supuesto atacante (88.35.21.31) intenta acceder por varios puertos (21, 23 y 22) sin éxito alguno.

port knocking bad

Totalmente inútil sería esta táctica si no hubiera una manera de que nosotros podamos entrar:

port knocking good

El Port-knocking se basa en realizar varios intentos de conexión consecutivos (y previamente establecidos) a ciertos puertos para «avisar» al sistema de que realmente somos nosotros.

Asi pues, en el ejemplo que muestro tenemos configurado el knockd (demonio encargado del port-knocking) para que al recibir los intentos de conexión en el puerto 2199 y 9123, se abra el firewall para nuestra IP en el puerto 22. ¿Brillante, verdad? Una sencilla forma de proteger nuestro sistema y hacer prácticamente imposible de ingresar.

Finalmente también podría hacerse posible otra combinación para volver a cerrar el acceso o alargar la combinación de puertos (a 5 intentos de conexión por ejemplo). Tener en cuenta que, en el remoto caso de que un usuario consiguiera adivinar la combinación de puertos aún tendría que enfrentarse a una contraseña.

En linuca comentan más sobre como implementar el port knocking en un sistema linux.