viernes, 8 de abril de 2016

Hardening del nivel de enlace de red

En artículos anteriores hemos podido comprobar las vulnerabilidades a las que se exponen ciertos protocolos de la capa de acceso de una red, y como su explotación ha sido relativamente sencilla.

En este artículo nos centraremos en configurar medidas que permitan mitigar los riesgos a los que se ve expuesta la capa de acceso a través de estos protocolos.




Tomaremos una topología y configuración base típica y basada en electrónica de red del fabricante Cisco:





En el nivel de acceso nos vamos a encontrar con diferentes protocolos y tecnologías del tipo:


  • Spanning-Tree.
  • MAC ADDRESS.
  • ARP.
  • Virtual Lans (Vlan).
  • Trunking: 802.1q / ISL.
  • Agregación de enlaces (Etherchannel).
  • HSRP.
  • DHCP.
  • 802.1x.


Estos protocolos además de su adecuada configuración para su funcionamiento, también necesitan de una adecuada configuración para mitigar las amenazas de seguridad a las que se pueden ver expuestos.

Habitualmente los atacantes se aprovecharan de los puntos débiles que presentan los protocolos con respecto a la seguridad y al mismo tiempo de la "pobreza" de nuestras configuraciones para subsanar estos puntos débiles.


Configuración base del escenario

  • PVST: Rapid Spanning-Tree Per Vlan.
  • HSRP.
  • Segmentación en Vlanes.
  • Trunk 802.1q.
  • HSRP.

A continuación presentamos una configuración básica del escenario:

SWITCH-1

## Habilitamos PVST y fijamos prioridad para que sea nuestro Switch raíz de la topología
spanning-tree mode rapid-pvst
spanning-tree extend system-id
spanning-tree vlan 10,20 priority 4096


## Habilitamos interfaces trunk, por defecto con encapsulación 802.1q.
interface TenGigabitEthernet0/1
 switchport mode trunk
!

interface GigabitEthernet0/1
 switchport mode trunk
!

Configuramos vlan y direccionamiento para encaminamiento, habilitamos HSRP:

interface Vlan10
 description Vlan Sistemas de Informacion
 ip address 192.168.10.253 255.255.255.0
 standby 10 ip 192.168.10.254
 standby 10 priority 110
 standby 10 preempt
!

interface Vlan20
 ip address 192.168.20.253 255.255.255.0
 standby 20 ip 192.168.20.254
 standby 20 priority 110
 standby 20 preempt
!


Algunos outputs de verificación de nuestro escenario base:

SWITCH-1# show interfaces trunk

Port        Mode             Encapsulation  Status        Native vlan
Te0/1       on               802.1q         trunking      1
Gi0/1       on               802.1q         trunking      1

Port        Vlans allowed on trunk
Te0/1       1-4094
Gi0/1       1-4094


SWITCH-1#sh spanning-tree
VLAN0010
  Spanning tree enabled protocol rstp
  Root ID    Priority    4223
             Address     5475.d071.5000
             This bridge is the root
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    4223   (priority 4096 sys-id-ext 10)
             Address     5475.d071.5000
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time  300 sec

Interface           Role Sts Cost      Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Te0/1               Desg FWD 2         128.1    P2p
Gi0/1               Desg FWD 4         128.2   P2p
       
VLAN020
  Spanning tree enabled protocol rstp
  Root ID    Priority    4257
             Address     5475.d071.5000
             This bridge is the root
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
       
  Bridge ID  Priority    4257   (priority 4096 sys-id-ext 20)
             Address     5475.d071.5000
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time  300 sec
       
Interface           Role Sts Cost      Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Te0/1               Desg FWD 2         128.1    P2p
Gi0/1               Desg FWD 2         128.2    P2p



SWITCH-2

## Habilitamos PVST y fijamos prioridad como switch raíz de backup, en caso de fallo del switch raíz principal.

spanning-tree mode rapid-pvst
spanning-tree extend system-id
spanning-tree vlan 10,20 priority 8192

## Configuramos enlaces trunk

interface TenGigabitEthernet1/1
 switchport mode trunk
!

interface GigabitEthernet1/1
 switchport mode trunk
!

## Configuramos Vlan, direccionamiento y HSRP:

interface Vlan10
 description ALUMNO-EPS
 ip address 192.168.10.252 255.255.255.0
 standby 10 ip 192.168.10.254
 standby 10 priority 99
 standby 10 preempt
!

