第236篇:STP 攻击:BPDU 泛洪与 TC 攻击
关键词
STP攻击、BPDU泛洪、TC攻击、生成树安全、BPDU Guard、Root Guard、拓扑变化攻击
一、STP 协议安全弱点
1.1 STP 的工作原理
生成树协议(STP/RSTP/MSTP)通过 BPDU 报文协商网络拓扑:
STP 的选举过程:
┌─────────┐
│ Root │ ← 根桥(优先级最低的交换机)
│ Bridge │
└────┬────┘
│ BPDU (每 2 秒)
┌────┴────┐
│ Switch-B│ ← 非根桥
└────┬────┘
│ BPDU
┌────┴────┐
│ Switch-C│ ← 边缘端口(连接终端)
└─────────┘
BPDU 内容:
Root Bridge ID
Root Path Cost
Bridge ID
Port ID
Message Age
...
STP 的安全缺陷:
BPDU 无认证 → 任何设备都可以发送 BPDU
收到更低优先级的 BPDU → 重新选举根桥
TC BPDU → 刷新 MAC 地址表
1.2 STP 攻击的入口
STP 攻击的接入点:
攻击者可以物理接入交换机端口: 会议室网络接口 空闲信息点 伪装成合法设备接入
通过伪造 BPDU 实现攻击: ┌────────────┐ │ 合法根桥 │ │ Priority: 0 │ └────────────┘ │ | | | | | | | --- | --- | --- | --- | --- | | ┌───┴───┐ ┌───┴───┐ ┌────┴────┐ | | | | | | Sw-A Pri:8 | | Sw-B Pri:16 | | Sw-C Pri:32 | │ ┌──────────┴──────────┐ │ 攻击者 │ │ 伪造 BPDU: │ │ Priority: 0 (最高) │ │ MAC: 任意 │ └─────────────────────┘
攻击效果: 攻击者成为新的根桥 网络拓扑重新计算(30-50 秒) 流量路径改变(经过攻击者)
二、BPDU 攻击类型
2.1 BPDU 泛洪攻击
攻击者发送大量 BPDU 报文,消耗交换机的 CPU 资源:
BPDU 泛洪的原理:
┌──────────────────┐
│ 交换机 CPU │
│ │
│ 每收到一个 BPDU: │
│ 1. 中断处理 │
│ 2. BPDU 处理 │
│ 3. Spanning Tree │
│ 重新计算 │
│ → CPU 高负载 │
└──────────────────┘
▲
│ 大量 BPDU
┌─────────┴──────────┐
│ 攻击者 │
│ 每秒发送 10000+ │
│ 伪造 BPDU │
└────────────────────┘
影响:
CPU 使用率飙升(100%)
正常 BPDU 无法处理 → STP 不稳定
网络设备反应迟钝(管理、SNMP、SSH 延迟)
严重时导致设备死机
2.2 根桥抢夺攻击
攻击者发送优先级更高的 BPDU 成为根桥:
根桥抢夺攻击:
正常 STP 拓扑:
根桥:Switch-A (Priority: 4096, MAC: ...00:01)
所有流量路径:
PC ── Sw-B ── Sw-A ── 出口
攻击开始:
攻击者发送 BPDU:
Root ID: 4096, MAC: 00:00:00:00:00:01 (更低 = 优先)
Bridge ID: 4096, MAC: ...
Cost: 0
交换机收到后:
发现更优的根桥信息
重新计算 STP
新根桥 → 攻击者设备
路径变化:
PC ── Sw-B ── 攻击者(新根桥)── 可能需要绕路
流量经过攻击者 → 可以嗅探 / 篡改
攻击效果:
所有 VLAN 的流量路径改变
可能导致:
├─ 流量绕路(延迟增加)
├─ 流量经过攻击者(中间人)
└─ 链路拥塞(路径不合理)
2.3 TC 攻击(拓扑变更攻击)
攻击者反复发送 TC BPDU(Topology Change),导致交换机不断刷新 MAC 地址表:
TC 攻击原理:
正常 TC BPDU 场景:
新设备上线 └─────────┘ → 全网刷新 MAC 地址表(~30 秒收敛) → 正常,偶尔发生
攻击者反复发送 TC: 攻击者每秒发送 1 次 TC BPDU 交换机组每秒刷新 MAC 地址表
时间轴: T+0s: TC BPDU → 刷新 MAC 表 T+1s: TC BPDU → 刷新 MAC 表 T+2s: TC BPDU → 刷新 MAC 表 ... 交换机一直处于"学习"状态,无法正常转发
影响: MAC 地址表不断被清空 流量被泛洪(广播)到所有端口 攻击者可以收到所有流量 正常通信性能急剧下降
三、STP 防护机制
3.1 BPDU Guard
BPDU Guard 在接入端口(连接终端的端口)上检测并阻止 BPDU:
BPDU Guard 工作原理:
正常终端端口:
┌──────────────┐
│ PC │──── 不发送 BPDU → 正常
└──────────────┘
攻击者端口:
┌──────────────┐
│ 攻击者 │──── 发送 BPDU → 端口被 BPDU Guard 关闭
└──────────────┘
华为配置:
# 全局使能 BPDU Guard
stp bpdu-protection
#
# 配置端口为边缘端口(自动使能 BPDU Guard)
interface GigabitEthernet0/0/1
stp edged-port enable # 边缘端口
#
# 验证
display stp bpdu-protection
Port State
GigabitEthernet0/0/1 UP # 正常
GigabitEthernet0/0/2 DOWN(BPDU) # BPDU 触发关闭
#
# 恢复被关闭的端口
interface GigabitEthernet0/0/2
restart
3.2 Root Guard
Root Guard 在特定端口上防止成为根桥:
Root Guard 工作原理:
正常:
┌─────────┐ Trunk ┌──────────┐
│ 核心交换机 ├─────────────────►│ 汇聚交换机 │
│ (根桥) │ (Root Guard) │ (非根桥) │
└─────────┘ └──────────┘
汇聚交换机收到核心的 BPDU:
Root Priority: 4096 > 非根 → 正常
攻击:
┌──────────┐
│ 攻击者 │
│ BPDU: 0 │
└────┬─────┘
│
┌─────────┐ Trunk ┌──┴───────┐
│ 核心交换机 ├─────────────►│ 汇聚交换机 │
│ (根桥) │ (Root Guard)│ │
└─────────┘ └──────────┘
汇聚交换机收到攻击者的 BPDU:
Root Priority: 0 < 4096
Root Guard:阻止!端口进入 Root-Inconsistent 状态
攻击者端口被阻塞
华为配置:
# 在可能不应该成为根桥的端口上启用
interface GigabitEthernet0/0/24
stp root-protection
#
# 查看 Root Guard 状态
display stp inconsistent-ports
Port State
GigabitEthernet0/0/24 Root-Inconsistent # 检测到非法 BPDU
3.3 TC Guard(TC-BPDU 保护)
限制交换机每秒处理的 TC BPDU 数量:
TC Guard 原理:
原本:收到 TC BPDU → 立即刷新 MAC 表(无限制)
TC Guard:限制每秒 TC BPDU 处理数量
华为配置:
# 全局 TC 保护
stp tc-protection enable # 使能 TC 保护
stp tc-protection interval 10 # 10 秒内最多处理 1 次 TC
stp tc-protection threshold 1 # 阈值:1 次/10秒
#
# 或限制特定端口的 TC 速率
interface GigabitEthernet0/0/1
stp tc-protection enable
# 此端口发送的 TC BPDU 被限速
效果:
攻击者每秒发送 1000 TC BPDU
交换机只处理 1 次/10 秒
MAC 地址表稳定,不受影响
3.4 Loop Guard
防止因 BPDU 丢失导致的环路:
Loop Guard 原理:
正常:
┌─────────┐ ┌─────────┐
│ Sw-A ├─────────────┤ Sw-B │
│ (根) │ BPDU 定期 │ │
└─────────┘ └─────────┘
端口:指定端口 端口:Alternate(阻塞)
BPDU 丢失(可能由单向链路导致):
Sw-B 收不到 BPDU → 认为 Sw-A 不存在
Sw-B 端口从 Blocking → Forwarding
环路形成!广播风暴!
Loop Guard 解决:
收不到 BPDU 时 → 端口进入 Loop-Inconsistent 状态
不会转为 Forwarding → 环路不会形成
# 华为 Loop Guard 配置
interface GigabitEthernet0/0/24
stp loop-protection
四、华为完整 STP 安全配置
4.1 基线配置
# 华为交换机 STP 安全基线配置
# 1. 全局配置
stp mode rstp # 使用 RSTP(收敛更快)
stp bpdu-protection # BPDU Guard(全局)
stp tc-protection enable # TC 保护
stp tc-protection interval 10
stp tc-protection threshold 1
stp root primary # 当前交换机作为根桥(核心)
# 2. 边缘端口(连接终端)
interface GigabitEthernet0/0/1
stp edged-port enable # 边缘端口
port-security enable # 端口安全
!
interface GigabitEthernet0/0/2
stp edged-port enable
!
# 3. 上行端口(连接其他交换机)
interface GigabitEthernet0/0/23
description Uplink-to-Core
stp root-protection # 防止非预期根桥
stp loop-protection # 防单向链路环路
!
interface GigabitEthernet0/0/24
description Uplink-to-Core-Backup
stp root-protection
stp loop-protection
!
# 4. 禁用未使用的端口
interface range GigabitEthernet0/0/5 to GigabitEthernet0/0/22
shutdown
4.2 监控与排查
# 监控 STP 状态
# 查看 STP 概要
display stp brief
MSTID Port Role Port State
0 GigabitEthernet0/0/1 DESI FORWARDING # 正常
0 GigabitEthernet0/0/2 DESI FORWARDING
0 GigabitEthernet0/0/23 ROOT FORWARDING
0 GigabitEthernet0/0/24 ALTE DISCARDING # 备用端口,正常
# 查看 STP TC 统计(检测 TC 攻击)
display stp topology-change
MSTID TC Count Last TC Time Last TC Port
0 3 2024-03-15 10:00:00 GE0/0/1 # 3 次 TC,正常
# 如果 TC Count 每秒增长 → 正在遭受 TC 攻击
# 查看被保护机制关闭的端口
display stp bpdu-protection
display stp inconsistent-ports
五、实战案例:STP 攻击导致全网瘫痪
5.1 案例场景
某公司网络故障:
症状:
上午 10:00,全公司网络卡顿
Ping 丢包 80%+
核心交换机 CPU 100%
部分终端无法获取 IP
排查过程:
检查核心交换机 CPU:
display cpu-usage
CPU Usage: 98% ← 异常高
检查 STP 状态:
display stp topology-change
TC Count: 15472 ← 正常应 < 10
TC Count 每秒 +50 ← 正在遭受 TC 攻击
找到攻击源端口:
display stp interface brief
GE0/0/8 - TC BPDU 接收量最大
根因:
攻击者接入会议室的网络接口(GE0/0/8)
使用工具每秒发送 100 个 TC BPDU
核心交换机每秒刷新 MAC 表
网络瘫痪
处理:
interface GigabitEthernet0/0/8
shutdown # 立即关闭端口
#
stp tc-protection enable # 使能 TC 保护
stp tc-protection threshold 1
#
# 后恢复
stp bpdu-protection # BPDU Guard
stp edged-port enable # 端口改为边缘端口
六、总结
| 知识点 | 核心要点 |
|---|---|
| STP 安全弱点 | BPDU 无认证,任何设备可伪造 |
| BPDU 泛洪 | 大量 BPDU 消耗 CPU |
| 根桥抢夺 | 伪造更优 BPDU 成为根桥 |
| TC 攻击 | 反复 TC BPDU 导致 MAC 表刷新 |
| BPDU Guard | 边缘端口关闭,检测到 BPDU 自动关闭端口 |
| Root Guard | 阻止端口成为根桥,端口进入 Inconsistent 状态 |
| TC Guard | 限制 TC BPDU 处理频率 |
| Loop Guard | 防止 BPDU 丢失导致环路 |
七、思考
- TC 攻击(拓扑变更攻击)的原理是什么?为什么会让网络瘫痪?
- BPDU 泛洪攻击如何影响交换机的正常工作?
- BPDU Guard 和 Root Guard 分别用于防护什么场景下的 STP 攻击?
- 在华为交换机上如何配置 TC 保护?配置后攻击者发送大量 TC BPDU 会怎样?
- 当发现交换机 CPU 利用率 100% 且 STP TC Count 快速增加时,应如何定位攻击源端口?
下篇预告:第237篇《防火墙日志与审计方案》——防火墙日志的类型、日志服务器部署、审计策略和合规要求。