En redes informáticas , el port knocking es un método para abrir externamente puertos en un firewall mediante la generación de un intento de conexión en un conjunto de puertos cerrados preespecificados. Una vez recibida una secuencia correcta de intentos de conexión, las reglas del firewall se modifican dinámicamente para permitir que el host que envió los intentos de conexión se conecte a través de puertos específicos. Existe una variante llamada autorización de paquete único (SPA), donde solo se necesita un único "knock", que consiste en un paquete cifrado . [ 1 ] [ 2 ] [ 3 ] [ 4 ]
El objetivo principal del port knocking es evitar que un atacante escanee un sistema en busca de servicios potencialmente vulnerables mediante un escaneo de puertos , ya que, a menos que el atacante envíe la secuencia de knocking correcta, los puertos protegidos aparecerán cerrados.
Descripción general
El port knocking se suele implementar configurando un demonio para que supervise el archivo de registro del cortafuegos en busca de intentos de conexión a ciertos puntos y, a continuación, modifique la configuración del cortafuegos en consecuencia. [ 5 ] También puede realizarse a nivel del kernel (utilizando un filtro de paquetes a nivel del kernel como iptables [ 6 ] ) o mediante un proceso de espacio de usuario que examine los paquetes a un nivel superior (utilizando interfaces de captura de paquetes como pcap ), lo que permite utilizar puertos TCP ya "abiertos" dentro de la secuencia knock.
El "golpe" de puerto es similar a un protocolo de enlace secreto y puede consistir en cualquier número de paquetes TCP , UDP o incluso, en ocasiones, ICMP y otros protocolos dirigidos a puertos numerados en la máquina de destino. La complejidad del golpe puede variar desde una simple lista ordenada (por ejemplo, puerto TCP 1000, puerto TCP 2000, puerto UDP 3000) hasta un hash cifrado complejo, dependiente del tiempo, basado en la dirección IP de origen y otros factores.
Un demonio de puerto en el cortafuegos escucha los paquetes en determinados puertos (ya sea a través del registro del cortafuegos o mediante la captura de paquetes). El usuario cliente llevaría una utilidad adicional, que podría ser tan simple como netcat o un programa ping modificado, o tan compleja como un generador de hashes completo, y la usaría antes de intentar conectarse al equipo de la forma habitual.
La mayoría de los sistemas de intercepción de puertos son sistemas con estado, de modo que si la primera parte de la intercepción se ha recibido correctamente, una segunda parte incorrecta impediría que el usuario remoto continuara y, de hecho, no le daría ninguna pista sobre en qué punto de la secuencia falló. Normalmente, la única indicación de fallo es que, al final de la secuencia de intercepción, el puerto que se esperaba que estuviera abierto no lo está. No se envían paquetes al usuario remoto en ningún momento.
Si bien esta técnica para asegurar el acceso a demonios de red remotos no ha sido ampliamente adoptada por la comunidad de seguridad, se ha utilizado activamente en muchos rootkits incluso antes del año 2000.
Beneficios
Para burlar la protección contra el port knocking se requieren ataques de fuerza bruta a gran escala para descubrir incluso secuencias simples. Un ataque anónimo de fuerza bruta contra una secuencia TCP de tres puertos (por ejemplo, puertos 1000, 2000, 3000) requeriría que un atacante probara cada combinación de tres puertos en el rango de 1 a 65535 y luego escaneara cada puerto entre ataques para descubrir cualquier cambio en el acceso a los puertos en el sistema objetivo. Dado que el port knocking es, por definición, con estado, el puerto solicitado no se abriría hasta que se recibiera la secuencia correcta de tres números de puerto en el orden correcto y sin recibir ningún otro paquete intermedio de la fuente. El escenario promedio requiere aproximadamente 141 billones (65535 3 / 2) de paquetes para determinar un número de tres puertos correcto. Esta técnica, en combinación con la limitación de intentos de knocking, secuencias más largas o complejas y hashes criptográficos, hace que los intentos exitosos de acceso a puertos sean extremadamente difíciles.
Una vez que se proporciona la secuencia de acceso por puerto correcta para abrir un puerto , las reglas del firewall generalmente solo lo abren a la dirección IP que proporcionó la secuencia correcta, lo que añade funcionalidad dinámica al comportamiento del firewall. En lugar de usar una lista blanca de IP estática preconfigurada en el firewall, un usuario autorizado ubicado en cualquier parte del mundo podría abrir cualquier puerto necesario sin la ayuda del administrador del servidor. El sistema también podría configurarse para permitir que el usuario autenticado cierre manualmente el puerto una vez finalizada la sesión o para que se cierre automáticamente mediante un mecanismo de tiempo de espera. Para establecer una nueva sesión, el usuario remoto tendría que volver a autenticarse utilizando la secuencia correcta.
El comportamiento con estado del port knocking permite que varios usuarios con distintas direcciones IP de origen se encuentren simultáneamente en diferentes niveles de autenticación, lo que permite que un usuario legítimo con la secuencia de knocking correcta atraviese el cortafuegos mientras este se encuentra en medio de un ataque de puertos desde múltiples direcciones IP (siempre que el ancho de banda del cortafuegos no se haya agotado por completo). Desde cualquier otra dirección IP atacante, los puertos del cortafuegos seguirán apareciendo como cerrados.
El uso de funciones hash criptográficas dentro de la secuencia de port knock protege contra la interceptación de paquetes entre las máquinas de origen y destino, lo que impide el descubrimiento de la secuencia de port knock o el uso de la información para crear ataques de repetición de tráfico que repitan secuencias de port knock anteriores.
El port knocking se utiliza como parte de una estrategia de defensa en profundidad. Incluso si el atacante lograra acceder al puerto, otros mecanismos de seguridad seguirían activos, junto con los mecanismos de autenticación de servicio asignados a los puertos abiertos.
La implementación de esta técnica es sencilla, utilizando como mínimo un script de shell en el servidor y un archivo por lotes de Windows o una utilidad de línea de comandos en el cliente. La sobrecarga tanto en el servidor como en el cliente en términos de tráfico, CPU y consumo de memoria es mínima. Los demonios de port knock no son complejos de programar y requieren poca auditoría.
Un sistema de detección de puertos implementado en servicios autenticados por contraseña, como SSH, evita el problema de los ataques de fuerza bruta contra contraseñas. En el caso de SSH, el demonio no se activa sin la detección de puertos correcta, y el ataque es filtrado por la pila TCP/IP en lugar de utilizar los recursos de autenticación de SSH. Para el atacante, el demonio es inaccesible hasta que se proporcione la detección de puertos correcta.
Consideraciones de seguridad
El port knocking es un complemento de sistema flexible y personalizable. Si el administrador decide vincular una secuencia de knocking a una actividad, como la ejecución de un script de shell, se pueden incorporar fácilmente al script otros cambios, como la implementación de reglas de firewall adicionales para abrir puertos para direcciones IP específicas. Se admiten fácilmente sesiones simultáneas.
Al utilizar estrategias como la longitud dinámica y el conjunto de longitudes, la probabilidad de piratear secuencias de detección puede reducirse a casi cero. [ 7 ]
Además de mitigar los ataques de fuerza bruta contra contraseñas y el inevitable aumento de registros asociados al demonio del proceso, el port knocking también protege contra las vulnerabilidades de protocolo. Si se descubriera una vulnerabilidad que pudiera comprometer un demonio en su configuración predeterminada, el uso de port knocking en el puerto de escucha reduce la posibilidad de compromiso hasta que se actualice el software o el proceso. Los usuarios autorizados seguirían recibiendo servicio una vez que proporcionen la secuencia de acceso correcta, mientras que los intentos de acceso aleatorio serían ignorados.
El port knocking debe considerarse únicamente como parte de una estrategia general de defensa de la red que proporciona protección contra ataques aleatorios y dirigidos, y no como una solución completa e independiente.
Los profesionales de la seguridad de redes han ignorado en gran medida el port knocking como solución en el pasado, ya que las primeras implementaciones se basaban únicamente en proporcionar las combinaciones de puertos correctas para lograr el acceso. Los sistemas modernos de port knocking incorporan funciones como hashes criptográficos seguros, listas negras , listas blancas y respuestas dinámicas a ataques para aumentar aún más la capacidad del sistema. El port knocking es un método eficaz para maximizar los recursos del servidor en redes con acceso a internet.
Una implementación adecuada del port knocking no reduce la seguridad general de un sistema. Es una medida eficaz que proporciona una capa adicional de seguridad con un consumo mínimo de recursos del servidor. En el peor de los casos, sistemas como el port knocking introducen nuevos problemas de seguridad debido a una mala implementación o revelan actitudes ambivalentes de la administración en situaciones como la compensación de riesgos .
Desventajas
El port knocking depende totalmente de la robustez del demonio de port knocking. Si el demonio falla, se denegará el acceso al puerto a todos los usuarios, lo que, desde el punto de vista de la usabilidad y la seguridad, representa un punto único de fallo indeseable . Las implementaciones modernas de port knocking mitigan este problema mediante un demonio de monitorización de procesos que reiniciará el proceso del demonio de port knocking si este falla o se bloquea.
Los sistemas que no utilizan funciones hash criptográficas son vulnerables a ataques de suplantación de direcciones IP . Estos ataques, una forma de denegación de servicio , utilizan la técnica de "port knocking" para bloquear direcciones IP conocidas (por ejemplo, estaciones de administración) enviando paquetes con la dirección IP falsificada a puertos aleatorios. Los servidores que utilizan direccionamiento estático son especialmente vulnerables a este tipo de denegaciones de servicio, ya que sus direcciones son fácilmente reconocibles.
El port knocking puede ser problemático en redes con alta latencia. Para acceder a su funcionalidad, el port knocking depende de que los paquetes lleguen en la secuencia correcta. TCP/IP, en cambio, está diseñado para funcionar ensamblando paquetes desordenados en un mensaje coherente. En estos casos, la única solución es que el cliente reenvíe periódicamente la secuencia correcta de paquetes hasta que el servidor la confirme.
El port knocking no puede utilizarse como único mecanismo de autenticación para un servidor. Desde una perspectiva de seguridad, el port knocking simple se basa en la seguridad por ocultación ; la publicación involuntaria de la secuencia knocking implica la vulneración de todos los dispositivos que la admiten. Además, el port knocking sin cifrar es vulnerable a la interceptación de paquetes. Un rastreo de red de longitud adecuada puede detectar la secuencia knocking correcta desde una única dirección IP y, por lo tanto, proporcionar un mecanismo para el acceso no autorizado a un servidor y, por extensión, a la red conectada. Una vez comprometido, los archivos de registro del dispositivo son una fuente de otras secuencias knocking válidas, revelando otro punto de fallo. Soluciones como tratar cada secuencia knocking como una contraseña de un solo uso frustran el objetivo de una administración simplificada. En la práctica, el port knocking debe combinarse con otras formas de autenticación que no sean vulnerables a ataques de repetición o de intermediario para que todo el sistema sea efectivo.
Referencias
- ↑ Michael Rash (2004) Combinando Port Knocking y Passive OS Fingerprinting con fwknop
- ↑ Michael Rash (2006). Autorización de paquete único con Fwknop .
- ↑ Michael Rash (2007). Protección de servidores SSH con autorización de paquete único .
- ↑ Moxie Marlinspike (2009). Uso de knockknock para autorización de paquete único .
- ↑ "PortKnocking - Wiki de ayuda de la comunidad" . help.ubuntu.com . Consultado el 8 de julio de 2023 .
- ↑ Justin Ellingwood (17 de enero de 2014). "Cómo configurar el port knocking usando solo iptables en un VPS Ubuntu" . digitalocean.com . Consultado el 24 de abril de 2016 .
- ↑ Shiraz, Muhammad; Boroumand, Laleh; Gani, Abdullah; Khan, Suleman (2019-10-29). "Un marco de autenticación de Port Knocking mejorado para computación en la nube móvil" . Malaysian Journal of Computer Science . 32 (4): 269– 283. doi : 10.22452/mjcs.vol32no4.2 . ISSN 0127-9084 .
Enlaces externos
- SilentKnock: Autenticación práctica y demostrablemente indetectable.
- "Análisis de la técnica de "port knocking" y la autorización de paquete único" Tesis de maestría de Sebastien Jeanquier
- "Implementación de un sistema de apertura de puertos en C". Tesis de grado de Matt Doyle.
- Lista de recursos sobre PK y SPA (artículos, implementaciones, presentaciones...)
- PortKnocking: un sistema para la autenticación sigilosa a través de puertos cerrados. (archivado)
- Revista Linux: Port Knocking (2003)
- Una crítica a Port Knocking (2004)
- fwknop: Una implementación que combina el port knocking y la identificación pasiva del sistema operativo.
- WebKnock: un cliente en línea de Port Knocking y Single Packet Authorization (SPA) basado en fwknop.
- Webknocking: Utilizar páginas web en lugar de puertos.
- Port knocking para ocultar una puerta trasera. Port knocking para ocultar el canal de comunicación para malware, ejemplo real.
- Técnicas para la ocultación y autenticación ligeras en redes IP (2002)
- Seguridad en Internet