jueves, 9 de octubre de 2008

Cómo Optimizar el Host Discovery en Nmap

Fyodor publicó el video de su presentación en la ultima Defcon, y una de las cosas que me pareció mas interesante es cómo optimizar la etapa de Host Discovery en Nmap.



¿ Porqué Optimizar el Host Discovery ?


Antes de realizar un escaneo de puertos, Nmap intentará descubrir si los hosts objetivo se encuentran vivos. Por esta razón es que se vuelve fundamental que Nmap haga el descubrimiento lo mejor posible, ya que de lo contrario estaríamos escaneando los puertos a muchos menos hosts de los que realmente se encuentran vivos.

¿ Cómo Funciona el Host Discovery por Default ?

El Host Discovery de Nmap se conoce como "Nmap Ping", y básicamente lo que hace es enviar al objetivo un ICMP Echo Request (PING) y un paquete ACK al puerto 80.

El Nmap Ping tiene alrededor de 10 años de antigüedad, y era muy efectivo en la época en la que no había firewalls stateful.

La idea del ICMP Echo Request era recibir un ICMP Echo Reply, un PING, pero en la actualidad la mayoría de los firewalls tienen filtrado el PING. Mientras que la idea del ACK al puerto 80 era pasar el control de un firewall no-stateful (stateless), pero como se pueden imaginar hoy en día la mayoría de los firewalls son stateful.

Un firewall stateless, para permitir una conexión verificara la IP y los puertos de origen y destino, y si el paquete es un SYN. En el caso de denegar una conexión, verificara exactamente lo mismo, por lo que si enviamos un ACK, el firewall creerá que es una conexión ya establecida porque no tiene una tabla de estado para comprobar lo contrario, y lo dejara pasar.

¿ Cómo Optimizar el Host Discovery ?

Básicamente la idea seria crear nuestro propio "Nmap Ping", optimizándolo con diferentes técnicas que nos permitan obtener algún tipo de respuesta con la que podamos identificar a un host vivo.

En principio si queremos descubrir hosts detrás de un firewall stateful deberíamos utilizar paquetes SYN, ya que si utilizamos paquetes ACK y no hay un registro previo en la tabla de estado del firewall, el ACK sería descartado.

Esto lo podemos hacer con el switch "-PS". Ejemplo: "-PS80,25,22,443,21"

Por otro lado si queremos descubrir hosts detrás de un firewall stateless nos conviene utilizar paquetes ACK, ya que al no poseer una tabla de estado el firewall creerá que el paquete pertenece a una conexión ya establecida y lo dejará pasar.

Esto lo podemos hacer con el switch "-PA". Ejemplo: "-PA80,25,22,443,21"

En ambos casos, la pregunta clave es que puertos utilizar. En esta misma presentación, Fyodor publico un listado de los 10 puertos mas utilizados en Internet. También pueden ver este listado en mi post: "Los Puertos Más Usados En Internet"

Otra opción podría ser realizar el Discovery mediante puertos UDP, pero en este caso la idea seria buscar puertos cerrados que nos devuelvan un error ICMP Port Unreachable, ya que si enviamos un paquete sin contenido a un puerto UDP abierto, el sistema que lo reciba no sabrá que hacer con el y simplemente lo descartará.

Entonces la recomendación seria elegir un puerto UDP alto que probablemente no este en uso. Fyodor también recomienda sumar el puerto 53 (DNS), ya que muchos administradores suelen permitir este puerto en todo su rango de redes.

Esto lo podemos hacer con el switch "-PU". Ejemplo: "-PU33221,53"

Como vimos al comienzo, el clásico "Nmap Ping" utiliza un ICMP Echo Request que suele estar filtrado en los firewalls, por lo que es recomendable sumar al Echo Request otro tipo diferente de paquete ICMP, como por ejemplo Timestamp Request o Netmask Request.

Esto lo podemos hacer con los switchs "-PE" (Echo Req), "-PP" (Timestamp Req) o "-PM" (Netmask Req).

Otra opción también puede ser realizar un Protocol Ping. La idea aquí es enviar paquetes que utilicen diferentes protocolos, por default Nmap enviara 3 pruebas, un paquete ICMP (1), IGMP (2) y IP-in-IP (4), si estos protocolos no son soportados por el sistema operativo deberíamos recibir un error ICMP Protocol Unreachable, que nos permitirá conocer que el host esta vivo.

Esto lo podemos hacer con el switch "-PO".

En Conclusión

Si juntamos todo, lo que mas recomendable que deberíamos utilizar seria algo como esto:


nmap -sP -PE -PP -PS21,22,23,25,80,113,31339 -PA80,113,443,10042 --source-port 53 -T4 IP_de_TARGET


Aquí estamos realizando un Nmap Ping pero con paquetes ICMP Echo Request y Timestamp Request, también enviamos paquetes SYN y ACK a diferentes puertos del Top 10, y como recomendación de Fyodor también configuramos que todas las pruebas sean enviadas desde el puerto de origen 53 (DNS), esto con el switch "--source-port 53", ya que muchos firewalls pueden permitir conexiones desde este puerto.

Links Relacionados:
- Video de la presentación de Fyodor en Defcon
- Los Puertos Más Usados En Internet
- ¿ Porque Nmap es Lento con Redes Muy Filtradas ?

No hay comentarios.:

LinkWithin