Como se mencionó en el post anterior, CDP es un protocolo propietario de Cisco, el cual se utiliza para realizar un descubrimiento de los dispositivos Cisco que se tienen directamente conectados, el cual entrega una serie de información, con lo que se puede realizar ataques más sofisticados, como por ejemplo, buscar algún bug de software que tenga el switch o el router al que estamos conectado.

Los ataques flooding (inundación), son aquellos ataques donde se envía una gran cantidad de tráfico (en este caso, mensajes CDP), para poder realizar una denegación de servicio (DoS).

El DoS se produce debido que se saturan los recursos del equipo, lo que provoca lentitud en el servicio o total pérdida de este.

El problema que posee CDP, es que no es un protocolo autenticado, lo que produce que cualquier vecino conocido por una interfaz donde está habilitado este es almacenado en su tabla de vecinos CDP.

Tabla de vecinos CDP:

WF-SW1#sh cdp ne
Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
 S - Switch, H - Host, I - IGMP, r - Repeater

Device ID Local Intrfce Holdtme Capability Platform Port ID
WF-R1 Fas 1/0 174 R S I 3725 Fas 0/0

En este ejemplo, se tienen dos equipos (routers 3725, uno de ellos con un módulo de switch), conectados entre si (WF-R1 en la Fa0/0 y WF-SW1 en la Fa1/0).

Para la demostración de este lab, se utilizará la herramienta llamada Yersinia.

NOTA: no se recomienda realizar esto en una red en producción (solo en laboratorio), debido que como se mencionó anteriormente, puede producir perdida de servicios, además de estar violando las políticas de seguridad de donde se realice este ataque, o las leyes del país en el que se encuentren, por lo tanto, no me hago responsable de lo que pase cuando hagan pruebas de lo que se mencionará.

Según su sitio web, es una herramienta de red diseñada para tomar ventaja de alguna debilidad de diferentes protocolos de red.

A continuación se deja una lista con los protocolos soportados por yersinia:

  • Spanning Tree Protocol (STP)
  • Cisco Discovery Protocol (CDP)
  • Dynamic Trunking Protocol (DTP)
  • Dynamic Host Configuration Protocol (DHCP)
  • Hot Standby Router Protocol (HSRP)
  • IEEE 802.1Q
  • IEEE 802.1X
  • Inter-Switch Link Protocol (ISL)
  • VLAN Trunking Protocol (VTP)

Antes de realizar el ataque, vamos a ver ciertos parámetros del funcionamiento del equipo donde esta conectado la máquina atacante.

Estado de la CPU:

WF-SW1#show processes cpu sorted | include CPU|PID Runtime|CDP Protocol
CPU utilization for five seconds: 0%/0%; one minute: 2%; five minutes: 0%
 PID Runtime(ms) Invoked uSecs 5Sec 1Min 5Min TTY Process 
 85 148 38 3894 0.00% 0.11% 0.05% 0 CDP Protocol

Tráfico CDP:

WF-SW1#sh cdp traffic 
CDP counters :
 Total packets output: 64, Input: 3
 Hdr syntax: 0, Chksum error: 0, Encaps failed: 0
 No memory: 0, Invalid packet: 0, Fragmented: 0
 CDP version 1 advertisements output: 0, Input: 0
 CDP version 2 advertisements output: 64, Input: 3

Para comenzar nuestro ataque, usamos el comando yersinia -G para iniciar su interfaz gráfica:

En la interfaz gráfica, damos clic en Launch attack para iniciar nuestro ataque:

Luego seleccionamos el ataque que queremos hacer, que en nuestro caso, es flooding CDP table, y le damos ok:

Como podemos ver, en la GUI de yersinia, aparecen los fake neighbors creados y enviados a nuestro switch:

Esto mismo se replica en la consola del switch:

WF-SW1#sh cdp ne 
Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
 S - Switch, H - Host, I - IGMP, r - Repeater

Device ID Local Intrfce Holdtme Capability Platform Port ID
TTT222F Fas 1/1 142 R B yersinia Eth 0
5IIIIIQ Fas 1/1 143 B r yersinia Eth 0
000NNNN Fas 1/1 143 R S H I r yersinia Eth 0
0000000 Fas 1/1 143 R T I yersinia Eth 0
0000000 Fas 1/1 143 S I r yersinia Eth 0
WWWW000 Fas 1/1 143 R T B r yersinia Eth 0
0000000 Fas 1/1 143 R T B S yersinia Eth 0
0000000 Fas 1/1 143 R T H I yersinia Eth 0
0000000 Fas 1/1 143 R T S H I r yersinia Eth 0
0000000 Fas 1/1 143 R T B H r yersinia Eth 0
SSSSSS0 Fas 1/1 142 R T H I yersinia Eth 0
0000000 Fas 1/1 142 R T B r yersinia Eth 0
0000000 Fas 1/1 142 R T B r yersinia Eth 0
000MMMM Fas 1/1 142 B H r yersinia Eth 0
0000000 Fas 1/1 142 R T H I yersinia Eth 0
0000000 Fas 1/1 142 R T S I r yersinia Eth 0
0000000 Fas 1/1 142 R I yersinia Eth 0
0000000 Fas 1/1 142 S I r yersinia Eth 0
0000000 Fas 1/1 142 R T S H I r yersinia Eth 0
0000000 Fas 1/1 142 R T H I yersinia Eth 0
 
