Port knocking para reforzar la seguridad de un servidor

El port knocking (golpeo de puertos) es un mecanismo que permite abrir puertos a través de una serie predefinida de intentos de conexión a puertos que se encuentran cerrados. Veremos cómo definir y utilizar esta característica.

El protocolo SSH suele utilizarse principalmente por administradores para ejecutar comandos de forma remota. Sin embargo, siempre existe el riesgo de exponer un tipo de servicio de estas características ya que suelen ser blanco de ataques. De esta manera, existe el port knocking como mecanismo adicional para la protección de este servicio o incluso otros.

¿Qué herramientas existen para implementar port knocking?

Existen diversas herramientas para port knocking como por ejemplo fwknop, que utiliza autorización de paquetes única (single packet authorization) y permite implementar esta metodología de forma segura. Sin embargo, indagaremos sobre knockd, la cual es sumamente liviana aunque un poco más primitiva.

Una vez instalado knockd es posible se deben configurar dos ficheros. El primero generalmente se encuentra en el directorio “/etc/default/knockd”. A continuación se adjunta una captura del fichero:

Fichero kockd

En este caso se debe cambiar el “0” por un “1” para habilitar su funcionamiento y también se debe especificar la interfaz de red que se utilizará en el parámetro “i”.

El siguiente fichero de configuración se encuentra en “/etc/knockd.conf” y contiene todas las opciones referidas al comportamiento del software. A continuación puede visualizarse una captura de este fichero:

Fichero de configuración

Es importante aclarar que en este caso si se produce un intento de conexión en los puertos 40000, 50000 y 60000 en ese orden, se habilitará la regla en el firewall que permitirá las conexiones entrantes en el servicio SSH. Lo mismo ocurre si se realiza los intentos de conexión en orden inverso, cerrando en ese caso la posibilidad de conexión al servicio. Además, existe el comando knock que cumple la función de cliente y permite realizar los intentos de conexiones. Para ejecutarlo es suficiente con especificar “knock –i [interfaz] [puertos]”. A continuación se puede observar una captura:

Knock cliente

Si ahora se observa el log del demonio knockd se puede ver como a partir de la secuencia correcta de puertos es posible generar la regla en el firewall. Lo mismo ocurre con la secuencia inversa. En la siguiente imagen puede visualizarse este comportamiento:

Registo de knockd

Port knocking es muy útil a la hora de proteger servicios que necesariamente deben estar expuestos a Internet. Solo las personas que tengan autorización, sabrán sobre que secuencia de puertos se deben realizar intentos de conexión para finalmente habilitar el firewall. Asimismo, esta no es la única variante en cuanto al port knocking, sino que existen otras alternativas a la hora de programar el comportamiento de este software. Esta es una de las diversas variantes para evitar que el sistema sea comprometido.

Fernando Catoira
Analista de Seguridad

Autor , ESET

Síguenos