Seguridad con VLANs

VACL (VLAN ACL o VLAN maps) se configuran como un access map VLAN muy parecido a un route map (donde se definen coincidencias y acciones). Cada VACL consiste en un nombre que agrupa a una o más sentencias.

Primero definimos la VACL con el nombre y número de secuencia (opcional):

switch(config)# vlan access-map map-name [sequence-number]

Cada access map se evalúa en orden de secuencia (sequence-number) por lo que es importante indicarlo si no será en orden de configuración.

Seguimos definiendo las condiciones de coincidencia que identifica el tráfico que se filtrará. Estas coincidencias se definidas por listas de acceso IP o direcciones MAC. Para ello usamos uno o más de los siguientes comandos:

switch(config-access-map)# match ip address {acl-number | acl-name}
switch(config-access-map)# match mac address acl-name

Ahora debemos definir la acción a tomar si se produce una coincidencia (la primera que sea):

switch(config-access-map)# action {drop | forward [capture] | redirect type mod/num}

Finalmente debemos aplicar la VACL a la VLAN usando el comando:

switch(config)# vlan filter map-name vlan-list vlan-list

Hay que tener en cuenta que la VACL se aplica GLOBALMENTE a una o más VLANs y no a una interface VLAN (SVI).

EXAMEN: Recordar que tanto routed como bridge ACLs se pueden aplicar tanto inbound como outbound y que las VLAN maps y router ACLs se pueden usar en conjunción.

VLANs privadas (PVLAN) permiten separar en una switch diferentes interfaces de una misma red que no se ven entre ellas (o si entre algunas) pero que todas si permiten ver el GW, es como aislar redes pero en una misma red. Para ello tenemos una vlan primaria (primary) que puede ser asociada con vlans unidireccionales o secundarias (secondary). Los Hosts o dispositivos finales asociados con la vlan secundaria pueden SOLO comunicarse con la vlan primaria (que suele ser el router o GW), pero no pueden comunicarse con otras interfaces de otras vlans secundarias. Un ejemplo sería una vlan con clientes de proveedor de servicios que entre ellos no tiene por qué verse pero SI tienen TODOS que ver el GW para comunicarse con el exterior.

Una VLAN secundaria puede configurarse de dos tipos:

  • isolates: cualquier interface de un switch asociada con una vlan aislada (isolated) puede alcanzar la vlan primaria pero ninguna otra secundaria ni siquiera con otras interfaces asociadas a la misma VLAN aislada. Por eso se llaman aisladas porque solo pueden acceder a la vlan primaria.
  • community: cualquier interface asociada a una vlan de comunidad (community) pueden verse entre ellas y las interfaces de la vlan primaria pero no otras vlans secundarias. Lo que permite tener grupos de interfaces secundarias que se ven entre ellas pero no a otras (que no sean la primaria, claro).

Además cada interface debe configurarse en un modo:

  • promiscuous: esta interfaz es la que conecta con el GW (router, firewall, etc) y por lo tanto puede comunicarse con las vlans primaria o secundarias. Como su nombre indica es una interface promiscua.
  • host: esta interface se conecta a un cliente final (pc o host) que debe ser del tipo isolated o community y por lo tanto SOLO puede comunicarse con una interface promiscua o interfaces en la misma vlan de tipo community.

NOTA: Las VLAN privadas se configuran utilizando casos especiales de VLAN regulares. Sin embargo, el Protocolo VTP no pasa ninguna información sobre la configuración de VLAN privada. Por lo tanto, las VLAN privadas son solo localmente significativas para un switch. Cada una de las VLAN privadas debe configurarse localmente en cada conmutador que las interconecta.

Primero definimos las VLANs secundarias (tantas como necesitemos) con los comandos:

switch(config)# vlan vlan-id
switch(config-vlan)# private-vlan {isolated | community}

Definimos la VLAN primaria e indicamos las VLANs secundarias asociadas a ella con estos comandos:

switch(config)# vlan vlan-id
switch(config-vlan)# private-vlan primary
switch(config-vlan)# private-vlan association {secondary-vlan-list | add secondary-vlan-list | remove secondary-vlan-list}

Definimos la función de la interface que participará en la VLAN privada con el comando:

switch(config)# interface type mod/num
switch(config-if)# switchport mode private-vlan {host | promiscuous}

Si la interface se conecta un host debe ir en host y debemos asociar la VLAN principal y secundaria con el comando:

switch(config-if)# switchport private-vlan host-associaton primary-vlan-id secondary-vlan-id

Si la interface se conecta un GW (router, firewall, etc) debe ir en promiscuous y debemos mapear la interface a la VLAN primaria y a las VLANs secundarias con el comando:

switch(config-if)# switchport private-vlan mapping primary-vlan-id secondary-vlan-id | [add secondary-vlan-id} | [remove secondary-vlan-id}

Como una interface VLAV SVI es de capa 3 la configuración cambia ligeramente, en la interface VLAN debemos mapear las VLANs secundarias sin indicar la VLAN primaria que es la propia interface VLAN SVI con el comando:

switch(config)# interface vlan vlan-id
switch(config-if)# private-vlan mapping secondary-vlan-list | [add secondary-vlan-id} | [remove secondary-vlan-id}

Cuando un puerto está configurado con Dynamic Trunking Protocol (DTP) (por defecto en Cisco una interface está así configurada) y la interface está en auto puede negociar la interface para convertirse en un Trunk, por eso un atacante que conecte un host (PC, server, etc) a una interface DTP en auto podría "negociar" con el switch para establecer un Trunk entre el host y el switch lo que se llama Switch Spoofing (engañar al switch).

Por ello es conveniente que cada interface que no se use ponerla en shutdown y configurar las interfaces donde se conecten usuarios finales en modo acceso y con la VLAN correspondiente con los comandos:

switch(config)# interface type mod/num
switch(config-if)# switchport access vlan-id
switch(config-if)# switchport mode access

El exploit llamado VLAN Hopping consiste en que un atacante marca doblemente el tráfico para poder alcanzar una VLAN que de por si no debería alcanzar. Primero marca con la VLAN que NO puede alcanzar y por encima vuelve a encapsular con la VLAN en la que se encuentra (que será la VLAN nativa), por ejemplo: [VLAN-30][VLAN 50][trama].

Para que este exploit funcione se deben cumplir estas condiciones:

  • El atacante está conectado a una interface en modo acceso
  • El mismo switch tiene configurado trunk 802.1Q
  • El Trunk debe tener configurada como VLAN nativa la misma en la que el atacante esté.

Para evitar este tipo de ataque es conveniente seguir estos pasos:

  1. Configurar la VLAN nativa de los Trunk con una VLAN sin usar o falsa.
  2. Eliminar esa vlan de ambos extremos del Trunk.
  3. Deshabilitar DTP en todos los puertos que no se usen con el comando "switchport nonegotiate".
  4. Definir las interfaces de acceso (switchport mode access) y trunk (switchport mode trunk) explícitamente.
  5. Poner en shutdown todos los puertos que no se usen y asignarles una VLAN que no se use.
  6. Definir explícitamente en los puertos trunks las VLANs que tiene que pasar en vez de dejar pasar todas.

También podemos configurar que la VLAN nativa vaya marcada siempre (y que descarte todo el tráfico SIN marcar) con el comando:

switch(config)# vlan dot1q tag native

Retro

Lugares

Redes

Sistemas

Varios