原文发表于2017年第8期《网络安全与信息化》,转发到博客。
更多相关资料可参看视频教程“局域网安全实战”,http://edu.51cto.com/course/10348.html
转载自:http://yttitan.blog.51cto.com/70821/1975137
DHCP攻击针对的目标是网络中的DHCP服务器,原理是耗尽DHCP服务器所有的IP地址资源,使其无法正常提供地址分配服务。然后在网络中再架设假冒的DHCP服务器为客户端分发IP地址,从而来实现中间人攻击。本文以神州数码CS6200交换机为例,从原理、实施、防御三个方面对DHCP攻击进行了全面介绍。
1. DHCP工作过程
DHCP客户端从服务端申请到IP地址等网络配置信息需要经过四个步骤,每个步骤需要发送相应类型的数据报文,如图1所示。
图 1 DHCP工作过程
①首先由客户端以广播方式发出“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. DHCP攻击原理与实施
下面搭建如图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上被截取到。
图 2实验环境
下面将分步骤来依次完成DHCP攻击过程。
2.1 在交换机中配置DHCP服务
#首先启用DHCP功能:
CS6200 (config)#service dhcp
#创建名为test的地址池,并进入地址池的局部配置模式:
CS6200 (config)#ip dhcp pool test
#指定地址池可供分配的地址范围,一般都是指定一个网段地址:
CS6200 (dhcp-test-config)#network-address192.168.1.0 255.255.255.0
#指定默认网关,一般就是交换机的地址:
CS6200(dhcp-test-config)#default-router 192.168.1.1
#指定DNS服务器地址:
CS6200(dhcp-test-config)#dns-server 202.102.134.68
#设置租期,格式是“天时分”,比如“lease8 0 0 ”表示租期是8天,“lease0 8 0”表示租期是8小时。
CS6200 (dhcp-test-config)#lease 0 80
#设置地址池中不用于分配的地址(需要在全局配置模式下做):
CS6200 (config)#ip dhcpexcluded-address 192.168.1.1 192.168.1.20
设置完成后,在被攻击主机上可以成功看到分配到的IP地址等信息。
图 3被攻击主机获取的正确网络配置信息
#在交换机上可以查看到已经分配出去的IP地址。
CS6200#shwoip dhcp bingding
Totaldhcp binding items:1,thematched:1
IPaddress Hardwareaddress Lease expiration Type
192.168.1.21 00-0C029-81-BA-30 Thurs Jun 15 15:08:00 2017 Dynamic
为了验证攻击的效果,在开始攻击之前,我们先将已经分配出去的IP地址收回。
#在交换机上收回分配出去的IP地址:
CS6200#clear ip dhcp binding all
#在被攻击主机上释放已经获取到的IP地址:
ipconfig /release
2.2 DHCP耗尽攻击
下面模拟攻击者在Kali Linux中实施攻击,这里要用到一个名为Yersinia的攻击工具。Yersinia是一款底层协议攻击入侵检测工具,能实施针对多种网络协议的多种攻击。
在Kail中执行“yersinia –G”命令打开图形化的Yersinia界面,运行之后,点击“Launch attack”,选择DHCP,然后选择发送DISCOVER包,开始进行攻击,如图4所示。
图 4在Yersinia中实施攻击
在攻击持续的情况下,在交换机中执行CS6200#shwoip dhcp server statistics命令查看DHCP的统计信息,可以看到交换机已经接收到了大量的DHCP DISCOVER数据包,如图5所示,地址池资源已被耗尽。
图 5交换机接收到大量的DHCPDISCOVER数据包
此时在被攻击主机上执行“ipconfig /renew”命令重新申请IP地址,就无法申请到IP地址等网络配置信息了。
2.3 DHCP假冒攻击
耗尽DHCP服务端的地址资源之后,攻击者就可以架设自己的DHCP服务器,从而实现DHCP假冒攻击
首先在假冒的DHCP服务器上架设DHCP服务,指定地址池范围为192.168.1.100~200,并将默认网关指向Kali Linux的IP地址192.168.1.5。需要注意的是,在将DHCP服务架设好之后,先暂时不要将服务激活,由于此时Kali Linux上的DHCP 耗尽攻击仍在继续,一旦激活服务,这台假冒DHCP服务器的地址资源也将会很快被耗尽。
下面在Kali Linux上停止攻击,并快速激活假冒DHCP服务器上的DHCP服务,可以看到被攻击主机成功从假冒服务器处申请到了IP地址,如图6所示。
图 6被攻击主机获取到的假冒网络配置信息
这里同样需要注意一个问题,在将Yersinia停止攻击之后,一定要快速激活假冒DHCP服务器上的DHCP服务。这是因为Yersinia的攻击原理是发送大量的DHCP Discover报文,交换机会向其返回DHCP Offer报文,而在这个Offer报文中所提供的IP地址并未真正分配出去,在等待一段时间之后(大约5分钟),交换机会自动将IP地址收回,因而只要停止攻击之后过一段时间,交换机就会自动恢复正常。
攻击成功之后,被攻击主机的上网流量就将全部被导向到Kali Linux。在Kali中需要执行下面的命令开启路由转发功能,以便将被攻击主机的数据转发到互联网。
echo 1> /proc/sys/net/ipv4/ip_forward
最后,就可以在Kali Linux中利用Wireshark等抓包工具来截获被攻击主机的上网数据了。不过对于这种DHCP攻击方式,只能单向截获从被攻击主机发往互联网的数据,而无法截获从互联网发回给被攻击主机的数据,这是由于DHCP攻击无法去攻击默认网关等网络出口设备,要想真正实现双向截获数据的中间人攻击,还是要通过ARP欺骗等攻击方式。
3. 防范DHCP假冒攻击
在交换机上通过传统的DHCPSnooping技术就可以来防范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服务报文后,将对这个端口如何处理。处理动作有两个:
l shutdown:端口检测到假冒DHCP Server时,将shutdown此端口。
l blackhole:端口检测到假冒DHCP Server时,将以伪装数据包的vid和源mac设置blackhole来阻止此Mac的流量,也就是将假冒服务器的数据暂时丢弃一段时间,可选择的时间范围为10~3600秒。
比如将20号端口设置为接收到假冒服务器报文后,将数据暂时丢弃300秒。
CS6200 (config-if-ethernet1/0/20)#ip dhcp snooping actionblackhole recovery 300
由于shutdown的处理动作过于严格,因而建议采用blackhole模式进行防范。
4. 防范DHCP耗尽攻击
DHCP Snooping功能只能防止假冒攻击,而无法防止耗尽攻击。这是由于耗尽攻击所采用的都是客户端正常发送的DHCPDiscover报文,因而DHCPSnooping对其无能为力。
可以通过交换机的Port-Security(端口安全性)功能来防范耗尽攻击。因为Yersinia伪造的每个DHCPDiscover报文的源MAC地址都是不同的,在交换机中执行CS6200#showmac-address-table命令查看MAC地址表,就会发现在KaliLinux所连接的10号端口上产生了大量的MAC地址表条目。
CS6200#showmac-address-table
Readmac address table….
Vlan Mac Address Type Creator Ports
1 00-03-0f-3e-e6-90 STATIC System CPU
1 ec-a8-6b-61-64-a1 DYNAMIC Hardware Ethernet1/0/10
1 00-07-72-01-47-8b DYNAMIC Hardware Ethernet1/0/10
1 00-0a-b5-14-d5-dd DYNAMIC Hardware Ethernet1/0/10
……
我们通过Port-Security技术来限制交换机每个端口可以学习到的最大MAC地址数量,这样就可以有效地来防范DHCP耗尽攻击。
比如在交换机的10-15号端口上启用Port-Security,并设置每个端口可以学习的最大MAC地址数量为2,违规动作为restrict,这样当安全MAC地址的数量达到端口允许的限制时,交换机就会将带有未知源地址的数据帧丢弃,并记录日志。
#开启交换机CPU控制学习功能:
CS6200(config)#mac-address-learning cpu-control
#进入端口配置模式:
CS6200(config)#interface ethernet 1/0/10-15
#启用Port-Security:
CS6200(config-if-port-range)#switchport port-security
#设置最大MAC地址数量为2:
CS6200(config-if-port-range)#switchport port-security maximum 2
#设置违规动作为restrict
CS6200(config-if-port-range)#switchportport-security violation restrict
这样在交换机上通过设置DHCP Snooping再结合Port-Security功能,就可以有效地防范DHCP攻击,从而增强局域网的安全性。