1. 程式人生 > >DHCP攻擊的實施與防禦

DHCP攻擊的實施與防禦

dhcp 攻擊 假冒 耗盡 防禦

原文發表於2017年第8期《網絡安全與信息化》,轉發到博客。

更多相關資料可參看視頻教程“局域網安全實戰”,http://edu.51cto.com/course/10348.html


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

1. DHCP工作過程

DHCP客戶端從服務端申請到IP地址等網絡配置信息需要經過四個步驟,每個步驟需要發送相應類型的數據報文,如圖1所示。

技術分享

1 DHCP工作過程

首先由客戶端以廣播方式發出“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. DHCP攻擊原理與實施

下面搭建如圖2所示的實驗環境,神州數碼CS6200交換機作為正常的DHCP服務端在網絡中提供地址分配服務,攻擊者在Kali Linux上對交換機發起DHCP攻擊,使其地址池資源全部耗盡,然後攻擊者再啟用假冒的DHCP服務器在網絡中提供地址分配服務。在假冒DHCP服務器所提供的網絡配置信息中,默認網關被設置為Kali LinuxIP地址192.168.1.5(正確的默認網關應該是交換機的IP地址192.168.1.1),被攻擊主機在獲取了假冒DHCP服務器所提供的網絡配置信息後,就會將所有的上網數據全部發送給Kali Linux。此時只要在Kali Linux上啟用路由轉發功能,就可以將被攻擊主機的上網流量全部正常轉發出去,因而並不影響其正常通信,但是其訪問互聯網的所有數據都可以在Kali Linux上被截取到。

技術分享

2實驗環境

下面將分步驟來依次完成DHCP攻擊過程。

2.1 在交換機中配置DHCP服務

#首先啟用DHCP功能:

CS6200 (config)#service dhcp

#創建名為test的地址池,並進入地址池的局部配置模式:

CS6200 (config)#ip dhcp pool test

#指定地址池可供分配的地址範圍,一般都是指定一個網段地址:

CS6200 (dhcp-test-config)#network-address192.168.1.0 255.255.255.0

#指定默認網關,一般就是交換機的地址:

CS6200(dhcp-test-config)#default-router 192.168.1.1

#指定DNS服務器地址:

CS6200(dhcp-test-config)#dns-server 202.102.134.68

#設置租期,格式是“天分”,比如“lease8 0 0 ”表示租期是8天,“lease0 8 0”表示租期是8小時。

CS6200 (dhcp-test-config)#lease 0 80

#設置地址池中不用於分配的地址(需要在全局配置模式下做):

CS6200 (config)#ip dhcpexcluded-address 192.168.1.1 192.168.1.20

設置完成後,在被攻擊主機上可以成功看到分配到的IP地址等信息。

技術分享

3被攻擊主機獲取的正確網絡配置信息

#在交換機上可以查看到已經分配出去的IP地址。

CS6200#shwoip dhcp bingding

Totaldhcp binding items1thematched1

IPaddress Hardwareaddress Lease expiration Type

192.168.1.21 00-0C029-81-BA-30 Thurs Jun 15 15:08:00 2017 Dynamic

為了驗證攻擊的效果,在開始攻擊之前,我們先將已經分配出去的IP地址收回。

#在交換機上收回分配出去的IP地址:

CS6200#clear ip dhcp binding all

#在被攻擊主機上釋放已經獲取到的IP地址:

ipconfig /release

2.2 DHCP耗盡攻擊

下面模擬攻擊者在Kali Linux中實施攻擊,這裏要用到一個名為Yersinia的攻擊工具。Yersinia是一款底層協議攻擊入侵檢測工具,能實施針對多種網絡協議的多種攻擊。

Kail中執行“yersinia –G”命令打開圖形化的Yersinia界面,運行之後,點擊“Launch attack”,選擇DHCP,然後選擇發送DISCOVER包,開始進行攻擊,如圖4所示。

技術分享

4Yersinia中實施攻擊

在攻擊持續的情況下,在交換機中執行CS6200#shwoip dhcp server statistics命令查看DHCP的統計信息,可以看到交換機已經接收到了大量的DHCP DISCOVER數據包,如圖5所示,地址池資源已被耗盡。

技術分享

5交換機接收到大量的DHCPDISCOVER數據包

此時在被攻擊主機上執行“ipconfig /renew”命令重新申請IP地址,就無法申請到IP地址等網絡配置信息了。

2.3 DHCP假冒攻擊

耗盡DHCP服務端的地址資源之後,攻擊者就可以架設自己的DHCP服務器,從而實現DHCP假冒攻擊

