it-swarm-es.com

Port Knocking es una buena idea?

Normalmente, para un servidor, me gusta bloquear SSH y otros servicios no públicos a los que solo pueden acceder ciertas direcciones IP. Sin embargo, esto no siempre es práctico si la empresa no tiene direcciones IP estáticas o si los desarrolladores externos necesitan acceso.

Escuché sobre Port Knocking hace un tiempo y finalmente tuve la oportunidad de considerarlo como una solución al problema anterior. Como resultado de esto, tengo muchas preguntas con las que espero que la gente pueda ayudarme.

  • ¿Alguien lo ha implementado dentro de su empresa/organización y puede ofrecer algún consejo?
  • ¿Cuál es el mejor Daemon para ejecutar bajo Linux?
  • ¿Cuáles son los mejores clientes para Linux, Windows y OSX?
  • ¿Cuál es la longitud recomendada para la secuencia de golpe y es mejor usar TCP, UDP o ambos?
  • ¿Cuáles son las desventajas y los problemas asociados con su uso?
  • ¿Es solo seguridad a través de la oscuridad?
  • ¿Hay alguna alternativa al enfoque de golpe de puerto?
41
Mark Davidson

Si bien aún no lo he implementado, conozco a muchas personas que lo han implementado. Como resultado, cada uno de ellos ha notado una reducción significativa en la cantidad de ancho de banda consumida por cosas como los ataques de fuerza bruta SSH.

Sin embargo, eso no quiere decir que no haya inconvenientes. AFAIK, no hay implementaciones de eliminación de puertos basadas en el núcleo disponibles, lo que para mí sería la clave real para la adopción. Los daemons de interrupción de puertos se basan en la lectura de entradas de archivos de registro fallidas (y filtradas/prohibidas) de un sistema de firewall. Eso está muy bien, pero ¿qué sucede si el sistema de archivos se llena? ¿Qué sucede cuando el demonio es asesinado debido a un proceso desbocado que se come el sistema RAM e intercambio? ¿Qué sucede si algo más de lo que cualquiera de esas dos cosas depende simplemente de arriba y deja de funcionar? probablemente terminará con un servidor al que tendrá que acceder físicamente. Eso podría terminar siendo más costoso de lo razonable, especialmente si está a más de unas pocas decenas de millas del servidor y no tiene a nadie a quien pueda llamar llegar a toda prisa.

Una cosa que puedo decir es que no es "seguridad a través de la oscuridad". La anulación de puertos es una forma de autenticación y, como cualquier sistema de autenticación, se puede hacer que sea tan simple o complejo como se desee. Se puede hacer algo tan simple como "tocar el puerto 10,000+ realPortNumber", lo que equivaldría a una interrupción trivial, o el golpe del puerto podría usarse para transmitir alguna forma de autenticación real (por ejemplo, 1 bloque de datos codificados AES dado un clave derivada por algún otro método). Sin embargo, no sería factible utilizar el control de puertos para transmitir grandes cantidades de datos, ya que tomaría mucho más tiempo que simplemente enviar un solo paquete, y si el paquete ha terminado TCP que al menos se puede saber si se recibió con éxito o si encontró algún tipo de error.

Sin embargo, una pregunta interesante que esto plantea es cómo administrar los archivos de registro: las implementaciones de usuario requieren principalmente los archivos de registro para determinar si se ha enviado o no un golpe, y ¿qué sucede si esos registros se filtran? Los datos de autenticación se conocen, y eso obviamente no es algo muy bueno.

No puedo decirte si usar o no el puerto de golpe en tu configuración. Todavía no lo estoy, y no estoy 100% seguro de que alguna vez lo estaré. Para mí tiene más sentido usar sistemas de autenticación sólidos que se basan en una criptografía sólida (como una infraestructura PKI) de lo que lo hace para evitar la interrupción de puertos. Además, agregar un solo punto de falla para acceder a la infraestructura crítica, de todos modos, me parece una mala idea, y mucho más difícil de respaldar adecuadamente con cualquier tipo de garantía. Una vez más, sin embargo, eso se basa en la noción de que el software de eliminación de puertos no está integrado con el firewall en el nivel del núcleo del sistema operativo; si eso cambia, también puedo cambiar cómo me siento al usarlo.

34
Michael Trausch

La eliminación de puertos no es solo otra contraseña de texto sin formato, al menos cuando se usa para proteger servicios que escuchan en un puerto TCP como SSH. La eliminación de puertos implica que el descubrimiento de servicios con nmap ya no es posible debido a uso de una política de cortafuegos predeterminada. SSHD también ha tenido vulnerabilidades explotables de forma remota, y estas no tienen nada que ver con contraseñas débiles. No quiero que nadie pueda activar nmap y ver que escucho SSHD.

Además, hay una variante más fuerte de la eliminación de puertos llamada "Autorización de paquete único", pero también es un esquema de autenticación completamente pasivo, por lo que conserva los beneficios de la eliminación de puertos pero resuelve sus limitaciones (los ataques de repetición son fáciles, los ataques DoS son fáciles, etc. .).

