目錄

前言
MAC Address Table 原理
MAC Spoofing Attack (MAC 欺騙攻擊)
MAC Flooding Attack (MAC 洪水攻擊)
攻擊後果
  資料外洩
  網路效能下降或服務中止
  中間人攻擊 (Man-in-the-middle Attack)
防禦方法

前言

Mac Address Table 是 Switch 的靈魂,如果 Mac Address Table 被攻擊,會引致網絡效能下降,或造成資料被竊取,甚至遭受 Man-in-the-Middle 攻擊,本篇文章會嘗試使用一些免費工具程式來達到攻擊效果。

⛑️  本文目的只為學術研究,解釋網絡漏洞及防治方法,並不鼓勵任何犯法行為,敬請留意。⛑️

MAC Address Table 原理

Switch 每分每秒都會從不同的 Port 收到來自不同 Host 的 Data Frame,Switch 會查看這些 Frame 內的 Source MAC Address,並把 MAC Address 及相對應的 Port 紀錄在 MAC Address Table 之中。這樣,Switch 便可以知道每個 Port 正在連接著那個 Mac Address,以後當 Switch 收到目的地為此 MAC Address 的 Frame,就會派送到該 Port。

但由於 MAC Address Table 系統在預設的情況下並沒有驗證機制,只講信任,連接著 Switch 的 Host 說自己是什麼 MAC Address,Switch 都會信以為真。理論上,Host 可以把虛假的 MAC Address 放進 Frame 裡面發給 Switch,讓 Switch 把該個虛假 MAC Address 放進 MAC Address Table 之中,以達到攻擊效果。

MAC Spoofing Attack (MAC 欺騙攻擊)

首先要討論的是 MAC Spoofing Attack。MAC Spoofing Attack 意思是攻擊者向 Switch 提供虛假的 MAC Address 讓它寫進 MAC Address Table 之中,而這個 MAC Address 剛好是網絡裡另一台 Host (受害者) 的 MAC Address。即是說,所有要傳給這個 Host 的訊息,都會被誤傳至偽冒的攻擊者。請看以下圖像說明。

Mac Address Table Attack

正常情況下,Switch 會用 MAC Address Table 來紀錄各 Host 的 MAC Address 及相對的 Port。

  • 1️⃣  PC1 想傳送 Frame 給 PC2,因此在 Frame 的 Destination Address 寫上 PC2 的 MAC Address (ABCD.EF00.0002),並傳送給 Switch
  • 2️⃣  Switch 查看 MAC Address Table,確定目的地在 Port Fa0/2
  • 3️⃣  Switch 把 Frame 在 Fa0/2 送出

Mac Address Table Attack

在遭受 MAC Spoofing Attack 的網絡,情況則有點不同。

  • 1️⃣  攻擊者故意把 PC2 的 MAC Address (ABCD.EF00.0002) 寫在 Frame 的 Source Address 發給 Switch
  • 2️⃣  Switch 誤以為 ABCD.EF00.0002 在 Fa0/3,並更新自己的 MAC Address Table
  • 3️⃣  PC1 傳送 Frame 給 PC2
  • 4️⃣  根據 MAC Address Table,Switch 把 Frame 錯誤地傳送給攻擊者

看完理論,我們嘗試實踐。在 Kali Linux 中有一個名為 Ettercap 的工具,我們可以用這工具來作攻擊測試。

Mac Address Table Attack

選 Sniff ➡️  Unified Sniffing,然後選擇用來發動攻擊的 interface。

Mac Address Table Attack

選 Hosts ➡️  Scan for hosts,然後到 Hosts ➡️  Hosts list,可以看到現時正連接網絡的所有 Host。

Mac Address Table Attack

在發動攻擊之前先看一下現時 Switch 在正常情況下的 MAC Address Table。Gi1/0/1 和 Fa1/0/1 連接著 Host,而攻擊者將會在 Fa1/0/24 發動攻擊。

SW#show mac address-table dynamic 
          Mac Address Table
-------------------------------------------

Vlan    Mac Address       Type        Ports
----    -----------       --------    -----
   1    0016.468f.c381    DYNAMIC     Gi1/0/2
   1    0016.468f.c382    DYNAMIC     Gi1/0/1
   1    0016.468f.c3c0    DYNAMIC     Gi1/0/1
   1    001e.7a37.c8e5    DYNAMIC     Fa1/0/1
   1    f01e.3412.0f4d    DYNAMIC     Fa1/0/24
