DHCP Snooping

DHCP Snooping简介

DHCP Snooping是DHCP(Dynamic Host Configuration Protocol)的一种安全特性,用于保证DHCP客户端从合法的DHCP服务器获取IP地址,并记录DHCP客户端IP地址与MAC地址等参数的对应关系,防止网络上针对DHCP攻击。

目前DHCP协议(RFC2131)在应用的过程中遇到很多安全方面的问题,网络中存在一些针对DHCP的攻击,如DHCP Server仿冒者攻击、DHCP Server的拒绝服务攻击、仿冒DHCP报文攻击等。

为了保证网络通信业务的安全性,可引入DHCP Snooping技术,在DHCP Client和DHCP Server之间建立一道防火墙,以抵御网络中针对DHCP的各种攻击。

受益:

  • 设备具有防御网络上DHCP攻击的能力,增强了设备的可靠性,保障通信网络的正常运行。
  • 为用户提供更安全的网络环境,更稳定的网络服务。

DHCP Snooping原理描述

基本原理:

信任功能:

DHCP Snooping的信任功能,能够保证客户端从合法的服务器获取IP(Internet Protocol)地址。

网络中如果存在私自架设的DHCP Server仿冒者,则可能导致DHCP客户端获取错误的IP地址和网络配置参数,无法正常通信。DHCP Snooping信任功能可以控制DHCP服务器应答报文的来源,以防止网络中可能存在的DHCP Server仿冒者为DHCP客户端分配IP地址及其他配置信息。

  • 信任接口正常接收DHCP服务器响应的DHCP ACK、DHCP NAK和DHCP Offer报文。
  • 非信任接口在接收到DHCP服务器响应的DHCP ACK、DHCP NAK和DHCP Offer报文后,丢弃该报文。

管理员在部署网络时,一般将与合法DHCP服务器直接或间接连接的接口设置为信任接口,其他接口设置为非信任接口,从而保证DHCP客户端只能从合法的DHCP服务器获取IP地址,私自架设的DHCP
Server仿冒者无法为DHCP客户端分配IP地址。

分析功能:

开启DHCP Snooping功能后,设备能够通过分析DHCP的报文交互过程,生成DHCP Snooping绑定表,绑定表项包括客户端的MAC地址、获取到的IP地址、与DHCP客户端连接的接口及该接口所属的VLAN(Virtual Local Area Network)等信息。

DHCP Snooping绑定表根据DHCP租期进行老化或根据用户释放IP地址时发出的DHCP Release报文自动删除对应表项。

出于安全性的考虑,管理员需要记录用户上网时所用的IP地址,确认用户申请的IP地址和用户使用的主机的MAC地址的对应关系。在设备通过DHCP Snooping功能生成绑定表后,管理员可以方便的记录DHCP用户申请的IP地址与所用主机的MAC地址之间的对应关系。

由于DHCP Snooping绑定表记录了DHCP客户端IP地址与MAC地址等参数的对应关系,故通过对报文与DHCP Snooping绑定表进行匹配检查,能够有效防范非法用户的攻击。

为了保证设备在生成DHCP Snooping绑定表时能够获取到用户MAC等参数,DHCP Snooping功能需应用于二层网络中的接入设备或第一个DHCP Relay上。

DHCP Snooping支持的Option82功能:

概述:

在传统的DHCP动态分配IP地址过程中,DHCP Server不能够根据DHCP请求报文感知到用户的具体物理位置,以致同一VLAN的用户得到的IP地址所拥有的权限是完全相同的。由于网络管理者不能对同一VLAN中特定的用户进行有效的控制,即不能够控制客户端对网络资源的访问,这将给网络的安全控制提出了严峻的挑战。

RFC 3046定义了DHCP Relay Agent Information Option(Option 82),该选项记录了DHCP Client的位置信息。DHCP Snooping设备或DHCP Relay通过在DHCP请求报文中添加Option82选项,将DHCP Client的精确物理位置信息传递给DHCP Server,从而使得DHCP Server能够为主机分配合适的IP地址和其他配置信息,实现对客户端的安全控制。

