jueves, 6 de mayo de 2010

Cómo Detectar un Load Balancer

En este post, vamos a revisar algunas técnicas básicas, como el DNS Load Balancing, Análisis del IPid o Análisis HTTP, para detectar la presencia de un Load Balancer en la red durante un pentest.


¿Por qué esto puede ser importante?

Hay muchas razones, por ejemplo, podría pasar que www.example.com distribuya la carga entre seis servidores, mientras que al realizar un testing sobre esta web, solo nos responda un servidor, en ese caso el resto de los servidores no fueron auditados.

O también el caso contrario, hacemos un testing sobre la web de www.example.com, y la respuesta a una herramienta viene de varios servidores, en ese caso nuestros resultados serían inconsistentes.

En el caso en que logremos identificar al dispositivo que realiza el load balancing, también podríamos buscar vulnerabilidades reportadas en el mismo, entre muchas otras cosas.


Análisis del 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.

Hace ya bastante tiempo, escribí un post sobre como realizar un "IPid Análisis" utilizando Scapy. El post se llamo "Cómo Contar Hosts Detrás de un DNAT", así que los remito al mismo para profundizar este tema.


DNS Load Balancing

Este tipo de distribución de carga, según el fabricante que lo implemente, tiene mas o menos complejidades. En su forma más básica, será un Round Robin que distribuirá la carga entre los servidores, sin hacer ningún tipo de medición sobre estos.

La forma más sencilla de verificar un DNS load balancing, es pidiendo el registro A del DNS para el dominio en cuestión:

dig @4.2.2.2 www.google.com A +short
www.l.google.com.
74.125.45.147
74.125.45.99
74.125.45.103
74.125.45.104
74.125.45.105
74.125.45.106

En el caso de Google podemos confirmar que hacen LB, pero por supuesto que poseen equipos diseñados para este propósito, que utilizan técnicas avanzadas de load balancing.


Análisis HTTP

Analizando las diferencias del header HTTP que nos devuelve el servidor, también podemos detectar la presencia de un LB. Por ejemplo, si hacemos dos pedidos a www.example.com, y en el header "Server", el primer pedido devuelve "Apache/2.2.11" y el segundo "Apache/1.3.26", encontramos dos servidores diferentes.

Hay un script muy básico llamado "Load Balancer Detector" que utiliza esta técnica para detectar un LB.

Por otro lado, cuando hay un equipo dedicado para hacer load balancing en la red, como por ejemplo F5, Radware o Citrix NetScaler, la detección se vuelve más interesante.

Según la técnica utilizada para el balanceo, es posible que podamos detectarlos. Por ejemplo, muchos de estos equipos, para marcar la persistencia de un cliente con un mismo servidor, utilizan Cookies, y a través de las mismas, podemos diferenciar a un fabricante de otro.

Como la mayoría de los SO, también los LB se comportan de forma diferente ante ciertos paquetes no estándares, esta es otra manera de diferenciarlos. Sin mencionar que también podemos encontrar a muchos de estos dispositivos con bugs reportados.

Sin dudas podemos profundizar mucho más con este tema, pero lo voy a dejar para futuros posts :)
        
       
REFERENCIAS:
- KUNGFOOSION: Cómo Contar Hosts Detrás de un DNAT
- Load Balancer Detector


Publicado por Leonardo Pigñer en www.KUNGFOOSION.com

No hay comentarios.:

LinkWithin