第235篇:VLAN Hopping 攻击与防护
关键词
VLAN跳跃、VLAN Hopping、802.1Q标签、DTP攻击、双标签攻击、VLAN隔离、Native VLAN
一、VLAN 隔离的假设
1.1 VLAN 的安全隔离
VLAN 的设计目的是将网络划分为多个广播域,实现二层隔离:
VLAN 的隔离模型:
VLAN 10 (办公) VLAN 20 (服务器) VLAN 30 (访客) | PC-A PC-B .100-.200 | | Server-1 Server-2 .10-.50 | | Guest-1 Guest-2 .1-.50 | | --- | --- | --- | --- | --- | │ │ │ ┌─────┴────────────────────┴─────────────────────┴─────┐ │ 交换机 │ │ (二层隔离) │ └──────────────────────────────────────────────────────┘
安全假设: VLAN 10 的流量不会出现在 VLAN 20 VLAN 之间的通信必须经过三层路由
1.2 VLAN 隔离的局限
VLAN 隔离基于 802.1Q 标签,而标签可以被篡改:
VLAN 隔离依赖:
1. 交换机在端口上添加/移除 VLAN 标签
2. 数据帧的 802.1Q 标签决定所属 VLAN
3. 交换机不验证标签的真实性
攻击面:
攻击者可以伪造 802.1Q 标签 → VLAN Hopping
攻击者利用交换机协议的漏洞 → 跳转到其他 VLAN
二、VLAN Hopping 攻击类型
2.1 Switch Spoofing(交换机欺骗)
攻击者伪装成交换机,通过 DTP 协商建立 Trunk 链路:
DTP(Dynamic Trunking Protocol): Cisco 私有协议 自动协商端口是否成为 Trunk 不需要认证
攻击流程:
| 真实交换机 Gi0/0/1 (动态模式) | ──────────────────────── | 攻击者 eth0 (伪装交换机) |
|---|---|---|
Step 1:攻击者发送 DTP Desirable 包 "我想成为 Trunk!"
Step 2:交换机响应,端口变为 Trunk 端口进入 Trunk 模式 允许所有 VLAN 通过
Step 3:攻击者收到所有 VLAN 的流量 可以访问 VLAN 10、20、30 的数据 VLAN 隔离完全失效
影响: 极为严重——攻击者可以看到所有 VLAN 的流量 但需要有物理接入交换机的机会
2.2 Double Tagging(双标签攻击)
攻击者在 802.1Q 帧中嵌套两个 VLAN 标签:
双标签攻击原理:
正常情况下,交换机处理流程: Access 端口收到数据 → 打上 Native VLAN 标签 Trunk 端口移除外层标签 → 保留内层标签
攻击流程:
| 交换机 1 攻击者 VLAN 10 ┌────────┐ 原始帧 Tag1:10 Tag2:20 数据 | (Access端口) Trunk ──────► └──────────────┘ | (Native VLAN=10) |
|---|---|---|
| │ 交换机移除外层 Tag (10) | ||
| │ 内层 Tag (20) 保留 | ||
| │ | ||
| ┌─────┴──────────┐ | ||
| │ 交换机 2 │ | ||
| │ (Trunk 接收) │ | ||
| │ │ | ||
| │ 看到 Tag=20 │ | ||
| │ 转发到 VLAN 20 │ | ||
| └────────────────┘ |
前提条件: 1. Trunk 的 Native VLAN 与攻击者的 VLAN 相同 2. 交换机 1 将 Native VLAN 帧不带标签转发
2.3 两种攻击的对比
| 维度 | Switch Spoofing | Double Tagging |
|---|---|---|
| 攻击难度 | 低(发送 DTP 包) | 中(构造双标签帧) |
| 访问范围 | 所有 VLAN | 仅 Native VLAN 已知的 VLAN |
| 利用协议 | DTP(Cisco) | 802.1Q 处理逻辑 |
| 前置条件 | 端口为动态模式 | Native VLAN 匹配 |
| 影响范围 | 全局 | 特定 VLAN 对 |
| 回应可见 | 可接收流量 | 只能单向(不能收到回应) |
三、VLAN Hopping 攻击防护
3.1 禁用 DTP/Dynamic 端口
Switch Spoofing 最简单也最有效的防护:
# Cisco 交换机——禁用 DTP,端口设为 Access
interface GigabitEthernet0/0/1
switchport mode access # 强制 Access 模式
switchport nonegotiate # 禁用 DTP 协商
!
# 华为交换机——没有 DTP,默认 Access
# 确保端口模式明确配置
# 查看 Trunk 端口状态(检查是否有非预期的 Trunk)
display port trunk
Port Type Status
GigabitEthernet0/0/1 access connected # ✓ 预期 Access
GigabitEthernet0/0/24 trunk connected # ✓ 预期 Trunk
3.2 Native VLAN 配置
双标签攻击的防护重点在 Native VLAN:
防护 1:修改 Native VLAN(不用默认的 VLAN 1)
# 将 Native VLAN 改为其他值
interface GigabitEthernet0/0/24
port trunk native-vlan 999 # Native VLAN = 999(未使用的 VLAN)
!
# Native VLAN 不使用 VLAN 1
# 攻击者不知道 Native VLAN 的值 → 无法构造双标签
防护 2:不允许 Native VLAN 通过 Trunk
# 明确禁止 Native VLAN 流量
interface GigabitEthernet0/0/24
port trunk allow-pass vlan 10 20 30 # 只允许业务 VLAN
undo port trunk allow-pass vlan 1 # 禁止 VLAN 1
# Native VLAN 999 也不在允许列表中
3.3 VLAN ACL(VACL)
使用 VACL 限制跨 VLAN 的异常流量:
# 华为交换机 VACL 配置
# 创建 VLAN ACL
acl name protect-vlan-hopping 4000
# 只允许合法的 MAC 对
rule 10 permit source-mac 00e0-fc12-0001 ffff-ffff-ffff
rule 20 deny
# 应用到 VLAN
vlan 10
traffic-filter inbound acl name protect-vlan-hopping
# 或使用基于 VLAN 的访问控制
# 禁止从非授权端口接收特定 VLAN 的流量
vlan 20
description Server-VLAN
port GigabitEthernet0/0/10 to GigabitEthernet0/0/20
# 确保只有指定接口可以接入 VLAN 20
3.4 IP Source Guard
# IP 源防护(IPSG)+ DHCP Snooping 联动
# 限制每个接口可以使用的 IP 地址
# 使能 DHCP Snooping
dhcp snooping enable
interface GigabitEthernet0/0/1
dhcp snooping enable
ip source check user-bind enable # 只允许 DHCP 分配的 IP
# 对于静态 IP 设备,手动添加绑定
user-bind static ip-address 192.168.20.10 mac-address 00e0-fc12-0050
四、华为设备 VLAN 安全配置
4.1 完整的 VLAN 安全基线
# 华为交换机 VLAN 安全基线配置
# 1. 禁用所有未使用端口(防物理接入)
interface range GigabitEthernet0/0/21 to GigabitEthernet0/0/24
shutdown
!
# 2. 端口安全配置
interface GigabitEthernet0/0/1
description Employee-PC
port link-type access
port default vlan 10
#
# 端口安全
port-security enable
port-security max-mac-num 3 # 最多 3 个 MAC
port-security protect-action shutdown # 违规关端口
port-security mac-address sticky # 动态学习 MAC 绑定
#
# MAC 数量和 DHCP 限速
dhcp snooping max-user 3
dhcp snooping dhcp-rate 10
!
# 3. Trunk 端口安全
interface GigabitEthernet0/0/24
description To-Core-Switch
port link-type trunk
port trunk allow-pass vlan 10 20 30 100
port trunk native-vlan 999 # 未使用的 Native VLAN
#
# 环路保护
stp bpdu-filter enable
stp root-protection
!
4.2 监控与排查
# 排查 VLAN Hopping 迹象
# 检查非期望的 Trunk 端口
display port trunk
Port Type Trunk VLANs
GigabitEthernet0/0/1 access - # 预期
GigabitEthernet0/0/24 trunk 10 20 30 999 # 预期
GigabitEthernet0/0/5 trunk 1-4094 # !!! 异常!不应是 Trunk
# 检查 MAC 地址漂移
display mac-address flapping record
VLAN MAC Address Original Port Move Port Time
10 00e0-fc12-0001 GE0/0/1 GE0/0/24 10:30:15
10 00e0-fc12-0001 GE0/0/24 GE0/0/1 10:30:16
# MAC 地址在两个端口之间漂移 → 环路或攻击
# 检查 VLAN 统计
display vlan 10 statistics
Received packets: 1000
Forwarded packets: 950
Dropped packets: 50
# 丢弃的包可能包括 VLAN Hopping 尝试
五、实战案例
5.1 案例:企业访客通过网络攻击内部服务器
场景:
某企业部署了访客 WiFi(VLAN 30)
内部服务器在 VLAN 20
访客网络与内网通过 VLAN 隔离
攻击尝试:
攻击者连接访客 WiFi
尝试发送带双标签的 802.1Q 帧
目标:访问 VLAN 20 的服务器
防护分析:
┌───────────────────┐
│ 访客 AP │
│ 连接到交换机 │
│ 交换机端口 │
│ 类型:Access │ ← 防护:Access 端口
│ VLAN:30 │ 打上 VLAN 30 标签
└────────┬──────────┘ 即使双标签也不起作用
│
┌────────┴──────────┐
│ Trunk 到核心 │
│ Native VLAN: 999 │ ← 防护:Native VLAN ≠ 使用的 VLAN
│ Allow: 10 20 30 │ 双标签攻击无效
└───────────────────┘
结果:攻击者无法突破 VLAN 隔离
六、总结
| 知识点 | 核心要点 |
|---|---|
| VLAN 隔离本质 | 基于 802.1Q 标签的二层隔离 |
| Switch Spoofing | 伪装成交换机协商 Trunk,获所有 VLAN 流量 |
| Double Tagging | 嵌套 802.1Q 标签,利用 Native VLAN 转发 |
| DTP 防护 | 端口设为 Access 模式,禁用 DTP 协商 |
| Native VLAN 防护 | 修改默认 VLAN 1 为未使用的 VLAN |
| VACL 和 IPSG | 基于 ACL 和 DHCP Snooping 绑定表 |
| 端口安全 | 限制端口 MAC 数量,违规关端口 |
七、思考
- Switch Spoofing 攻击中,攻击者如何利用 DTP 协议突破 VLAN 隔离?
- Double Tagging(双标签攻击)的原理是什么?需要什么前置条件才可能成功?
- 为什么将 Native VLAN 改为未使用的 VLAN 可以有效防御双标签攻击?
- 在华为交换机上,完整的 VLAN 安全基线配置包括哪些关键步骤?
- 如果一个交换机端口意外变为 Trunk 模式,如何通过命令快速发现?
下篇预告:第236篇《STP 攻击:BPDU 泛洪与 TC 攻击》——生成树协议的安全漏洞,BPDU 攻击和拓扑变更攻击导致网络瘫痪的原理及防护。