第236篇:STP 攻击:BPDU 泛洪与 TC 攻击
关键词:STP攻击、BPDU泛洪、TCN攻击、根桥抢占、BPDU Guard、Root Guard、Loop Guard
一、引言
生成树协议(STP/RSTP/MSTP)是二层网络防环的基础,通过计算无环树形拓扑确保广播域中不存在环路。然而,STP协议本身几乎没有安全机制:任何BPDU报文都被交换机信任和处理,攻击者可以利用伪造的BPDU报文操控STP拓扑。
在第234-235篇中,我们学习了DHCP饿死攻击和VLAN Hopping攻击,这些攻击主要在二层广播域内部进行。而STP攻击的危害更为根本——它可以改变整个网络拓扑结构,将攻击者设备变成网络核心,从而截取、篡改或丢弃全网流量。
二、核心概念
2.1 STP协议回顾
| 字段 | 长度 | 说明 |
|---|---|---|
| Protocol ID | 2字节 | 0x0000表示STP |
| Protocol Version | 1字节 | 0=STP, 2=RSTP/MSTP |
| BPDU Type | 1字节 | 0=配置BPDU, 1=TCN BPDU等 |
| Flags | 1字节 | Topology Change、Proposal、Learning等标志 |
| Root Bridge ID | 8字节 | Root优先级(2) + Root MAC(6) |
| Root Path Cost | 4字节 | 到根桥的累计路径开销 |
| Bridge ID | 8字节 | 发送者优先级(2) + 发送者MAC(6) |
| Port ID | 2字节 | 发送者端口ID |
2.2 STP攻击类型
| 攻击类型 | 方法 | 影响 |
|---|---|---|
| 根桥抢占 | 发送优先级更高的BPDU成为根桥 | 流量路径重构,攻击者成为核心 |
| BPDU泛洪 | 持续发送BPDU报文消耗资源 | STP震荡、CPU过载 |
| TCN攻击 | 持续发送拓扑变更通知 | 全网络MAC表刷新,性能下降 |
| 虚假拓扑变更 | 触发TC标志导致MAC表快速老化 | 流量泛洪,便于嗅探 |
| 端口角色攻击 | 伪造BPDU操控端口状态 | 阻塞合法端口 |
2.3 STP攻击的影响程度
| 攻击方式 | 性能影响 | 安全影响 | 持续时间 |
|---|---|---|---|
| 根桥抢占 | 中(拓扑重构) | 高(流量截取) | 持续 |
| BPDU泛洪 | 高(CPU过载) | 中(服务中断) | 持续 |
| TCN攻击 | 高(MAC表刷新) | 中(流量泛洪) | 持续 |
| 虚假TC | 中(短时泛洪) | 中(窗口期嗅探) | 间歇 |
三、技术细节
3.1 根桥抢占攻击
STP选举根桥时,优先级值越小越优(默认优先级32768)。攻击者将自身优先级设置为0(最低值),网络中所有交换机收到此BPDU后重新选举,攻击者设备成为根桥。

