Tormentas Broadcast (ARP Storm). Descubriendo el pc infectado

Hola.

En este articulo les enseñaré como descubrir el dispositivo que tantas peticiones  broadcast esta generando y tanto dolor de cabeza nos esta creando.

No vamos a utilizar ningún software milagroso ni nada excepciónal, nos valdremos de nuestro entorno bash, tcpdump y algo de ingenio con bash scripting…..

1 – Nuestro primer objetivo es ver el tráfico arp de nuestra red con tcpdump…

# tcpdump -i eth0 -n net 192.168.16.0/24
Ejecutaremos tcpdump para escuchar en la interfaz ”eth0” y la red 192.168.16.0 con máscara de subred 255.255.255.0…

Seguidamente nos empezará a escupir resultados:
02:43:59.781831 arp who-has 192.168.16.18 tell 192.168.16.17
02:43:59.857333 arp who-has 192.168.16.18 tell 192.168.16.66
02:43:59.967977 arp who-has 192.168.16.18 tell 192.168.16.42
02:44:00.220114 arp who-has 192.168.16.18 tell 192.168.16.74
02:44:00.308751 arp who-has 192.168.16.13 tell 192.168.16.9
02:44:00.332418 arp who-has 192.168.16.13 tell 192.168.16.42
02:44:00.374803 arp who-has 192.168.16.13 tell 192.168.16.74

Aqui tenemos una parte de la salida de tcpdump, con el que observamos varias peticiones ARP para averiguar la dirección MAC de las ips: 192.168.16.18 & 192.168.16.13. Dichas peticiones generadas por distintos equipos dentro de la red.

Hasta ahi estaria todo correcto y podriamos dejarlo funcional con lo anterior. Pero nosotros buscamos algo más de simplicidad en los resultados para poder detectar el malhechor dentro de nuestra red con más fácilidad.

Vamos a seguir utilizando tcpdump pero lo combinaremos con algo de bash script “sencillo y bonito bash scripting… :)”..

2 – Evaluando los campos que nos interesan

Esta es la primera linea del segmento de tcpdump publicado más arriba..


02:43:59.781831 arp who-has 192.168.16.18 tell 192.168.16.17

Nosotros buscamos obtener solamente la ip del que genera dicha solicitud ARP y que la solucitud sea solamente del tipo ”who-has”.

Como podemos observar el que generá dicha consulta ARP en este caso es 192.168.16.17 (tell 192.168.16.17).

Trabajaremos con ”head” para realizar un máximo de registros a capturar..

ej: head-50 # Guardara 50 registros..

En todo momento tcpdump nos dará la ip del que origina la consulta ARP en último lugar en cada linea, con lo que podriamos quedarnos con el último valor de una forma sencilla…


tcpdump -i eth0 -n net 192.168.16.0/24 | head -50 |  egrep ‘arp who-has’ | awk ‘ { print $NF }

