第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 数量,违规关端口

七、思考

  1. Switch Spoofing 攻击中,攻击者如何利用 DTP 协议突破 VLAN 隔离?
  2. Double Tagging(双标签攻击)的原理是什么?需要什么前置条件才可能成功?
  3. 为什么将 Native VLAN 改为未使用的 VLAN 可以有效防御双标签攻击?
  4. 在华为交换机上,完整的 VLAN 安全基线配置包括哪些关键步骤?
  5. 如果一个交换机端口意外变为 Trunk 模式,如何通过命令快速发现?

下篇预告:第236篇《STP 攻击:BPDU 泛洪与 TC 攻击》——生成树协议的安全漏洞,BPDU 攻击和拓扑变更攻击导致网络瘫痪的原理及防护。