Evasión de cortafuegos/IDS y falsificación

Muchos pioneros de Internet habían previsto una red global abierta con un espacio de direcciones IP universal que permitiese conexiones virtuales entre dos nodos cualquiera. Esto permitiría a los equipos actuar como verdaderos iguales, sirviendo y recuperando información el uno del otro. La gente podría acceder a todos los sistemas de su casa desde el trabajo, cambiando las propiedades del control del clima o desbloqueando puertas. Esta visión de una conectividad universal fue sofocada por la escasez del espacio de direcciones y los problemas de seguridad. Al comienzo de la década de los años 90, las organizaciones empezaron a replegar cortafuegos con el propósito de reducir la conectividad. Se acordonaron redes enormes para protegerlas de la Internet no filtrada con pasarelas («proxies», N. del T.) de aplicación, sistemas de traducción de direcciones de red y filtros de paquetes. Del flujo sin restricciones de la información se pasó a una regulación estricta de los canales de comunicación aprobados y del contenido que pasa por ellos.

Los filtros de red como los cortafuegos pueden hacer muy difícil el análisis de una red. Esto no va a ser más fácil en el futuro, ya que uno de los objetivos de estos dispositivos es generalmente limitar el reconocimiento casual de la red. En cualquier caso, Nmap ofrece varias funcionalidades para ayudar a entender estas redes complejas, y que también sirven para verificar que los filtros funcionan como se espera de ellos. Incluso tiene mecanismos para saltarse las defensas que no hayan sido implementadas del todo correctamente. Uno de los mejores métodos de entender la posición de la seguridad de su red es intentar comprometerla. Empiece a pensar como un atacante, e intenta utilizar las técnicas de esta sección contra sus propias redes. Lance un sondeo de rebote FTP, un sondeo pasivo, un ataque de fragmentación, o intente realizar un túnel desde una de sus propias pasarelas.

Las compañías, además de restringir la actividad de red, están monitorizando cada vez más el tráfico con sistemas de detección de intrusos (IDS, «Intrusion Detection Systems», N. del T.). Todos los IDS principales vienen preinstalados con reglas diseñadas para detectar sondeos de Nmap porque, a veces, se realizan sondeos previos a un ataque. Muchos de estos productos han mutado recientemente para convertirse en sistemas de prevención de intrusiones (IPS) que bloquean activamente el tráfico reconocido como maligno. Desafortunadamente para los administradores de redes y para los fabricantes de IDS es muy difícil detectar las malas intenciones analizando los datos de los paquetes. Los atacantes con paciencia, habilidad y con la ayuda de ciertas opciones de Nmap pueden, generalmente, esquivar el análisis de los IDS sin ser detectados. Mientras tanto, los administradores deben lidiar con un alto número de falsos positivos debido a que algunas actividades inocentes se diagnostican erróneamente y generan alarmas o se bloquean.

Algunas personas sugieren que Nmap no debería ofrecer funcionalidades de evasión de cortafuegos o para esquivar los IDS, argumentando que es igual de probable que las funcionalidades las utilicen los atacantes como que las utilicen los administradores para mejorar la seguridad. El problema con esta forma de pensar es que los atacantes van a utilizar estos métodos de todas formas: encontrarían otra herramienta para hacerlo o parchearían a Nmap para añadírsela. Al mismo tiempo, los administradores tendrían muchos más problemas para hacer su trabajo. Es mucho mejor defensa utilizar servidores FTP modernos y parcheados que intentar prevenir la distribución de herramientas que permitan la implementación de ataques de rebote FTP.

No hay ninguna herramienta mágica (u opción de Nmap) que permita detectar y evitar cortafuegos y sistemas IDS. Esto requiere habilidad y experiencia. Un tutorial va más allá del alcance de esta guía de referencia, que sólo lista las opciones relevantes y describe lo que hacen.

-f (fragmentar los paquetes); --mtu (utilizar el MTU especificado)

La opción -f hace que el sondeo solicitado (incluyendo los sondeos ping) utilicen paquetes IP fragmentados pequeños. La idea es dividir la cabecera del paquete TCP entre varios paquetes para hacer más difícil que los filtros de paquetes, sistemas de detección de intrusos y otras molestias detecten lo que se está haciendo. ¡Tenga cuidado con esta opción! Algunos programas tienen problemas para manejar estos paquetes tan pequeños. El viejo sniffer llamado Sniffit da un fallo de segmentación inmediatamente después de recibir el primero de estos pequeños fragmentos. Especifica esta opción una sola vez y Nmap dividirá los paquetes en ocho bytes o menos después de la cabecera de IP. De esta forma, una cabecera TCP de veinte bytes se dividiría en 3 paquetes. Dos con ocho bytes de cabecera TCP y uno con los últimos ocho. Obviamente, cada fragmento tiene su propia cabecera IP. Especifica la opción -f otra vez para utilizar fragmentos de dieciséis bytes (reduciendo la cantidad de fragmentos). O puedes especificar tu propio tamaño con la opción --mtu. No utilice la opción -f si utiliza --mtu. El tamaño debe ser múltiplo de ocho. Aunque la utilización de paquetes fragmentados no le ayudará a saltar los filtros de paquetes y cortafuegos que encolen todos los fragmentos IP (como cuando se utiliza la opción CONFIG_IP_ALWAYS_DEFRAG del núcleo de Linux), algunas redes no pueden tolerar la pérdida de rendimiento que esto produce y deshabilitan esa opción. Otros no pueden habilitar esta opción porque los fragmentos pueden tomar distintas rutas para entrar en su red. Algunos sistemas defragmentan los paquetes salientes en el núcleo. Un ejemplo de ésto es Linux con el módulo de seguimiento de conexiones de iptables. Realice un sondeo con un programa de captura de tráfico, como Ethereal, para asegurar que los paquetes que se envían están fragmentándose. Intente utilizar la opción --send-eth, si su sistema operativo le está causando problemas, para saltarse la capa IP y enviar tramas directamente a la capa Ethernet en crudo.

