目录

前言
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 使用。