DHCP攻击针对的目标是网络中的DHCP服务器,原理是耗尽DHCP服务器所有的IP地址资源,使其无法正常提供地址分配服务。然后在网络中再架设假冒的DHCP服务器为客户端分发IP地址,从而来实现中间人攻击。本文以神州数码CS6200交换机为例,对DHCP攻击进行全面介绍。
图1 DHCP工作过程
图2 实验环境
DHCP客户端从服务端申请到IP地址等网络配置信息需要经过四个步骤,每个步骤需要发送相应类型的数据报文,如图1所示。
首先由客户端以广播方式发出“DHCP Discover”报文来寻找网络中的DHCP服务端。
当服务端接收到来自客户 端 的“DHCP Discover”报文后,就在自己的地址池中查找是否有可提供的IP地址。如果有,服务端就将此IP地址做上标记,并用“DHCP Offer”报文将之发送回客户端。
由于网络中可能会存在多台DHCP服务端,所以客户端可能会接收到多个“DHCP Offer”报文。此时客户端只选择最先到达的“DHCP Offer”,并再次以广播方式发送“DHCP Request”报文。一方面要告知它所选择的服务端,同时也要告知其他没有被选择的服务端,这样这些服务端就可以将之前所提供的IP地址收回。
被选择的服务端接收到客户端发来的“DHCP Request” 报 文后,首先将所提供的IP地址标记为已租用,然后向客户端发送一个“DHCP ACK”确认报文,该报文中包含有IP地址的有效租约及默认网关和DNS服务器等网络配置信息。
当客户端收到“DHCP ACK”报文后,就成功获得IP地址,完成初始化过程。
下面搭建如图2所示的实验环境,神州数码CS6200交换机作为正常的DHCP服务端在网络中提供地址分配服务,攻击者在Kali Linux上对交换机发起DHCP攻击,使其地址池资源全部耗尽,然后攻击者再启用假冒的DHCP服务器在网络中提供地址分配服务。在假冒DHCP服务器所提供的网络配置信息中,默认网关被设置为Kali Linux的IP地址192.168.1.5(正确的默认网关应该是交换机的IP地址 192.168.1.1),被攻击主机在获取了假冒DHCP服务器所提供的网络配置信息后,就会将所有的上网数据全部发送给Kali Linux。此时只要在Kali Linux上启用路由转发功能,就可以将被攻击主机的上网流量全部正常转发出去,因而并不影响其正常通信,但是其访问互联网的所有数据都可以在Kali Linux上被截取到。
在交换机上通过传统的DHCP Snooping技术就可以来防范DHCP假冒攻击。当启用了DHCP Snooping功能之后,交换机的所有端口都将无法接收DHCP Offer报文,这样假冒的DHCP服务器就无法向外分配IP地址了。
下面在神州数码CS6200交换机上启用并配置DHCP Snooping功能。
#启用DHCP Snooping功能:
CS6200(config)#ip dhcp snooping enable
#将DHCP Snooping应用于指定的VLAN,这里应用于默认的VLAN 1:
CS6200(config)#ip dhcp snooping vlan 1
启用DHCP Snooping功能后,还需要设置如果从某个端口收到假冒DHCP服务报文后,将对这个端口如何处理。处理动作有两个:
shutdown:端口检测到假 冒DHCP Server时,将“shutdown”此端口。
blackhole:端口检测到假冒DHCP Server时,将以伪装数据包的VID和源MAC设置“blackhole”来阻止此MAC的流量,也就是将假冒服务器的数据暂时丢弃一段时间,可选择的时间范围为10~3600秒。
比如将20号端口设置为接收到假冒服务器报文后,将数据暂时丢弃300秒。
CS6200(configif-ethernet1/0/20)#ip dhcp snooping action blackhole recovery 300
由于“shutdown”的处理动作过于严格,因而建议采用“blackhole”模式。
DHCP Snooping功能只能防止假冒攻击,而无法防止耗尽攻击。这是由于耗尽攻击所采用的都是客户端正常发送的DHCP Discover报文,因而DHCP Snooping对其无能为力。
可以通过交换机的Port-Security(端口安全性)功能来防范耗尽攻击。因为Yersinia伪造的每个DHCP Discover报文的源MAC地址都是不同的,在交换机中执行“CS6200#show mac-address-table”命 令查看MAC地址表,就会发现在Kali Linux所连接的10号端口上产生了大量的MAC地址表条目。
我们可以通过Port-Security技术来限制交换机每个端口可以学习到的最大MAC地址数量,这样就可以有效地来防范DHCP耗尽攻击。
比如在交换机的10-15号端口上启用Port-Security,并设置每个端口可以学习的最大MAC地址数量为2,违规动作为“restrict”,这 样 当 安 全MAC地址的数量达到端口允许的限制时,交换机就会将带有未知源地址的数据帧丢弃,并记录日志。
#开启交换机CPU控制学习功能:
CS6200(config)#macaddress-learning cpucontrol
#进入端口配置模式:
CS6200(config)#interface ethernet 1/0/10-15
#启用Port-Security:
CS6200(config-ifport-range)#switchport port-security
#设置最大MAC地址数量为2:
CS6200(config-ifport-range)#switchport port-security maximum 2
#设置违规动作为restrict
CS6200(config-ifport-range)#switchport port-security violation restrict
这样在交换机上通过设置DHCP Snooping再结合Port-Security功能,就可以有效地防范DHCP攻击,从而增强局域网的安全性。