-D <señuelo1 [,señuelo2][,ME],...> (Esconde un sondeo con señuelos)

Realiza un sondeo con señuelos. Esto hace creer que el/los equipo/s que utilice como señuelos están también haciendo un sondeo de la red. De esta manera sus IDS pueden llegar a informar de que se están realizando de 5 a 10 sondeos de puertos desde distintas direcciones IP, pero no sabrán qué dirección IP está realizando el análisis y cuáles son señuelos inocentes. Aunque esta técnica puede vencerse mediante el seguimiento del camino de los encaminadores, descarte de respuesta («response-dropping», N. del T.), y otros mecanismos activos, generalmente es una técnica efectiva para esconder su dirección IP.

Se debe separar cada equipo de distracción mediante comas, y puede utilizar ME («YO», N. del T.) como uno de los señuelos para representar la posición de su verdadera dirección IP. Si pone ME en la sexta posición o superior es probable que algunos detectores de sondeos de puertos habituales (como el excelente scanlogd de Solar Designer) ni siquiera muestren su dirección IP. Si no utiliza ME, Nmap le pondrá en una posición aleatoria.

Tenga en cuenta que los equipos que utilice como distracción deberían estar conectados o puede que accidentalmente causes un ataque de inundación SYN a sus objetivos. Además, sería bastante sencillo determinar qué equipo está realmente haciendo el sondeo si sólo uno está disponible en la red. Puede que quiera utilizar direcciones IP en lugar de nombres (de manera que no aparezca en los registros del servidor de nombres de los sistemas utilizados como señuelo).

Se utilizan los señuelos tanto para el sondeo de ping inicial (si se utiliza ICMP, SYN, ACK, o cualquier otro) como durante la fase de sondeo. También se utilizan los señuelos durante la detección de sistema operativo (-O). Los señuelos no funcionarán con la detección de versión o el sondeo TCP connect().

Vale la pena tener en cuenta que utilizar demasiados señuelos puede ralentizar el sondeo y potencialmente hacerlo menos exacto. Además, algunos proveedores de acceso a Internet filtrarán los paquetes falsificados, aunque hay muchos que no lo hacen.

-S <Dirección_IP> (Falsifica la dirección de origen)

Nmap puede que no sea capaz de determinar tu dirección IP en algunas ocasiones (Nmap se lo dirá si pasa). En esta situación, puede utilizar la opción -S con la dirección IP de la interfaz a través de la cual quieres enviar los paquetes.

Otro uso alternativo de esta opción es la de falsificar la dirección para que los objetivos del análisis piensen que algún otro los está sondeando. ¡Imagine una compañía a los que les sondea repetidamente la competencia! Generalmente es necesaria la opción -e si lo quiere utilizar así, y también sería recomendable la opción -P0.

-e <interfaz> (Utilizar la interfaz especificada)

Indica a Nmap a través de qué interfaz debe enviar y recibir los paquetes. Nmap debería detectar esto automáticamente, pero se lo dirá si no.

--source-port <número_de_puerto>; -g <número_de_puerto> (Falsificar el puerto de origen)

Un error de configuración sorprendentemente común es confiar en el tráfico basándose únicamente en el número de puerto origen. Es fácil entender por qué pasa esto. Un administrador que está configurando su nuevo y flamante cortafuegos, recibe de repente quejas de todos sus usuarios desagradecidos que le dicen que sus aplicaciones han dejado de funcionar. En particular, puede romperse el DNS porque las respuestas UDP de DNS de servidores externos ya no pueden entrar en la red. Otro ejemplo habitual es el caso del FTP. En una transferencia activa de FTP, el servidor remoto intenta establecer una conexión de vuelta con el cliente para transferir el archivo solicitado.