interface Vlan20
 ip address 192.168.20.252 255.255.255.0
 standby 10 ip 192.168.20.254
 standby 10 priority 99
 standby 10 preempt
!


SWITCH-3

## Habilitamos puertos de acceso en Vlanes 10,20.
## Recordemos que la directiva PortFast permite evitar estados transitorios de Spanning-Tree, por lo tanto se asume que no se van a recibir ni enviar BPDUs por estos puertos.

interface GigabitEthernet0/1
 switchport access vlan 10
 switchport mode access
 spanning-tree portfast
!

interface GigabitEthernet0/1
 switchport access vlan 20
 switchport mode access
 spanning-tree portfast
!

interface GigabitEthernet0/25
 switchport mode trunk
!

interface GigabitEthernet0/28
 switchport mode trunk
!

En este artículo y posteriores veremos como securizar este escenario, comenzaremos por el protocolo Spanning-Tree (STP)


Securizando Rapid Spanning-Tree Protocol


Una de las debilidades más importantes de este protocolo es que no soporta autentificación, lo que quiere decir que cualquiera puede participar en la operativa del protocolo (un atacante puede conectar su equipo a la red e intercambiar BPDUs tranquilamente).

Además, tanto STP y RSTP se basan en el intercambio de mensajes (BPDUs) para cualquier cambio que se produce en la topología, lo cual consume recursos y lo hace un protocolo muy expuesto a amenazas de tipo DoS.

Para securizar RSTP haremos uso de  dos directivas en nuestra electrónica de red: bpduguard y rootguard.



bpduguard

Para evitar comportamientos no controlados en puertos de acceso Portfast de Cisco, tenemos la funcionalidad BPDGuard que permite bloquear el puerto cuando recibe un mensaje BPDU.




Como pudimos comprobar en un artículo anterior estos puertos de acceso en manos de un atacante pueden desestabilizar por completo la topología de red causando una denegación de servicio, entre otras cosas.

bpduguard se puede habilitar en la electrónica de acceso tanto a nivel global como a nivel de puerto de acceso:

interface GigabitEthernet0/1
 switchport access vlan 10
 switchport mode access
 spanning-tree portfast
 spanning-tree bpduguard enable
!    

Cuando bpduguard bloquea el puerto, la interfaz queda en estado errdisabled:

GigabitEthernet0/1 is up, line protocol is down (errdisable)
  Hardware is Gigabit Ethernet, address is 001b.5388.df05 (bia 001b.5388.df05)
  Description: D1223 - delies
  MTU 1500 bytes, BW 1000000 Kbit, DLY 10 usec,
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation ARPA, loopback not set

Existen funcionalidades de Cisco para que una vez transcurrido cierto intervalo de tiempo, el puerto vuelva a levantar, aunque puede interesar poder enterarnos:

En modo global podemos configurar:

switch(config)# errdisable recovery cause bpduguard

switch(config)# errdisable recovery interval 600 (segundos)


rootguard


La topología STP dispone de un único Switch raíz a partir del cual se calcula una topología libre de bucles, para evitar la aparición de nuevos Switches raíces en la topología no controlados, podemos configurar la directira rootguard.





Un atacante puede enviar mensajes BPDU modificados (ver yersinia) simulando el comportamiento de un Switch con una prioridad más baja que la del Switch ráiz actual. El algoritmo STP provocaría un cambio de topología que se propagaría a toda la infraestructura, la cual pensaría que el switch raíz ahora es el "Equipo atacante".

rootguard permite el intercambio de BPDUs, pero no permite BPDUs con prioridades inferiores al switch ráiz elegido, básicamente rootguard evita que se pueda negociar la elección de un nuevo switch raíz por un puerto donde no debería existir un Switch raíz. 

El punto adecuado donde ubicar esta directiva es en la capa de distribución:
Teniendo los puertos de acceso con PortFast, la directiva rootguard será configurada en aquellos enlaces troncales que conectan con Switches donde se puedan conectar otros Switches que nunca deberían ser switches root,.


interface GigabitEthernet0/1
 switchport trunk encapsulation dot1q
 switchport mode trunk
 spanning-tree guard root





PORT SECURITY

Otras de las directivas muy importantes a tener en cuenta para securizar nuestro nivel de acceso es port-security.

Un puerto accesible para un usuario es un punto de entrada a la red, debemos controlar en todo momento quien, cuando y cuantos acceden a través de un puerto.


CAM overflow

