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.
Fuente: Hispasec
