Si tenemos una red donde solo debe haber un host con el servicio DHCP, debemos evitar a toda costa que un nuevo equipo entre en la red y suplante el DHCP legitimo. Los principales problemas que pueden acarrear la suplantación DHCP, es que el nuevo servidor DHCP otorge direcciones IP fuera del rango de red real, servidores DNS erroneos, que pueden dar a la resolución de páginas web con Phishing etc… y por ende con el robo de credenciales de acceso, datos personales, empresariales, etc…
Como ya hable en alguna entrada anterior, para poder conseguir situar de manera más fácil un servidor DHCP ilegitimo en la red, se puede utilizar un ataque de agotamiento DHCP para dejar el servidor legitimo sin direcciones que dar a los host.
Si tenemos un switch configurable, podemos designar que puertos van a ser confiables y cuales no, para decidir por cuales de ellos se podrán enviar paquetes con el protocolo DHCP y por cuales no. De esa manera nos aseguraremos de que en nuestra red solo podrá haber un servidor DHCP funcionando.
Snooping DHCP
El Snooping DHCP se basa en designar que puertos del switch son confiables y cuales no.
Puertos confiables: tienen permitido el envio de solicitudes DHCP y acuses de recibo DHCP es decir, puede haber un servidor DHCP conectado directamente en ese puerto al igual que puede haber un cliente que realice una petición.
Puerto no confiables: tienen permitido el envio de solicitudes DHCP pero no el acuse de recibo DHCP, es decir no tienen permitido que haya un servidor DHCP conectado a determinado puerto. Cuando se procesa un acuse de recibo DHCP a través de un puerto no confiable, este automaticamente se pone como inactivo.
Para activar el DHCP Snooping en un switch Cisco, debemos ejecutar el siguiente comando:
Switch# configure terminal
Switch(Config)# ip dhcp snooping
Además habrá que indicar sobre que VLAN va a actuar el DHCP Snooping; en mi caso será la 1, ya que por defecto existe la VLAN 1 en los switch y esta engloba todas las interfaces existentes. Esta será la vlan que protegeré:
Switch(Config)# ip dhcp snooping vlan 1

A continuación hay que designar que puertos van a ser confiables, por ejemplo, si el servidor DHCP legitimo de nuestra red estuviese conectado al puerto FA0/1 del Switch, ejecutariamos:
Switch(Config)# interface fa0/1
Switch(Config-if)# ip dhcp snooping trust
De esa manera, conseguiriamos que un servidor DHCP ilegitimo no consiguiera otorgar un direccionamiento IP a un Host de la red. Veamos el siguiente ejemplo:

Existe un servidor DHCP legitimo y otro que no lo es, este DHCP otorga un direccionamiento IP distinto al de la red real, dando un direccionamiento de clase B en vez de C, con esto se conseguiría que el nuevo Host quedase fuera de la red real, y que se le otorgaran otros DNS y Gateway, pero si aplicamos los comandos superiores, el switch evitará que paquetes con el protocolo DHCP salgan desde ese puerto.

Si además queremos evitar que no haya ningun otro host detrás de dicho puerto, podemos agregar la dirección MAC del servidor DHCP como estatica para dicho puerto. Para ello ejecutariamos:
Switch(Config)# interface fa0/1
Switch(Config-if)# switchport mode access
Switch(Config-if)# switchport port-security
Switch(Config-if)# switchport port-security mac-address dirección-mac
Debemos ejecutar el comando switchport mode access, ya que si el puerto se encuentra en modo de configuración dinamica, no nos dejará establecer la ‘seguridad por puertos’. El comando switchport port-security activa la seguridad por puertos en la interfaz y a continuación se añade manualmente la MAC del servidor DHCP; cabe recalcar que podriamos añadir mas de una direccion MAC por puerto y establecer un maximo de direcciones MAC para cada puerto igualmente, lo cual lo hariamos de la siguiente forma:
Switch(Config-if)# switchport port-security maximum N
Donde N seria el numero máximo de MAC’s por puertos.
Si no queremos añadir manualmente las direcciones MAC podriamos ejecutar el siguiente comando que haría que el Switch fuese aprendiendo las direcciones dinamicas MAC automaticamente:
S1(Config-if)# switchport port-security mac-address sticky
Cuando se detecta el envio de un paquete donde la MAC de origen no es la establecida el puerto se desactiva, a esto se le llama violacion de seguridad. En la imagen 4 vemos como todas las interfaces que tengo en este momento estan ‘Up’. Cuando se detecte el envio de un paquete con dirección MAC origen no establecida pasaran a estar en modo Down, (uno de los modos de violación existente), esto es debido a que por defecto se utiliza el modo de violación shutdown.

Modos de violación de seguridad
La seguridad de los puertos puede ser violada de distintas maneras, una de ellas puede ser cuando el puerto alcanza el numero de maximo de MACs permitidas, o por ejemplo, en el caso anterior, cuando se detecta una MAC distinta a la definida o cuando una MAC que ha sido definida para un puerto se puede detectar en otro, es decir en el caso de que se estuviese realizando MAC Spoofing, para realizar algún ataque MITM con ARP Spoofing, por ejemplo.
Para reaccionar a estas violaciones hay tres formas distintas:
- Protect: cuando la cantidad de direcciones MAC seguras alcanza el límite permitido para el puerto, los paquetes con direcciones de origen desconocidas se descartan hasta que se elimine una cantidad suficiente de direcciones MAC seguras o se aumente la cantidad máxima de direcciones permitidas. Con este metodo no se produce ninguna notificación de que se produjo una violación de la seguridad.
- Restrict: este funciona de la misma forma que el anterior pero si hay una notificación de que se produjo una violación de seguridad.
- Shutdown: en este modo de violación (el cual es el predeterminado), una violación de seguridad de puerto produce que la interfaz se inhabilite de inmediato y que se apague el LED del puerto. Aumenta el contador de violaciones. Cuando hay un puerto seguro en estado inhabilitado por errores, se lo puede sacar de dicho estado mediante la introducción de los comandos shutdown y no shutdown del modo de configuración de interfaz.
Para cambiar el modo de violación en un puerto, ejecutariamos:
Switch(Config-if)# switchport port-security violation {protect | restrict | shutdown}.
2 comentarios sobre “Evitando DHCP Spoofing con un Switch Cisco”