第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分钟恢复。

排查步骤:

  1. 检查STP日志
# 查看STP变更日志
display logbuffer | include STP
# 大量端口状态切换日志:Blocking -> Learning -> Forwarding
  1. 检查根桥状态
display stp brief
display stp

发现根桥ID频繁变化,某台接入交换机(MAC地址异常)在特定时间成为根桥。

  1. 定位攻击源
# 查看BPDU来源
display stp interface
# 发现大量BPDU来自接入端口GE0/0/22
display stp topology-change
# TCN变更次数异常高
  1. 根因分析 端口GE0/0/22下接入了一台运行攻击工具的笔记本,定期发送优先级为0的BPDU报文抢占根桥,同时持续发送TCN触发拓扑变更。

  2. 解决方案

# 步骤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出现广播风暴,所有用户网络中断。

排查步骤:

  1. 紧急处置
# 在核心交换机上查看端口流量
display interface brief
# GE0/0/3收发包计数持续增长(广播风暴)

# 立即关闭疑似端口
interface GigabitEthernet0/0/3
 shutdown
quit
# 网络恢复正常
  1. 分析原因
# 检查STP状态
display stp brief
# 发现新交换机端口未参与STP计算(STP未启用)
  1. 根因 新交换机未配置STP,两个上行端口同时处于Forwarding状态,形成二层环路。

  2. 预防措施

# 确保所有交换机启用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攻击检测与响应流程

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速率,超过阈值关闭端口

思考

  1. BPDU Guard和Root Guard在防护目标和使用场景上有什么区别?什么时候应该用BPDU Guard而不是Root Guard?
  2. 如果网络中 legitimately 需要在接入端口运行STP(如接入另一台交换机),BPDU Guard是否适用?
  3. MSTP相比STP/RSTP在安全性方面有哪些改进?MSTP实例的配置digest验证如何防止配置篡改攻击?

下篇预告:第237篇:防火墙日志与审计方案