WIRESHARK- Detección de escaneos de Nmap

Wireshark es una herramienta de análisis de paquetes de red que puede ser de utilidad para identificar los patrones de un posible escaneo realizado con la herramienta NMAP.

En los escaneos de reconocimiento, Nmap envía una serie de paquetes predeterminados para conocer el estado de los servicios de un sistema. Son las características de estos paquetes lo que nos permitirán saber si se ha realizado un escaneo de este tipo.

Características esenciales para identificar escaneos

Existen dos pistas que podrían ayudarnos a descubrir un escaneo realizado con Nmap en los paquetes de red:

1. La estructura de los paquetes intercambiados entre sistemas.

2. El tamaño de la Ventana TCP en los mensajes.

A continuación, revisaremos estas características en diferentes tipos de escaneos con Nmap (conexión TCP –sT, escaneo SYN –sS y escaneo UDP –sU).

Identificación de escaneo con conexión TCP

De manera predeterminada, cuando se utiliza Nmap sin privilegios se llevará a cabo un escaneo con conexión TCP (-sT). En este tipo de escaneo se envían una serie de paquetes para realizar el saludo de tres pasos (three way handshake).

¿Qué paquetes envía Nmap?

En esta modalidad Nmap envía intentos de conexión SYN a un sistema en diferentes puertos. Si el sistema objetivo se encuentra configurado para responder a esta conexión responderá con SYN/ACK. Finalmente, Nmap enviará como respuesta un ACK, completando así el saludo de tres pasos:

SYN->

<–SYN/ACK

->ACK

Además, Nmap enviará inmediatamente después de completada la sincronización un paquete RST que finaliza el enlace. Por lo tanto, la estructura de un escaneo con conexión TCP en Nmap tiene los siguientes paquetes:

SYN ->

      <- SYN/ACK

ACK ->

RST ->

Así que este patrón de paquetes es uno de los primeros indicios a los que debemos prestar atención.

La Ventana TCP

Por otro lado, el tamaño de la Ventana TCP en el primer mensaje SYN de intento de conexión puede revelar información importante para identificar un escaneo con Nmap.

¿Qué es la ventana y para qué sirve?

En el saludo de tres pasos se intercambian una serie de paquetes. Dentro de estos paquetes existen opciones que permiten realizar especificaciones sobre la sincronización y comunicación entre sistemas. Una de estas opciones es la Ventana TCP.

Básicamente, la Ventana TCP es un anuncio en el paquete SYN (que es el que intenta iniciar la sincronización) sobre la cantidad de datos que un sistema puede recibir como respuesta.

Así que, en este escenario, Nmap está anunciando cuántos datos puede recibir y manejar en esta conexión. Por lo tanto, el servidor (o sistema objetivo en este caso) puede enviar la cantidad de datos señalada por Nmap sin necesidad de esperar una respuesta. Es importante notar que el tamaño de la ventana TCP es dinámica, lo que significa que, si un cliente se encuentra en una conversación en la que recibe muchos paquetes, su capacidad para recibir irá disminuyendo y puede llegar incluso a no poder recibir más datos hasta que pueda procesar y enviar la confirmación de recibido al otro sistema, para poco a poco, ir recuperando su capacidad.

Cómo utilizar la ventana para determinar un escaneo con conexión TCP de Nmap

La información de la Ventana TCP es relevante porque, de manera predeterminada, Nmap presenta una ventana mayor a 1024 bytes en el primer mensaje SYN que envía para iniciar el saludo de tres pasos y establecer sincronización con el servidor o sistema objetivo.

Así que, si se encuentra un paquete SYN con ventana mayor a 1024 y al analizar la estructura de la conversación observamos los paquetes típicos de la estructura de Nmap, podemos determinar entonces que se trata de un posible escaneo de reconocimiento.

Identificar escaneo TCP de Nmap con filtros en Wireshark

Aquí es donde entra en juego Wireshark pues nos permitiría identificar este tipo de escaneo mediante el siguiente filtro:

Revisemos las partes del filtro:

En la primera sección tcp.flags==2, se utilizan los valores de las banderas (flags) que se presentan en la cabecera de TCP. Aquí se presentan los valores:

URGACKPUSHRSTSYNFIN
32168421
Valores de las banderas de la cabecera TCP

Utilizando el valor 2 estamos señalando que solo queremos obtener aquellos paquetes donde esté activada la bandera para SYN, sin considerar otros valores de otras banderas.

Nota: Los valores permiten la suma entre sí para obtener diferentes resultados, si se quisiera obtener otros valores en el filtro, por ejemplo paquetes SYN/ACK podríamos utilizar tcp.flags==18. El número surge de la suma entre el valor de SYN y de ACK respectivamente.

La segunda parte del filtro: tcp.windows_size > 1024 filtra los paquetes para encontrar aquellos en los que se anuncia una ventana mayor a 1024 bytes. Como se ha mencionado, la Ventana TCP juega un papel importante, así que filtramos por Ventanas TCP mayores a 1024 bytes.

Al utilizar el filtro completo obtenemos la siguiente información:

La imagen presenta los resultados del filtro tcp.flags==2 and tcp.windows_size>1024

NOTA: De manera alternativa también se pudiera utilizar (tcp.flag.syn==1 and tcp.flags.ack==0) and (tcp.windows_size>1024)

Resultados obtenidos con el filtro

Como puede observarse, al seleccionar este filtro se presentan todos los paquetes que cumplen con la condición y se puede notar los intentos de conexión a diferentes puertos. Esto es un posible indicador de que se ha realizado un escaneo sobre el sistema.

Por otro lado, si seleccionamos una conversación para su análisis, podremos observar el patrón señalado con la conexión TCP realizada completamente y el posterior envío de RST, ACK por parte de Nmap para finalizarla.

Por lo tanto, teniendo en cuenta la cantidad de paquetes, la estructura y el tamaño de la ventana recibida, es posible determinar que se ha realizado un escaneo de reconocimiento con Nmap.

Identificación de escaneo Nmap Syn Scan (-sS)

Es posible que Nmap no realice la conexión completa, sino que utilice otros paquetes para determinar si un puerto se encuentra abierto. Tal es el caso del escaneo SYN (-sS). En esta modalidad, NO se completa el saludo de tres pasos, sino que Nmap deja sin responder el último paso y envía un paquete RST:

SYN->

           <- SYN, ACK

RST->

La siguiente imagen muestra la estructura del escaneo en Wireshark.

El escaneo SYN (-sS) es el tipo de escaneo más popular de Nmap pues se piensa que con él se evita el riesgo del reconocimiento. Esto porque al no completar el saludo de tres pasos es posible que en algunos sistemas no quede registro del intento de conexión. Sin embargo, esto dependerá del sistema objetivo y la forma en la que se encuentra reforzado.

NOTA: Para realizar este tipo de escaneo se necesita contar con privilegios de superusuario y utilizar el comando básico (sudo nmap ), o bien, señalar el escaneo SYN explícitamente por medio del comando (sudo nmap –sS)

¿Cómo se detecta en Wireshark?

A pesar de que Nmap utilice el escaneo SYN para ser más “silencioso”. Aún es posible su identificación. Para detectar este tipo de escaneo en una red se puede utilizar Wireshark con el siguiente filtro:

tcp.flags==2 and tcp.windows_size<=1024

Nuevamente, podemos observar que la ventana de TCP juega un rol importante en la detección de los paquetes de Nmap. En este caso, estaremos filtramos por paquetes SYN con una ventana menor o igual a 1024 que es son las características del tipo de paquetes que Nmap envía en el escaneo SYN.

Los resultados del filtro permitirán la identificación de estos intentos de conexión. Sin embargo, resulta necesario una inspección para determinar si el comportamiento es el esperado en ciertos paquetes:

Cuando el escaneo SYN se encuentra con un puerto cerrado, el objetivo responderá con RST/ACK:

Cuando el escaneo SYN se encuentra con un puerto abierto, el objetivo responderá con SYN/ACK y Nmap enviará un paquete RST antes de completar el saludo de tres pasos:

