目錄
前言
本篇文章將會介紹攻擊 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 2017-05-19
Posted In: 網絡破解技術 Hacking
發佈留言