Sabemos que el nivel de enlace opera con direcciones físicas (MAC Address), para los switches es su alimento, las guardan en unas tablas de tamaño estático Content Addressable Memory (CAM) que les permite asociar la información de puerto físico de switch con la MAC de equipo y datos de Vlan.

El ataque CAM overflow consiste en saturar la tabla CAM de un Switch con direcciones físicas falsas, momento a partir del cual el Switch se comporta como un Hub, reenviando las tramas por todos los puertos del Switch dentro de la misma Vlan, (el atacante podrá observar todo el tráfico) ya que no es capaz de identificar a que puerto concreto tiene que enviar la trama.

Para que tenga éxito este ataque, el atacante tiene que estar continuamente enviado MACs falsas, de forma que no se alcancen los "timers" de expiración de entradas de la tabla CAM del Switch,  lo que liberaría espacio en la tabla.

Este ataque puede ser implementado mediante la suite dsniff y la herramienta macof


La directiva port-security nos ayuda a mitigar este tipo de ataque, y aunque lo veremos más en profundidad en artículos posteriores, también contribuye a mitigar ataques de DoS contra servidores DHCP.

La directiva nos permite:


  • Establecer políticas de control de acceso al puerto por MAC, 
  • Definir cuantas MACs conocidas soportamos.
  • Decidir que hacemos con el puerto si no cumple nuestra política.



interface GigabitEthernet0/1
 switchport access vlan 10
 switchport mode access
 switchport port-security maximum 1
 switchport port-security
 switchport port-security violation shutdown
 switchport port-security mac-address sticky (va a aprender y permitir la MAC conectada en ese momento).
 switchport port-security mac-address sticky 000b.86c7.4ee8 vlan access (automáticamente esta línea mostrará la mac aprendida)
 spanning-tree portfast
 spanning-tree bpduguard enable
!      


Algunos outputs interesantes:

SWITCH-3#sh port-security 
Secure Port  MaxSecureAddr  CurrentAddr  SecurityViolation  Security Action
                (Count)       (Count)          (Count)
---------------------------------------------------------------------------
    Gi0/1              1            0                  0         Shutdown



SWTICH-3#sh mac address-table count 
Mac Entries for Vlan 10:
---------------------------
Dynamic Address Count  : 9
Static  Address Count  : 0
Total Mac Addresses    : 9

Mac Entries for Vlan 20:
---------------------------
Dynamic Address Count  : 39
Static  Address Count  : 0
Total Mac Addresses    : 39


SWITCH-3#show platform tcam utilization
CAM Utilization for ASIC# 0                      Max            Used
                                             Masks/Values    Masks/values

 Unicast mac addresses:                        784/6272         98/710
 IPv4 IGMP groups + multicast routes:          152/1216          6/26  
 IPv4 unicast directly-connected routes:       784/6272         98/710
 IPv4 unicast indirectly-connected routes:     272/2176          8/44  
 IPv4 policy based routing aces:                 0/0             0/0  
 IPv4 qos aces:                                768/768         260/260
 IPv4 security aces:                          1024/1024         39/39  




Algunas recomendaciones adicionales

  • Los puertos no utilizados en modo shutdown.
interface GigabitEthernet0/3
 shutdown
!
  • Segmentación de la red en redes virtuales (Vlanes) de acuerdo a roles o perfiles de acceso.
  •  Deshabilitar aquellos protocolos no necesarios, como por ejemplo CDP:

Cisco Discovery Protocol, es un protocolo propietario de Cisco pensando para intercambiar información y aprender de los dispositivos Cisco interconectados.




Vimos como este protocolo permite obtener mucha información sobre la red y el dispositivo, por lo tanto la recomendación sino se utiliza es deshabilitarlo.

Switch-3(config)# no cdp run

  • Medidas de control del tráfico broadcast:
Storm Control: Este comando permite limitar el tráfico de broadcast/multicast/unicast que ingresa en una interfaz: Cuando el tráfico entrante durante un ratio de 1 segundo alcanza el porcentaje configurado (6%) de la capacidad de la interfaz, la directiva empieza a tirar el tráfico.


interface GigabitEthernet0/2
 switchport access vlan 10
 switchport mode access
 storm-control broadcast level 6.00
 switchport protected
 spanning-tree portfast
 spanning-tree bpduguard enable
end


  •  No bases la identificación de usuarios para el acceso a tu red en base a su MAC.



En próximos artículos seguiremos proponiendo nuevas medidas que nos permitan incrementar los niveles de seguridad de nuestra capa de acceso.

Saludos

No hay comentarios:

Publicar un comentario