DHCP攻擊針對(duì)的目標(biāo)是網(wǎng)絡(luò)中的DHCP服務(wù)器,原理是耗盡DHCP服務(wù)器所有的IP地址資源,使其無法正常提供地址分配服務(wù)。然后在網(wǎng)絡(luò)中再架設(shè)假冒的DHCP服務(wù)器為客戶端分發(fā)IP地址,從而來實(shí)現(xiàn)中間人攻擊。本文以神州數(shù)碼CS6200交換機(jī)為例,對(duì)DHCP攻擊進(jìn)行全面介紹。
圖1 DHCP工作過程
圖2 實(shí)驗(yàn)環(huán)境
DHCP客戶端從服務(wù)端申請(qǐng)到IP地址等網(wǎng)絡(luò)配置信息需要經(jīng)過四個(gè)步驟,每個(gè)步驟需要發(fā)送相應(yīng)類型的數(shù)據(jù)報(bào)文,如圖1所示。
首先由客戶端以廣播方式發(fā)出“DHCP Discover”報(bào)文來尋找網(wǎng)絡(luò)中的DHCP服務(wù)端。
當(dāng)服務(wù)端接收到來自客戶 端 的“DHCP Discover”報(bào)文后,就在自己的地址池中查找是否有可提供的IP地址。如果有,服務(wù)端就將此IP地址做上標(biāo)記,并用“DHCP Offer”報(bào)文將之發(fā)送回客戶端。
由于網(wǎng)絡(luò)中可能會(huì)存在多臺(tái)DHCP服務(wù)端,所以客戶端可能會(huì)接收到多個(gè)“DHCP Offer”報(bào)文。此時(shí)客戶端只選擇最先到達(dá)的“DHCP Offer”,并再次以廣播方式發(fā)送“DHCP Request”報(bào)文。一方面要告知它所選擇的服務(wù)端,同時(shí)也要告知其他沒有被選擇的服務(wù)端,這樣這些服務(wù)端就可以將之前所提供的IP地址收回。
被選擇的服務(wù)端接收到客戶端發(fā)來的“DHCP Request” 報(bào) 文后,首先將所提供的IP地址標(biāo)記為已租用,然后向客戶端發(fā)送一個(gè)“DHCP ACK”確認(rèn)報(bào)文,該報(bào)文中包含有IP地址的有效租約及默認(rèn)網(wǎng)關(guān)和DNS服務(wù)器等網(wǎng)絡(luò)配置信息。
當(dāng)客戶端收到“DHCP ACK”報(bào)文后,就成功獲得IP地址,完成初始化過程。
下面搭建如圖2所示的實(shí)驗(yàn)環(huán)境,神州數(shù)碼CS6200交換機(jī)作為正常的DHCP服務(wù)端在網(wǎng)絡(luò)中提供地址分配服務(wù),攻擊者在Kali Linux上對(duì)交換機(jī)發(fā)起DHCP攻擊,使其地址池資源全部耗盡,然后攻擊者再啟用假冒的DHCP服務(wù)器在網(wǎng)絡(luò)中提供地址分配服務(wù)。在假冒DHCP服務(wù)器所提供的網(wǎng)絡(luò)配置信息中,默認(rèn)網(wǎng)關(guān)被設(shè)置為Kali Linux的IP地址192.168.1.5(正確的默認(rèn)網(wǎng)關(guān)應(yīng)該是交換機(jī)的IP地址 192.168.1.1),被攻擊主機(jī)在獲取了假冒DHCP服務(wù)器所提供的網(wǎng)絡(luò)配置信息后,就會(huì)將所有的上網(wǎng)數(shù)據(jù)全部發(fā)送給Kali Linux。此時(shí)只要在Kali Linux上啟用路由轉(zhuǎn)發(fā)功能,就可以將被攻擊主機(jī)的上網(wǎng)流量全部正常轉(zhuǎn)發(fā)出去,因而并不影響其正常通信,但是其訪問互聯(lián)網(wǎng)的所有數(shù)據(jù)都可以在Kali Linux上被截取到。
在交換機(jī)上通過傳統(tǒng)的DHCP Snooping技術(shù)就可以來防范DHCP假冒攻擊。當(dāng)啟用了DHCP Snooping功能之后,交換機(jī)的所有端口都將無法接收DHCP Offer報(bào)文,這樣假冒的DHCP服務(wù)器就無法向外分配IP地址了。
下面在神州數(shù)碼CS6200交換機(jī)上啟用并配置DHCP Snooping功能。
#啟用DHCP Snooping功能:
CS6200(config)#ip dhcp snooping enable
#將DHCP Snooping應(yīng)用于指定的VLAN,這里應(yīng)用于默認(rèn)的VLAN 1:
CS6200(config)#ip dhcp snooping vlan 1
啟用DHCP Snooping功能后,還需要設(shè)置如果從某個(gè)端口收到假冒DHCP服務(wù)報(bào)文后,將對(duì)這個(gè)端口如何處理。處理動(dòng)作有兩個(gè):
shutdown:端口檢測(cè)到假 冒DHCP Server時(shí),將“shutdown”此端口。
blackhole:端口檢測(cè)到假冒DHCP Server時(shí),將以偽裝數(shù)據(jù)包的VID和源MAC設(shè)置“blackhole”來阻止此MAC的流量,也就是將假冒服務(wù)器的數(shù)據(jù)暫時(shí)丟棄一段時(shí)間,可選擇的時(shí)間范圍為10~3600秒。
比如將20號(hào)端口設(shè)置為接收到假冒服務(wù)器報(bào)文后,將數(shù)據(jù)暫時(shí)丟棄300秒。
CS6200(configif-ethernet1/0/20)#ip dhcp snooping action blackhole recovery 300
由于“shutdown”的處理動(dòng)作過于嚴(yán)格,因而建議采用“blackhole”模式。
DHCP Snooping功能只能防止假冒攻擊,而無法防止耗盡攻擊。這是由于耗盡攻擊所采用的都是客戶端正常發(fā)送的DHCP Discover報(bào)文,因而DHCP Snooping對(duì)其無能為力。
可以通過交換機(jī)的Port-Security(端口安全性)功能來防范耗盡攻擊。因?yàn)閅ersinia偽造的每個(gè)DHCP Discover報(bào)文的源MAC地址都是不同的,在交換機(jī)中執(zhí)行“CS6200#show mac-address-table”命 令查看MAC地址表,就會(huì)發(fā)現(xiàn)在Kali Linux所連接的10號(hào)端口上產(chǎn)生了大量的MAC地址表?xiàng)l目。
我們可以通過Port-Security技術(shù)來限制交換機(jī)每個(gè)端口可以學(xué)習(xí)到的最大MAC地址數(shù)量,這樣就可以有效地來防范DHCP耗盡攻擊。
比如在交換機(jī)的10-15號(hào)端口上啟用Port-Security,并設(shè)置每個(gè)端口可以學(xué)習(xí)的最大MAC地址數(shù)量為2,違規(guī)動(dòng)作為“restrict”,這 樣 當(dāng) 安 全MAC地址的數(shù)量達(dá)到端口允許的限制時(shí),交換機(jī)就會(huì)將帶有未知源地址的數(shù)據(jù)幀丟棄,并記錄日志。
#開啟交換機(jī)CPU控制學(xué)習(xí)功能:
CS6200(config)#macaddress-learning cpucontrol
#進(jìn)入端口配置模式:
CS6200(config)#interface ethernet 1/0/10-15
#啟用Port-Security:
CS6200(config-ifport-range)#switchport port-security
#設(shè)置最大MAC地址數(shù)量為2:
CS6200(config-ifport-range)#switchport port-security maximum 2
#設(shè)置違規(guī)動(dòng)作為restrict
CS6200(config-ifport-range)#switchport port-security violation restrict
這樣在交換機(jī)上通過設(shè)置DHCP Snooping再結(jié)合Port-Security功能,就可以有效地防范DHCP攻擊,從而增強(qiáng)局域網(wǎng)的安全性。