Escaneo avanzado con nmap parte I

Bienvenidos a un nuevo post. Hoy vamos a jugar con una de las herramientas por excelencia del mundo del pentesting y hacking ético: nmap

En este artículo, no me voy a centrar en qué es nmap ni en su uso más básico, sino que vamos a plantear diferentes casos de uso reales, para ver cómo se comporta cuando estamos en un entorno donde hay soluciones de seguridad como un IDS/IPS o firewall.

El objetivo de este post, será el analizar algunas de las técnicas que ofrece nmap para evadir soluciones de seguridad como un IDS.

Para este artículo, se ha montado un laboratorio formado por:

  • Una máquina Kali Linux como máquina atacante.
  • Una máquina vulnerable de vulnhub que actúa como máquina víctima.
  • SNORT como IDS con un ruleset personalizado.

¿Qué es un IDS?

Un IDS (Intrusion Detection System) es una solución de seguridad que monitoriza el tráfico de red en busca de actividad sospechosa o maliciosa. Cuando detecta un patrón que coincide con un comportamiento conocido como malicioso (un escaneo de puertos, un ataque de fuerza bruta contra un SSH, patrones de SQLI) genera una alerta para avisar al equipo de seguridad.

El IDS se limita a generar la alerta que se muestra en los Dashboard del equipo de seguridad mientras que un IPS además de generar la alerta puede actuar, por ejemplo bloqueando el tráfico malicioso.

En este laboratorio usamos Snort en modo IDS, con un conjunto de reglas y firmas que definen qué tráfico se considera sospechoso. Cuando el tráfico coincide con una de esas firmas, salta la alerta.

Con el avance de la inteligencia artificial, muchos IDS más modernos no dependen únicamente de firmas fijas, sino que incorporan la detección por anomalías basada en machine learning, los cuales una vez definidos una línea base de tráfico normal, son capaces de detectar aquel tráfico que se sale de esta línea y marcarlo como sospechoso siendo capaces de detectar ataques nuevos que no coinciden con ninguna firma conocida.

¿Por qué usar nmap en modo básico no es suficiente?

nmap es la herramienta por excelencia para la fase de reconocimiento (activo): permite descubrir qué hosts están vivos en una red, qué puertos tienen abiertos, qué servicios corren en ellos y no solo se limita a la fase de reconocimiento, también sirve de ayuda para la fase de modelado de amenazas y de explotación.

nmap por lo tanto, es uno de los primeros pasos técnicos en cualquier auditoría, porque no se puede atacar lo que no se conoce.

El problema es que hacer estas preguntas a la red no es gratis. Un escaneo convencional genera una cantidad enorme de tráfico en muy poco tiempo y es precisamente este patrón lo que cualquier IDS está entrenado para detectar.

En un entorno sin herramientas de seguridad, y donde la disponibilidad de los activos no es una prioridad, se puede usar nmap sin tener en cuenta estas consideraciones. Pero en cualquier entorno real necesitamos técnicas que nos permitan obtener la información que buscamos generando la menor huella posible, para evitar ser detectados y bloqueados por las soluciones de seguridad y no comprometer la disponibilidad de los sistemas auditados.

Escaneo de HOSTS

Es habitual, al hacer un descubrimiento de hosts tirar de comandos tipo nmap -n rango_ip o nmap -sS -n rango_ip. El problema es que en estos casos nmap, además del descubrimiento de hosts, hacer también un descubrimiento de puertos.

Por ejemplo si usamos el siguiente comando para hacer el descubrimiento de hosts, podemos ver cómo Snort rápidamente marca este tráfico como anómalo

nmap -sS -n 192.168.30.0/24

El problema es que el flag -sS utiliza una técnica llamada SYN scan (lo usan también herramientas como Qualys), que no llega a completar las conexiones TCP: se envía un paquete SYN, se recibe un SYN/ACK y se responde con un RST, terminando la conexión antes de establecerla del todo. Este patrón es rápidamente detectado por snort.

Si estamos haciendo un descubrimiento de hosts, es importante asegurarnos que nmap no realice un escaneo de puertos, para ello podemos usar el comando -sn.

nmap -sn -n 192.168.30.0/24

En este caso, podemos observar como descubrimos los hosts que están vivos y snort no ha generado ninguna alerta

Si analizamos el tráfico en Wireshark, es lógico que Snort no haya detectado nada: con -sn sobre un objetivo que está en la misma red local, todo lo que genera nmap es tráfico ARP. Cuando el destino es local, nmap prefiere usar ARP antes que ICMP. Además que el tráfico ARP es perfectamente legítimo en una red local, es el protocolo con el que los equipos traducen IP a MAC y forma parte del tráfico diario de una red.

