引言:MAC泛洪攻擊是一種針對(duì)局域網(wǎng)交換機(jī)的攻擊方式,目的在于竊取局域網(wǎng)內(nèi)用戶的通信數(shù)據(jù)。本文以神州數(shù)碼CS6200交換機(jī)為例,從原理、實(shí)施、防御三個(gè)方面對(duì)MAC泛洪攻擊進(jìn)行了全面介紹。
MAC泛洪攻擊是一種針對(duì)局域網(wǎng)交換機(jī)的攻擊方式,目的在于竊取局域網(wǎng)內(nèi)用戶的通信數(shù)據(jù)。本文以神州數(shù)碼CS6200交換機(jī)為例,從原理、實(shí)施、防御三個(gè)方面對(duì)MAC泛洪攻擊進(jìn)行介紹。
交換機(jī)的工作核心是端口/MAC地址映射表,這張表里記錄了交換機(jī)每個(gè)端口同與之相連的主機(jī)MAC地址之間的對(duì)應(yīng)關(guān)系。通常情況下,交換機(jī)的每個(gè)端口只會(huì)連接一臺(tái)主機(jī),因而在MAC地址表中每個(gè)端口只會(huì)對(duì)應(yīng)1個(gè)MAC地址。但由于交換機(jī)還要用于級(jí)聯(lián)其它的交換機(jī),因而在相應(yīng)的級(jí)聯(lián)端口上就會(huì)對(duì)應(yīng)多個(gè)MAC地址,從而在地址表產(chǎn)生大量記錄。
圖1 網(wǎng)絡(luò)環(huán)境
由于交換機(jī)的緩存有限,因此它所能夠記憶的MAC地址數(shù)量也是有限的,所以交換機(jī)不會(huì)永久地記住所有的端口與MAC地址的對(duì)應(yīng)關(guān)系。在端口/MAC地址映射表中每一項(xiàng)記錄都被設(shè)定了一個(gè)自動(dòng)老化時(shí)間,若某MAC地址在一定時(shí)間內(nèi)(默認(rèn)為300秒)不再出現(xiàn),那么交換機(jī)將自動(dòng)把該MAC地址從地址表中清除。當(dāng)下一次該MAC地址重新出現(xiàn)時(shí),將會(huì)被當(dāng)作新地址處理,從而使交換機(jī)可以維護(hù)一個(gè)精確而有用的MAC地址表。交換機(jī)檔次越低,交換機(jī)的緩存也就越小,能夠記住的MAC地址數(shù)也就越少。
以神州數(shù)碼DCRS-6200交換機(jī)為例,其MAC地址表中最多可記錄16384個(gè)MAC地址。執(zhí)行“show macaddress-table count”命令可以查看到MAC地址表容量及當(dāng)前已記錄的地址數(shù)目。
MAC泛洪攻擊就是由攻擊者通過攻擊工具產(chǎn)生大量的數(shù)據(jù)幀,這些數(shù)據(jù)幀中的源MAC地址都是偽造的,并且不斷變化。因而交換機(jī)將在攻擊主機(jī)所連接的端口上產(chǎn)生大量的MAC地址表?xiàng)l目,從而在短時(shí)間內(nèi)將交換機(jī)的MAC地址表填滿,直到再無法接收新的條目。
此時(shí)對(duì)于網(wǎng)絡(luò)中那些事先沒有在交換機(jī)的MAC地址表中留下記錄的主機(jī),它們之間的數(shù)據(jù)通信就會(huì)全部采用廣播的方式進(jìn)行,這樣雖然并不影響數(shù)據(jù)的發(fā)送和接收,但此時(shí)的交換機(jī)實(shí)質(zhì)上就成為了一臺(tái)集線器,攻擊者在網(wǎng)絡(luò)中的任何一臺(tái)主機(jī)上打開Wireshark,就可以監(jiān)聽到網(wǎng)絡(luò)中的這些流量。
如圖1所示的網(wǎng)絡(luò)環(huán)境中,在Kali Linux中已經(jīng)集成了MAC泛洪工具macof,在執(zhí)行macof之后,工具可不停向外發(fā)送偽造的源MAC地址不斷變化的數(shù)據(jù)幀。此時(shí)在交換機(jī)上檢查,發(fā)現(xiàn)整個(gè)MAC地址表已被全部填滿。
執(zhí) 行“showmacaddress-table”命令查看MAC地址表,可以看到絕大部分MAC地址都是從10號(hào)端口(Kali Linux所連接的端口)學(xué)習(xí)到的。
如果將目標(biāo)主機(jī)和目標(biāo)服務(wù)器連接到交換機(jī)上,然后在Kali Linux中打開Wireshark,它們之間的通信數(shù)據(jù)將被監(jiān)聽。
通過Port-Security(端口安全性)技術(shù)可以有效防范MAC泛洪攻擊,Port-Security可以限制交換機(jī)端口上所允許的有效MAC地址的數(shù)量,這樣交換機(jī)就不會(huì)無限制的從端口獲取MAC條目。如果某個(gè)端口的有效MAC地址個(gè)數(shù)已經(jīng)達(dá)到最大值,那么當(dāng)該端口再次接收到新的MAC地址時(shí),就被認(rèn)為發(fā)生安全違規(guī),交換機(jī)將自動(dòng)采取相應(yīng)的動(dòng)作。
管理員可以按以下步驟配置發(fā)生安全違規(guī)后交換機(jī)將采取的動(dòng)作。
關(guān)閉(Shutdown):在此模式下,安全違規(guī)將造成端口變?yōu)殄e(cuò)誤禁用狀態(tài),并關(guān)閉端口LED。當(dāng)端口處于錯(cuò)誤禁用狀態(tài)時(shí),可以先輸入“shutdown”,再輸入“no shutdown”,使其脫離此狀態(tài)。此模式為默認(rèn)模式。
保護(hù)(Protect):在此模式下,當(dāng)有效MAC地址的數(shù)量達(dá)到端口允許的限制時(shí),帶有未知源地址的數(shù)據(jù)幀將被丟棄。
限制(Restrict):與保護(hù)模式基本相同,區(qū)別是在此模式下除了將數(shù)據(jù)幀丟棄之外,還會(huì)發(fā)出SNMP消息,并記錄日志等。
下面在神州數(shù)碼CS6200交換機(jī)上配置Port-Security。
首先執(zhí)行命令“clearmac-address-tabledynamic”清除之前地址表中的記錄。
然后在Kali Linux所連接的10號(hào)端口上啟用Port-Security,并采用默認(rèn)設(shè)置,有效MAC地址只有一個(gè)。
CS6200(config)#macaddress-learning cpucontrol//開啟CPU控制學(xué)習(xí)功能
CS6200(config)#inter face ethernet 1/0/10//進(jìn)入端口配置模式
CS6200(config-ifthernet1/0/10)#switchport port-security //啟 用Port-Security
這時(shí)在Kali Linux中再次實(shí)施MAC泛洪攻擊,就會(huì)發(fā)生安全違規(guī),10號(hào)端口被關(guān)閉。執(zhí)行“show Interface ethernet 1/0/10”命令查看端口信息,可以發(fā)現(xiàn)提示“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
由于默認(rèn)情況下每個(gè)端口的有效MAC地址只有一個(gè),這時(shí)如果在端口所連接的主機(jī)上開啟一個(gè)橋接模式的虛擬機(jī),就會(huì)導(dǎo)致發(fā)生安全違規(guī),從而將端口關(guān)閉。因而建議將端口的有效MAC地址的數(shù)量設(shè)置的大一些,這樣端口就不會(huì)輕易被關(guān)閉了。比如將端口的有效MAC地址數(shù)量設(shè)置為5個(gè):
還可以改變發(fā)生安全違規(guī)后的動(dòng)作,比如將違規(guī)動(dòng)作改為“restrict”,這樣就可以實(shí)現(xiàn)只丟棄包而不關(guān)閉端口。
由于Port-Security需要在交換機(jī)的每個(gè)端口上依次設(shè)置,因而對(duì)于那些確定不會(huì)級(jí)聯(lián)其它交換機(jī)的端口,建議都啟用Port-Security,并根據(jù)實(shí)際情況將有效MAC地址的數(shù)量設(shè)置的稍微大一些,從而增強(qiáng)局域網(wǎng)的安全性。