Existen soluciones seguras para estos problemas, como las pasarelas en el nivel de aplicación o los módulos de cortafuegos que realizan un análisis del protocolo. Desgraciadamente, también hay soluciones más fáciles y menos seguras. Al darse cuenta que las respuestas de DNS vienen del puerto 53 y que las conexiones activas de FTP vienen del puerto 20, muchos administradores caen en la trampa de configurar su sistema de filtrado para permitir el tráfico entrante desde estos puertos. Generalmente asumen que ningún atacante se dará cuenta de estos agujeros en el cortafuegos ni los aprovechará. En otros casos, los administradores consideran esto una solución a corto plazo hasta que puedan implementar una solución más segura. Y después se olvidan de hacer la mejora de la seguridad.

Los administradores de red con mucho trabajo no son los únicos que caen en esta trampa. Muchos productos se lanzan al mercado con estas reglas inseguras. Hasta Microsoft lo ha hecho. Los filtros de IPsec que se preinstalan con Windows 2000 y Windows XP contienen una regla implícita que permite todo el tráfico TCP o UDP desde el puerto 88 (Kerberos). Otro caso conocido es el de las versiones de Zone Alarm Firewall Personal que, hasta la versión 2.1.25, permitían cualquier paquete entrante UDP desde el puerto 53 (DNS) o 67 (DHCP).

Nmap ofrece las opciones -g y --source-port (son equivalentes) para aprovecharse de estas debilidades. Simplemente indique el número de puerto y Nmap enviará los paquetes desde ese puerto cuando sea posible. Nmap debe utilizar distintos números de puerto para ciertos tipos de prueba en la detección de sistema operativo para que funcionen correctamente, y las solicitudes de DNS ignoran la opción --source-port porque Nmap depende de las librerías del sistema para hacerlas. Esta opción se soporta completamente en muchos sondeos TCP, incluyendo el sondeo SYN, al igual que los sondeos UDP.

--data-length <número> (Añadir datos aleatorios a los paquetes enviados)

Normalmente Nmap envía paquetes mínimos que contienen sólo la cabecera. Así, los paquetes TCP que envía son generalmente de 40 bytes y las solicitudes echo de ICMP son de tan sólo 28. Esta opción le dice a Nmap que añada el número indicado de bytes aleatorios a la mayoría de los paquetes que envía. Esta opción no afecta a los paquetes enviados para la detección de sistema operativo (-O), pero sí a la mayoría de los paquetes de ping y de sondeo de puertos. Esta opción hace que el sondeo sea un poco más lento, pero también que el sondeo sea un poco más difícil de detectar.

--ttl <valor> (Indica el valor del campo tiempo-de-vida de la cabecera IP)

Establece el campo tiempo-de-vida («time-to-live», N. del T.) en la cabecera de los paquetes IPv4 al valor especificado.

--randomize-hosts (Mezclar aleatoriamente la lista de equipos a sondear)

Indica a Nmap que debe mezclar aleatoriamente cada grupo de hasta 8096 equipos antes de hacer un sondeo. Esto puede hacer que el sondeo sea menos obvio para algunos sistemas de monitorización de la red, especialmente cuando se combina con las opciones que ralentizan el sondeo. Si quiere mezclar aleatoriamente listas más grandes, incremente el valor de la constante PING_GROUP_SZ en nmap.h y recompile el programa. Una solución alternativa es generar la lista de sistemas a sondear con un sondeo de lista (-sL -n -oN <fichero>), ordenarlo aleatoriamente con un script de Perl, y luego darle a Nmap la lista entera con la opción -iL.

--spoof-mac <dirección MAC, prefijo o nombre del fabricante> (Falsifica la dirección MAC)

Solicita a Nmap que utilice la MAC dada para todas las tramas de Ethernet enviadas. Esta opción activa implícitamente la opción --send-eth para asegurar que Nmap envía los paquetes del nivel Ethernet. La MAC dada puede tener varios formatos. Nmap elegirá una MAC completamente aleatoria para la sesión si se utiliza el valor 0. Nmap utilizará la MAC indicada si el parámetro es un número par de dígitos hexadecimales (separando opcionalmente cada dos dígitos con dos puntos). Nmap rellenará los 6 bytes restantes con valores aleatorios si se dan menos de 12 dígitos hexadecimales. Si el argumento no es ni 0 ni un conjunto de dígitos hexadecimales, Nmap mirará en nmap-mac-prefixes para encontrar un fabricante cuyo nombre coincida con el parámetro utilizado (en esta búsqueda no diferenciará entre mayúsculas y minúsculas). Si se encuentra algún fabricante, Nmap utilizará el OUI del fabricante (prefijo de 3 bytes) y rellenará los otros 3 bytes aleatoriamente. Ejemplos de argumentos --spoof-mac son: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, y Cisco.

--badsum (Envía paquetes con sumas de comprobación TCP/UDP erróneas)

Esta opción le indica a Nmap que debe generar sumas de comprobación inválidas para los paquetes que se envíen a los equipos objetivos. Cualquier respuesta que se reciba vendrá de un cortafuegos o un IDS que no comprobó la suma, dado que la mayoría de las pilas IP descartan estos paquetes. Para obtener más información de esta técnica puede consultar https://nmap.org/p60-12.txt