Como el “port-security” nos deja afuera de la red

Fecha: 13 de diciembre del 2021

 

Escenario

 

Este lab es muy simple, pero es parte de un escenario mucho más complejo y se lo quiero dedicar al Dodi, que

gracias a sus trapisondas en los racks me inspiraron a documentarlo.

 

Tenemos un server provisorio en un ambiente digamos, “hostil” y vamos a “meterle” seguridad migrándolo a un

ambiente más controlado, y esto genera una auto-DoS que deja el equipo fuera de línea.

 

 

Inicialmente los servers son VMs en un VMware o similar, y las vamos a mover a otro mas seguro donde estará

el port-security habilitado entre otras cosas, ya que (repito) estará en un ambiente inseguro.

 

 

Mientras se configura el puerto con todo lo necesario, no hay nada conectado al port “segurizado” pero al conectarle

el VMware (o similar) y mover una de las VM a donde estarán definitivamente todas las VMs tenemos un fuera de

línea imprevisto debido a que ahora el port-security movió la MAC de dinámica en el port 1 a estática en el port 2,

generando un black-hole que nos hace una DoS.

 

 

 

Vayamos a analizar....

 

1.- Con un switch 2960:

 

1.1.- Verificación inicial:

 

1.1.1.- Desde el switch:

 

Cisco2960#sh arp

Protocol  Address          Age (min)  Hardware Addr   Type   Interface

Internet  192.168.1.1             -        a418.75bd.e5c0  ARPA   Vlan1

Internet  192.168.1.10            0      001b.387e.f171  ARPA    Vlan1

Cisco2960#

 

Cisco2960#sh mac add dynamic

          Mac Address Table

-------------------------------------------

Vlan    Mac Address       Type              Ports

------    —---------------       --------           —------

   1      001b.387e.f171    DYNAMIC     Gi1/0/1

Total Mac Addresses for this criterion: 1

Cisco2960#

 

1.1.2.- Desde otro host:

 

C:\>ping 192.168.1.10

 

Haciendo ping a 192.168.1.10 con 32 bytes de datos:

Respuesta desde 192.168.1.10: bytes=32 tiempo=1ms TTL=64

Respuesta desde 192.168.1.10: bytes=32 tiempo=1ms TTL=64

 

1.2.- Configuramos el port segurizado:

 

Cisco2960#conf t

Enter configuration commands, one per line.  End with CNTL/Z.

Cisco2960(config)#int Gi1/0/2

Cisco2960(config-if)#switchport mode access

Cisco2960(config-if)#sw port-security

Cisco2960(config-if)#sw port-security maximum 10

Cisco2960(config-if)#sw port-security mac-address 001b.387e.f170

Cisco2960(config-if)#sw port-security mac-address 001b.387e.f171

Cisco2960(config-if)#end

Cisco2960#

 

1.3.- Verificamos:

 

Cisco2960#show runn int Gi1/0/2

Building configuration...

 

Current configuration : 236 bytes

!

interface GigabitEthernet0/2

 switchport mode access

 switchport port-security maximum 10

 switchport port-security mac-address 001b.387e.f170

 switchport port-security mac-address 001b.387e.f171

 switchport port-security

 spanning-tree bpdufilter enable

 storm-control broadcast level 0.01

  no cdp enable

end

 

Cisco2960#

 

1.4.- Conectamos el VMware (o similar):

 

 

*Jan  2 00:11:51.555: %LINK-3-UPDOWN: Interface GigabitEthernet0/2, changed state to up

*Jan  2 00:11:52.561: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/2, changed state to up

Cisco2960#

 

1.5.- Verificamos:

 

1.5.1.- Desde otro host:

 

C:\>ping 192.168.1.10  (no llegamos al host)

 

Haciendo ping a 192.168.1.10 con 32 bytes de datos:

Tiempo de espera agotado para esta solicitud.

Tiempo de espera agotado para esta solicitud.

Tiempo de espera agotado para esta solicitud.

---omitido---

 

1.5.2.- Desde el switch:

 

1.5.2.1.- MACs aprendidas dinámicamente:

 

