Hace ya unas semanas que hice una primera introducción a esta téctica, y en este post, pretendo ampliarla, empezando con algunos ejemplos, y viendo algunas cositas mas…

Para empezar, en el anterior post, comente una primera teoria, pero veamos un primer ejemplo ilustrativo:

Tomemos como ejemplo un demonio sshd escuchando en el puerto 22/TCP.
Elegimos como secuencia de barrido la sucesión 43, 6540 y 82. El puerto
22 se abrirá si, y solo si, un usuario inicializa conexiones TCP hacia
los puertos 43, 6540 y 82 en ese orden exacto. En caso contrario el
usuario recibirá como respuesta un RST/ACK cuando intenta comenzar una
conexión hacia el puerto 22.

Como podeis ver en el ejemplo ( que es tal cual el que recibi), hablan de un demonio (o servicio) que “escucha” un puerto en concreto, pero que si antes no se ha iniciado una conexión con los puertos adecuados, este puerto original permanece “ofuscado”, y el cliente recibira RST/ACK (para los que no conozcan, es un cierre de conexión), ya que segun el protocolo tcp/ip, se requiere, antes de iniciar ninguna transmisión de datos, la negociación de una conexión entre el cliente y servidor.

Bien, una vez que se ha realizado la conexión a los puertos adecuados, se podrá iniciar la conexión con el servicio ofrecido, pero que problemas existen?

Desde el punto de vista de la seguridad (algo que sabes, algo que eres, algo que tienes), esta técnica, se podría encuadrar en el primer grupo, algo que sabes, ya que sabes una cierta combinación para hacer algo. Pero un atacante con experiencia, que intentase acceder a un sistema que ha ocultado el acceso usando port knocking? si dicho atacante, fuese capaz de escuchar tráfico, bien en el lado cliente o bien en el lado servidor, sería capaz de encontrar la secuencia de conexión sin mucho problema, por eso insistire en que esta técnica de manera aislada no sirve de nada, pero en conjunto con otras técnicas de autentificación puede resultar muy últil.

Y para terminar con esta entrega, veremos un par de consideraciones de seguridad:

Si un atacante pensara resolver el problema por fuerza bruta, intentando conectarse a todo el rango de puertos, mediante combinaciones de tres en tres (suponiendo tres el numero de puertos de la combinación) la cantidad de paquetes necesarios sería tan elevada que sería muy facilmente detectable, pero si elevamos la cantidad de puertos, la complejidad del problema se dispara exponencialmente.

Otro problema viene dado por los ataques de denegación de servicio, ya que entre que un cliente (de los de verdad) se conecta a cada uno de los puertos, hay un lapso de tiempo que puede ser aprovechado por un atacante para que construyendo un paquete adecuado, tire por tierra el intento de conexión del cliente de verdad, y os dejo la pregunta en el aire, como haria esto?

Y antes de acabar, dos preguntitas para que reflexioneis sobre el tema:

¿Qué ocurre si un atacante consigue la secuencia de puertos (y suponemos que no hay más medidas de seguridad por detras)? ¿Cómo se puede resolver este problema? ¿Qué tienen que ver aquí los mutantes?

Desde el punto de vista de un sistema para detectar intentos de intrusión por scaneo de puertos, el port knocking le es indistinguible de un scaneo de puertos normal y corriente. ¿Que pasaría con los ficheros de logs del sistema de detección?

Reflexionar sobre ello y en la 3º y última entrega veremos aplicaciones de esta técnica y una conclusión final de este tema.

Enlaces: Port Knocking (I)

Anuncios