Saturday, April 18, 2009

arpspoof, "Man in the middle"

En muchas ocasiones necesitamos poder analizar el tráfico de una comunicación, bien en desarrollo o en producción. Existen casos en que bien por no poder controlar la infraestructura de red o para poder hacer depuraciones rápidas sin necesidad de reestructurar partes de la red, necesitamos poder tener una máquina "en medio" de la comunicación de otras dos máquinas con el fin de poder capturar y analizar tráfico de red.

En estas situaciones puede ser muy interesante ser capaz de instalar un "Man in the middle" para poder capturar y análizar el tráfico con alguna de las clásicas herramientas Tcpdump, wireshark y tshark,...

En muchos de los casos queremos interceptar las comunicaciones de un host con su gateway de salida, así que ese es el escenario que voy a comentar...

Supongamos que tenemos:
  • HostA en el que realizaremos la captura
  • HostB del que queremos analizar las comunicaciones
  • Gateway de Salida GW

Pasamos a la acción... Todas las operaciones a realizar las tenemos que ejecutar en el hostA.

Instalamos la herramienta arpspoof que se encuentra incluido en dentro de las utilidades dsniff, así que:
sudo apt-get install dsniff
Como vamos a ponernos en el medio de las comunicaciones y debemos dejar pasar el tráfico, activamos el forwarding IPv4
echo 1 > /proc/sys/net/ipv4/ip_forward
Ahora tenemos que convencer al HostB de que el gateway de salida GW somos nosotros (HostA) y al gateway de salida GW le tenemos que convencer de que el HostB somos nosotros (HostA).
Así que ahora tenemos que dejar ejecutando de forma continua los siguientes comandos (podemos lanzar cada uno en un shell/session diferente):
arpspoof -i eth1 -t HostBIP GWIP
arpspoof -i eth1 -t GWIP HostBIP
Siendo HostBIP la ip del HostB y GWIP la ip del gateway de salida GW. El interface de red a usar, en este caso eth1, es el correspondiente al interface que este conectado a la misma red que el GW y el HostB.
Esperamos unos segundetes, medio minuto o así, a que todos los implicados actualicen sus tablas arp y finalmente ya podemos ponernos a capturar tráfico desde otro shell/sesión:
tcpdump -i eth1 host HostBIP and not arp

No comments: