DHCP攻擊針對的目標是網絡中的DHCP服務器,原理是耗盡DHCP服務器所有的IP地址資源,使其無法正常提供地址分配服務。然后在網絡中再架設假冒的DHCP服務器為客戶端分發IP地址,從而來實現中間人攻擊。本文以神州數碼CS6200交換機為例,對DHCP攻擊進行全面介紹。

圖1 DHCP工作過程

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