¿Port Knocking… ofuscación o capa de seguridad?

El objeto de este artículo es recordar el concepto de «Port Knocking» y
sus implicaciones de seguridad para en un posterior artículo reflexionar
sobre «Single Packet Authorization» (SPA). «Port Knocking» no es un
ingenio nuevo, lleva con nosotros desde 2003, pero es un tema recurrente
en listas de correo y discusiones sobre seguridad.

¿Qué es «Port Knocking»?

Todos hemos visto películas en las que alguien golpea cierta secuencia
en la puerta de una taberna y si la secuencia era correcta el tabernero
abre una rendija para solicitar una clave verbal. Si la secuencia de
llamada no era correcta, ninguna medida se toma y el interesado cree que
la taberna se halla cerrada. El concepto de «Port Knocking» es
exactamente análogo.

En informática, este concepto consiste en enviar paquetes a ciertos
puertos en un orden específico con el fin de abrir un puerto en
concreto. Este último puerto se halla cerrado por un cortafuegos siempre
y cuando no se realice el barrido de puertos siguiendo la secuencia
particular. De esta forma, si un atacante efectúa un escaneo del
sistema, el puerto aparecerá cerrado aun estando el servicio asociado a
él en funcionamiento, el cortafuegos hace un simple DROP si no se ha
efectuado la secuencia de barrido previa.

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.

Si la secuencia correcta de inicializaciones ha sido efectuada, el
puerto 22 se abrirá durante un lapso de tiempo determinado y únicamente
para la IP que completó la secuencia previa. Una vez el puerto 22 se
halle abierto, se pueden llevar a cabo medidas adicionales de
autenticación.

Polémica

Muchos son los que defienden que «Port Knocking» no es una capa de
seguridad sino una medida de ofuscación («security by obscurity»). Lo
cierto es que hay argumentos a favor y en contra de ambas afirmaciones.

Acudiendo a las definiciones clásicas de los tipos de autenticación
(algo que sabes, algo que eres y algo que tienes), este mecanismo se
encuadraría en el primer conjunto. Ahora bien, si un atacante conociera
la existencia de esta medida y fuera capaz de escuchar el tráfico (en
lado cliente o servidor), esta medida de seguridad sería tan débil como
las contraseñas que viajan en claro.

Por tanto, como muchas otras técnicas, se trata de una línea de defensa
que de manera aislada puede resultar muy débil, pero que junto con
medidas adicionales puede proporcionar un nivel de robustez aceptable.

Consideraciones de seguridad

* Un atacante siempre podría intentar un ataque por fuerza bruta con el
fin de descubrir la secuencia de puertos correcta, no obstante este
ataque sería fácilmente detectado teniendo en cuenta su naturaleza
ruidosa. Para una secuencia de 3 puertos, si el ataque recorre el rango
de puertos 1 a 65535, esto implica que el ataque sería del orden de
655.353 tentativas, teniendo una esperanza de la mitad de este valor.
Por tanto, como media, serían necesarios unos 140 billones de paquetes
hasta conseguir la apertura del puerto deseado. Obviamente, esto se
puede complicar mucho más incrementando el número de puertos de la
secuencia.

* Si un atacante ha conseguido la secuencia de puertos, nada le impide
hacer un «replay» de la secuencia capturada contra el servidor para así
abrir el puerto. Sería por tanto interesante que la secuencia mutara con
el tiempo, que se hiciera algún tipo de Hash con información adicional
(temporal, etc.) o alguna otra medida para impedir los ataques por
«replay». No obstante ello implicaría sincronización cliente-servidor
y/o involucrar otros campos de los paquetes que no fueran tan sólo los
16bits del puerto destino en la cabecera TCP. Como consecuencia de estas
modificaciones, la medida se hace difícilmente escalable en situaciones
donde hay un gran número de clientes.

* Mucho más sencillo es hacer una denegación de servicio. Debido al
lapso existente entre cada inicialización de conexión en la secuencia,
un atacante puede simular y enviar paquetes para interrumpir la
secuencia que está construyendo un usuario legítimo. Así, nada impide a
un atacante el emplear herramientas como hping para forjar paquetes con
la dirección IP de un usuario legítimo y enviar un flujo continuo hacia
puertos aleatorios de la máquina servidor para que dicho usuario
legítimo jamás sea capaz de completar una secuencia válida.

* Por último en esta lista no exhaustiva de reflexiones, para un
observador del tráfico de red, un «Port Knocking» es indistinguible de
un escaneo de puertos. Muchos IDS detectan los escaneos de puertos y
algunos no tienen forma de diferenciar lo que es un «Port Knocking» de
lo que es un escaneo. Si el umbral de paquetes para alertar de un
escaneo de puertos es lo suficientemente bajo, el «port knocking» podría
introducir ruido no deseado en los logs del IDS.

Aplicaciones

* Imaginemos que deseamos correr un servidor SSH para compartir archivos
con nuestros amigos. No deseamos que gusanos, automatismos y usuarios
maliciosos encuentren el puerto del servidor SSH abierto en sus escaneos
de reconocimiento para posteriormente lanzar un ataque por fuerza bruta
que consume recursos y podría dar lugar a una intrusión. En este caso
podríamos emplear «port knocking» para evitar «automatismos tontos».
Obviamente, tras el «Port Knocking» deberíamos tener como mínimo una
autenticación por usuario/contraseña, y además, deseablemente,
autenticación basada en algún algoritmo de clave pública.

* Una aplicación más oscura, y probablemente más popular, del «Port
Knocking» es como método de ocultación de puertas traseras (ejemplo:
cd00r.c). Muchos atacantes, tras haber instalado una puerta trasera en
una víctima, la camuflan mediante «Port Knocking», de esta forma
cualquiera que intente detectar anomalías basadas en la apertura de
nuevos puertos difícilmente detectará la intrusión. Así, los servicios
basados en herramientas como Nesus para detectar alteraciones en ciertas
redes presentan una gran punto débil ante dichos ingenios y los
profesionales de la seguridad no deberían tomar sus resultados como
verdades absolutas.

Conclusión

«Port knocking» se basa en la comunicación de información en las
cabeceras de los paquetes, lo cual limita severamente la cantidad de
información que puede ser transmitida, y por tanto, su fortaleza como
capa de seguridad. En una futura reflexión analizaremos otras técnicas
como «Single Packet Authorization» (SPA), que presenta grandes ventajas
sobre el mecanismo aquí estudiado.

Opina sobre esta noticia:
http://www.hispasec.com/unaaldia/3382/comentar

Más información:

An Analysis of Port Knocking and Single Packet Authorization
Sebastien Jeanquier
http://www.securethoughts.net/spa/

Port Knocking
http://www.portknocking.org/

Port Knocking with IPTables
http://www.neep.co.uk/index.php?tab=Projects&menu=Port%20Knocking

Emiliano Martínez Contreras
[email protected]