DHCP服务器,IP分发(获取)过程简述及常见安全攻防

前言

​ DHCP(Dynamic Host Configuration Protocol,动态主机配置协议 )是一个局域网的网络协议,属于应用层协议,协议采用UDP作为传输协议,主机发送请求消息到DHCP服务器的67号端口,DHCP服务器回应应答消息给主机的68号端口。其主要功能如下:[1]

  1. 保证任何IP地址在同一时刻只能由一台DHCP客户机所使用。
  2. DHCP应当可以给用户分配永久固定的IP地址。
  3. DHCP应当可以同用其他方法获得IP地址的主机共存(如手工配置IP地址的主机)。
  4. DHCP服务器应当向现有的BOOTP客户端提供服务 。(BOOTP(Bootstrap Protocol,引导程序协议)是一种引导协议,基于IP/UDP协议,也称自举协议,是DHCP协议的前身。BOOTP用于无盘工作站的局域网中,可以让无盘工作站从一个中心服务器上获得IP地址。通过BOOTP协议可以为局域网中的无盘工作站分配动态IP地址,这样就不需要管理员去为每个用户去设置静态IP地址。此处不做详细说明,感兴趣的可以“百度一下”)
    本文依据自己的工作经验,参考相关文献文档简述IP分发服务的工作流程原理及常见安全管理点。

一、工作原理

1.DHCP分发IP的方式

DHCP有三种机制分配IP地址: [1]

  1. 自动分配方式(Automatic Allocation),DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就可以永久性的使用该地址。
  2. 动态分配方式(Dynamic Allocation),DHCP服务器给主机指定一个具有时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。
  3. 手工分配方式(Manual Allocation),客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。
    三种地址分配方式中,只有动态分配可以重复使用客户端不再需要的地址。

2.动态分配IP工作原理

自动分配方式与手工分配方式在此处不做详细的说明,其第一次获取IP的流程与动态获取IP类似,区别在于没有租期限制,属于永久使用(IP与MAC地址固定绑定)。手动分配与自动分配本身的区别在于自动分配由DHCP服务器自动完成局域网内的IP配置分发工作,而手动分配由管理人员完成配置,DHCP仅负责发出配置信息(也可由管理人员发送IP配置到使用人员手中,由使用人员手动在客户端配置IP)

1.租约过程(获取IP过程)

DHCP协议采用UDP作为传输协议,主机发送请求消息到DHCP服务器的67号端口,DHCP服务器回应应答消息给主机的68号端口。详细的交互过程如图:

在这里插入图片描述

租约过程图文解析如下:[2]

1、客户端以广播的方式发出DHCP Discover报文。该过程中所有的DHCP(局域网内或网络通畅)都可以接收到广播报文,并给出响应。

2、所有的DHCP Server都能够接收到客户端发送的DHCP Discover报文,所有的DHCP Server都会给出响应,向客户端发送一个DHCP Offer报文。

DHCP Offer报文中“Your(Client) IP Address”字段就是DHCP Server能够提供给客户端使用的IP地址,且DHCP Server会将自己的IP地址放在“option”字段中以便客户端区分不同的DHCP Server。DHCP Server在发出此报文后会存在一个已分配IP地址的纪录,DHCP Offer中指定的地址不一定为最终分配的地址,通常情况下,DHCP服务器会保留该地址直到客户端发出正式请求。

3、客户端只能处理其中的一个DHCP Offer报文,一般的原则是客户端处理最先收到的DHCP Offer报文。 客户端会发出一个广播的DHCP Request报文,在选项字段中会加入选中的DHCP Server的IP地址和需要的IP地址。

客户端可以接收到多个DHCP服务器的DHCPOFFER数据包,然后可能接受任何一个DHCPOFFER数据包,但客户端通常只接受收到的第一个DHCPOFFER数据包。 客户端正式请求DHCP服务器分配地址DHCPREQUEST采用广播包,是为了让其它所有发送DHCPOFFER数据包的DHCP服务器也能够接收到该数据包,然后释放已经OFFER(预分配)给客户端的IP地址。

