目錄
前言
本篇文章将会介绍攻击 Spanning Tree Protocol 的方法,使网络里的 Switch 无法正常运作,或者错误地改变了 Topology。Spanning Tree Protocol Attack 的後果可以相当严重,例如可以令网络瘫痪丶资料被窃取和中间人攻击 (Man-in-the-middle Attack),必需正视。在阅读本文之前,读者必需对 Spanning Tree Protocol 的运作深入了解,若信心不够可先查看以下文章:Spanning Tree Protocol (STP) 生成树协定。
⛑️ 本文目的只为学术研究,解释网络漏洞及防治方法,并不鼓励任何犯法行为,敬请留意。⛑️
Yersinia
首先介绍一下攻击 Switch 的人间最终兵器 Yersinia。透过这个工具,可以向 Switch 发出一些伪造的 BPDU 来作出攻击。当然,我们可以在骇客的武器库 Kali Linux 中找到这件利器。
先执行 yersinia –help 看看 Menu。
Yersinia 一共有 3 个运作模式,分别是:
互动模式 Interactive Mode
输入 yersinia -I 进入互动模式,然後可以按 h 打开选单,这就可以查看不同的指令了。
例如:要进行 STP 攻击,先按 g,然後选 STP 按 ENTER 进入 STP 的攻击界面。
GUI 模式 Graphical Mode
输入 yersinia -G 进入 GUI 模式,经常当机,不好用。
伺服器模式 Daemon Mode
输入 yersinia -D 进入 Daemon 模式,这样会启动一个 Server Process,Telnet 到 localhost 的 12000 Port,便可登入。预设登入 username 和 password 都是 root。界面和 Cisco IOS 很相似,要 enable 才可输入攻击指令,enable password 预设是 tomac。功能是一样的,只是感觉专业一点而已。
攻击 1: TCN Attack
现在我们可以尝试第一种攻击。Topology Change Notification (TCN) 是网络里一旦出现 Topology Change 时用来通知 Root Switch 的 BPDU,任何 Switch 收到 TCN 都会帮忙传给 Root Switch,Root Switch 收到 TCN 後会通知网络里所有 Switch 缩短 MAC Address Table 的 Aging Time (由 300 秒缩短至 15 秒) ,让所有 Switch 提早消去旧 MAC Address Table 的纪录。在没有 Toplogy Change 的情况下不断发放虚假的 TCN 会让网络里所有 Switch 不停消去 MAC Address Table 纪录,导致 Switch 在传送 Frame 时无法在 MAC Address Table 找到纪录,唯有使用 Broadcast 传送,造成网络里 Broadcast 大幅增加,影响网络效能,也让传送内容暴露於整个网络。
现在我们尝试用 GNS3 配合 Virtualbox 来执行 Kali Linux (Attacker) 去模拟攻击。
网络中 SW1 为 Root Switch。两只 Switch 的 Aging Time 为预设值 300 秒。
SW1#show spanning-tree
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 24577
Address aabb.cc00.0200
This bridge is the root
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 24577 (priority 24576 sys-id-ext 1)
Address aabb.cc00.0200
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 300
Interface Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Et0/0 Desg FWD 100 128.1 Shr
Et0/1 Desg FWD 100 128.2 Shr
SW2#show spanning-tree
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 24577
Address aabb.cc00.0200
Cost 100
Port 2 (Ethernet0/1)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address aabb.cc00.0100
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 300
Interface Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Et0/1 Root FWD 100 128.2 Shr
到 Yersinia 按 e 把 Type 修改成 0x80 (代表 TCN)。
按 x 再选 0 或 1 向 Switch 传送 BPDU。虽然选项中有 sending tcn BPDN,但若没有修改 Type 的话,攻击是不会成功的。(可能是 bug)
整个网络所有 Switch 的 MAC Address Table Aging Time 会变成 15 秒,如果不断重覆发送的话会让整个网络所有 Switch 的 MAC Address Table 纪录只能维持 15 秒。
SW1#show spanning-tree
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 24577
Address aabb.cc00.0200
This bridge is the root
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 24577 (priority 24576 sys-id-ext 1)
Address aabb.cc00.0200
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 15
Interface Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Et0/0 Desg FWD 100 128.1 Shr
Et0/1 Desg FWD 100 128.2 Shr
SW2#show spanning-tree
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 24577
Address aabb.cc00.0200
Cost 100
Port 2 (Ethernet0/1)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address aabb.cc00.0100
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 15
Interface Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Et0/1 Root FWD 100 128.2 Shr
攻击 2: BPDU DoS Attack
当 Switch 收到 BPDU 後需要进行运算,如果向 Switch 大量发放 BPDU 可占用 Swtich 所有 CPU 资源,严重影响网络运作。Yersinia 可以每秒发放数以万计的 BPDU。
攻击前先查看 Switch 的 CPU,在过去 60 秒,CPU 是非常空闲的。
SW1#show processes cpu history 100 90 80 70 60 50 40 30 20 10 0....5....1....1....2....2....3....3....4....4....5....5.... 0 5 0 5 0 5 0 5 0 5 CPU% per second (last 60 seconds)
在 Yersinia 进行 BPDU DoS 攻击十分简单,只要按 x 然後选 2 或 3 均可。
看看 Spanning Tree Detail,很短时间的攻击已送出了几十万个 BPDU。
SW1#show spanning-tree interface ethernet 0/0 detail
Port 1 (Ethernet0/0) of VLAN0001 is designated forwarding
Port path cost 100, Port priority 128, Port Identifier 128.1.
Designated root has priority 32769, address aabb.cc00.0100
Designated bridge has priority 32769, address aabb.cc00.0200
Designated port id is 128.1, designated path cost 100
Timers: message age 0, forward delay 0, hold 0
Number of transitions to forwarding state: 1
Link type is shared by default
BPDU: sent 185, received 695426
再查看 Switch 的 CPU,由於这是 Simulator,只能为它带来一点点工作量。相信我,如果用真实的 Switch,效果会十分显着!
SW1#show processes cpu history 11111222224444444444555555555522222 22222333 100 90 80 70 60 50 40 30 20 10 ********** 0....5....1....1....2....2....3....3....4....4....5....5.... 0 5 0 5 0 5 0 5 0 5 CPU% per second (last 60 seconds)
攻击 3: Root Role Attack
意思是 Attacker 发放含有 Root Priority 较现时 Root Switch 低的 BPDU 到网络,成为网络的 Root Switch (俗称「抢 Root」),现在我们用 Yersinia 模拟抢 Root。
先检查现时 SW1 的 Root Priority 是 24577 (0x6001),MAC Address 是 aabb.cc00.0200。
SW1#show spanning-tree VLAN0001 Spanning tree enabled protocol ieee Root ID Priority 24577 Address aabb.cc00.0200 This bridge is the root Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 24577 (priority 24576 sys-id-ext 1) Address aabb.cc00.0200 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Aging Time 15 Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------- Et0/0 Desg FWD 100 128.1 Shr Et0/1 Desg FWD 100 128.2 Shr
到 Yersinia 按 x 然後选 4 抢 Root。Yersinia 会故意发放相同 Priority 而 MAC Address (aabb.cc00.0100) 较小的 BPDU,因而成为 Root Switch。在 SW1 查看 show spanning tree,结果符合预期。
SW1#show spanning-tree
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 24577
Address aabb.cc00.0100
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Cost 100
Port 1 (Ethernet0/0)
Bridge ID Priority 24577 (priority 24576 sys-id-ext 1)
Address aabb.cc00.0200
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 15
Interface Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Et0/0 Desg FWD 100 128.1 Shr
Et0/1 Desg FWD 100 128.2 Shr
Root Role 被 Attacker 抢走会造成以下问题:
故意不处理 TCN
正常情况下,Root Switch 在收到 TCN 後,会通知网络里其他 Switch,籍此缩短 MAC Address Table 的 Aging Time (由 300 秒缩短至 15 秒),来让各 Switch 重新 Learn MAC Address。Attacker 故意不处理 TCN,导致网络发生 Toplogy Change 後因为 MAC Address Table 没有更新而造成短暂 Black Hole 问题。与 TCN Attack 不同,TCN Attack 是不用更新的情况下强迫大家更新,而现在的情况是需要更新时却偏偏不叫大家更新。
不断转 Role
Attacker 发放低 Switch Priority 抢 Root,然後又发放高 Priority 放弃 Root,不断重覆,令 Topology 不断改变,造成网络不稳定。
中间人攻击 (Man-in-the-middle Attack)
又称为 Dual-homed (或 Dual-homing),原理为 Attacker 用两个 Interface 接驳网络中不同 Switch,然後抢 Root 让网络 Traffic 错误地流经 Attacker,此时 Attacker 就可以查看或删改这些 Packet。
请看下图,假设 Attacker 接驳网络中不同的 Switch 并抢 Root 成为 Root Switch,於是 SW1 与 SW2 之间自然成为 Blocking。Client 连接 Server 的 Traffic 就会流经 Attacker。现在尝试模拟这种攻击。
由於这种攻击需要两个 Interface,先到 Yersinia 按 i 来 enable 两个 interface。然後开始攻击。
发动攻击後确认一下,Attacker 成为 Root Switch 了,而 SW2 的 Port E0/1 是 Blocking。
SW1#show spanning-tree VLAN0001 Spanning tree enabled protocol ieee Root ID Priority 24577 Address aabb.cc00.0100 Cost 100 Port 1 (Ethernet0/0) Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Bridge ID Priority 24577 (priority 24576 sys-id-ext 1) Address aabb.cc00.0200 Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec Aging Time 300 Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------- Et0/0 Root FWD 100 128.1 Shr Et0/1 Desg FWD 100 128.2 Shr
SW2#show spanning-tree
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 24577
Address aabb.cc00.0100
Cost 100
Port 1 (Ethernet0/0)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address aabb.cc00.0100
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 300
Interface Role Sts Cost Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Et0/0 Root FWD 100 128.1 Shr
Et0/1 Altn BLK 100 128.2 Shr
要达成 Man-in-the-middle Attack,还要靠另一个工具,名为 Ettercap。这软件可以扮演 Virtual Switch,并可以分析所有经过的 Data Frame。
选 Sniff ➡️ Bridged sniffing。
选择接驳 Switch 的两个 Interface。
选 View ➡️ Connections,现在 Client 和 Server 之间的沟通都被看光光了……😱
你甚至可以打开这些 Connections 去看看 Packet 里面的内容,下图为 Client 向 Web Server 要求网页内容及 Web Server 的回传资料。
防御对策
所谓 Spanning Tree Protocol Attack,说穿了其实就是 BPDU 在搞鬼,防御对策主要从 BPDU 着手。
Root Guard
Root Guard 可以防止 Root Switch 在不适当或不受信任的位置出现,有关 Root Guard 的设定方法请看这里。
BPDU Guard
BPDU Guard 比 Root Guard 更严紧,不容许 BPDU 出现,简单来说就是不容许 Port 对 STP 进行任何干扰。有关 BPDU Guard 的设定方法请看这里。
BPDU Filter
如果想防止 Port 收到 BPDU 的资讯,并且不理会 Port 传来的 BPDU,可直接开启 BPDU Filter,但要留意会有 Switch Loop 的风险。有关 BPDU Filter 的设定方法请看这里。
相關主題
Jan Ho 2021-07-22
Posted In: 网络破解技术 Hacking
发表回复