Aprendiendo a escanear puertos UDP
Durante las auditorías de seguridad, se suelen realizar escaneos sobre los puertos TCP en búsqueda de aquellos que están abiertos para explotar algún tipo de vulnerabilidad. Sin embargo, es una mala práctica común dejar fuera de consideración del análisis los puertos UDP durante los penetration test, siendo que en muchos casos los mismos aportan información relevante e incluso pueden explotarse en ciertas situaciones.
¿Qué es un puerto UDP?
User Datagram Protocol o UDP se basa en el intercambio de datagramas. A diferencia de los paquetes TCP no posee confirmación de recepción o de entrega.
Algunos de los protocolos más conocidos que utilizan paquetes UDP son DNS, DHCP, entre otras alternativas.
Consideraciones de puertos UDP sobre un Penetration Test
Nmap posee la capacidad de analizar puertos UDP de forma remota. Para llevar a cabo esta tarea, se debe especificar el parámetro –sU. Es importante aclarar de qué forma trabaja Nmap con respecto a este tipo de puertos.
Los estados posibles que Nmap vincula a los puertos UDP son:
- open: Nmap indica este estado cuando existe una respuesta desde el sistema objetivo. No es una situación usual, ya que por lo general el target no responde.
- open/filtered: Esta ambigüedad se debe a que en ciertos casos no es posible validar el estado del puerto. Tal como se indicó anteriormente, debido a que este protocolo no posee alerta de recepción o envío, puede darse el caso en que un puerto se encuentre abierto pero no responda a una determinada cadena de entrada. Nmap envía el paquete en blanco, y en ciertos casos, el servicio detrás del puerto UDP de interés puede tomar los datos de entrada como inválidos y no responder. En el caso de que el puerto se encuentre filtrado por un firewall o un IDS/IPS, el comportamiento puede ser similar. De esta forma, Nmap responde con este tipo de respuesta que puede resultar ambigua.
- closed: Nmap indica este estado cuando existe un error del tipo “ICMP port unreachable error”. Esto es un error de tipo 3. En este caso es posible afirmar que el puerto se encuentra cerrado.
- filtered: Este estado corresponde a algún tipo de error diferente al anterior.
Es importante comprender la diferencia existente entre cada uno de ellos. Quizá el estado que requiere mayor atención es open/filtered. Tal como se explicó anteriormente, esto se debe a que Nmap no es capaz de determinar si el puerto se encuentra abierto o filtrado debido a la ausencia de respuesta.
Definiendo un puerto UDP open/filtered
En caso de querer obtener más información sobre un puerto que ha sido catalogado como open/filtered, existe una alternativa. Debido a que por defecto Nmap envía los paquetes UDP en blanco para determinar si el puerto se encuentra abierto, es posible obtener, en algunos casos, más información forzando la búsqueda de la versión del servicio.
En la siguiente imagen puede observarse la respuesta de Nmap a partir de los 1000 puertos más comunes (parámetro –top-ports).
Se realizó nuevamente el escaneo, pero esta vez especificando el parámetro –sUV para buscar la versión del servicio a la escucha del puerto específico. De esta manera, Nmap realiza pruebas específicas sobre aquellos puertos que fueron identificados como “open/filtered” u “open”.
Esta técnica no siempre es determinante pero puede ayudar a obtener mejores resultados. Sin embargo, en este caso, vemos como a partir de la del parámetro -sUV pudo determinar que 944 puertos estaban cerrados contra 991 solo con el parámetro -sU. Esto mismo podría haber ocurrido con un puerto open/filtered donde, luego del análisis más profundo se pueda determinar que en realidad estaba abierto. De todas formas, es importante resaltar que la penalidad de este tipo de análisis se deriva en el tiempo, donde el segundo ejemplo demoró casi el doble del tiempo con respecto al primero.