第235篇:VLAN Hopping 攻击与防护
关键词:VLAN Hopping、双标签攻击、交换机端口安全、802.1Q Trunk、Native VLAN、DHCP Snooping
一、引言
VLAN(Virtual Local Area Network)将物理交换机划分为多个逻辑广播域,是二层网络隔离的基础。理论上,不同VLAN之间的通信必须经过三层设备(路由器或三层交换机),无法直接互通。
然而,VLAN Hopping(VLAN跳跃)攻击利用了802.1Q协议的实现细节,使攻击者能够从自身所在的VLAN跨越到目标VLAN中,绕过VLAN隔离。这种攻击不需要破解加密或获取管理员权限,仅需要掌握802.1Q帧格式即可实施。
VLAN Hopping攻击常与第234篇的DHCP欺骗、ARP欺骗等攻击组合使用,构成完整的二层攻击链。
二、核心概念
2.1 VLAN Hopping攻击类型
| 攻击类型 | 原理 | 要求 |
|---|---|---|
| 双标签攻击(Double Tagging) | 构造带两个802.1Q标签的帧,利用Native VLAN去标签 | 攻击者端口与Trunk链路在同一交换机或相邻交换机 |
| CDP/LLDP欺骗 | 利用交换机发现协议协商端口为Trunk模式 | 目标交换机启用了CDP/LLDP自动协商 |
| VLAN鱼叉(VLAN Fishing) | 暴力扫描所有VLAN ID,找出含目标网络的VLAN | 端口配置为Trunk或动态协商为Trunk |
| ARP欺骗配合 | VLAN Hopping后在目标VLAN进行ARP欺骗 | 已实现VLAN Hopping |
2.2 802.1Q帧格式回顾
802.1Q标签插入在源MAC地址和EtherType之间:
| 字段 | 长度 | 说明 |
|---|---|---|
| 目的MAC | 6字节 | 目的MAC地址 |
| 源MAC | 6字节 | 源MAC地址 |
| 802.1Q Tag | 4字节 | TPID(0x8100) + TCI(PCP+DEI+VLAN ID) |
| EtherType | 2字节 | 上层协议类型 |
| 载荷 | 可变 | IP报文或其他数据 |
2.3 Native VLAN概念
在802.1Q Trunk链路上,Native VLAN的帧不携带802.1Q标签(Untagged),其他VLAN的帧携带标签。这是VLAN Hopping攻击的关键利用点。
| 场景 | Native VLAN帧 | 非Native VLAN帧 |
|---|---|---|
| 发送 | 不带802.1Q标签 | 带802.1Q标签 |
| 接收 | 视为Native VLAN | 从标签中读取VLAN ID |
三、技术细节
3.1 双标签攻击(Double Tagging)详细过程
双标签攻击是整个VLAN Hopping中最经典的攻击方式。攻击者发送一个带有两层802.1Q标签的帧:

双标签攻击的关键条件: 1. 攻击者连接的交换机端口必须是Trunk模式或可学习到Trunk(通过CDP/LLDP) 2. Native VLAN必须与攻击者所在VLAN不同 3. 外层标签VLAN必须匹配Trunk链路的Native VLAN(或者攻击者端口为Trunk模式)
3.2 CDP/LLDP欺骗攻击
Cisco Discovery Protocol(CDP)和Link Layer Discovery Protocol(LLDP)是交换机之间自动发现邻居的设备发现协议。
| 协议 | 厂商 | 说明 |
|---|---|---|
| CDP | Cisco私有 | 自动交换设备信息、端口类型 |
| LLDP | IEEE 802.1AB | 多厂商通用的设备发现协议 |
攻击者通过发送伪造的CDP/LLDP报文,欺骗交换机将端口协商为Trunk模式。一旦端口成为Trunk,攻击者即可发送带802.1Q标签的帧,访问所有VLAN。
3.3 VLAN钓鱼(VLAN Fishing)
当交换机端口被配置为Trunk模式后,攻击者可以通过发送不同VLAN ID的标签帧来"钓鱼":
- 构造VLAN ID从1到4094的802.1Q标签帧
- 逐VLAN发送ARP请求
- 哪个VLAN有响应,说明该VLAN中存在活跃设备
- 针对目标VLAN发起进一步攻击
3.4 VLAN Hopping与二层攻击链
VLAN Hopping通常不是独立的攻击,而是作为更复杂攻击链的入口:

四、实战配置/案例分析
4.1 华为交换机VLAN安全防护配置
# =============================
# 接入层交换机安全加固
# =============================
# 1. 全局关闭CDP/LLDP(如不需要)
# 关闭CDP(Cisco设备)
# no cdp run
# 关闭LLDP(如不需要设备发现)
lldp disable
# 2. 接入端口强制为Access模式(最关键)
interface GigabitEthernet0/0/1
port link-type access
port default vlan 10
quit
# 批量配置所有接入端口
port-range GigabitEthernet 0/0/1 to 0/0/48
port link-type access
port default vlan 10
quit
# 3. 修改Native VLAN(非默认VLAN 1)
interface GigabitEthernet0/0/48
port link-type trunk
port trunk allow-pass vlan 10 20 30
# 修改Native VLAN为非默认值
port trunk pvid vlan 999
quit
# 4. 配置端口安全(MAC限制)
interface GigabitEthernet0/0/1
port-security enable
port-security max-mac-count 1
port-security protect-action shutdown
# 关闭后发送告警
quit
# 5. 关闭不用的端口
interface GigabitEthernet0/0/47
shutdown
description UNUSABLE-CLOSED
quit
# 6. 启用端口隔离(Port Isolation)
# 同一VLAN内的端口相互隔离,只能通过三层网关通信
# 华为VRP端口隔离配置
port-isolate enable
interface range GigabitEthernet 0/0/1 to 0/0/24
port-isolate group 1
quit
# 网关端口允许与隔离端口通信
interface Vlanif 10
port-isolate output-disable
quit
# 7. 启用BPDU Guard(防止STP攻击配合)
stp enable
interface GigabitEthernet0/0/1
stp edged-port enable
stp bpdu-protection
quit
# =============================
# 核心层交换机配置
# =============================
# 8. Trunk端口仅允许必要的VLAN
interface 100GE1/0/1
port link-type trunk
# 仅允许必要的VLAN通过
port trunk allow-pass vlan 10 20 30
# 移除VLAN 1(管理VLAN不应在Trunk上)
port trunk pvid vlan 999
quit
# 9. 验证配置
display port link-type interface GigabitEthernet0/0/1
display vlan
display stp interface GigabitEthernet0/0/1
4.2 故障排查案例:财务VLAN数据被窃取
故障现象:安全审计发现,财务VLAN(VLAN 20)中的文件服务器有异常连接,来源IP属于办公VLAN(VLAN 10)。
排查步骤:
- 检查交换机端口配置
# 检查疑似攻击端口配置
display current-configuration interface GigabitEthernet0/0/15
发现GE0/0/15端口配置为Hybrid模式且未限制VLAN,允许VLAN 10和VLAN 20同时通过。
- 检查Trunk链路配置
display current-configuration interface GigabitEthernet0/0/48
发现核心交换机的Trunk链路Native VLAN为默认的VLAN 1,且允许所有VLAN通过。
-
根因分析 攻击者在办公VLAN 10中构造了双标签帧,外层标签为VLAN 1(Native VLAN),内层标签为VLAN 20。核心交换机去除了外层标签后,将帧转发到VLAN 20。
-
解决方案
# 方案1:接入端口强制为Access模式
interface GigabitEthernet0/0/15
port link-type access
port default vlan 10
# 移除所有Trunk相关配置
undo port trunk allow-pass vlan all
quit
# 方案2:修改Native VLAN为非默认值
interface GigabitEthernet0/0/48
port trunk pvid vlan 999
quit
# 方案3:Trunk端口最小化VLAN列表
interface GigabitEthernet0/0/48
port trunk allow-pass vlan 10 20 30
undo port trunk allow-pass vlan 1
quit
# 方案4:启用端口安全
interface GigabitEthernet0/0/15
port-security enable
port-security max-mac-count 1
port-security protect-action shutdown
quit
# 方案5:在核心交换机启用VLAN间访问审计
# 通过ACL监控VLAN间异常通信
acl number 3000
rule 10 permit ip source 10.0.10.0 0.0.0.255 destination 10.0.20.0 0.0.0.255
# 办公VLAN到财务VLAN的流量应仅通过三层设备
quit
五、总结
| 知识点 | 要点 |
|---|---|
| 双标签攻击 | 利用Native VLAN去标签机制跨VLAN通信 |
| CDP/LLDP欺骗 | 伪造设备发现协议协商Trunk模式 |
| VLAN钓鱼 | 遍历VLAN ID扫描活跃网络 |
| 防护核心 | 接入端口强制Access模式、关闭设备发现协议 |
| Native VLAN | 修改为非默认值,减少双标签攻击面 |
| 端口安全 | MAC地址限制、端口隔离 |
| 最小化原则 | Trunk只允许必要VLAN通过 |
| 关闭未用端口 | 减少攻击面 |
思考
- 双标签VLAN Hopping攻击为什么是单向的?攻击者能否接收到目标VLAN的响应?
- 在私有云/虚拟化环境中(如VMware vSwitch),VLAN Hopping攻击是否仍然适用?
- 如果企业不允许修改Native VLAN(因为某些设备要求),还有什么方法可以防护双标签攻击?
下篇预告:第236篇:STP 攻击:BPDU 泛洪与 TC 攻击