抓包结果如下:
抓包与分析
帧号时间 源地址 目的地址 高层协议 包内信息概况
No. Time Source Destination Protocol Info
5 1.04252000 0.0.0.0 255.255.255.255 DHCP -TransactionID 0x643c9869 源端口>目的端口[请求建立DHCP链接]
以下为物理层的数据帧概况
Frame 5 (286bytes on wire,286 bytes captured) 5号帧,线路286字节,实际捕获286字节
Arrival Time: Dec 13, 201719:03:26.818512000 中国标准时间 捕获日期和时间
Time delta from previous captured frame:0.249290000 seconds此包与前一包的时间间隔
Time since reference or first frame:1.042520000 seconds此包与第1帧的间隔时间
Frame Number: 5 帧序号
Packet Length: 286bytes 帧长度
Capture Length: 286bytes 捕获长度
[Frame is marked:False] 此帧是否做了标记:否
[Protocols in frame: eth:ip:udp] 帧内封装的协议层次结构
[Coloring Rule Name: udp] 用不同颜色染色标记的协议名称:HTTP
[Coloring Rule String: udp] 染色显示规则的字符串:
以下为数据链路层以太网帧头部信息
EthernetII, Src: 02:48:33:66:02:51 (02:48:33:66:02:51), Dst: Broadcast(ff:ff:ff:ff:ff:ff)
以太网协议版本II,源地址:厂名_序号(网卡地址),目的:厂名_序号(网卡地址)
Destination: Broadcast(ff:ff:ff:ff:ff:ff)目的:厂名_序号(网卡地址)
Source: 02:48:33:66:02:51 (02:48:33:66:02:51) 源:厂名_序号(网卡地址)
Type: IP (0x0800) 帧内封装的上层协议类型为IP(十六进制码0800)
以下为互联网层IP包头部信息
InternetProtocol Version 4, Src: 0.0.0.0 (0.0.0.0), Dst: 255.255.255.255(255.255.255.255) 互联网协议,源IP地址,目的IP地址
Version: 4 互联网协议IPv4
Headerlength: 20bytes IP包头部长度
Differentiated Services Field: 0x10 (DSCP0x04: Unknown DSCP; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))差分服务字段
Total Length:272 IP包的总长度
Identification:0x0000(0) 标志字段
Flags: 标记字段(在路由传输时,是否允许将此IP包分段,教材125页)
Fragmentoffset: 0 分段偏移量(将一个IP包分段后传输时,本段的标识)
Time to live: 16 生存期TTL
Protocol: udp(0x06) 此包内封装的上层协议为udp
Header checksum: 0xa9ce [validation disabled] 头部数据的校验和
Source GeoIP: Unknown源IP地址
Destination GeoIP: Unknown 目的IP地址
以下为传输层UDP数据段头部信息
UserDatagram Protocol, Src Port: bootpc (68), Dst Port: bootps (67)
传输控制协议UDP的内容
Source port: bootpc (68)源端口名称(端口号)
Destination port: bootps (67)目的端口名bootps(端口号67)
Length: 252bytes 长度
Checksum: 0x53e3 [validation disabled] TCP数据段的校验和
Options: 可选项
首先host向局域网广播一个discover包,此时ip.src为0.0.0.0。
从上图可以看出,DHCP属于应用层协议,它在传输层使用UDP协议,目的端口是67。
(1)DHCP服务器仍然使用广播地址作为目的地址,因为此时请求分配IP的Client并没有自己ip,而可能有多个Client在使用0.0.0.0这个IP作为源IP向DHCP服务器发出IP分配请求。通常来说DHCP也不能使用0.0.0.0这个IP作为目的IP地址,但我们是RAW(伪造数据包),于是依然采用广播的方式,告诉正在请求的Client们,这是一台可以使用的DHCP服务器。
(2)我们伪造了一个可用的IP,在数据包的Your (client) IP Address字段可以看到。
(3)除此之外,服务器还发送了DHCP数据包和END等信息。
攻击方案验证(攻击与防范)
DHCP假冒攻击(sending RAW packet)
耗尽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地址。
这里同样需要注意一个问题,在将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欺骗等攻击方式。
防范DHCP假冒攻击
在交换机上通过传统的DHCPSnooping技术就可以来防范DHCP假冒攻击。当启用了DHCPSnooping功能之后,交换机的所有端口都将无法接收DHCP Offer报文,这样假冒的DHCP服务器就无法向外分配IP地址了。
下面在神州数码CS6200交换机上启用并配置DHCPSnooping功能。
#启用DHCPSnooping功能:
CS6200(config)#ipdhcp snooping enable
#将DHCPSnooping应用于指定的VLAN,这里应用于默认的VLAN 1:
CS6200(config)#ipdhcp snooping vlan 1
启用了DHCP Snooping功能之后,还需要设置如果从某个端口收到假冒DHCP服务报文后,将对这个端口如何处理。处理动作有两个:
shutdown:端口检测到假冒DHCP Server时,将shutdown此端口。
blackhole:端口检测到假冒DHCP Server时,将以伪装数据包的vid和源mac设置blackhole来阻止此Mac的流量,也就是将假冒服务器的数据暂时丢弃一段时间,可选择的时间范围为10~3600秒。
比如将20号端口设置为接收到假冒服务器报文后,将数据暂时丢弃300秒。
CS6200 (config-if-ethernet1/0/20)#ipdhcpsnooping actionblackhole recovery 300
由于shutdown的处理动作过于严格,因而建议采用blackhole模式进行防范。