Option82包含两个常用子选项Circuit ID和Remote ID。其中Circuit ID子选项主要用来标识客户端所在的VLAN、接口等信息,Remote ID子选项主要用来标识客户端接入的设备,一般为设备的MAC地址。

设备作为DHCP Relay时,使能或未使能DHCP Snooping功能都可支持Option82选项功能,但若设备在二层网络作为接入设备,则必须使能DHCP Snooping功能方可支持Option82功能。

Option82选项仅记录了DHCP用户的精确物理位置信息并通过DHCP请求报文中将该信息发送给DHCP Server。而如果需要对不同的用户部署不同的地址分配或安全策略,则需DHCP Server支持Option82功能并在其上已配置了IP地址分配或安全策略。

Option82选项携带的用户位置信息与DHCP Snooping绑定表记录的用户参数是两个相互独立的概念,没有任何关联。Option82选项携带的用户位置信息是在DHCP用户申请IP地址时(此时用户还未分配到IP地址),由设备添加到DHCP请求报文中。DHCP Snooping绑定表是在设备收到DHCP Server回应的DHCP Ack报文时(此时已为用户分配了IP地址),设备根据DHCP Ack报文信息自动生成。

实现:

  • Insert方式:当设备收到DHCP请求报文时,若该报文中没有Option82选项,则插入Option82选项;若该报文中含有Option82选项,则判断Option82选项中是否包含remote-id,如果包含,则保持Option82选项不变,如果不包含,则插入remote-id。
  • Rebuild方式:当设备收到DHCP请求报文时,若该报文中没有Option82选项,则插入Option82选项;若该报文中含有Option82选项,则删除该Option82选项并插入管理员自己在设备上配置的Option82选项。

对于Insert和Rebuild两种方式,当设备接收到DHCP服务器的响应报文时,处理方式一致。

  • DHCP响应报文中有Option82选项:
    • 如果设备收到的DHCP请求报文中没有Option82选项,则设备将删除DHCP响应报文中的Option82选项,之后转发给DHCP Client。
    • 如果设备收到的DHCP请求报文中有Option82选项,则设备将DHCP响应报文中的Option82选项格式还原为DHCP请求报文中的Option82选项,之后转发给DHCP Client。
  • DHCP响应报文不含有Option82选项:直接转发。

DHCPv6 Snooping支持的LDRA功能:

概述:

RFC 6221定义了轻量级DHCPv6中继代理LDRA(Lightweight DHCPv6 Relay Agent),它是一种在DHCPv6交互报文中插入中继代理选项信息以标示用户位置的规范。

类似于DHCPv4网络中使用的Option82选项,在DHCPv6网络中可以使用LDRA获取用户详细的位置信息。LDRA一般部署在靠近用户的接入设备上。

实现:

LDRA工作流程与DHCPv6中继工作流程相似。当接收到用户的DHCPv6请求报文时,部署LDRA功能的设备即会构建Relay-Forward报文并在其中封装用户的位置信息(如用户与设备连接的接口信息等)然后转发给DHCPv6 Server,从而使得DHCPv6 Server能够获取到DHCPv6 Client的物理位置信息进而为用户部署诸如IP地址分配、QoS、接入控制等策略。

LDRA工作过程:

LDRA工作流程

图:LDRA工作流程图

  1. DHCPv6客户端向LDRA设备发送DHCPv6报文。
  2. LDRA设备收到客户端的DHCPv6报文后,将其封装在Relay-Forward报文的中继消息选项中,同时将用户的位置信息封装在Relay-Forward报文中的interface-id或remote-id中,之后将Relay-Forward报文发送给DHCPv6服务器。
  3. DHCPv6服务器从Relay-Forward报文中解析出DHCPv6客户端的请求以及用户位置信息,之后根据用户位置信息为DHCPv6客户端选取IPv6地址和其他配置参数,构造应答消息,将应答消息封装在Relay-Reply报文中,并发送给LDRA设备。
  4. LDRA设备从Relay-Reply报文中解析出DHCPv6服务器的应答,转发给DHCPv6客户端。DHCPv6客户端根据应答报文获取到DHCPv6服务器地址,后续从该服务器获取IPv6地址和其他网络配置参数。

DHCPv6 Snooping支持的Option18与Option37功能:

Option18与Option37选项功能类似于Option82。Option82用于插入DHCPv4报文中,而对于DHCPv6报文则需插入Option18与Option37选项用于记录DHCPv6 Client的位置信息。

设备必须使能DHCPv6 snooping功能方可支持Option18与Option37选项功能。

DHCP 攻击:

DHCP Server仿冒者攻击:

攻击原理:

由于DHCP Server和DHCP Client之间没有认证机制,所以如果在网络上随意添加一台DHCP服务器,它就可以为客户端分配IP地址以及其他网络参数。如果该DHCP服务器为用户分配错误的IP地址和其他网络参数,将会对网络造成非常大的危害。

解决方法:

为了防止DHCP Server仿冒者攻击,可配置设备接口的“信任(Trusted)/非信任(Untrusted)”工作模式。

将与合法DHCP服务器直接或间接连接的接口设置为信任接口,其他接口设置为非信任接口。此后,从“非信(Untrusted)”接口上收到的DHCP回应报文将被直接丢弃,这样可以有效防止DHCP Server仿冒者的攻击。

配置防止DHCP Server仿冒者攻击:

在使能DHCP Snooping功能并配置了接口的信任状态之后,设备将能够保证客户端从合法的服务器获取IP地址,这将能够有效的防止DHCP Server仿冒者攻击。但是此时却不能够定位DHCP Server仿冒者的位置,使得网络中仍然存在着安全隐患。

通过配置DHCP Server探测功能,DHCP Snooping设备将会检查并在日志中记录所有DHCP回应报文中携带的DHCP Server地址与接口等信息,此后网络管理员可根据日志来判定网络中是否存在伪DHCP Server进而对网络进行维护。

1
dhcp server detect//使能DHCP Server探测功能。

仿冒DHCP报文攻击:

攻击原理:

已获取到IP地址的合法用户通过向服务器发送DHCP Request或DHCP Release报文用以续租或释放IP地址。如果攻击者冒充合法用户不断向DHCP Server发送DHCP Request报文来续租IP地址,会导致这些到期的IP地址无法正常回收,以致一些合法用户不能获得IP地址;而若攻击者仿冒合法用户的DHCP Release报文发往DHCP Server,将会导致用户异常下线。

解决方法:

为了有效的防止仿冒DHCP报文攻击,可利用DHCP Snooping绑定表的功能。设备通过将DHCP Request续租报文和DHCP Release报文与绑定表进行匹配操作能够有效的判别报文是否合法(主要是检查报文中的VLAN、IP、MAC、接口信息是否匹配动态绑定表),若匹配成功则转发该报文,匹配不成功则丢弃。

配置防止仿冒DHCP报文攻击:

1
2
dhcp snooping check user-bind enable
//使能对DHCP报文进行绑定表匹配检查的功能。

DHCP Server服务拒绝攻击:

攻击原理:

若设备接口interface1下存在大量攻击者恶意申请IP地址,会导致DHCP Server中IP地址快速耗尽而不能为其他合法用户提供IP地址分配服务。

另一方面,DHCP Server通常仅根据DHCP Request报文中的CHADDR(Client Hardware Address)字段来确认客户端的MAC地址。如果某一攻击者通过不断改变CHADDR字段向DHCP Server申请IP地址,同样将会导致DHCP Server上的地址池被耗尽,从而无法为其他正常用户提供IP地址。

解决方法:

为了抑制大量DHCP用户恶意申请IP地址,在使能设备的DHCP Snooping功能后,可配置设备或接口允许接入的最大DHCP用户数,当接入的用户数达到该值时,则不再允许任何用户通过此设备或接口成功申请到IP地址。

