別讓駭客悄悄侵入你的網路:深入解析DHCP Snooping

2023.09.28

別讓駭客悄悄侵入你的網路:深入解析DHCP Snooping


為了確保網路通訊業務的安全性,引入了DHCP Snooping技術,在DHCP Client和DHCP Server之間建立一道防火牆,以抵禦網路中針對DHCP的各種​​攻擊。

一、DHCP工作原理概述

在學習DHCP Snooping之前,我們需要先回顧一下DHCP的工作原理。以下從兩個場景分析DHCP工作原理

1.DHCP無中繼場景

DHCP無中繼場景

(1) 發現階段

DHCP客戶端透過廣播DHCP Discover封包來向區域網路內的DHCP伺服器請求服務。

(2) 提供階段

DHCP伺服器根據自身設定的IP位址池、對應的子網路遮罩和網關等訊息,透過DHCP Offer封包應答客戶端。

(3) 請求階段

若接受DHCP Offer封包中的配置,DHCP用戶端則廣播DHCP Request封包以通告DHCP伺服器及區域網路內其他主機其生效的IP位址。

() 確認階段

DHCP用戶端收到DHCP ACK封包,會廣播發送免費ARP封包,偵測本網段是否有其他終端使用伺服器指派的IP位址。

2.DHCP有中繼場景

DHCP有中繼場景

(1) 發現階段

DHCP中繼接收DHCP用戶端廣播發送的DHCP DISCOVER封包後,請先進行如下處理:

  • 步驟1:檢查DHCP封包中的hops字段,如果大於16,則丟棄DHCP封包;否則,將hops字段加1(表示經過一次DHCP中繼),並繼續第2步驟的操作。
  • 步驟2:檢查DHCP封包中的giaddr欄位。如果是0,將giaddr欄位設定為接收DHCP DISCOVER封包的介面IP位址。如果不是0,則不修改該字段,繼續第3步驟的操作。
  • 步驟3:將DHCP封包的目的IP位址改為DHCP伺服器或下一跳中繼的IP位址,來源位址改為中繼連接客戶端的介面位址,透過路由轉送將DHCP封包單播傳送到DHCP伺服器或下一跳中繼。

(2) 提供階段

DHCP伺服器接收DHCP DISCOVER封包後,選擇與封包中giaddr欄位為同一網段的位址池,並為客戶端指派IP位址等參數,然後向giaddr欄位識別的DHCP中繼單播傳送DHCP OFFER報文。

DHCP中繼收到DHCP OFFER封包後,會進行以下處理:

  • 步驟1:檢查封包中的giaddr字段,如果不是介面的位址,則丟棄該封包;否則,繼續下面的操作。
  • 步驟2:DHCP中繼檢查封包的廣播標誌位元。如果廣播標誌位元為1,則將DHCP OFFER封包廣播傳送給DHCP用戶端;否則將DHCP OFFER封包單播傳送給DHCP用戶端。

(3) 請求階段

中繼接收到來自客戶端的DHCP REQUEST封包的處理過程同"發現階段"。

(4) 確認階段

中繼接收到來自伺服器的DHCP ACK封包的處理過程同"提供階段"。

二、DHCP Snooping概述

為了確保網路通訊業務的安全性,引入了DHCP Snooping技術,在DHCP Client和DHCP Server之間建立一道防火牆,以抵禦網路中針對DHCP的各種​​攻擊。

DHCP Snooping是DHCP的安全特性,用來確保DHCP用戶端從合法的DHCP伺服器取得IP位址。DHCP 伺服器記錄DHCP用戶端IP位址與MAC位址等參數的對應關係,以防止網路上針對DHCP攻擊。

目前DHCP協定在應用程式的過程中遇到許多安全性方面的問題,網路中存在一些針對DHCP的攻擊,例如DHCP Server仿冒者攻擊、DHCP Server的拒絕服務攻擊、仿冒DHCP封包攻擊等。

DHCP Snooping主要是透過DHCP Snooping信任功能和DHCP Snooping綁定表實現DHCP網路安全。

DHCP Snooping信任功能

