DHCP原理及DHCP服务器的防攻击手段
一、DHCP简介
1、产生背景:网络增大,手工配置存在很多问题【人员素质要求高、容易出错、灵活性差、IP地址资源利用率低、工作量大,不利于管理等】
2、DHCP相对于静态手工配置的优点【效率高、灵活性强、易于管理等】
二、DHCP的原理与配置
(一)、DHCP的基本工作过程
【发现阶段、提供阶段、请求阶段、确认阶段】
如下图:
【发现阶段】
在发现阶段,DHCP客户端会以广播的方式给自己所在在广播域中的DHCP服务器都发送一个DHCP Discover 报文,目的是寻找网络中的DHCP Server,并表示自己需要获得一个IP地址
【提供阶段】
是网络中的DHCP Server响应所收到的DHCP Discover 报文,把准备提供的IP地址携带在DHCP Offer 报文中,并以单播的方式发送给DHCP 客户端(注意这里Offer 报文中携带的IP地址客户端还不能直接使用)
【请求阶段】
DHCP客户端在收到的所有Offer 报文中选择接受第一个到达客户端的Offer(通常情况下选择第一个接收到的Offer) ,并向相应的DHCP Server 以广播的方式发送DHCP Request 报文,表示自己愿意接受该Offer (在这个DHCP Request 报文中携带有R上的DHCP Server 的标识—称为Server Identifier,表示DHCP Client 只愿意接受R上的Offer,R也是通过分析这个标识来确定DHCP Client 只愿意接受自己的Offer
而该二层广播域中其他的DHCP服务器也会收到DHCP Client 所发出的DHCP Request 报文,它们则通过分析这个标识来确定DHCP Client 已经拒绝接受自己的Offer)
【确认阶段】
如果在提供阶段所携带的IP地址能正常地分配给DHCP Client 使用的话,那么R会以单播的方式给DHCP Client 发送一个DHCP Ack 报文,此时DHCP Client 获取地址成功;但是如果因为一些原因,在提供阶段所携带的IP地址不能分配给DHCP Client 的话,这时R则会给DHCP Client 发送一个DHCP Nak 报文,而当DHCP Client 收到R的DHCP Nak 报文后,则表示获取IP地址失败,需要重新进入到发现阶段。
当DHCP Client 正常获得IP地址后
如下图:
在这里插入图片描述
从DHCP Server 获取的IP地址有一个租约时间,DHCP协议规定租约时间缺省不少于1小时,通常情况下,租约时间缺省值为24小时。
在DHCP协议中规定,在缺省情况下,当DHCP Client 使用IP地址到达T1时(租约时间的1/2),DHCP Client会以单播的方式给R发送一个DHCP Request 报文(请求续租),当到达时间T2(租约时间的7/8,即租约时间的87.5%)之前,若DHCP Client 收到R的DHCP Ack报文,则续租成功,重新开始租约期的计时;若没有收到,则DHCP Client 会在T2时刻再次以广播的方式发送DHCP Request 报文,请求续租,这时如果DHCP Client 在租约时间到达之前收到R的DHCP Ack报文,则续租成功,重新开始租约期的计时,如果没收到,则续租失败,DHCP Client 不能继续使用这个IP地址,需要重新从发现阶段开始向DHCP服务器申请新的IP地址
(二)、DHCP中继
1、DHCP中继的使用场景
从前面DHCP的工作原理我们可以知道,DHCP Client 必须和DHCP Server 在同一个二层广播域中,才能接收到彼此发送的DHCP报文,DHCP报文是无法跨越二层广播域传播的。这时,我们可以有两种方法解决这个问题:
(1)、在网络中的每个网段都设置一台DHCP Server,但是这个方法代价较大,很不经济,造成资源的很大浪费,所以现实中一般不推荐此方法
(2)、只设置一个DHCP Server,利用DHCP中继技术DHCP Relay 来实现一个DHCP Server 同时为多个二层广播域中的DHCP Client 服务,这样既节省成本,又便于集中管理
2、DHCP中继的工作原理
如下图:
在DHCP中继的工作原理中和前面的DHCP工作原理基本相同,只是中间DHCP Relay 负责DHCP Client 和DHCP Server 之间的DHCP报文的转发,这里要注意的是:DHCP Relay 与DHCP Client 之间是以广播的方式进行交换DHCP报文的,而DHCP Relay 与DHCP Server 之间是以单播的方式来交换DHCP报文的。
三、DHCP服务器的防攻击手段
(一)、DHCP服务器面临的安全威胁
DHCP在设计上未充分考虑到安全因素,从而留下许多安全漏洞,使得DHCP很容易受到攻击。在实际网络中,针对DHCP攻击的手段主要有以下三种:
1、DHCP饿死攻击
【攻击原理】
攻击者持续大量地向DHCP服务器申请IP地址,直到耗尽DHCP服务器地址池的IP地址,使DHCP服务器无法再给正常的主机分配IP地址
在PC机给DHCP Server发送的DHCP Discover 报文中有一个CHADDR字段,该字段是由DHCP客户端填写的,用来表示客户端的硬件地址(MAC地址),而DHCP Server 也是根据CHADDR字段来分配IP地址的,对于不同的CHADDR,DHCP Server会分配不同的IP地址,因为DHCP Server 无法识别CHADDR的合法性,攻击者就利用这个漏洞,不断的改变CHADDR字段的值,来冒充不同的用户申请IP地址,使DHCP Server 中IP池枯竭,从而达到攻击目的。
2、仿冒DHCP Server攻击
【攻击原理】
当攻击者私自安装并运行DHCP Server 程序后,可以将自己伪装成DHCP Server,这就是仿冒DHCP Server。它的工作原理与正常的DHCP Server 一模一样,所以当PC机接收到来自DHCP Server 的DHCP报文时,无法区分是哪个DHCP Server 发送过来的,如果PC机第一个接收到的是来自仿冒DHCP Server 发送的DHCP报文,那么仿冒DHCP Server 则会给PC机分配错误的IP地址参数,导致PC客户端无法访问网络
3、DHCP中间人攻击
【攻击原理】
攻击者利用ARP机制,让PC-A学习到IP-S与MAC-B的映射关系,让DHCP Server 学习到IP-A与MAC-B的映射关系,如此一来,PC-A与DHCP Server之间交互的IP报文都要经过PC-B进行中转。我们这里要了解交换机在转发数据包过程中,IP地址与MAC地址的变化过程,这个类似于MAC地址欺骗。由于PC1与DHCP Server之间的IP报文都会经过攻击者PC,攻击者就能很容易窃取到IP报文中的信息,进行篡改或其他的破坏行为,从而达到直接攻击DHCP目的。
(二)、DHCP Snooping 技术解决DHCP 饿死攻击
为了防止DHCP受到攻击,就产生了一种DHCP Snooping的技术,但DHCP Snooping不是一种标准技术,还没有统一的标准规范,所以不同品牌的网络设备上实现DHCP Snooping也不尽相同。DHCP Snooping部署在交换机上就相当于在DHCP客户端与DHCP服务器端之间构建了一道虚拟的防火墙。
我们前面讲到DHCP饿死攻击是攻击者不断改变CHADDR的字段来实现的,为了弥补这个漏洞,阻止饿死攻击,我们在端口下配置DHCP Snooping技术,对DHCP Request报文的源MAC地址与CHADDR的字段进行检查,如果一致则转发报文,如果不一致则丢弃报文。
配置命令为,进入连接客户端接口视图,输入命令dhcp snooping check dhcp-chaddr enable
如下图:
但是还可能存在另一种饿死攻击,就是攻击者不断改变CHADDR,同时改变源MAC,并让CHADDR与源MAC地址相同,这样也可以躲过源MAC地址与CHADDR的一致性检查。
(三)、DHCP Snooping 防止仿冒DHCP Server 攻击
在DHCP Snooping技术中,将交换机的端口分为两种类型,信任端口(Trusted端口)和非信任端口(Untrusted端口),交换机所有端口默认都是Untrusted端口,我们将与合法DHCP Server 相连的端口配置为Trusted端口,这样交换机从Trusted端口接收到的DHCP 报文后,会正常转发,从而保证合法的DHCP Server能正常分配IP地址及其他网络参数;而其他从Untrusted端口接收到的DHCP Server 的报文,交换机会直接丢弃,不再转发,这样可以有效地阻止仿冒的DHCP Server 分配假的IP地址及其他网络参数。
配置命令如下:进入与DHCP Server 相连的接口视图
[LSW2] int e0/0/2
[LSW2-E0/0/2] dhcp snooping trusted
如果恢复为Untrusted 端口,命令如下:
[LSW2-E0/0/2] undo dhcp snooping trusted
(四)、DHCP Snooping 防止DHCP中间人攻击
DHCP中间人攻击从原理上我们可以知道它其实是一种Snoofing IP/MAC攻击(ARP欺骗),所以要防止DHCP中间人攻击,就是要防止ARP欺骗。而运行DHCP Snooping的交换机会侦听(Snooping)往来于用户与DHCP Server之间的信息,并从中收集用户的MAC地址(DHCP消息中的CHADDR字段中的值)、用户的IP地址(DHCP Server分配给相应的CHADDR的IP地址)、IP地址租用期等等信息,将它们集中存放在DHCP Snooping 绑定表中,运行了DHCP Snooping的交换机会建立并动态维护DHCP Snooping绑定表。
如上图所示,DHCP Server给PC-A 、PC-B分别分配IP-A、IP-B,那么IP-A与MAC-A就形成绑定关系,IP-B与MAC-B形成绑定关系,并存入DHCP Snooping绑定表中。这时攻击者想让Server 学习到IP-A与MAC-B的映射关系,会发送不断发送ARP请求报文(ARP报文中源IP地址填为IP-A,源MAC地址填为MAC-B)。交换机接收到这个ARP报文后,会检查它的源IP地址和源MAC地址,发现与DHCP Snooping绑定表中的条目不匹配,就丢弃该报文,这样可以有效地防止Spoofing IP/MAC攻击。
配置命令为:
[LSW2] arp dhcp-snooping-detect enable
(五)、DHCP Snooping 与IPSG技术的联动
针对网络中经常存在对源IP地址进行欺骗的攻击行为(攻击者仿冒合法用户的IP地址来向服务器发送IP报文),我们可以使用IPSG(IP Source Guard)技术来防范这种攻击。在交换机使用IPSG功能后,会对进入交换机端口的报文进行合法性的检查,然后对报文进行过滤(检查合法,则转发;检查非法,则丢弃)。
DHCP Snooping技术也可以与IPSG技术进行联动,即对于进入交换机端口的报文进行DHCP Snooping绑定表的匹配检查,如果报文的信息与绑定表一致,则允许通过,如果不一致则丢弃该报文。
报文的检查项可以是源IP地址、源MAC地址、Vlan和物理端口号等若干组合。如在交换机的端口视图下可支持IP+MAC、IP+Vlan、IP+MAC+Vlan等组合检查,在交换机的Vlan视图下可支持:IP+MAC、IP+物理端口号、IP+MAC+物理端口号等组合检查。
配置命令如下:
在交换机的接口视图或VLan视图下输入命令:ip source check user-bind enable。
四、总结
1、熟悉DHCP服务器的工作原理,DHCP服务器工作过程中的报文的作用可以让我们对于攻击DHCP服务器的手段能更好的理解;
2、在防范DHCP和各种攻击手段中所用到的技术,其工作原理和工作场景,我们也要非常熟悉。