lunes, 19 de mayo de 2008

Cómo Contar Hosts Detrás de un DNAT

En mi post "Ajusticiando con Scapy", entre otras cosas utilizamos el IPid para detectar que host era el que generaba mayor trafico entre un grupo de sistemas sospechosos.

Ahora vamos a usar Scapy, para mediante un análisis diferente del IPid, poder contar que cantidad de hosts se encuentran detrás de un DNAT.

Pero, ¿ Qué es el IPid ?

El campo ID del protocolo IP, o "IPid", es utilizado para identificar segmentos fragmentados en el ensamble de paquetes. Debido a que en muchos SO's el IPid fue implementado como un contador secuencial, esto permitió una variedad de ataques en los casos donde fuera posible realizar una predicción del mismo.

La técnica que vamos a utilizar consiste en enviar paquetes a un puerto y analizar el IPid de las respuestas. La idea es buscar diferentes grupos de IPid's, lo que nos dará la pauta de que hemos identificado diferentes hosts. Por ejemplo, los IPid's del 2000 al 2200 podrían pertenecer a un host "A", mientras que los del 41200 al 41400 a un host "B".

¿ Para qué nos sirve contar host's detrás de un DNAT ?

Un "Destination NAT" es un tipo de NAT en donde de forma transparente se cambia la dirección IP de destino por otra IP, y viceversa con el paquete de respuesta. Generalmente se utiliza para trasladar una IP publica, a una IP privada de la DMZ.

Si por ejemplo realizamos nuestro análisis a un servidor Web, podríamos descubrir que cantidad de servidores internos están atendiendo las peticiones HTTP. Esto podría llegar a sernos útil durante un PenTest, por ejemplo para conocer si existe un Load Balancer en la red, que tal vez pueda ser un nuevo punto de ataque, o identificar que cantidad de servidores Web poseen un CGI vulnerable. Pero hay muchas otras cosas mas en donde esta técnica puede sernos muy útil, todo va a depender de nuestro objetivo.

El código para hacer esto sumamente simple. Vamos a enviar 1000 paquetes al puerto 80 de nuestro objetivo, y luego vamos a graficar las respuestas basándonos en el IPid:



a,b=sr(IP(dst="www.target.com")/TCP(sport=[RandShort()]*1000))
a.plot(lambda x:x[1].id)



En este primer ejemplo utilizamos www.yahoo.com.ar y claramente se puede ver 1 host detrás del DNAT:


En este otro ejemplo, de una empresa argentina de venta on-line, podemos visualizar como mínimo 5 host's detrás del DNAT:


Finalmente, en www.google.com.ar, no es tan claro el resultado, pero podemos visualizar varias rectas paralelas, lo que nos indica que hay por lo menos mas de 10 o 15 host's:


En este mismo ejemplo, si miran con atención, pueden ver que el dibujo del IPid forma la imagen de TUX, el pingüino de Linux.

Ustedes también lo pueden ver, ¿ no ? ¿ no ?

1 comentario:

KerneLinux dijo...

Muy bueno el post, tener en cuenta que para poder realizar esto antes deben instalar "python-scapy" y "python-gnuplot".

Existe una tool en Backtrack llamada "lbd" (http://ge.mine.nu/lbd.html) que permite detectar si un sitio web esta detrás de un dispositivo de load-balancing. Por lo tanto es una tool que aplica esta misma técnica para realizar la detección.

LinkWithin