HOWTO: ARP Spoofing

Noviembre 3rd, 2007

Parece que mi post anterior ha generado ciertas dudas, en concreto nadie parece creer que se puedan escuchar las conversaciones de los demás usando el MsnSpy. Algunos incluso me han llegado a decir que sólo escuchan su propia conversación…

Para empezar, el MsnSpy (al igual que cualquier otro sniffer) permite capturar paquetes que viajen por nuestro mismo segmento de red, en otras palabras, sólo vamos a poder capturar conversaciones que ocurran en nuestra red local (y con ciertas limitaciones). Ya os podéis olvidar de saber que está diciendo ese amigo nuestro que vive en la otra parte del mundo.

Por otra parte, aunque nuestra única intención sea capturar las conversaciones de nuestra red local, es posible que el MsnSpy no nos haya funcionado tal como esperábamos y no nos muestre más que nuestros propios diálogos. Como ya dije antes, para capturar las conversaciones de los demás es totalmente imprescindible que éstas viajen por nuestro mismo segmento de red, de tal forma que nuestro equipo pueda acceder a tal información. En la actualidad, y siempre en aras de la eficiencia, lo habitual es que las redes se diseñen para que cada equipo tenga su propio segmento de red, lo que reporta muchas ventajas… pero nos impide capturar algo, excepto nuestro propio tráfico.

No quiero entrar en detalles técnicos acerca de cómo se consiguen aislar los equipos en segmentos físicos independientes, lo que si diré es que lo normal es usar switchs para esta tarea. Aún hoy en día algunos administradores piensan que esto es suficiente para evitar el sniffing (captura de datos) en sus redes, nada más lejos de la realidad. Existen multitud de técnicas para saltar las restricciones impuestas por los switchs, en este post quiero hablar de una de ellas en concreto, del ARP Spoofing o ARP Poisoning. Se trata de una técnica sencilla y bien conocida, pero no por ello deja de ser útil para el caso que nos ocupa.

No quiero cargar este post con excesivos datos técnicos, pero me niego a describir un ataque de ARP Spoofing sin explicar lo que hay detrás de los programas usados, seré breve pero se necesitan unos conocimientos mínimos de redes para entender lo que viene.

Para que un paquete pueda viajar de una máquina a otra, es necesario que la máquina que lo manda conozca la dirección física (MAC) de la máquina receptora. Esto en sí ya es un problema, porque lo único que tiene esa máquina de su destino es una dirección IP, que en modo alguno nos da pistas sobre la dirección MAC del receptor. Para solucionar este problema nació el protocolo ARP, que permite establecer a que máquina pertence una determinada dirección IP.

¿Cómo lo hace? Pues nada más sencillo, cuando una máquina quiere enviar un paquete a otra, lo que hace es simplemente lanzar una pregunta ARP del estilo: ¿Quién tiene esta dirección IP?. La máquina poseedora de la misma responde con un paquete en el que se relaciona su IP con su MAC, con lo que ya la conversación puede ser establecida. Por temas de rendimiento, cada máquina va guardando las respuestas obtenidas, de tal forma que no sea necesario volver a hacer la pregunta la próxima vez que se necesite mandar un paquete a una máquina ya interrogada (también existe un tiempo de expiración de esta información, como en cualquier cache convencional).

Algo muy importante es el hecho de que el protocolo ARP no tiene estado de la conexión, en otras palabras, se pueden recibir respuestas sin haber sido hechas las preguntas, una vez más se trata de una decisión que afecta positivamente al desempeño del protocolo, pero que sin embargo nos deja la puerta abierta al ataque que comentabamos, el ARP Poisoning. Éste consiste simplemente en enviar paquetes a todas las máquinas de la red en la que relacionamos una IP que no es la nuestra, con nuestra MAC. Esta relación será almacenada en la cache de las máquinas víctimas (de ahí el nombre del ataque, envenenamiento de la cache ARP), de tal forma que cuando quieran enviar un paquete a ese equipo, lo enviarán al nuestro. Normalmente, se mapea la IP de la pasarela con la MAC del equipo atacante, de tal forma que todos los paquetes que quieran ir fuera de la red, pasen primero por nuestro equipo, con lo que tendremos acceso a toda la información.

¿Cómo puedo llevar a cabo este ataque?

Se acabó la teoría, pongámonos manos a la obra. Supondré que tienes un sistema Debian o similar, si no, adapta las instrucciones según convenga. Lo primero será hacernos con el conjunto de herramientas Dsniff:

# apt-get install dsniff

Ahora debemos asegurarnos que nuestra máquina sea capaz de reenviar paquetes, si no es así, cortaremos todas las comunicaciones interceptadas, lo que no nos interesa en manera alguna.

# echo 1 > /proc/sys/net/ipv4/ip_forward

Luego debemos obtener la ip de la pasarela, que será la máquina a la que queremos interceptar todos los paquetes.

# route | grep default

Por útlimo pondremos a funcionar la utilidad arpspoof encargada de realizar el ataque:

# arpspoof ip_pasarela

Y listo, en otra terminal ponemos a escuchar el msnspy y a disfrutar.

Categorías: linux, seguridad, tutoriales |

6 comentarios

  1. Lisan al-Gaib

    El MsnSpy funciona, doy fe de ello :)

  2. SynWenn

    Dios mío! Hasta en Arrakis se usa el msnspy! :mrgreen:

  3. Freesoftwareando » Blog Archive » msnspy - Esta embarazada ¡¡¡

    [...] En mi caso era complejo capturar si no fuese por el envenenamiento arp que hago al mismo tiempo que capturo. El autor del programa nos dice como hacer ese envenenamiento arp con la herramienta arpspoof aqui: http://www.sendaoscura.com/archives/18 [...]

  4. Ataques man in the middle | Senda Oscura

    [...] no es el único método que tenemos a nuestra disposición, ya en un post anterior vimos que un envenanimiento ARP también sirve para este fin. Hay muchísimas más técnicas que permiten hacer esto como, por [...]

  5. isi

    cuando pongo a funcionar el arpspoof me da este fallo;
    # arpspoof ip_pasarela
    Fallo de segmentación
    alguien teneis idea de como solucionarlo?? muchas gracias de antemano

  6. darklordz

    amigo lsl de tu problema
    solo cambia el string ip_pasarela por tu default gateway ese es tu error

Deja un comentario