El problema de confiar en este método es que ARP es un protocolo no autenticado, lo que significa que cualquiera puede responder a un paquete ARP aunque no sea el destinatario de este; lo que se conoce como ARP spoofing.

Podríamos tener en la infraestructura una máquina configurada para contestar afirmativamente cuando se pregunta por una IP que en realidad no tiene, generándonos ruido y falsos positivos en el descubrimiento que arrastramos a las próximas fases de la auditoría.

Para no fiarnos ciegamente de la respuesta ARP, podemos añadir una confirmación adicional con el flag -PS, el cual lanzará un paquete al puerto 80 para comprobar que la máquina efectivamente está viva. Para forzar a que mande paquetes al puerto 80, necesitamos especificar el flag –disable-arp-ping

nmap -sn -PS --disable-arp-ping -n 192.168.30.0/24

Podemos ver que Snort en esta ocasión no detecta nada.

En Wireshark podemos ver que tras el descubrimiento ARP, la máquina atacante envía un paquete al puerto 80 de la víctima

Escaneo de puertos

La forma más básica de realizar un escaneo de puertos es con el flag -sS (SYN scan), que como hemos visto antes snort lo detecta rápidamente.

El problema del escaneo de puertos es el volumen de tráfico que se genera: en un periodo corto de tiempo se genera muchísimo tráfico hacia la máquina víctima, y cualquier IDS interpreta este patrón como anómalo. Es por esto que la mayoría de técnicas que ofrece nmap si se usan sin «tuning» son rápidamente detectadas por cualquier solución de seguridad.

Escaneo por bloques

Dado que el problema es concentrar mucho tráfico en poco tiempo hacia los 65535 puertos TCP, podemos trocear el escaneo en bloques pequeños y espaciarlos en el tiempo. No confundir con la fragmentación de paquetes de nmap (-f) que es otra cosa: -f parte los paquetes a nivel de IP para dificultar el análisis de firmas. Aquí lo que se propone no es fragmentar los paquetes, sino que repartimos el escaneo en tandas a lo largo del tiempo para no superar umbrales de detección.

Podemos ver, como si usamos el flag -sS únicamente contra 5 puertos, Snort no detecta el escaneo de puertos

Si subimos a 10 puertos, podemos ver como Snort sí que genera la alerta de escaneo de puertos, por tanto no hay que ser avariciosos ya que en cuanto incrementamos el número de puertos que escaneamos a la vez, el tráfico aumenta y rebasa los umbrales de Snort, delatándonos.

Aquí ya cada uno tiene sus propios scripts y técnicas para realizar este escaneo escalonado. En mi caso tengo un script que coge los 1000 primeros puertos de la lista de top ports de nmap y los va escaneando en bloques de 5 en 5 añadiendo una pausa variable entre bloques( un sleep randomizado entre 2 y 10). De esta manera aunque el escaneo se dilata más en el tiempo, tenemos menos opciones de generar alertas y ser detectados.

Escaneo con señuelos (-D)

Otra técnica popular es el escaneo usando señuelos. Con el flag -D y un conjunto de IPs separadas por comas, nmap intercala paquetes con esas IPs usándolas como origen de la conexión. El objetivo es que las herramientas de seguridad vean que el tráfico no proviene de una única dirección, dificultando así que los equipos de respuesta a incidentes puedan atribuir la acción maliciosa a una ip en concreto.

sudo nmap -sS -D ip1,ip2,ip3,ip4 -n IP_VICTIMA

Si lanzamos el flag -D sin usar otras técnicas, como la que acabamos de ver, podemos ver como el IDS genera la alerta ( en este caso nos sirve, ya que quería enseñar precisamente como en las alertas aparece que el tráfico es generado por otras IPs)

Podemos ver que en las alertas el tráfico aparece como generado desde la IP .1 o la .10 que son los señuelos que hemos usado

Hay que tener en cuenta que el flag -D por si solo confunde la atribución, pero no evita la detección, por eso esta técnica tiene sentido cuando se usa combinada con otras técnicas.

Conclusión

En este primer artículo hemos visto una pequeña introducción a algunas de las técnicas que ofrece nmap para evadir defensas. Considero importante no solo usar las herramientas, sino hacer el ejercicio de estudiarlas y analizar cómo funcionan a bajo nivel, ya que es lo que te permite llevarlas a un nivel de uso profesional.

En próximos posts seguiremos analizando nmap, viendo usos más avanzados y cómo aplicarlos en un entorno empresarial real.

Y para los que estén interesados, en este artículo tenéis el writeup de la máquina vulnerable que hemos usado en este laboratorio.

Mateu Joan Perelló
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.