1. 程式人生 > >MAC泛洪攻擊的實施與防禦

MAC泛洪攻擊的實施與防禦

mac泛洪 攻擊 防禦 port security

原文發表於2017年第7期《網絡安全與信息化》,轉發到博客。

更多相關資料可參看視頻教程“局域網安全實戰”,http://edu.51cto.com/course/10348.html

MAC泛洪攻擊是一種針對局域網交換機的攻擊方式,目的在於竊取局域網內用戶的通信數據。本文以神州數碼CS6200交換機為例,從原理、實施、防禦三個方面對MAC泛洪攻擊進行了全面介紹。

1. 交換機的MAC地址表

交換機的主要功能是在局域網內的主機之間轉發數據幀。交換機接收從主機上傳來的比特流之後,要先將其緩存成數據幀,然後通過分析幀頭中的MAC地址,交換機就可以判斷出數據的發送方和接收方,從而將數據轉發給目的主機。

交換機的工作核心是端口

/MAC地址映射表,這張表裏記錄了交換機每個端口同與之相連的主機MAC地址之間的對應關系。交換機剛啟動時,端口/MAC地址映射表是空白的,當某臺主機發送了一個數據幀到相應端口上後,交換機首先將數據幀裏的源MAC地址與該端口的對應關系記錄在映射表裏,然後再去映射表裏查找與數據幀的目的MAC地址相對應的端口,而此時肯定是找不著的,這時交換機就以廣播的方式將這個數據幀向除了源端口以外的其它所有端口轉發,從而將數據發送給了目的主機。經過這一個過程之後,在映射表裏便已經產生了第一條記錄。因而只要網絡中的每臺主機都發送了一次數據,在地址表中便會記錄下所有主機MAC地址與端口的對應關系,從而建立起一個完整的端口
/MAC地址映射表。映射表建好之後,交換機便可以在所有主機之間直接轉發數據幀,而再也無需廣播了。

在交換機中執行“showmac-address-table”命令就可以查看到MAC地址表。

CS6200#showmac-address-table

Readmac address table….

Vlan Mac Address Type Creator Ports

1 00-03-0f-3e-e6-90 STATIC System CPU

1 ec-a8-6b-61-64-a1 DYNAMIC Hardware Ethernet1/0/10

通常情況下,交換機的每個端口只會連接一臺主機,因而在MAC地址表中每個端口只會對應1MAC地址。但由於交換機還要用於級聯其它的交換機,因而在相應的級聯端口上就會對應多個MAC地址,從而在地址表產生大量記錄。

由於交換機的緩存有限,因此它所能夠記憶的MAC地址數量也是有限的,所以交換機不會永久地記住所有的端口與MAC地址的對應關系。在端口/MAC地址映射表中每一項記錄都被設定了一個自動老化時間,若某MAC地址在一定時間內(默認為300秒)不再出現,那麽交換機將自動把該MAC地址從地址表中清除。當下一次該MAC地址重新出現時,將會被當作新地址處理,從而使交換機可以維護一個精確、有用的MAC地址表。交換機檔次越低,交換機的緩存就越小,它能記住的MAC地址數也就越少。

以神州數碼DCRS-6200交換機為例,它的MAC地址表中最多可以記錄16384MAC地址。執行“showmac-address-table count”命令可以查看到MAC地址表的容量以及當前已經記錄的地址數目。

CS6200#showmac-address-table count

Computethe number of mac address…..

Maxentries can be created in the largest capacity card:

Total Filter Entry Number is: 16384

Static Filter Entry Number is: 16384

Unicast Filter Entry Number is: 16384

Multicast Filter Entry Number is: 4096

Currententries have been created in the system:

Total Filter Entry Number is: 2

Individual Filter Entry Number is: 2

Static Filter Entry Number is: 1

Dynamic Filter Entry Number is: 1

Multicast(Insert) Filter Entry Number is: 0

Multicast(Wait) Filter Entry Number is: 0

2. MAC泛洪攻擊

MAC泛洪攻擊就是由攻擊者通過攻擊工具產生大量的數據幀,這些數據幀中的源MAC地址都是偽造的,並且不斷變化。因而交換機將在攻擊主機所連接的端口上產生大量的MAC地址表條目,從而在短時間內將交換機的MAC地址表填滿,直到再無法接收新的條目。

此時對於網絡中那些事先沒有在交換機的MAC地址表中留下記錄的主機,它們之間的數據通信就會全部采用廣播的方式進行,這樣雖然並不影響數據的發送和接收,但此時的交換機實質上就成為了一臺集線器,攻擊者在網絡中的任何一臺主機上打開Wireshark,就可以監聽到網絡中的這些流量。

下面我們搭建一個如圖1所示的實驗環境,實驗目的是通過在KaliLinux上發動MAC泛洪攻擊,從而捕獲目標主機訪問目標服務器的數據。在實驗過程中需要註意,先不要將目標主機和目標服務器連接到交換機上,待MAC泛洪攻擊成功之後,再將它們連接上去,這樣才能保證不會在交換機的MAC地址表中產生它們的記錄,從而使得它們之間的數據通信采用廣播方式。

技術分享

1實驗環境

KaliLinux中已經集成了MAC泛洪工具macof,執行macof之後,工具就開始不停向外發送偽造的源MAC地址不斷變化的數據幀,如圖2所示。如果一個macof的效果不明顯,可以打開多個命令行界面,同時執行macof

技術分享