Total Mac Addresses for this criterion: 5

回到 Ettercap 選 Mitm ➡️  Port Stealing,工具程式幫我們做了什麼呢?可以打開 WireShark 看看,發現攻擊者不斷發放 ARP Request 給 Switch,而 Source Address 則寫上其他 Host 的 MAC Address。

Mac Address Table Attack

再查看 MAC Address Table,發現原本指向 Gi1/0/1 和 Fa1/0/1 的紀錄都被更新了,改為指向攻擊者的 Fa1/0/24。

SW#show mac address-table dynamic 
          Mac Address Table
-------------------------------------------

Vlan    Mac Address       Type        Ports
----    -----------       --------    -----
   1    0016.468f.c381    DYNAMIC     Gi1/0/2
   1    0016.468f.c382    DYNAMIC     Gi1/0/1
   1    0016.468f.c3c0    DYNAMIC     Fa1/0/24
   1    001e.7a37.c8e5    DYNAMIC     Fa1/0/24
   1    f01e.3412.0f4d    DYNAMIC     Fa1/0/24
Total Mac Addresses for this criterion: 5

再用 WireShark 看看,現在網絡上 Host 之間的溝通都送來攻擊者的電腦了。

Mac Address Table Attack

MAC Flooding Attack (MAC 洪水攻擊)

每台 Switch 的 MAC Address Table 都有容量限制,低階的 Switch 一般只能容納數千條紀錄,而高階型號則可多達數萬或數十萬條。如果 MAC Address Table 被虛假的紀錄塞滿,正確的紀錄就會無法寫入,導致 Switch 無法在 MAC Address Table 找出目的地 Port,於是改為用 Broadcast 傳送資料。Broadcast 會佔用網絡頻寬,而最嚴重的問題是資訊會被暴露於整個網絡之中,被攻擊者擷取。

要查看 Switch 的 MAC Address Table 容量,可以用 show mac address-table count

SW#show mac address-table count

Mac Entries for Vlan 1:
---------------------------
Dynamic Address Count  : 3
Static  Address Count  : 0
Total Mac Addresses    : 3

Total Mac Address Space Available: 5564

我們的目標就是要填滿那餘下的 5564 的空間,Kali Linux 裡面的 macof 可作 Flooding 攻擊測試。

打開 Terminal 輸入 macof -e <interface>,macof 便會立刻進行攻擊,攻擊原理為隨機產生 MAC Address 並放進 Frame 中送出。

root@kali:~# macof --help
macof: invalid option -- '-'
Version: 2.4
Usage: macof [-s src] [-d dst] [-e tha] [-x sport] [-y dport]
             [-i interface] [-n times]
root@kali:~# macof -e eth1
e3:8b:88:3:b4:cd d8:25:98:35:61:87 0.0.0.0.9537 > 0.0.0.0.18576: S 1905213613:1905213613(0) win 512
91:33:3b:3:a0:f5 d6:11:53:f:5e:c8 0.0.0.0.8066 > 0.0.0.0.49105: S 428779274:428779274(0) win 512
c4:27:40:74:3d:11 b9:a5:d3:1d:e:bf 0.0.0.0.8772 > 0.0.0.0.42343: S 1206065071:1206065071(0) win 512
9a:d7:d9:6a:fd:ee 9b:e8:7:15:e4:1d 0.0.0.0.44381 > 0.0.0.0.7072: S 352131538:352131538(0) win 512
42:33:77:69:9b:65 ef:3b:4c:19:e2:bd 0.0.0.0.24920 > 0.0.0.0.19837: S 1039619585:1039619585(0) win 512
a:60:b2:3d:fc:af d3:7c:5b:36:4a:61 0.0.0.0.17578 > 0.0.0.0.4432: S 727135709:727135709(0) win 512
18:75:26:4c:a8:23 10:81:2a:12:e1:be 0.0.0.0.42271 > 0.0.0.0.61161: S 1071867223:1071867223(0) win 512
98:15:eb:38:f3:c1 c8:d7:c1:61:be:a3 0.0.0.0.30693 > 0.0.0.0.57646: S 1759104040:1759104040(0) win 512
dc:6d:43:15:be:52 99:19:41:22:4e:36 0.0.0.0.29211 > 0.0.0.0.63665: S 481173385:481173385(0) win 512
42:d5:ac:47:75:fd 2:3c:f5:3a:29:b0 0.0.0.0.14787 > 0.0.0.0.57718: S 1888990933:1888990933(0) win 512
4d:ed:18:48:f0:f5 4b:ba:a5:66:ef:ee 0.0.0.0.54900 > 0.0.0.0.37268: S 397896255:397896255(0) win 512