4、DHCP Server收到DHCP Request报文后,判断选项字段中的IP地址是否与自己的地址相同。如果不相同,DHCP Server不做任何处理只清除相应IP地址分配记录;如果相同,DHCP Server就会向客户端响应一个DHCP ACK报文,并在选项字段中增加IP地址的使用租期信息。

5、客户端接收到DHCP ACK报文后,检查DHCP Server分配的IP地址是否能够使用。如果可以使用,则客户端成功获得IP地址并根据IP地址使用租期自动启动续延过程;如果客户端发现分配的IP地址已经被使用,则客户端向DHCPServer发出客户端报文,通知DHCP Server禁用这个IP地址,然后客户端开始新的地址申请过程。

如果发送给DHCP客户端的地址已经被其他DHCP客户端使用,客户端会向服务器发送DHCPDECLINE信息包拒绝接受已经分配的地址信息。

6、客户端在成功获取IP地址后,随时可以通过发送DHCP Release报文释放自己的IP地址,DHCP Server收到DHCP Release报文后,会回收相应的IP地址并重新分配。

2.续约(持续使用IP过程)

续约过程不再有广播过程,均为客户端与服务器的单线联系,详细的交互过程如图:
在这里插入图片描述

续约过程解析如下:[2]

1、在使用租期超过50%时刻处,客户端以单播形式向DHCP Server发送DHCPRequest报文来续租IP地址。如果客户端成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP Server发送的DHCP ACK报文,则客户端继续使用这个IP地址(此时租期还未到期,可继续使用)。

2、在使用租期超过87.5%时刻处,DHCP Client会以广播形式向DHCP Server发送DHCPRequest报文来续租IP地址。如果客户端成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP Server发送的DHCP ACK报文,则客户端继续使用这个IP地址,直到IP地址使用租期到期时,客户端才会向DHCP Server发送DHCP Release报文来释放这个IP地址,并开始新的IP地址申请过程。

在协商续租过程中,如果客户端发送的REQUEST消息中的地址信息不正确,如客户端已经迁移到新的子网或者租约已经过期,DHCP服务器会发送DHCPNAK消息给DHCP客户 端,让客户端重新发起地址请求过程。

需要说明的是:如果客户端在广播DHCP Discover报文时并没有DHCP可用,则DHCP客户端会使用169.254.0.0/16中随机一个地址,并且每隔5min在进行尝试

二、DHCP常见安全攻防

1.DHCP服务欺骗

攻击原理:攻击者仿冒服务器,向客户端分配错误的网关地址、DNS地址等参数。

虚假网关等参数将导致客户机无法正常的访问网络(这里涉及到IP、网络相关基础知识,在此不做详细说明,可自行百度了解相关知识); 利用假的DNS地址可在客户端无法察觉的情况下引导客户端进入预先配置好的假的网站(利用假的DNS地址,将域名解析出预设配置的虚假网站,这里涉及到DNS 的相关机制,暂不做详细说明,可关注后续博文或自行百度了解),从而获取相关账户信息(账号密码等)。

利用的漏洞:主机无法分辨合法的服务器。

从前面的DHCP基本原理可以看出,客户端和DHCP服务端之间是没有认证机制的,客户端获取IP是采用的广播报文方式,且通常情况下使用最先响应的IP地址,故而当网络上存在多个DHCP时,所有DHCP均能获取到客户端的广播请求,且有机会被客户端使用其分配的IP地址等参数。

防御:DHCP Snooping防伪冒服务器攻击—配置信任接口和非新人接口

在DHCP Snooping技术中,将交换机的端口分为两种类型,信任端口(Trusted端口)和非信任端口(Untrusted端口),交换机所有端口默认都是Untrusted端口,我们将与合法DHCP Server 相连的端口配置为Trusted端口,这样交换机从Trusted端口接收到的DHCP 报文后,会正常转发,从而保证合法的DHCP Server能正常分配IP地址及其他网络参数;而其他从Untrusted端口接收到的DHCP Server 的报文,交换机会直接丢弃,不再转发,这样可以有效地阻止仿冒的DHCP Server 分配假的IP地址及其他网络参数。详细的相关配置方法或命令在此处不做说明,有需要的可以百度一下相关文档。