Device ID Local Intrfce Holdtme Capability Platform Port ID
0000000 Fas 1/1 139 H I yersinia Eth 0
0000000 Fas 1/1 139 R T S I r yersinia Eth 0
0000000 Fas 1/1 139 R T H I yersinia Eth 0
0000000 Fas 1/1 139 B H r yersinia Eth 0
00000NN Fas 1/1 139 R H I yersinia Eth 0
0000000 Fas 1/1 139 R T B H r yersinia Eth 0
000RRRR Fas 1/1 139 R I yersinia Eth 0
0000000 Fas 1/1 139 R T B S yersinia Eth 0
0000000 Fas 1/1 139 R T B H r yersinia Eth 0
0000000 Fas 1/1 139 R H I yersinia Eth 0
0000000 Fas 1/1 139 R H I yersinia Eth 0
0000000 Fas 1/1 139 R T H I yersinia Eth 0
0000000 Fas 1/1 138 R T B H r yersinia Eth 0
0000000 Fas 1/1 138 I yersinia Eth 0
0000000 Fas 1/1 138 R T H I yersinia Eth 0
0000000 Fas 1/1 138 R T I yersinia Eth 0
RR00000 Fas 1/1 138 R T B S yersinia Eth 0
0000000 Fas 1/1 138 R B H r yersinia Eth 0
0000000 Fas 1/1 138 R T B r yersinia Eth 0
0000000 Fas 1/1 138 R T S I r yersinia Eth 0
0000000 Fas 1/1 138 R T S H I r yersinia Eth 0
0000000 Fas 1/1 138 R T I yersinia Eth 0
0000000 Fas 1/1 138 R T S I r yersinia Eth 0
 --More--

También podemos ver un incremento en la CPU del equipo:

WF-SW1#show processes cpu sorted | include CPU|PID Runtime|CDP Protocol
CPU utilization for five seconds: 97%/100%; one minute: 93%; five minutes: 49%
 PID Runtime(ms) Invoked uSecs 5Sec 1Min 5Min TTY Process 
 85 205772 78098 2634 73.36% 68.86% 36.92% 0 CDP Protocol

Con respecto al tráfico, se puede ver un gran incremento en los mensajes entrantes:

WF-SW1#sh cdp traffic 
CDP counters :
 Total packets output: 279, Input: 24010
 Hdr syntax: 0, Chksum error: 0, Encaps failed: 0
 No memory: 0, Invalid packet: 0, Fragmented: 0
 CDP version 1 advertisements output: 7, Input: 23998
 CDP version 2 advertisements output: 272, Input: 12

Como se observa, el incremento de la CPU es automático, por lo que puede producir graves daños en la infraestructura de la red, llegando a reiniciar el dispositivo, como también llegar a quemarlo por sobre consumo de sus recursos.

Para poder mitigar este ataque, se pueden usar los siguientes comandos:

  • no cdp run: este comando deshabilita el protocolo de forma global en el dispositivo.
  • no cdp enable: este comando deshabilita el protocolo en una interfaz específica.

A continuación se muestra la mitigación con el comando aplicado en la interfaz:

WF-SW1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
WF-SW1(config)#int f1/1
WF-SW1(config-if)#no cdp enable
WF-SW1(config-if)#

Y al momento de revisar el consumo de CPU de este, vemos que disminuyó de forma considerable, guardando el registro del ataque:

WF-SW1#show processes cpu sorted | include CPU|PID Runtime|CDP Protocol
CPU utilization for five seconds: 2%/0%; one minute: 93%; five minutes: 34%
 PID Runtime(ms) Invoked uSecs 5Sec 1Min 5Min TTY Process 
 85 436888 170987 2555 0.08% 73.36% 2.41% 0 CDP Protocol

Como se pudo observar en este post, se puede generar una denegación de servicio de forma muy sencilla en nuestra infraestructura interna, por lo tanto, se recomienda habilitar este protocolo solo donde sea necesario.