DHCP Snooping的信任功能,能夠保證客戶端從合法的伺服器取得IP(Internet Protocol)位址。

如下圖所示,網路中如果存在私人自架設的DHCP Server仿冒者,則可能導致DHCP客戶端取得錯誤的IP位址和網路設定參數,無法正常通訊。DHCP Snooping信任功能可以控制DHCP伺服器應答封包的來源,以防止網路中可能存在的DHCP Server仿冒者為DHCP用戶端指派IP位址及其他設定資訊。

DHCP Snooping信任功能示意圖

DHCP Snooping信任功能將介面分為信任介面和非信任介面:

  • 信任介面正常接收DHCP伺服器回應的DHCP ACK、DHCP NAK和DHCP Offer封包。
  • 非信任介面收到的DHCP Server發送的DHCP OFFER、DHCP ACK、DHCP NAK封包會直接丟棄。
  • 設定dhcp snooping enable指令的接口,收到DHCP請求封包後,轉送給所有的信任接口;收到DHCP回應封包後丟棄。
  • 配置dhcp snooping trusted命令的接口,收到DHCP請求報文後,轉發給所有的信任接口,如果沒有其他信任接口,則丟棄該DHCP請求報文;收到DHCP響應報文後,只轉發給連接對應客戶端的並且設定指令dhcp snooping enable的接口,如果查不到上述接口,則丟棄該DHCP回應封包。

三、DHCP Snooping綁定表

DHCP Snooping綁定表功能示意圖

二層接取設備啟用了DHCP Snooping功能後,從收到DHCP ACK封包中擷取關鍵資訊(包括PC的MAC位址以及取得到的IP位址、位址租期),並取得與PC連接的啟用了DHCP Snooping功能的介面資訊(包括介面編號及該介面所屬的VLAN),根據這些資訊產生DHCP Snooping綁定表。

由於DHCP Snooping綁定表記錄了DHCP客戶端IP位址與MAC位址等參數的對應關係,故透過對封包與DHCP Snooping綁定表進行比對檢查,能夠有效防範非法用戶的攻擊。

DHCP Snooping綁定表會根據DHCP租期進行老化或根據使用者釋放IP位址時發出的DHCP Release封包自動刪除對應表項。

四、DHCP Snooping 的作用

DHCP Snooping功能用於防止:

  • DHCP Server仿冒者攻擊
  • 中間人攻擊與IP/MAC Spooping攻擊
  • 改變CHADDR值的DoS攻擊

根據不同的攻擊類型,DHCP Snooping提供不同的工作模式,如下表:

1.DHCP Server仿冒者攻擊

(1) 攻擊原理:

由於DHCP請求封包以廣播形式發送,DHCP Server仿冒者可以偵聽到此封包。DHCP Server仿冒者回應給DHCP Client仿冒訊息,如錯誤的閘道位址、錯誤的DNS伺服器、錯誤的IP等,達到DoS(Deny of Service)的目的。

(2) 解決方法:

  • 為防止DHCP Server仿冒者攻擊,可使用DHCP Snooping的「信任(Trusted)/不信任(Untrusted)」工作模式。
  • 把某個實體介面或VLAN的介面設定為「信任(Trusted)」或「不信任(Untrusted)」。
  • 凡是從「不信任(Untrusted)」介面上收到的DHCP Reply(Offer、ACK、NAK)封包直接丟棄,這樣可以隔離DHCP Server仿冒者攻擊。

2.改變CHADDR值的DoS攻擊

(1) 攻擊原理:

攻擊者持續大量地向DHCP Server申請IP位址,直到耗盡DHCP Server位址池中的IP位址,導致DHCP Server無法給予正常的使用者進行指派。

(2) 解決方法:

為了避免受到攻擊者改變CHADDR值的攻擊,可以在設備上配置DHCP Snooping功能,檢查DHCP Request封包中CHADDR欄位。如果該欄位跟資料幀頭部的來源MAC相匹配,轉送封包;否則,丟棄封包。從而確保合法用戶可以正常使用網路服務。

3.DHCP中間人攻擊

(1) 攻擊原理:

攻擊者利用ARP機制,讓Client學習到DHCP Server IP與Attacker MAC的映射關係,又讓Server學習到Client IP與Attacker Mac的映射關係。如此一來,Client與Server之間互動的IP封包都會經過攻擊者中轉。從本質上講,中間人攻擊是一種Spoofing IP/MAC攻擊,中間人利用了虛假的IP位址與MAC位址之間的映射關係來同時欺騙DHCP的客戶端和伺服器。

(2) 解決方法:

為防禦中間人攻擊與IP/MAC Spoofing攻擊,可使用DHCP Snooping的綁定表工作模式,當介面接收到ARP或IP封包,使用ARP或IP封包中的「來源IP+來源MAC」來匹配DHCP Snooping綁定表。如果匹配就進行轉發,如果不匹配就丟棄。

五、DHCP Snooping設定指令介紹

(1) 全域啟用DHCP Snooping功能:

[Huawei] dhcp snooping enable [ ipv4 | ipv6 ]

(2) VLAN視圖下啟用DHCP Snooping功能:

[Huawei-vlan2] dhcp snooping enable

在VLAN視圖下執行此指令,則對設備所有介面接收到的屬於該VLAN的DHCP封包指令功能生效。

(3) VLAN視圖下設定介面為「信任」狀態\

[Huawei-vlan2] dhcp snooping trusted interface interface-type interface-number

在VLAN視圖下執行此指令,則指令功能僅對加入該VLAN的介面收到的屬於此VLAN的DHCP封包生效。

(4) 介面視圖下啟用DHCP Snooping功能

[Huawei-GigabitEthernet0/0/1] dhcp snooping enable

(5) 介面視圖下設定介面為「信任」狀態

[Huawei-GigabitEthernet0/0/1] dhcp snooping trusted

預設情況下,設備介面為非信任狀態。

(6)(可選)配置丟棄GIADDR欄位非零的DHCP封包

[Huawei] dhcp snooping check dhcp-giaddr enable vlan { vlan-id1 [ to vlan-id2 ] }

使能偵測DHCP Request封包中GIADDR欄位是否非零的功能。此指令同時可以在VLAN視圖或介面視圖下進行設定。在VLAN視圖下執行此指令,則對設備所有介面接收到的屬於該VLAN的DHCP封包指令功能生效;在介面下執行此指令,則對該介面下的所有DHCP封包指令功能生效。

六、DHCP Snooping設定舉例

如圖所示,DHCP和VLAN基礎配置已完成,在Switch配置DHCP Snooping功能。

(1) 配置方式一:介面視圖

[Switch] dhcp snooping enable ipv4
[Switch] interface GigabitEthernet 0/0/1
[Switch-GigabitEthernet0/0/1] dhcp snooping enable
[Switch] interface GigabitEthernet 0/0/2
[Switch-GigabitEthernet0/0/2] dhcp snooping enable
[Switch] interface GigabitEthernet 0/0/3
[Switch-GigabitEthernet0/0/3] dhcp snooping enable
[Switch-GigabitEthernet0/0/3] dhcp snooping trusted

(2) 配置方式二:VLAN視圖

[Switch] dhcp snooping enable ipv4	
[Switch] vlan 2
[Switch-vlan2] dhcp snooping enable	
[Switch] interface GigabitEthernet 0/0/3
[Switch-GigabitEthernet0/0/3] dhcp snooping trusted	

設定驗證執行指令display dhcp snooping interface,查看介面下的DHCP Snooping運作資訊。

[Switch]display dhcp snooping interface GigabitEthernet 0/0/3
 DHCP snooping running information for interface GigabitEthernet0/0/3 :
 DHCP snooping                            	: Enable   
 Trusted interface                        	: Yes     
 Dhcp user max number                     	: 1024     (default)
 Current dhcp user number                 	: 0       
 Check dhcp-giaddr                        	: Disable  (default)
 Check dhcp-chaddr                        	: Disable  (default)
 Alarm dhcp-chaddr                        	: Disable  (default)
 Check dhcp-request                       	: Disable  (default)
 Alarm dhcp-request                       	: Disable  (default)
-----  more ------