13
Michael Rash

Es un hecho fácilmente verificado que todos los servicios de Internet tienen vulnerabilidades de seguridad con relativa frecuencia: servicios como SSH, OpenSSL, etc. Los ataques a estos se intentan en masa en Internet, apuntando a cualquier sistema que tenga puertos abiertos adecuados.

El bloqueo de puertos, en mi opinión, tiene el propósito de mantener alejados a estos atacantes aleatorios de Internet, que buscan vulnerabilidades genéricas. Es decir, no se supone que mantenga alejado a un atacante dedicado, ni que forme parte de la seguridad real de los servicios. El beneficio de la eliminación de puertos debería ser que, en realidad, sería lo suficientemente simple como para que no sea probable que haya errores explotables en él.

Este uso significa que el golpe de puerto puede ser tan flojo como sea posible, siempre que mantenga alejado al mayoría de los atacantes. Es mayo es solo seguridad por oscuridad, pero una mejor manera es tenerlo como una forma débil de autenticación de "contraseña".

Por lo tanto, el "mejor" servicio de eliminación de puertos sería aquel en el que es inconcebible imaginar ataques, pero que sea lo suficientemente trivial para que cualquier usuario legítimo lo use desde cualquier tipo de máquina cliente.

9
Nakedible

La anulación de puertos no es seguridad a través de la oscuridad. Es defensa en profundidad. Es como estacionar su auto al lado de un auto más robable: no hará mucho para evitar un ataque dirigido, pero podría enviar a los oportunistas mirando en la otra dirección.

8
jl6

Según mis comentarios en otra parte, aunque hay muchas implementaciones que usan todo tipo de trucos especiales para responder al golpe, se puede implementar sando puramente iptables en un sistema Linux. es decir, esta es efectivamente una implementación de eliminación de puertos basada en el núcleo

Dado que el golpe es visible en la red, el uso de secuencias de más de 3 golpes da poco beneficio. Recomiendo usar TCP - aunque será más lento, tiene mejores garantías de que el golpe fue entregado.

Sin embargo, aunque depende de programas de espacio de usuario, mi preferencia es fail2ban ya que no requiere pasos/software adicionales para conectarse, se ejecuta de manera confiable y, si alguna vez falla, no me impediría acceder a los servidores .

Me sorprende que haya tan poca adopción de ident encriptado, aunque RFC1413 simplemente menciona este posible enfoque utilizando el protocolo en lugar de definir cómo debería funcionar.

Pero, por supuesto, debe asegurarse de haber restringido el acceso tanto como sea posible independientemente de esto (es decir, sin inicio de sesión raíz, restringir el acceso al grupo designado, si es práctico, requerir pares de claves). SSH está diseñado para ser seguro, e históricamente ha habido relativamente pocas vulnerabilidades en las implementaciones de transmisión principal. La razón por la cual los ataques son exitosos generalmente se debe a una combinación de nombres de usuario adivinables, contraseñas simples y ataques de fuerza bruta o ingeniería social. Tenga en cuenta que no estoy recomendando que aplique una validación de frase de contraseña compleja (que no sea la longitud mínima) ni que requiera que los usuarios sigan cambiando sus contraseñas, hay mejores enfoques (por ejemplo, dos factores), pero desafortunadamente muy pocas implementaciones.

7
symcbean

No he implementado el bloqueo de puertos en varios años, sin embargo, sospecho que en principio no ha cambiado significativamente. Otros comentarios contienen muchos puntos válidos y no los repetiré simplemente aquí.

Un aspecto de la anulación de puertos que siempre implementé de manera habitual es basar la secuencia de anulación en un valor pseudoaleatorio pero repetible, como la fecha y hora actuales. Esta estrategia no elimina por completo el peligro de un ataque de repetición, sin embargo, limita la exposición de una secuencia de golpe dada. Obviamente, para que esto sea exitoso, en mi ejemplo, se necesitaría una fuente sincronizada para mantener la coherencia.

4
Tok

Port Knocking es solo otra contraseña de texto sin formato. Puede ser forzado, descubierto, capturado y reproducido como cualquier otra contraseña de texto sin formato. ¿Por qué reinventar los inicios de sesión de telnet?

Tienes que confiar en algo. Así que supongamos que confía en la pila de red de su sistema operativo y confía en sshd cuando se ejecuta con compresión retrasada, separación de privilegios y solo permite alguna forma razonable de autenticación de dos factores (por ejemplo, basada en claves).

Puede usar servicios "simples" como sshd que invoca authpf para proteger sus servicios más complejos y vulnerables.

authpf le permite modificar sus conjuntos de reglas de firewall en función de quién se autentica con éxito en sshd, por lo que solo las direcciones IP que logran iniciar sesión en sus puertas de enlace ssh pueden conectarse a su granja de compilación/cómputo/base de datos.

2
Alex Holst