而对通过改变DHCP Request报文中的CHADDR字段方式的攻击,可使能设备检测DHCP Request报文帧头MAC与DHCP数据区中CHADDR字段是否一致功能,此后设备将检查上送的DHCP Request报文中的帧头MAC地址是否与CHADDR值相等,相等则转发,否则丢弃。

配置防止DHCP Server服务拒绝攻击:

1
2
3
4
5
6
7
8
dhcp snooping max-user-number 10
// 配置接口允许学习的DHCP Snooping绑定表项的最大个数。
dhcp snooping check mac-address enable
//能检测DHCP Request报文帧头MAC与DHCP数据区中CHADDR字段是否一致功能。
dhcp snooping alarm threshold 100
//配置全局DHCP Snooping丢弃报文数量的告警阈值。
dhcp snooping alarm mac-address threshold 100
//配置帧头MAC地址与DHCP数据区中CHADDR字段不匹配而被丢弃的DHCP报文的告警阈值。

配置命令行:

  • 使能DHCP Snooping功能的顺序是先使能全局下的DHCP Snooping功能,再使能接口或VLAN下的DHCP Snooping功能。

    1
    dhcp snooping enable [ipv4 | ipv6]
  • 为使DHCP客户端能通过合法的DHCP服务器获取IP地址,需将与管理员信任的DHCP服务器直接或间接连接的设备接口设置为信任接口,其他接口设置为非信任接口。从而保证DHCP客户端只能从合法的DHCP服务器获取IP地址,私自架设的DHCP Server仿冒者无法为DHCP客户端分配IP地址。

  • 在连接用户的接口或VLAN下使能DHCP Snooping功能之后,需将连接DHCP服务器的接口配置为“信任”模式,两者同时生效设备即能够生成DHCP Snooping动态绑定表。

    1
    2
    dhcp snooping trusted 
    //配置接口为“信任”接口。
  • 在移动应用场景中,若某一用户由接口A上线后,然后切换到接口B,这时为了让用户能够上线,需要使能DHCP Snooping用户位置迁移功能。

    1
    2
    dhcp snooping user-transfer enable 
    //使能DHCP Snooping用户位置迁移功能。
  • 配置ARP与DHCP Snooping的联动功能

    DHCP Snooping设备在收到DHCP用户发出的DHCP Release报文时将会删除该用户对应的绑定表项,但若用户发生了异常下线而无法发出DHCP Release报文时,DHCP Snooping设备将不能够及时的删除该DHCP用户对应的绑定表。

    使能ARP与DHCP Snooping的联动功能,如果DHCP Snooping表项中的IP地址对应的ARP表项达到老化时间,则DHCP Snooping设备会对该IP地址进行ARP探测,如果在规定的探测次数内探测不到用户,设备将删除用户对应的ARP表项。之后,设备将会再次按规定的探测次数对该IP地址进行ARP探测,如果最后仍不能够探测到用户,则设备将会删除该用户对应的绑定表项。

    只有设备作为DHCP Relay时,才支持ARP与DHCP Snooping的联动功能。

    1
    2
    arp dhcp-Snooping-detect enable 
    //使能ARP与DHCP Snooping的联动功能。
  • 配置丢弃Giaddr字段非0的DHCP报文

    DHCP报文中的GIADDR(Gateway Ip Address)字段记录了DHCP报文经过的第一个DHCP Relay的IP地址,当客户端发出DHCP请求时,如果服务器和客户端不在同一个网段,那么第一个DHCP Relay在将DHCP请求报文转发给DHCP服务器时,会把自己的IP地址填入此字段,DHCP服务器会根据此字段来判断出客户端所在的网段地址,从而选择合适的地址池,为客户端分配该网段的IP地址。

    在为了保证设备在生成DHCP Snooping绑定表时能够获取到用户MAC等参数,DHCP Snooping功能需应用于二层网络中的接入设备或第一个DHCP Relay上。故DHCP Snooping设备接收到的DHCP报文中GIADDR字段必然为零,若不为零则该报文为非法报文,设备需丢弃此类报文。

    1
    2
    dhcp snooping check dhcp-giaddr enable
    //使能检测DHCP Request报文中GIADDR字段是否非零的功能。
  • 去使能接口DHCP Snooping功能

    若使能了某一VLAN的DHCP Snooping功能,则VLAN内所有的接口均使能了DHCP Snooping功能。此时如果需要去使能一特定接口的DHCP Snooping功能,可使用命令dhcp snooping disable去使能特定接口的DHCP
    Snooping功能。此后该接口下的用户将能正常上线,但是并不会生成DHCP动态绑定表。

