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