Por otro lado, también será necesario observar el número de puertos que se intentaron acceder para ser evaluados e identificar si se presenta la estructura de paquetes presentada para poder determinar si estuvieron involucrados en el escaneo.

ESCANEO UDP de Nmap (-sU)

Finalmente, también es posible identificar los escaneos de Nmap que utilizan el protocolo UDP. UDP no es un protocolo que establezca una sesión, es decir, no envía los paquetes para el saludo de tres pasos que se utilizan en el protocolo TCP, pero, aun así, es posible detectar si se ha realizado un escaneo de este tipo analizando los paquetes encontrados en la red.

Nota: Para utilizar Nmap para la identificación de puertos abiertos que utilizan el protocolo UDP se utiliza el comando: sudo nmap –sU. Se deberá recordar que para este tipo de escaneo serán necesarios los privilegios de superusuario.

Cómo funciona el escaneo UDP de Nmap

En un escaneo UDP (-sU) Nmap enviará una serie de paquetes UDP a todos los puertos que utilicen este protocolo. De hecho, para algunos de los puertos más populares de este protocolo, Nmap es capaz de generar paquetes con carga útil (payload) específicos para el tipo de servicio.

Posteriormente, si Nmap obtiene como respuesta a los paquetes enviados un ICMP code 3 (Port unreachable) se podrá determinar que el puerto está cerrado.

Por otro lado, si Nmap llega a recibir como respuesta códigos ICMP 0, 1, 2, 9, 10, o 13, marcará el puerto como filtrado. Filtrado en este contexto puede sugerir la presencia de un Firewall en el camino.

Finalmente, si Nmap recibe una respuesta a los paquetes específicos (por ejemplo, una respuesta de aplicación o servicio) o NO recibe ninguna respuesta, podrá saber que el puerto se encuentra abierto.

¿Cómo utilizar Wireshark para la detección de un escaneo UDP?

En la captura del tráfico de red, será preciso observar todos aquellos paquetes ICMP code 3 (Port unreachable) que se generaron desde los sistemas a defender para, posteriormente, realizar su inspección.  Dentro de estos paquetes de respuesta se encapsula los paquetes originales (aquellos generados por Nmap), así que esta información es valiosa.  

Por lo tanto, para encontrar estos mensajes de respuesta podemos utilizar en Wireshark el filtro:

icmp.type==3 and icmp.code==3

De esta manera, Wireshark filtrará los paquetes y mostrará solo aquellos que presentan una respuesta ICMP code 3 (Port unreachable).

Veamos un ejemplo:

Desde Nmap se ha utilizado el comando –sU para enviar pruebas a los puertos 161 y 1900. Ambos se presentan cerrados tal y como se obtiene en el reporte siguiente:

Ahora observaremos los paquetes con Wireshark:

En la imagen se pueden observar las respuestas que el sistema con IP 10.38.1.112, que es el sistema objetivo, envía a la máquina que ejecutó Nmap. Podemos utilizar el filtro de Wireshark mencionado para limitar los paquetes y que solo se muestren las respuestas:

Cada una de estas respuestas ICMP Destination unreachable (Port unreachable) contiene en su carga útil (payload) el mensaje original al que están respondiendo. En este caso responden a 10.38.1.115. 

En la imagen se muestra cómo un paquete de respuesta encapsula el paquete de solicitud. En este caso, dentro del protocolo ICMP. Por lo tanto, se deberá realizar un análisis de los tipos de paquetes encapsulados en las respuestas, así como los sistemas a los que se responde. Si bien esto representa una tarea adicional, Wireshark nos da un buen inicio y nos permite la captura de información relevante para conocer la fuente desde la que se originan los mensajes y que pudieran revelar el escaneo de Nmap.

Conclusiones

Wireshark es una herramienta imprescindible para el análisis del tráfico de red que, como hemos observado, nos permitirá la identificación de posibles anomalías en las interacciones realizadas en nuestros sistemas. Sin embargo, será importante recordar que, aunque los filtros de Wireshark nos ofrecen un punto de partida para la detección, será recomendable la inspección manual detallada de los paquetes para estar seguro de las acciones que se llevaron a cabo en la red.