3.2 BPDU泛洪攻击
攻击者持续向网络发送大量伪造BPDU报文,导致:
| 影响层级 | 说明 |
|---|---|
| 协议层 | STP状态机频繁切换,端口在Blocking/Learning/Forwarding之间震荡 |
| CPU层 | 交换机CPU忙于处理BPDU报文,降低转发性能 |
| 控制平面 | 控制平面资源耗尽,无法正常处理其他协议报文 |
3.3 TCN(Topology Change Notification)攻击
TCN BPDU用于通知根桥拓扑发生了变化。当根桥收到TCN后,设置TC(Topology Change)标志,在最大老化时间(通常30秒)内加速MAC地址表项的老化。
| 正常情况 | TCN攻击 |
|---|---|
| MAC表项老化时间300秒 | TC标志使老化时间缩短到3秒 |
| 仅在真实拓扑变化时触发 | 持续发送TCN,MAC表持续刷新 |
| 短暂影响 | 持续影响,MAC表始终为空 |
MAC表刷新后,交换机将未知目的MAC的帧泛洪到所有端口,攻击者可利用此窗口期进行嗅探。
3.4 STP防护机制对比
| 防护机制 | 部署位置 | 防护目标 | 说明 |
|---|---|---|---|
| BPDU Guard | 接入端口 | 根桥抢占、BPDU泛洪 | 收到BPDU即关闭端口 |
| Root Guard | 接入/分布端口 | 根桥抢占 | 阻止端口成为根端口 |
| Loop Guard | 所有非边缘端口 | 单向链路故障 | 防止因链路单向故障形成环路 |
| STP BPDU过滤 | 特定端口 | 阻止发送BPDU | 端口不发送也不接收BPDU |
| STP风暴控制 | 所有端口 | BPDU泛洪 | 限制BPDU报文速率 |
| MSTP配置一致性 | 全网 | 配置篡改 | MSTP配置 digest 验证 |
四、实战配置/案例分析
4.1 华为交换机STP安全加固配置
# =============================
# 全局STP配置
# =============================
# 1. 启用MSTP(推荐替代STP/RSTP)
stp mode mstp
# 2. 配置核心交换机为指定根桥
stp root primary
# 备份根桥
stp root secondary
# 3. 设置交换机优先级(确保核心交换机成为根桥)
stp priority 4096
# =============================
# 接入层交换机配置
# =============================
# 4. 接入端口启用BPDU Guard(最关键防护)
interface GigabitEthernet0/0/1
stp edged-port enable
# 收到BPDU立即关闭端口
stp bpdu-protection
quit
# 批量配置所有接入端口
port-range GigabitEthernet 0/0/1 to 0/0/48
stp edged-port enable
stp bpdu-protection
quit
# 5. 启用STP风暴控制(限制BPDU速率)
stp storm-control enable
stp storm-control bpdu high-threshold 50
stp storm-control bpdu low-threshold 10
stp storm-control bpdu action shutdown
# BPDU速率超过50/s关闭端口,10/s恢复
# =============================
# 分布层/汇聚层配置
# =============================
# 6. 分布层端口启用Root Guard(防止上游根桥被篡改)
interface GigabitEthernet0/0/48
stp root-protection
quit
# 7. 启用Loop Guard(防单向链路故障环路)
interface GigabitEthernet0/0/47
stp loop-protection
quit
# =============================
# TCN攻击防护
# =============================
# 8. TC保护(限制TC报文处理频率)
stp tc-protection
# 默认每60秒最多处理7个TCN,超出丢弃
stp tc-guard 60 7
# 9. MAC地址表老化时间加固
mac aging-time 300
# 即使在TC期间也不过度缩短老化时间
stp tc-max-age 300
4.2 故障排查案例:网络频繁震荡,用户断断续续
故障现象:某园区网每天固定时间段出现大规模网络中断,用户上网频繁掉线,持续5-10分钟恢复。
排查步骤:
- 检查STP日志
# 查看STP变更日志
display logbuffer | include STP
# 大量端口状态切换日志:Blocking -> Learning -> Forwarding
- 检查根桥状态
display stp brief
display stp
发现根桥ID频繁变化,某台接入交换机(MAC地址异常)在特定时间成为根桥。
- 定位攻击源
# 查看BPDU来源
display stp interface
# 发现大量BPDU来自接入端口GE0/0/22
display stp topology-change
# TCN变更次数异常高
-
根因分析 端口GE0/0/22下接入了一台运行攻击工具的笔记本,定期发送优先级为0的BPDU报文抢占根桥,同时持续发送TCN触发拓扑变更。
-
解决方案
# 步骤1:立即关闭攻击端口
interface GigabitEthernet0/0/22
shutdown
quit
# 步骤2:在所有接入端口部署BPDU Guard
port-range GigabitEthernet 0/0/1 to 0/0/48
stp edged-port enable
stp bpdu-protection
quit
# 步骤3:确保核心交换机固定为根桥
# 核心交换机
stp root primary
stp priority 4096
# 步骤4:部署TC保护
stp tc-protection
stp tc-guard 60 5
# 每60秒最多处理5个TCN,超出丢弃
# 步骤5:启用BPDU风暴控制
stp storm-control enable
stp storm-control bpdu high-threshold 20
stp storm-control bpdu low-threshold 5
stp storm-control bpdu action shutdown
# 步骤6:验证根桥稳定性
display stp brief
display stp root
4.3 故障排查案例:新交换机上线导致网络环路
故障现象:新部署一台接入交换机后,整个VLAN出现广播风暴,所有用户网络中断。
排查步骤:
- 紧急处置
# 在核心交换机上查看端口流量
display interface brief
# GE0/0/3收发包计数持续增长(广播风暴)
# 立即关闭疑似端口
interface GigabitEthernet0/0/3
shutdown
quit
# 网络恢复正常
- 分析原因
# 检查STP状态
display stp brief
# 发现新交换机端口未参与STP计算(STP未启用)
-
根因 新交换机未配置STP,两个上行端口同时处于Forwarding状态,形成二层环路。
-
预防措施
# 确保所有交换机启用STP
stp enable
# 接入端口强制边缘端口(快速收敛,避免环路)
port-range GigabitEthernet 0/0/1 to 0/0/48
stp edged-port enable
quit
# Trunk端口启用Loop Guard和Root Guard
interface GigabitEthernet0/0/49
stp loop-protection
stp root-protection
quit
五、STP安全加固扩展指南
5.1 STP安全加固最佳实践检查清单
| 序号 | 加固项 | 优先级 | 配置命令 | 验证命令 |
|---|---|---|---|---|
| 1 | 核心交换机指定为根桥 | 必配 | stp root primary | display stp brief |
| 2 | 备份核心指定为次根桥 | 必配 | stp root secondary | display stp root |
| 3 | 接入端口启用边缘端口 | 必配 | stp edged-port enable | display stp interface |
| 4 | 接入端口启用BPDU Guard | 必配 | stp bpdu-protection | display stp bpdu-protection |
| 5 | 上行端口启用Root Guard | 必配 | stp root-protection | display stp interface |
| 6 | 上行端口启用Loop Guard | 推荐 | stp loop-protection | display stp interface |
| 7 | 全局启用TC保护 | 必配 | stp tc-protection | display stp tc-protection |
| 8 | 全局启用BPDU风暴控制 | 推荐 | stp storm-control enable | display stp storm-control |
| 9 | 设置合理的MAC老化时间 | 推荐 | mac aging-time 300 | display mac-address aging-time |
| 10 | 启用MSTP替代STP/RSTP | 推荐 | stp mode mstp | display stp mode |
5.2 STP攻击检测与响应流程

