Dynamic ARP Inspection es una funcionalidad de seguridad en la red y como su nombre indica, se basa en la inspección dinámica de las resoluciones de direcciones de capa de enlace que se reciben en un puerto de un switch o router.
Su funcionamiento consiste en verificar que las peticiones y respuestas ARP son válidas.
Por tanto, el binding entre direcciones IP y MAC en un determinado puerto es verificado, evitando así un envenenamiento de ARP o ARP Poisoning y en consecuéncia, un MiTM ( Man in the middle ).
Existen diferentes técnicas para obtener éxito en un ataque MiTM. Hasta ahora hemos visto DHCP Snooping o cómo evitar que en un puerto no autorizado se erija un servidor DHCP o se envíen paquetes DHCP de servidor. En este post vamos a analizar la contramedida a un ataque MiTM basado en envenenamiento ARP.
Dymanic ARP Inspection puede operar en entornos con y sin DHCP Snooping.
Si tenemos DHCP Snooping, DAI obtendrá el binding MAC-IP de la tabla de dhcp snooping y verificará de forma dinámica que las resoluciones ARP son coherentes. Si no tenemos DHCP Snooping, tendremos que configurar a mano este binding que DAI espera. Esto es, habrá que configurar la relación IP-MAC a mano.
Es por este motivo que si deseamos tener estas funcionalidades de seguridad, es recomendable que realicemos reservas dhcp a aquellos equipos que necesiten una pseudo ip fija y movilidad a la vez.
Configuración de Dynamic ARP Inspection en un entorno con DHCP Snooping:
Aquí no están autorizadas las ip’s fijas en puertos untrusted.
1 - Activamos DAI en la/s vlan/s switch#configure terminal Enter configuration commands, one per line. End with CNTL/Z. switch(config)# ip arp inspection vlan 11,20,30 2 - Configuramos el ratio de paquetes por segundo en los puertos untrust ( opcional ) switch(config)#interface FastEthernet 0/1 switch(config-if)#ip arp inspection limit rate ? <0-2048> Packets per second 3 - Configuramos los puertos confiables/trust ( típicamente los trunks entre switches y puertos de routers y firewalls ) switch(config)#interface GigabitEthernet 0/1 switch(config-if)#ip arp inspection trust
Configuración de Dynamic ARP Inspection en un entorno sin DHCP Snooping ( no recomendable )
Seria la misma configuración que la anterior añadiendo las excepciones a mano :
ip source binding <mac> vlan <nº de vlan> <ip host > interface < nº de interfaz >
o bien añadiendo acl’s de capa 2 :
ip arp inspection filter <arp-acl-name> vlan <vlan-range> [static]
Verificación :
show ip arp inspection
Logs:
En el siguiente log vemos un intento de envenenamiento ARP de un host que se hace pasar por la gateway de la red ( 192.168.1.1 ) hacia un host legítimo. El switch en este caso ha denegado el tráfico de envenenamiento ARP, que llevaría a un Man In the Middle del host atacado. El log generado es enviado por syslog a un servidor que pocesará el evento y enviará un correo a los administradores de la red alertando del ataque y localizando al atacatante ( nombre de switch y puerto ).
May 13 17:23:13 DST: %SW_DAI-4-DHCP_SNOOPING_DENY: 1 Invalid ARPs (Res) on Fa0/14, vlan 11.([0021.aaaa.cccc/192.168.1.1/0021.aaaa.bbbb/192.168.1.184/17:23:13 DST Fri May 13 2011])
La descripción del Identificador del Evento es :
%SW_DAI-4-DHCP_SNOOPING_DENY: [dec] Invalid ARPs ([chars]) on [chars], vlan [dec].([[enet]/[chars]/[enet]/[chars]/[time-of-day]])
This message means that the switch has received Address Resolution Protocol (ARP) packets considered invalid by ARP inspection. The packets are erroneous, and their presence can show attempted man-in-the-middle attacks in the network. This log message appears when the IP and MAC address of the sender binding for the received VLAN is not present in the DHCP snooping database.
Si se diese un positivo de Dynamic ARP Inspection, por defecto el puerto entrará en err-disable, desactivando el link del mismo. Existe a criterio de los administradores ofrecer la recuperación del link del puerto de forma automática tras X segundos mediante :
errdisable recovery cause arp-inspection errdisable recovery interval ? <30-86400> timer-interval(sec)
Cabe decir que el comando errdisable recovery es global, por lo que todos los eventos posibles que provoquen un errdisable recuperarán en el intervalo configurado y son :
switch#show errdisable recovery ErrDisable Reason Timer Status ----------------- -------------- arp-inspection Disabled bpduguard Disabled channel-misconfig Disabled dhcp-rate-limit Disabled dtp-flap Disabled gbic-invalid Disabled inline-power Disabled link-flap Disabled mac-limit Disabled loopback Disabled pagp-flap Disabled port-mode-failure Disabled psecure-violation Disabled security-violation Disabled sfp-config-mismatch Disabled small-frame Disabled storm-control Disabled udld Disabled vmps Disabled