2利用macof進行MAC泛洪攻擊

此時在交換機上執行“showmac-address-table count”命令檢查攻擊效果,發現整個MAC地址表已被全部填滿。

CS6200#showmac-address-table count

Computethe number of mac address…..

Maxentries can be created in the largest capacity card:

Total Filter Entry Number is: 16384

Static Filter Entry Number is: 16384

Unicast Filter Entry Number is: 16384

Multicast Filter Entry Number is: 4096

Currententries have been created in the system:

Total Filter Entry Number is: 16384

Individual Filter Entry Number is: 16384

Static Filter Entry Number is: 1

Dynamic Filter Entry Number is: 16383

Multicast(Insert) Filter Entry Number is: 0

Multicast(Wait) Filter Entry Number is: 0

執行“showmac-address-table”命令查看MAC地址表,可以看到絕大部分MAC地址都是從10號端口(Kali Linux所連接的端口)學習到的。

CS6200#showmac-address-table

Readmac address table….

Vlan Mac Address Type Creator Ports

1 00-03-0f-3e-e6-90 STATIC System CPU

1 ec-a8-6b-61-64-a1 DYNAMIC Hardware Ethernet1/0/10

1 00-07-72-01-47-8b DYNAMIC Hardware Ethernet1/0/10

1 00-0a-b5-14-d5-dd DYNAMIC Hardware Ethernet1/0/10

……

這時將目標主機和目標服務器連接到交換機上,然後在Kali Linux中打開Wireshark,就可以監聽到它們之間的通信數據了。由於此時Kali Linux中存在大量的MAC泛洪數據,所以在抓包之前最好先設置捕獲過濾器,比如設置過濾規則“host 10.39.1.11”,只抓取主機10.39.1.11發出和接收的數據。

然後在目標主機上訪問目標服務器中的一個網站登錄頁面,並輸入用戶名admin以及密碼123456,此時在Kali LinuxWireshark中成功抓獲了它們之間的流量,為了更精確的顯示我們所需要的數據,在Wireshark中又設置了顯示過濾器http,只顯示HTTP協議產生的數據,這時就可以輕松看到之前所輸入的用戶名和密碼了,如圖3所示。

技術分享

3Wireshark中抓取的用戶名和密碼

3. 通過Port-Security防範MAC泛洪攻擊

通過Port-Security(端口安全性)技術可以有效防範MAC泛洪攻擊,Port-Security可以限制交換機端口上所允許的有效MAC地址的數量,這樣交換機就不會無限制的從端口獲取MAC條目。如果某個端口的有效MAC地址個數已經達到最大值,那麽當該端口再次接收到新的MAC地址時,就被認為發生安全違規,交換機將自動采取相應的動作。

管理員可以配置發生安全違規後交換機將采取的動作:

l 關閉(shutdown):在此模式下,安全違規將造成端口變為錯誤禁用狀態,並關閉端口LED。當端口處於錯誤禁用狀態時,可以先輸入shutdown,再輸入no shutdown,使其脫離此狀態。此模式為默認模式。

l 保護(protect):在此模式下,當有效MAC地址的數量達到端口允許的限制時,帶有未知源地址的數據幀將被丟棄。

l 限制(restrict):與保護模式基本相同,區別是在此模式下除了將數據幀丟棄之外,還會發出SNMP消息,並記錄日誌等。

下面在神州數碼CS6200交換機上配置Port-Security

首先執行命令“clear mac-address-table dynamic”清除之前地址表中的記錄。

然後在Kali Linux所連接的10號端口上啟用Port-Security,並采用默認設置,有效MAC地址只有一個。

CS6200(config)#mac-address-learning cpu-control //開啟CPU控制學習功能

CS6200(config)#interface ethernet 1/0/10 //進入端口配置模式

CS6200(config-if-ethernet1/0/10)#switchport port-security //啟用Port-Security

這時在Kali Linux中再次實施MAC泛洪攻擊,就會發生安全違規,10號端口被關閉。執行“show Interface ethernet 1/0/10”命令查看端口信息,可以發現提示“Ethernet 1/0/10 is shutdown by port security”的提示信息。

CS6200(config)# show Interface ethernet 1/0/10

Interfacebrief:

Ethernet1/0/10 is administratively downlineprotocol is down

Ethernet1/0/10 is shutdown by port security

Ethernet1/0/10is layer 2 portalias name is (null)indexis 1;

Hardwareis Fast-Ethernetaddress is 00-03-0f-3e-e6-91

由於默認情況下每個端口的有效MAC地址只有一個,這時如果在端口所連接的主機上開啟一個橋接模式的虛擬機,就會導致發生安全違規,從而將端口關閉。因而建議將端口的有效MAC地址的數量設置的大一些,這樣端口就不會輕易被關閉了。比如將端口的有效MAC地址數量設置為5個:

CS6200(config-if-ethernet1/0/10)#switchport port-security maximum 5

我們還可以改變發生安全違規後的動作,比如將違規動作改為restrict,這樣就只丟棄包而不關閉端口。

CS6200(config-if-ethernet1/0/10)# switchportport-security violation restrict

由於Port-Security需要在交換機的每個端口上依次設置,因而對於那些確定不會級聯其它交換機的端口,建議都啟用Port-Security,並根據實際情況將有效MAC地址的數量設置的稍微大一些,從而增強局域網的安全性。

本文出自 “一壺濁酒” 博客,轉載請與作者聯系!

MAC泛洪攻擊的實施與防禦