VLAN es el acrónimo de
“Virtual Local Area Network” o red LAN virtual, se utilizan para
segmentar una red LAN en varias subredes a nivel lógico con
independencia del nivel físico. Con esto se permite conseguir aislar
el tráfico de red agrupando distintos grupos de host, por ejemplo,
una VLAN por departamento.
Las
ventajas que se consiguen con el uso de VLAN son varias, por un lado,
se consigue limitar el tráfico de broadcast ya que se utilizan
múltiples subredes distintas, por otro, se consigue aumentar en
cierta medida la seguridad al segmentar lógicamente unos
dispositivos de otros ya que, aunque las VLAN funcionan a nivel dos
en la capa OSI, requieren de un dispositivo de nivel tres para poder
enrutar entre VLANS puesto que, por norma general, cada VLAN está
asociada a una subred distinta.
Para
realizar la distinción entre una VLAN y otra, se utiliza, por norma
general, el protocolo
802.1Q de etiquetado con la finalidad de indicar que es una trama
etiquetada y la VLAN a la que pertenece.
Formato trama 802.1Q |
Ahora
bien, los switches se han de configurar para indicarle el/las VLAN
que se permiten en un puerto físico del mismo, así como ciertas
características con respecto a si a dicho puerto físico del switch
se conectará un dispositivo final, otro switch por el que fluirán
múltiples VLAN, lo que se denomina como un puerto “trunk”, etc.
Los
switches de Cisco incorporan un protocolo propietario denominado DTP
(Dynamic
Trunking Protocol) que se encarga de detectar otro switch Cisco
interconectado para establecer automáticamente los puertos de tipo
“trunk”.
Esto
que puede parecer una gran comodidad puede ser un arma de doble filo
ya que, por defecto, los puertos del switch tienen DTP activado en
modo “auto”, lo que quiere decir que, si el otro extremo de la
conexión lo solicita, se negociará un puerto de tipo “trunk”.
Para
que un atacante pueda saltar de VLAN en un escenario así no tiene
más que solicitar negociar el enlace “trunk” para poder
comunicarse con cualquier otra VLAN, para ello existen diversas
maneras, quizá la más sencilla sea usar Yersinia.
Aquí un apunte, los que uséis Debian o distros que recurran a sus
repositorios comentar que la versión disponible de Yersinia no
funciona bien en modo interfaz interactiva (tipo ncurses) por lo que,
o compilamos desde fuentes, o utilizamos alguno de los otros métodos
de uso de Yersinia.
En
este caso, muestro cómo hacer el ataque de negociación de DTP trunk
de manera directa:
Yersinia negociando un puerto trunk |
Si
capturamos el tráfico con Wireshark y esperamos a que se negocie el
puerto, veremos lo siguiente:
Puerto trunk negociado y primer tráfico broadcast |
Como
podemos observar, una vez que se ha negociado el puerto trunk,
recibimos tráfico ARP de la subred 10.10.10.1 perteneciente a la
VLAN 123:
802.1Q VLAN Tag |
Ahora
sólo tenemos que configurar una subinterfaz en la máquina atacante
para indicarle que pertenece a una VLAN y los datos de la misma:
Configuración VLAN mediante vconfig |
Ya
podemos acceder a dicha VLAN, para probarlo, basta con un simple
ping:
Salto de VLAN realizado |
Con
esto ya habríamos conseguido saltar de VLAN y podríamos intentar
seguir comprometiendo la red en la que nos encontremos haciendo el
pentest.
Existen
varias defensas frente a este ataque, la primera de ellas es
desactivar
DTP, tal y como nos cuenta Jeremy Stretch en su fabuloso
blog, la segunda, y si estamos utilizando el protocolo VTP
(Virtual
Trunking Protocol), es utilizar la característica de “vtp
pruning” para evitar que se envíe tráfico de broadcast a
switches que no tengan puertos registrados en la VLAN a la que
corresponde dicho tráfico de broadcast. La opción más correcta es
la primera, puesto que es la única que realmente desactiva la
posibilidad de negociar un puerto trunk.
Hasta
la próxima!