viernes, 22 de enero de 2016

tracenet.py: Algo más que "whois"

En este post quiero presentarles un script de cosecha propia que se encarga de averiguar el segmento de red asociado a una IP (¿te suena "whois"?) sin usar "whois". La técnica que emplea no es infalible, el éxito o fracaso dependerá de como esté configurada la infraestructura de la red objetivo. Sin embargo, es una alternativa a tener en cuenta cuando el registro "whois" nos muestra amplios rangos de red que pertenecen más bien al ISP y no a la organización que se pretende evaluar. Además he tenido pendiente escribir este script por mucho tiempo y ya era hora de concretarlo.

El script "tracenet.py" está en mi repositorio de Github y lo pueden conseguir en esta URL:

https://github.com/alguien-gh/scripts/blob/master/infogathe/tracenet.py

Fig. 1 - Parámetros de "tracenet.py".

¿Cómo funciona?

tracenet.py recibe como parámetro una IP e inicia suponiendo que la red a la que pertenece esa IP tiene una máscara de subred igual a 29, es decir que es una red pequeña de tan solo 8 hosts. Luego intentará demostrar que la red es mayor a la suposición inicial con una máscara de subred igual a 28 (16 hosts), luego probará con 27, 26, 25, etc. Hasta que ya no pueda encontrar evidencia de que la red es más amplia que la suposición anterior o alcance la máscara límite que por defecto es 22.

¿Cómo prueba si la red es más amplia o no? Ahora es un buen momento para recordar VLSM. Sabemos que una red puede dividirse en dos subredes de igual tamaño usando VLSM. Lo que hacemos es tomar una IP de cada subred y hacerle un traceroute. Luego comparamos los dos resultados del traceroute y buscamos los saltos comunes que estén próximos a la IP destino. Lo más probable es que esos saltos comunes sean equipos de red (routers, gateways, firewalls, etc.) dentro de la infraestructura de la organización. Entonces, si encontramos saltos comunes muy próximos a la IP de destino (con una diferencia de TTL no mayor a 2 o 3) significa que ambas subredes pertenecen a la misma organización y podemos unirlas obteniendo como resultado una red del doble de tamaño. Para la siguiente iteración supondremos que el resultado obtenido es la mitad de una red más grande y aplicaremos la misma lógica.

Como dije anteriormente, esta técnica no es infalible. Por ejemplo puede suceder que algún firewall bloquee el traceroute, que los equipos de red que buscamos no respondan al traceroute, que el script considere como salto común un router en la infraestructura del ISP, que el protocolo ICMP este filtrado, etc. Para solventar algunos de estos problemas el script realiza un traceroute con mensajes SYN TCP en lugar de ICMP Echo Request. Además se obtienen mejores resultados si el SYN va dirigido a un puerto que esté abierto. Por ello antes del traceroute primero hace un escaneo de puertos usando el top 10 de puertos TCP según Nmap.

Demo

Finalmente dejo una demo donde se muestra el script en ejecución. En la demo podemos observar como el comando "whois" nos muestra un rango con máscara 16 mientras que con "tracenet.py" logramos acotar la red a un rango con máscara 25.



Un saludo.

3 comentarios:

  1. Un trabajo excelente. Lo mismo lo vemos tu script en la próxima versión de Kali ;)

    Un abrazo te@mMate!!

    ResponderEliminar
    Respuestas
    1. Gracias Longinos, eso sería lo máximo!

      Eliminar
  2. mandaselo a Infobyte para el FARADAY

    ResponderEliminar