配置DHCP Snooping的攻击防范功能:

如下图,在SW1上配置DHCP Snooping的一些功能,防范DHCP的各种攻击.

  1. 使能DHCP Snooping功能。
  2. 配置接口的信任状态,以保证客户端从合法的服务器获取IP地址。
  3. 使能ARP与DHCP Snooping的联动功能,保证DHCP用户在异常下线时实时更新绑定表。
  4. 使能对DHCP报文进行绑定表匹配检查的功能,防止仿冒DHCP报文攻击。
  5. 配置允许接入的最大用户数以及使能检测DHCP Request报文帧头MAC与DHCP数据区中CHADDR字段是否一致功能,防止DHCP Server服务拒绝攻击。
  6. 配置丢弃报文告警和报文限速告警功能。

DHCP Snooping

图:DHCP Snooping攻击防范

配置文件:

AR1:

1
2
3
4
5
6
7
8
9
10
11
<DHCP>display  current-configuration 
sysname DHCP
#
dhcp enable
#
dhcp snooping enable
#
interface GigabitEthernet0/0/0
ip address 192.168.0.1 255.255.255.0
dhcp select interface //开启接口DHCP功能
#

SW1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<SW>dis current-configuration 
#
sysname SW
#
dhcp enable
#
dhcp snooping enable
#
arp dhcp-snooping-detect enable
//使能ARP与DHCP Snooping的联动功能。
#
interface GigabitEthernet0/0/1
dhcp snooping trusted
//配置上联口为信任端口
#
interface GigabitEthernet0/0/2
dhcp snooping sticky-mac
dhcp snooping enable
dhcp snooping check dhcp-giaddr enable
//使能检测DHCP报文中GIADDR字段是否非零的功能。
dhcp snooping check dhcp-request enable
dhcp snooping alarm dhcp-request enable
// 使能DHCP Snooping告警功能。
dhcp snooping alarm dhcp-request threshold 100
//配置DHCP Snooping丢弃报文数量的告警阈值。
dhcp snooping check dhcp-chaddr enable
dhcp snooping alarm dhcp-chaddr enable
dhcp snooping alarm dhcp-chaddr threshold 100
dhcp snooping check dhcp-rate enable
dhcp snooping alarm dhcp-rate enable
dhcp snooping alarm dhcp-rate threshold 100
dhcp snooping alarm dhcp-reply enable
dhcp snooping alarm dhcp-reply threshold 100
dhcp snooping max-user-number 100
//配置接口允许学习的DHCP Snooping绑定表项的最大个数
dhcp option82 insert enable
#
interface GigabitEthernet0/0/3
dhcp option82 insert enable
//配置在DHCP报文中添加的Option82选项的格式。
#

SW2,3:

1
2
3
4
5
6
7
8
9
10
11
12
#
interface GigabitEthernet0/0/1
dhcp snooping trusted
dhcp option82 insert enable
#
interface GigabitEthernet0/0/2
dhcp option82 insert enable
dhcp option82 format common
#
interface GigabitEthernet0/0/3
dhcp option82 rebuild enable
#

DHCP

图:SW1中DHCP Snooping状态


参考资料:华为HedEx文档


坚持原创技术分享,您的支持将鼓励我继续创作!