16 octubre 2009

Sistemas con varias direcciones IP

Existen varios métodos para tratar de averiguar si un conjunto de IPs o un par de IPs pertenecen a un único host (alias).

Esta tarea es de gran ayuda si se desea hacer un test de intrusión y se sospecha que el sistema mantiene otros servicios y aplicaciones distintos a los principales y más obvios.
  • IPID consecutivos: en hosts que no tienen mucho tráfico y el ID de IP es predecible, se puede conocer si una misma IP está asociada a otra porque la diferencia entre ambos números ID es muy baja o consecutiva.
  • Mismo fingerprint de SO: todos aquellos equipos con el mismo sistema operativo y versión se pueden suponer el mismo, aunque puede dar muchos falsos positivos, es otra vía para obtener esta información, que junto a otros métodos puede ser útil.
  • Mismo TCP Timestamp: si dos IPs distintas mantienen un número similar de timestamp (del que se puede obtener el tiempo uptime del sistema) existe una probabilidad muy alta de que pertenezcan al mismo host.
  • Mismas versiones de servicios: Otra pista que ayuda es si las versiones de todos los servicios coinciden en producto y número en cada una de las direcciones IP , siempre sin olvidar que se puede bindear, distintos productos en cada alias.

Para hacer estas tareas se puede utilizar, por ejemplo, nmap y hping y comparar los resultados. Para automatizar la tarea he desarrollado un script en bash que lo hace basándose en estas dos utilidades.

La sintaxis del script es la siguiente:

[root@sbd tools]# ./sameips.sh
syntax: sameips.sh <ip> <network> <-i/-o/-t>
-i: use IPID
-t: use TCP timestamp (portscan+syn with tstamp flag)
-o: use nmap fingerprint

Donde "<ip>" es la dirección IP que se prueba y "<network>" las direcciones, en formato Nmap, que se analizan para saber si son alias de la primera.

El primero de los métodos (opción -i) ejecuta un hping y se comprueba si el IPID es random o fácilmente predecible, si lo es, lanzará un hping a cada uno de las IPs que se especifiquen en "network" para detectar similitudes. Este es el método más rápido y que menos falsos positivos genera.

La segunda opción (-t), realiza un portscan simple con nmap para detectar un puerto abierto, con esta información realiza un hping para comprobar si los paquetes tcp contienen timestamp, y de esta forma, nuevamente con hping barrer la red en busca de IPs con coincidencia con este tiempo. El método es lento ya que ha de hacer un portscan, pero genera bajos falsos positivos.


La última de las opciones (-o), ejecuta un "nmap -O" con el que trata de detectar el sistema operativo, con esta información se realiza la comprobación con el resto de IPs de la red. Es un sistema lento y genera bastantes falsos positivos.

Estos tres métodos se pueden usar en combinación para poder contrastar resultados.

El siguiente ejemplo muestra una ejecución en la que se tratan de encontrar otras IPs asignadas dentro del rango "208.110.68.100-110" y que estén asociadas a "208.110.68.106".

[root@sbd tools]# ./sameips.sh 208.110.68.106 208.110.68.100-110 -t -i -o
+ Looking for alive IP address in 208.110.68.100-110
- FOUND: 11 IP
+ Fingerprinting OS in alive IP address
- Systems with same OS in 208.110.68.100-110: (NO OS)
--+ 208.110.68.100 YES!
--+ 208.110.68.101 YES!
--+ 208.110.68.102 YES!
--+ 208.110.68.105 YES!
--+ 208.110.68.107 YES!
--+ 208.110.68.108 YES!
--+ 208.110.68.109 YES!
--+ 208.110.68.110 YES!
+ Testing random IPID (208.110.68.106)... 16762 16763 16764 16765 16766
- Good! No random IPID
-+ Testing IPID of alive hosts
--+ 208.110.68.106 YES! (16774)
--+ 208.110.68.107 YES! (0)
--+ 208.110.68.108 YES! (16778)
--+ 208.110.68.109 YES! (16780)
--+ 208.110.68.110 YES! (16782)
+ Testing TCP Timestamp (208.110.68.106)... 637781696
- Good! TCP Timestamp enabled
+ Scanning ports...
--+ 208.110.68.106 YES!
--+ 208.110.68.107 YES!
--+ 208.110.68.108 YES!
--+ 208.110.68.109 YES!
--+ 208.110.68.110 YES!

El script, sameips.sh (view), fue publicado en la web de 514 en el 2007.

5 comments :

Unknown dijo...

Muy interesante, la verdad algunos de esos métodos no se me habían ocurrido jeje

Por cierto enhorabuena por la ponencia de hoy, muy interesante.

Alejandro Ramos dijo...

@Chila, muchas gracias!! espero nos conozcamos en las próximas!
Un saludo

Ros dijo...

Para hacer estas tareas se puede utilizar, por ejemplo, nmap y hping y comprar los resultados.

Ahi seria COMPARAR los resultados supongo.

siento aportar tan poco, pero bueno... genial articulo, como siempre!

Ros dijo...

Para hacer estas tareas se puede utilizar, por ejemplo, nmap y hping y comprar los resultados.

Ahi seria COMPARAR los resultados supongo.

siento aportar tan poco, pero bueno... genial articulo, como siempre!

Chila dijo...

Muy interesante, la verdad algunos de esos métodos no se me habían ocurrido jeje

Por cierto enhorabuena por la ponencia de hoy, muy interesante.