– Con (egrep ‘arp who-has’ mostramos solo los registros con el texto ‘arp who-has’

– Con head -50 mostramos solamente HASTA 50 registros.

– Una vez tengamos solamente los registros con la petición arp who-has, mostramos el útimo campo (la ip que origina la consulta ARP).

Con esto ya simplificariamos bastante la salida, con lo que solo nos mostraria las ips de nuestra red que generan la consulta ARP…(pego las 5 primeras lineas a modo de ejemplo)


192.168.16.9
192.168.16.42
192.168.16.10
192.168.16.9
192.168.16.42

De esta forma nuestro objetivo estaria ”casi” cumplido.

tcpdump -i eth0 -n net 192.168.16.0/24 | head -50 | egrep ‘arp who-has’ | awk ‘ { print $NF } ‘

3 – Ordenar Resultados

Podemos dar un paso más allá, podemos ordenar esos registros para una mejor localización. Podemos lograr ese objetivo con ”sort”.

tcpdump -i eth0 -n net 192.168.16.0/24 | head -50 | egrep ‘arp who-has’ | awk ‘ { print $NF } ‘ | head -50 | sort

4 – Eliminar registros repetidos

Lo último que podriamos hacer para que sea realmente fácil localizar un dispositivo generador de tráfico ARP, seria eliminar las ips repetidas y mostrar cuantas veces se han repetido.

Lo podemos hacer con uniq seguido del flag ‘-c‘.

uniq elimina registros repetidos y con el flag -c podemos mostrar el número de veces que se han repetido.

**especial atención que estoy mostrando solamente 5 registros (head -5)

tcpdump -i eth0 -n net 192.168.16.0/24 | head -5 | egrep ‘arp who-has’ | awk ‘ { print $NF } ‘|sort | uniq -c


Con esto obtendriamos una salida similar a esta:

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
1 192.168.16.17
1 192.168.16.26
2 192.168.16.89
1 192.168.16.9
135 packets captured
135 packets received by filter
0 packets dropped by kernel

Habriamos llegado hasta nuestro objetivo, ahora podemos dejar nuestro pc encendido un buen rato, para desvelar quien es el que genera tantas peticiones ARP…

tcpdump -i eth0 -n net 192.168.16.0/24 | head -1000 | egrep ‘arp who-has’ | awk ‘ { print $NF } ‘|sort | uniq -c

*** Preste especial atención. Mostraremos 1000 ips (head -1000).

Imprimiendo hasta 1000 registros, podemos ver claramente que equipos estan generando tráfico ARP a montones. Tardará un poco, tomensé un buen café y disfruten.

Saludos.

By  ZaPa.

Fuentes:

http://everythingsysadmin.com/2004/10/whos-infected.html

Share

6 pensamientos en “Tormentas Broadcast (ARP Storm). Descubriendo el pc infectado

  1. Saludos
    He utilizado el procedimiento que aqui explicas en la red de mi empresa. He descubierto que aquellos usuarios con Laptops generan ARP broadcast preguntando por impresoras en red instaladas en sus equipos, pero que no pertenen a la red de trabajo actual por lo tanto estas impresoras en red nunca respoden y las laptos de los usuarios siguen enviando peticiones ARP broadcast saturando la red .

    Me gustaria saber si existe una forma de evitar este trafico

    Gracias.

  2. Hola Gizmo.

    Antes que nada muchas gracias por visitar el blog!.

    Te comento, el tráfico ARP en si no es un problema, y solo en cantidades MUY EXCESIVAS pueden llegar a “colgar” algun switch o algo similar con lo que no debes de preocuparte demasiado.

    De todas formas, siempre recomiendo para entornos empresariales segmentar la red creando subredes para cada departamento, de esta forma un problema en la red será más identificable. No me gustan demasiados todos los entornos BRIDGE, BRIDGE Y MÁS BRIDGE, el exceso tráfico de ARP baja en estos escenarios mucho la calidad de la red y todos sus recursos. También intenta utilizar en todo momento Switch con el protocolo STP para evitar bucles en la red y aun más cuando las conexiones pueden ser manipuladas usuarios convencionales.

    Mi recomendación: Colocar un router que se encarge de unir todas las redes segmentadas por departamentos y utilizar una red diferente para cada uno de ellos. De esta forma los dominios de difusión (broadcast) serán uno por cada departamento, y no, uno para toda la empresa, será mejor para ti ya qué los problemas se solucionarán e identificaran más rápidamente y la red funcionará mejor.

    Espero haberte ayudado en todo lo posible.
    Un saludo.

  3. muy interesante to explicacion de ARP.

    podrias decirme como puedo hacer la segmentacion, es decir como creo las subredes.

    gracias.

  4. Hola, nosotros hemos observado también el problema que comenta Gizmo de búsqueda de impresoras. Para eliminar los puertos de red obsoletos, al menos en W7, pueden emplearse scripts del propio sistema que hay disponibles en %windir%\system32\Printing_Admin_Scripts

    Pueden verse ejemplos de uso en por ejemplo http://community.spiceworks.com/how_to/show/2661-how-to-utilize-existing-scripts-to-create-batch-files-for-local-installation-of-multiple-network-printers

    Saludos.

  5. muy bueno aunque no se en donde se hace esta cosa alguien sabe donde se ingresan esas cosas que estan explicando?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Anti-spam image