別讓駭客悄悄侵入你的網路:深入解析DHCP Snooping
別讓駭客悄悄侵入你的網路:深入解析DHCP Snooping
一、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 ------