別讓黑客悄悄侵入你的網絡:深入解析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 ------