首先在假冒的DHCP服務器上架設DHCP服務,指定地址池範圍為192.168.1.100~200,並將默認網關指向Kali LinuxIP地址192.168.1.5。需要註意的是,在將DHCP服務架設好之後,先暫時不要將服務激活,由於此時Kali Linux上的DHCP 耗盡攻擊仍在繼續,一旦激活服務,這臺假冒DHCP服務器的地址資源也將會很快被耗盡。

下面在Kali Linux上停止攻擊,並快速激活假冒DHCP服務器上的DHCP服務,可以看到被攻擊主機成功從假冒服務器處申請到了IP地址,如圖6所示。

技術分享

6被攻擊主機獲取到的假冒網絡配置信息

這裏同樣需要註意一個問題,在將Yersinia停止攻擊之後,一定要快速激活假冒DHCP服務器上的DHCP服務。這是因為Yersinia的攻擊原理是發送大量的DHCP Discover報文,交換機會向其返回DHCP Offer報文,而在這個Offer報文中所提供的IP地址並未真正分配出去,在等待一段時間之後(大約5分鐘),交換機會自動將IP地址收回,因而只要停止攻擊之後過一段時間,交換機就會自動恢復正常。

攻擊成功之後,被攻擊主機的上網流量就將全部被導向到Kali Linux。在Kali中需要執行下面的命令開啟路由轉發功能,以便將被攻擊主機的數據轉發到互聯網。

echo 1> /proc/sys/net/ipv4/ip_forward

最後,就可以在Kali Linux中利用Wireshark等抓包工具來截獲被攻擊主機的上網數據了。不過對於這種DHCP攻擊方式,只能單向截獲從被攻擊主機發往互聯網的數據,而無法截獲從互聯網發回給被攻擊主機的數據,這是由於DHCP攻擊無法去攻擊默認網關等網絡出口設備,要想真正實現雙向截獲數據的中間人攻擊,還是要通過ARP欺騙等攻擊方式。

3. 防範DHCP假冒攻擊

在交換機上通過傳統的DHCPSnooping技術就可以來防範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服務報文後,將對這個端口如何處理。處理動作有兩個:

l shutdown:端口檢測到假冒DHCP Server時,將shutdown此端口。

l blackhole:端口檢測到假冒DHCP Server時,將以偽裝數據包的vid和源mac設置blackhole來阻止此Mac的流量,也就是將假冒服務器的數據暫時丟棄一段時間,可選擇的時間範圍為10~3600秒。

比如將20號端口設置為接收到假冒服務器報文後,將數據暫時丟棄300秒。

CS6200 (config-if-ethernet1/0/20)#ip dhcp snooping actionblackhole recovery 300

由於shutdown的處理動作過於嚴格,因而建議采用blackhole模式進行防範。

4. 防範DHCP耗盡攻擊

DHCP Snooping功能只能防止假冒攻擊,而無法防止耗盡攻擊。這是由於耗盡攻擊所采用的都是客戶端正常發送的DHCPDiscover報文,因而DHCPSnooping對其無能為力。

可以通過交換機的Port-Security(端口安全性)功能來防範耗盡攻擊。因為Yersinia偽造的每個DHCPDiscover報文的源MAC地址都是不同的,在交換機中執行CS6200#showmac-address-table命令查看MAC地址表,就會發現在KaliLinux所連接的10號端口上產生了大量的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

1 00-07-72-01-47-8b DYNAMIC Hardware Ethernet1/0/10

1 00-0a-b5-14-d5-dd DYNAMIC Hardware Ethernet1/0/10

……

我們通過Port-Security技術來限制交換機每個端口可以學習到的最大MAC地址數量,這樣就可以有效地來防範DHCP耗盡攻擊。

比如在交換機的10-15號端口上啟用Port-Security,並設置每個端口可以學習的最大MAC地址數量為2,違規動作為restrict,這樣當安全MAC地址的數量達到端口允許的限制時,交換機就會將帶有未知源地址的數據幀丟棄,並記錄日誌。

#開啟交換機CPU控制學習功能:

CS6200(config)#mac-address-learning cpu-control

#進入端口配置模式:

CS6200(config)#interface ethernet 1/0/10-15

#啟用Port-Security

CS6200(config-if-port-range)#switchport port-security

#設置最大MAC地址數量為2

CS6200(config-if-port-range)#switchport port-security maximum 2

#設置違規動作為restrict

CS6200(config-if-port-range)#switchportport-security violation restrict

這樣在交換機上通過設置DHCP Snooping再結合Port-Security功能,就可以有效地防範DHCP攻擊,從而增強局域網的安全性。


本文出自 “一壺濁酒” 博客,轉載請與作者聯系!

DHCP攻擊的實施與防禦