目录
前言
DHCP 服务概念
1)客户端发送DHCP Discovery广播包
2)服务器响应DHCP Offer广播包
3)客户机发送DHCP Request广播包
4)服务器发送DHCP ACK广播包
部署DHCP服务器
dhcp地址池消耗攻击
攻击防御
前言
现在思考我们的主机IP是如何得到的?[新手向]
如下图 不使用静态配置的方式,改成自动获的IP地址的方式。我们会获取一个动态的临时IP地址!
这期间发生了什么?
本次我会介绍dhcp的基本概念,且从抓包的形式上从流量上来理解dhcp服务端和客户端的通信细节。为了显示dhcp服务攻击,我将采用win2008来部署dhcp服务器,最后用通信流量分析攻击的细节。
DHCP 服务概念
dhcp即可以说是一个协议也可以说是一个服务,他的主要目的就是帮助主机获取一个IP。我们可以自己抓一下包看一看dhcp做了做了那些事情,下图就是DHCP的工作流程。
DHCP原理
也是DHCP租约过程,分为4个步骤:
1)客户端发送DHCP Discovery广播包
可以看到此刻的客户端(没有ip故)用0.0.0.0作为源地址,由于也不知道dhcp服务的地址及mac地址,故发送广播报文,目的ip为255.255.255.255目的mac地址为ff:ff:ff..。发送“discover”试图寻找dhcp找可用IP。
2)服务器响应DHCP Offer广播包
服务器收到dhcp discovery 包后响应Offer包。此包的源mac为自己,目的mac为客户端主机(之前发送discovery 服务器记录了mac)。根据ip地址此刻服务器已经当主机为分配的ip地址218.133了,当客户端收到这个包后正常来说会检查目的mac,目的ip是否为自己,如果不是自己则会丢弃。但此刻情况不同!自己还没有ip加之这是一个dhcp的offer包,因此处理逻辑自然也不会相同。这也是一个单播地址。
看看offer包的数据
根据上图服务端向客户端提供了一个IP地址,还有这个ip的使用期限(30)分钟。子网掩码也有。
当时间50%过后,会牵扯到续约的问题。如果客户端不续约服务端会回收这个ip地址。
这个时候,客户端已经知道了服务端的mac和IP地址,因此在接下来的通信中客户端即可以向服务端发单播也可以发广播。但考虑到有多个dhcp的offer情况下,发广播的方式是合理的,并且大部分的主流设备也是这样的做的。
3)客户机发送DHCP Request广播包
这个Request为一个广播包,向服务端218.254 请求IP 218.133这个地址。
4)服务器发送DHCP ACK广播包
再次确定了租期时间和子网掩码。此刻dhcp的工作流程全部完成,客户端获取218.133地址,服务端地址池的ip会减一。
从流程上,用不常规思想想一想,如果我们改变自己mac地址,短时间内反复向服务器租借地址,直到服务器可提供的ip耗尽,至此正常的用户还能获得ip地址吗!
部署DHCP服务器
为了复现本次dhcp地址池消耗的攻击,本次我采windows2008r2服务器搭建dhcp服务,用kali进行攻击。
注意:添加之前请确保自己的windows服务器有一个静态ip,并且之后分配的ip处于这个网段。
本次计划:内网网段为192.168.100.1/24 DHCP服务器ip为192.168.100.253 。欲192.168.100.254 为网关地址
1.服务器添加新角色
2.选择DHCP 服务器一直点下一步
3.新建作用域;本次我在地址池设置了100个ip地址用来测试。
4.本次测试不涉及dhcpv6 ,选禁用,下一步。
5.安装完成
6.服务测试
在打开新的虚拟机置为同一个网络下,测试dhcp自动获取是否能够成功。(可以打开抓包软件,在学习下dhcp协议的流程)
win7已经过了ip,查看服务器地址池。
服务器这边地址租用果然也有了记录。
dhcp地址池消耗攻击
本次我们用kali 提供一款用具dhcpig
如果你的kali没有,那就安装一下
┌──(kali㉿kali)-[~] └─$ sudo dhcpig -h option -? not recognized
enhanced DHCP exhaustion attack.
Doc: GitHub - kamorin/DHCPig: DHCP exhaustion script written in python using scapy network library
Usage: pig.py [-h -v -6 -1 -s -f -t -a -i -o -l -x -y -z -g -r -n -c ] <interface>
Options: -h, --help <-- you are here :) -v, --verbosity ... 0 ... no (3) 1 ... minimal 10 ... default 99 ... debug
-6, --ipv6 ... DHCPv6 (off, DHCPv4 by default) -1, --v6-rapid-commit ... enable RapidCommit (2way ip assignment instead of 4way) (off) -s, --client-src ... a list of client macs 00:11:22:33:44:55,00:11:22:33:44:56 (Default: <random>) -O, --request-options ... option-codes to request e.g. 21,22,23 or 12,14-19,23 (Default: 0-80) -f, --fuzz ... randomly fuzz packets (off) -t, --threads ... number of sending threads (1) -a, --show-arp ... detect/print arp who_has (off) -i, --show-icmp ... detect/print icmps requests (off) -o, --show-options ... print lease infos (off) -l, --show-lease-confirm ... detect/print dhcp replies (off) -g, --neighbors-attack-garp ... knock off network segment using gratious arps (off) -r, --neighbors-attack-release ... release all neighbor ips (off) -n, --neighbors-scan-arp ... arp neighbor scan (off) -x, --timeout-threads ... thread spawn timer (0.4) -y, --timeout-dos ... DOS timeout (8) (wait time to mass grat.arp) -z, --timeout-dhcprequest ... dhcp request timeout (2) -c, --color ... enable color output (off)
sudo dhcpig eth1 -r -c
-
-c
彩色输出信息。 -
-r
释放全部已经分配的IP地址。
此刻kali会不断向dhcp服务端请求ip地址
此时的流量情况,(和此前分析的略有不同,服务端回的offer包是一个广播 不是单播,这也可见不同厂商有着不同的见解,不过这不影响dhcp的工作通信),有不断的dhcp请求。
也可以看出这款工具的默认设置的源Mac地址是以dead开头的
在回头看看windows服务器这边的情况
地址租用已经是满了。
此后再开网卡,试试能不能获取ip
可以看到我新开的主机一直请求dhcp discover,但是一直没有响应
攻击防御
1)攻击DHCP服务器:频繁的发送伪装DHCP请求,直到将DHCP地址池资源耗尽
防御:在交换机(管理型)的端口上做动态MAC地址绑定
2)伪装DHCP服务器攻击:hack通过将自己部署为DHCP服务器,为客户机提供非法ip地址
防御:在交换机上(管理型),除合法的DHCP服务器所在接口外,全部设置为禁止发送dhcp offer包