<--Output Omitted-->

Switch 毫不猶疑就把所有 MAC Address 放進 MAC Address Table。

SW#show mac address-table       
          Mac Address Table
-------------------------------------------

Vlan    Mac Address       Type        Ports
----    -----------       --------    -----
   1    0008.3714.23ca    DYNAMIC     Fa1/0/23
   1    000a.b745.4d74    DYNAMIC     Fa1/0/23
   1    000e.8528.b694    DYNAMIC     Fa1/0/23
   1    0010.60dd.4d6a    DYNAMIC     Fa1/0/23
   1    0016.468f.c381    DYNAMIC     Gi1/0/2
   1    0016.468f.c382    DYNAMIC     Gi1/0/1
   1    001a.8b7b.69ad    DYNAMIC     Fa1/0/23
   1    001e.7a37.c8e5    DYNAMIC     Fa1/0/1
   1    0026.0c02.85ab    DYNAMIC     Fa1/0/23
   1    0027.ab5e.0c9f    DYNAMIC     Fa1/0/23
   1    002b.9f19.7c59    DYNAMIC     Fa1/0/23
   1    0033.7a1b.27a6    DYNAMIC     Fa1/0/23
   1    0040.145f.9b17    DYNAMIC     Fa1/0/23
   1    005f.9b5c.ffa7    DYNAMIC     Fa1/0/23
   1    0061.eb6f.174d    DYNAMIC     Fa1/0/23
   1    0075.a023.e467    DYNAMIC     Fa1/0/23
   1    0076.7375.dc6d    DYNAMIC     Fa1/0/23
   1    007a.470f.f51a    DYNAMIC     Fa1/0/23
   1    007d.b144.c298    DYNAMIC     Fa1/0/23
   1    0087.7941.3cd3    DYNAMIC     Fa1/0/23

<--Output Omitted-->

不消幾秒鐘,MAC Address Table 就被填滿了。

SW#show mac address-table count 

Mac Entries for Vlan 1:
---------------------------
Dynamic Address Count  : 6024
Static  Address Count  : 0
Total Mac Addresses    : 6024

Total Mac Address Space Available: 0

如果攻擊持續 5 分鐘以上,舊有而正確的紀錄會因為 Timeout 而被消去 (MAC Address Table Timeout 預設為 5 分鐘)。可是 MAC Address Table 因被虛假紀錄填滿,再也無法寫入紀錄。由於 Switch 不能從 MAC Address Table 找到目的地紀錄,就會改為使用 Broadcast 傳送。

這時只要用擷取軟件即可看到網絡上各 Host 所傳送的 Frame。

Mac Address Table Attack

攻擊後果

MAC Address Table 攻擊主要帶來三個問題:

資料外洩

攻擊者干擾 Switch 運作,從而接收到 Host 之間的訊息,如訊息沒有加密則造成資料外洩。就算訊息有加密,攻擊者亦可收集資訊,例如收集使用者經常造訪的網站,透過 Social Engineering 進行下一步攻擊。

網路效能下降或服務中止

被攻擊的 Switch 會產生 Broadcast 導致網絡效能下降,甚至會因為無法處理大量 MAC Address 而造成當機。

中間人攻擊 (Man-in-the-middle Attack)

如攻擊者偽裝成網絡的 Default Gateway 就可作出 Man-in-the-middle Attack,檢視或改動所有跨越到另一個網絡或連線到 Internet 的所有訊息。

Mac Address Table Attack

防禦方法

MAC Address Table Attack 的防禦方法為使用 Port Security 來限制 Port 的 MAC Address,本網已有文章介紹 Port Security 設定方法,在此不作重覆。