目錄

前言
Trunk Link 欺騙
防禦對策
VLAN Hopping

前言

Dynamic Trunking Protocol (DTP) 本來可以讓 Switch 與 Switch 之間方便地建立 Trunk Link,但卻成為網絡上一個可以被攻擊的弱點。本文會嘗試用 Yersinia 去攻擊 Switch 的 DTP 從而影響 VLAN 運作,假設讀者已了解 VLAN 及 DTP 的理論。

⛑️  本文目的只為學術研究,解釋網絡漏洞及防治方法,並不鼓勵任何犯法行為,敬請留意。⛑️

Trunk Link 欺騙

在預設情況下,Switch Port 的 DTP 是被設為 Dynamic Auto 的,如果遇到對方是 Dynamic Desirable 就會由 Access Link 轉為 Trunk Link。所以 Attacker 要騙取 Trunk Link 方法很簡單,只要向 Switch Port 定時發放 Dynamic Desirable 的 DTP 訊息即可。

請看以下例子,Attacker 與 PC 分別被放在 VLAN10 和 VLAN20,不透過 Gateway 的話,理論上它們是沒法溝通的。可惜 SW1 的 Fa1/0/24 是 Dynamic Auto Mode,讓 Attacker 有機可乘。

vlan-attack

SW1#show int fastEthernet 1/0/24 trunk 

Port        Mode         Encapsulation  Status        Native vlan
Fa1/0/24    auto         negotiate      not-trunking  1

Port        Vlans allowed on trunk
Fa1/0/24    10

Port        Vlans allowed and active in management domain
Fa1/0/24    10

Port        Vlans in spanning tree forwarding state and not pruned
Fa1/0/24    10

Attacker 打開 Yersinia,按 gDTP 預備進行 Dynamic Trunking Protocol 攻擊。

vlan-attack

x1,Yersinia 就會開始發出 DTP 與 Switch 溝通並成為 Trunk。

vlan-attack

SW1#show int fastEthernet 1/0/24 trunk 

Port        Mode         Encapsulation  Status        Native vlan
Fa1/0/24    auto         n-802.1q       trunking      1

Port        Vlans allowed on trunk
Fa1/0/24    1-4094

Port        Vlans allowed and active in management domain
Fa1/0/24    1,11-20

Port        Vlans in spanning tree forwarding state and not pruned
Fa1/0/24    none

由於已經成為 Trunk Link,Attacker 可以發 Packet 到任何 VLAN,測試一下,按 g 切換到 802.1Q

vlan-attack

由於騷擾對像是 VLAN20,首先按 e 把 Packet 的 VLAN 修改成 20

vlan-attack

x 再選 0 即可發出一個 Broadcast ICMP Packet (Destination IP: 255.255.255.255) 到 VLAN20,如果在 PC 用 Wireshark 擷取的話可以清楚看到這個 Packet。

vlan-attack

這樣,Attacker 就可以配合軟件對 VLAN20 作出 ARP Spoofing、DHCP Spoofing 或 Man-in-the-middle 等攻擊。

防禦對策

解決方法是網絡管理員要勤力一點,把連接 Host 的 Port 都關掉 DTP,即改行 Access Mode,Host 便無法與 Switch 成為 Trunk Link。

SW1(config-if)#switchport mode access

VLAN Hopping

在遠古時代,就算轉用 Access Mode,Attacker 仍有方法進行 VLAN 攻擊,稱為 VLAN Hopping Attack 或 Double Tag Attack。請看下圖,SW1 和 SW2 之間是 Trunk Link,而 Native VLAN 沒有更改過,為預設 VLAN1,剛好 Attacker 的 Access Port 也在使用 VLAN1。

vlan-attack

在這個巧合的情況下,Attacker 可以用 Double Tag 的方法,把 VLAN20 的訊息包裹在 VLAN1 之中傳給 SW1。由於 VLAN1 是 Native VLAN,於是 SW1 在傳給 SW2 之前會把 Packet 的 VLAN1 Tag 移除,然後才傳給 SW2。SW2 發現 Packet 中帶有 VLAN20 Tag,於是就把這 Packet 打進 VLAN20 了。

但是筆者測試過,現代的 IOS (Version 12 或以上) 已無法進行這種攻擊了。不過為了安全起見,我們習慣上都不會把 VLAN1 分派給 user 使用。