MAC泛洪攻擊的實施與防禦
原文發表於2017年第7期《網絡安全與信息化》,轉發到博客。
更多相關資料可參看視頻教程“局域網安全實戰”,http://edu.51cto.com/course/10348.html
MAC泛洪攻擊是一種針對局域網交換機的攻擊方式,目的在於竊取局域網內用戶的通信數據。本文以神州數碼CS6200交換機為例,從原理、實施、防禦三個方面對MAC泛洪攻擊進行了全面介紹。
1. 交換機的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地址表中每個端口只會對應1個MAC地址。但由於交換機還要用於級聯其它的交換機,因而在相應的級聯端口上就會對應多個MAC地址,從而在地址表產生大量記錄。
由於交換機的緩存有限,因此它所能夠記憶的MAC地址數量也是有限的,所以交換機不會永久地記住所有的端口與MAC地址的對應關系。在端口/MAC地址映射表中每一項記錄都被設定了一個自動老化時間,若某MAC地址在一定時間內(默認為300秒)不再出現,那麽交換機將自動把該MAC地址從地址表中清除。當下一次該MAC地址重新出現時,將會被當作新地址處理,從而使交換機可以維護一個精確、有用的MAC地址表。交換機檔次越低,交換機的緩存就越小,它能記住的MAC地址數也就越少。
以神州數碼DCRS-6200交換機為例,它的MAC地址表中最多可以記錄16384個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: 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 Linux的Wireshark中成功抓獲了它們之間的流量,為了更精確的顯示我們所需要的數據,在Wireshark中又設置了顯示過濾器http,只顯示HTTP協議產生的數據,這時就可以輕松看到之前所輸入的用戶名和密碼了,如圖3所示。
圖 3在Wireshark中抓取的用戶名和密碼
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 down,lineprotocol is down
Ethernet1/0/10 is shutdown by port security
Ethernet1/0/10is layer 2 port,alias name is (null),indexis 1;
Hardwareis Fast-Ethernet,address 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泛洪攻擊的實施與防禦