Cisco2960#sh mac add dynamic (no vemos MAC aprendidas dinámicamente)

          Mac Address Table

-------------------------------------------

 

Vlan    Mac Address       Type        Ports

----    -----------       --------    -----

Cisco2960#

 

1.5.2.2.- Verificamos todas las MAC aprendidas:

 

Cisco2960#sh mac add

          Mac Address Table

-------------------------------------------

 

Vlan    Mac Address       Type        Ports

----    -----------       --------    -----

---omitido---

   1     001b.387e.f170    STATIC      Gi1/0/2

   1     001b.387e.f171   STATIC      Gi1/0/2 (ahora la MAC pasó forzada del port 1 al port 2)

   1     e86a.64dc.e2f5    STATIC      Gi1/0/2

Total Mac Addresses for this criterion: 23

Cisco2960#

 

1.6.- Realizamos la contrapueba:

 

1.6.1.- Bajamos el VMware (o similar) para verificar.

 

 

*Jan  2 00:21:36.635: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet0/2, changed state to down

*Jan  2 00:21:37.642: %LINK-3-UPDOWN: Interface GigabitEthernet0/2, changed state to down

 

1.6.2.- Verificamos en el switch:

 

Cisco2960#sh mac add

          Mac Address Table

-------------------------------------------

 

Vlan    Mac Address       Type              Ports

------    -----------------       --------            -------

---omitido---

   1    001b.387e.f171    DYNAMIC     Gi1/0/1

Total Mac Addresses for this criterion: 21

Cisco2960#

 

1.6.3.- Desde otro host:

 

C:\>ping 192.168.1.10

 

Haciendo ping a 192.168.1.10 con 32 bytes de datos:

Respuesta desde 192.168.1.10: bytes=32 tiempo=1ms TTL=64

Respuesta desde 192.168.1.10: bytes=32 tiempo=1ms TTL=64

 

 

2.- Pruebas con Packet Tracer:

 

Para los que no tienen un 2960 u otro modelo para probar (nunca hacer esto en producción), intentamos reproducir

la prueba con Packet Tracer y verificar si se comportaba de manera similar.

 

 

2.1.- Verificación inicial:

 

2.1.1.- Desde otro host:

 

C:\>ping 192.168.1.10

 

Pinging 192.168.1.10 with 32 bytes of data:

 

Reply from 192.168.1.10: bytes=32 time=3ms TTL=128

Reply from 192.168.1.10: bytes=32 time<1ms TTL=128

Reply from 192.168.1.10: bytes=32 time=2ms TTL=128

Reply from 192.168.1.10: bytes=32 time<1ms TTL=128

 

Ping statistics for 192.168.1.10:

    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

Approximate round trip times in milli-seconds:

    Minimum = 0ms, Maximum = 3ms, Average = 1ms

 

C:\>

 

2.1.1.- Desde el switch:.

 

SW-Core#sh mac address-table

          Mac Address Table

-------------------------------------------

 

Vlan    Mac Address       Type             Ports

----    —-------------------    --------------    -------------

 

   1    001b.387e.f171     DYNAMIC     Gig1/0/1

   1    0060.5c55.4e13    DYNAMIC     Gig1/0/20

SW-Core#

 

2.2.- Configuramos el prot security en la conexión al otro server:

 

SW-Core(config)#int gi1/0/24

SW-Core(config-if)#sw mode access

SW-Core(config-if)#switchport port-security

SW-Core(config-if)#switchport port-security maximum 10

SW-Core(config-if)#switchport port-security mac-address 001b.387e.f170

SW-Core(config-if)#switchport port-security mac-address 001b.387e.f171

Found duplicate mac-address 001b.387e.f171. (no nos permite replicar la prueba)

SW-Core(config-if)#

 

 

3.- Resumen:

 

Si bien los resultados son predecibles, una tarea de rutina como esta puede causarnos un downtime inesperado, una DoS

inesperada, con el consiguiente dolor de cabeza inesperado.

 

A saber: generalmente todo lo estático tiene prioridad por sobre lo dinámico (MACs, ARP, rutas, etc).

 

(2021) Security is also a loaded weapon

Rosario, Argentina