2.ARP中间人(IP/MAC地址欺骗)

攻击原理(利用的漏洞):按照ARP协议的设计,一个主机即使收到的ARP应答并非自身请求得到的,也会将其IP地址和MAC地址的对应关系添加到ARP映射表中,这样可以减少网络上过多的ARP数据通信,但也为ARP批片创造了条件。

利用ARP协议漏洞,分别向客户端及DHCP服务端发送伪造的ARP报文,这个时候主机一定会保存ARP中的映射关系,而这个关系是被伪造的,所以这个时候客户端和服务器之间的通信都会是通过中间机的转发完成的,故而中间机就能轻松的截取到通信的数据。

防御:DHCP Snooping —DHCP Snooping表项防止DHCP中间人攻击

在DHCP Snooping技术中,可以添加动态获取的DHCP Snooping表项或静态配置的IP与MAC地址绑定表项,然后根据该表项对非法的ARP报文进行过滤,从而保证ARP报文的合法性。详细的相关配置方法或命令在此处不做说明,有需要的可以百度一下相关文档。

3.DHCP报文泛洪(DHCP饿死攻击)

攻击原理:攻击者持续大量的向服务器申请IP地址,导致服务器地址池地址耗尽,从而不能正常给客户分配地址。

在一个局域网内的IP地址总量是有限的(即使是整个互连网络的IPV4地址都是有限的),当DHCP地址池中的所有IP都被占用时,新的客户机无IP可用。故而可以伪造大量的广播DHCP Discover报文不断地向DHCP服务器发送报文,进而占用大量的IP地址,使得DHCP地址池枯竭。

利用的漏洞:DHCP服务器无法分辨主机。

与DHCP欺骗的漏洞相似,服务端对客户端同样是没有认证机制的,无法分别客户端。在客户端给DHCP Server发送的DHCP Discover 报文中有一个CHADDR字段,该字段是由客户端填写的,用来表示客户端的硬件地址(MAC地址),而DHCP Server 也是根据CHADDR字段来分配IP地址的,对于不同的CHADDR,DHCP Server会分配不同的IP地址,然而DHCP Server 无法识别CHADDR的合法性,故而攻击者就可以以此来伪造不同的报文,占用IP(其实有足够多的肉鸡电脑使用时,也就不需要利用此漏洞了,直接请求占用就好。)

防御:DHCP snooping(窥探)防饿死攻击----一致性检查(request报文帧头mac地址和chaadde报文字段是否相同,相同才转发)、限制接口允许学习的DHCP snoping绑定表项的MAC数量。

在DHCP Snooping技术中,我们可以对对DHCP Request报文的源MAC地址与CHADDR的字段进行检查,如果一致则转发报文,如果不一致则丢弃报文,当然即便做了一致性也可以同时改变MAC地址与CHADDR字段,以躲过一致性检查,故而就需要在配合限制接口允许学习的DHCP snoping绑定表项的MAC数量来达到防范的目的。

总结

1、熟悉DHCP服务器的工作原理,DHCP服务器工作过程中的报文的作用可以让我们对于攻击DHCP服务器的手段能更好的理解,进而做到更好的防范
2、DHCP的设计,工作流程相对简单,故而攻击方式相对简单轻松,但同样因为过程的简单化也导致其能被利用攻击的点相对较少。

参考资料:
1.鲁凌云编著. 计算机网络基础应用教程. 北京市:清华大学出版社, 2012.03.
2.顾润龙,刘智涛,侯玉香主编.LINUX操作系统及应用技术:航空工业出版社,2016.08:第170页
3.百度百科:DHCP


版权声明:本文为weixin_48816383原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。