引言:MAC泛洪攻擊是一種針對局域網交換機的攻擊方式,目的在于竊取局域網內用戶的通信數據。本文以神州數碼CS6200交換機為例,從原理、實施、防御三個方面對MAC泛洪攻擊進行了全面介紹。
MAC泛洪攻擊是一種針對局域網交換機的攻擊方式,目的在于竊取局域網內用戶的通信數據。本文以神州數碼CS6200交換機為例,從原理、實施、防御三個方面對MAC泛洪攻擊進行介紹。
交換機的工作核心是端口/MAC地址映射表,這張表里記錄了交換機每個端口同與之相連的主機MAC地址之間的對應關系。通常情況下,交換機的每個端口只會連接一臺主機,因而在MAC地址表中每個端口只會對應1個MAC地址。但由于交換機還要用于級聯其它的交換機,因而在相應的級聯端口上就會對應多個MAC地址,從而在地址表產生大量記錄。

圖1 網絡環境
由于交換機的緩存有限,因此它所能夠記憶的MAC地址數量也是有限的,所以交換機不會永久地記住所有的端口與MAC地址的對應關系。在端口/MAC地址映射表中每一項記錄都被設定了一個自動老化時間,若某MAC地址在一定時間內(默認為300秒)不再出現,那么交換機將自動把該MAC地址從地址表中清除。當下一次該MAC地址重新出現時,將會被當作新地址處理,從而使交換機可以維護一個精確而有用的MAC地址表。交換機檔次越低,交換機的緩存也就越小,能夠記住的MAC地址數也就越少。
以神州數碼DCRS-6200交換機為例,其MAC地址表中最多可記錄16384個MAC地址。執行“show macaddress-table count”命令可以查看到MAC地址表容量及當前已記錄的地址數目。
MAC泛洪攻擊就是由攻擊者通過攻擊工具產生大量的數據幀,這些數據幀中的源MAC地址都是偽造的,并且不斷變化。因而交換機將在攻擊主機所連接的端口上產生大量的MAC地址表條目,從而在短時間內將交換機的MAC地址表填滿,直到再無法接收新的條目。
此時對于網絡中那些事先沒有在交換機的MAC地址表中留下記錄的主機,它們之間的數據通信就會全部采用廣播的方式進行,這樣雖然并不影響數據的發送和接收,但此時的交換機實質上就成為了一臺集線器,攻擊者在網絡中的任何一臺主機上打開Wireshark,就可以監聽到網絡中的這些流量。
如圖1所示的網絡環境中,在Kali Linux中已經集成了MAC泛洪工具macof,在執行macof之后,工具可不停向外發送偽造的源MAC地址不斷變化的數據幀。此時在交換機上檢查,發現整個MAC地址表已被全部填滿。
執 行“showmacaddress-table”命令查看MAC地址表,可以看到絕大部分MAC地址都是從10號端口(Kali Linux所連接的端口)學習到的。
如果將目標主機和目標服務器連接到交換機上,然后在Kali Linux中打開Wireshark,它們之間的通信數據將被監聽。
通過Port-Security(端口安全性)技術可以有效防范MAC泛洪攻擊,Port-Security可以限制交換機端口上所允許的有效MAC地址的數量,這樣交換機就不會無限制的從端口獲取MAC條目。如果某個端口的有效MAC地址個數已經達到最大值,那么當該端口再次接收到新的MAC地址時,就被認為發生安全違規,交換機將自動采取相應的動作。
管理員可以按以下步驟配置發生安全違規后交換機將采取的動作。
關閉(Shutdown):在此模式下,安全違規將造成端口變為錯誤禁用狀態,并關閉端口LED。當端口處于錯誤禁用狀態時,可以先輸入“shutdown”,再輸入“no shutdown”,使其脫離此狀態。此模式為默認模式。
保護(Protect):在此模式下,當有效MAC地址的數量達到端口允許的限制時,帶有未知源地址的數據幀將被丟棄。
限制(Restrict):與保護模式基本相同,區別是在此模式下除了將數據幀丟棄之外,還會發出SNMP消息,并記錄日志等。
下面在神州數碼CS6200交換機上配置Port-Security。
首先執行命令“clearmac-address-tabledynamic”清除之前地址表中的記錄。
然后在Kali Linux所連接的10號端口上啟用Port-Security,并采用默認設置,有效MAC地址只有一個。
CS6200(config)#macaddress-learning cpucontrol//開啟CPU控制學習功能
CS6200(config)#inter face ethernet 1/0/10//進入端口配置模式
CS6200(config-ifthernet1/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
Interface brief:
Ethernet1/0/10 is administratively down,line protocol is down
Ethernet1/0/10 is shutdown by port security
Ethernet1/0/10 is layer2port,alias name is (null),index is 1;
Hardware is Fast-Ethernet,address is 00-03-0f-3e-e6-91
由于默認情況下每個端口的有效MAC地址只有一個,這時如果在端口所連接的主機上開啟一個橋接模式的虛擬機,就會導致發生安全違規,從而將端口關閉。因而建議將端口的有效MAC地址的數量設置的大一些,這樣端口就不會輕易被關閉了。比如將端口的有效MAC地址數量設置為5個:

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


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