5.3 STP各版本安全特性对比
| 安全特性 | STP(802.1D) | RSTP(802.1w) | MSTP(802.1s) |
|---|---|---|---|
| BPDU Guard | 不支持 | 支持 | 支持 |
| Root Guard | 不支持 | 支持 | 支持 |
| Loop Guard | 不支持 | 支持 | 支持 |
| BPDU风暴控制 | 不支持 | 支持 | 支持 |
| TC保护 | 不支持 | 支持 | 支持 |
| 配置Digest验证 | 不支持 | 不支持 | 支持 |
| 收敛时间 | 30-50秒 | 1-2秒 | 1-2秒 |
5.4 常见STP攻击检测指标
| 指标 | 正常阈值 | 异常阈值 | 检测命令 |
|---|---|---|---|
| BPDU接收速率 | < 10/s | > 50/s | display stp interface |
| TCN变更频率 | < 1/h | > 5/min | display stp topology-change |
| 根桥切换次数 | 0(稳定后) | > 0 | display stp root |
| MAC表刷新次数 | < 5/h | > 20/h | display mac-address flushing-statistics |
| 端口状态切换 | 偶发 | 频繁(每数秒) | display logbuffer | include STP |
5.5 接入交换机标准化安全模板
# ============================================
# 接入交换机STP安全标准配置模板
# ============================================
# 1. 基础STP配置
stp mode mstp
stp enable
stp tc-protection
# 2. 设置非根桥优先级(高于核心交换机)
stp priority 32768
# 3. 所有接入端口批量配置
port-range GigabitEthernet 0/0/1 to 0/0/48
stp edged-port enable
stp bpdu-protection
storm-control broadcast level 1000
storm-control unknown-unicast level 1000
storm-control unknown-multicast level 1000
quit
# 4. 上行Trunk端口配置
interface GigabitEthernet0/0/49
port link-type trunk
port trunk allow-pass vlan all
stp root-protection
stp loop-protection
quit
interface GigabitEthernet0/0/50
port link-type trunk
port trunk allow-pass vlan all
stp root-protection
stp loop-protection
quit
# 5. STP风暴控制
stp storm-control enable
stp storm-control bpdu high-threshold 20
stp storm-control bpdu low-threshold 5
stp storm-control bpdu action shutdown
# 6. 日志配置(确保STP事件被记录)
info-center loghost source-interface Vlanif100
logging buffer size 1024
六、总结
| 知识点 | 要点 |
|---|---|
| 根桥抢占 | 攻击者发送高优先级BPDU成为根桥 |
| BPDU泛洪 | 大量BPDU导致STP震荡和CPU过载 |
| TCN攻击 | 持续TCN触发MAC表刷新,导致流量泛洪 |
| BPDU Guard | 接入端口收到BPDU即关闭(最核心防护) |
| Root Guard | 阻止端口成为根端口,防止根桥被抢占 |
| TC保护 | 限制TCN处理频率,防止MAC表持续刷新 |
| Loop Guard | 防止单向链路故障导致的环路 |
| 风暴控制 | 限制BPDU速率,超过阈值关闭端口 |
思考
- BPDU Guard和Root Guard在防护目标和使用场景上有什么区别?什么时候应该用BPDU Guard而不是Root Guard?
- 如果网络中 legitimately 需要在接入端口运行STP(如接入另一台交换机),BPDU Guard是否适用?
- MSTP相比STP/RSTP在安全性方面有哪些改进?MSTP实例的配置digest验证如何防止配置篡改攻击?
下篇预告:第237篇:防火墙日志与审计方案