起因:

        最近出了一个红帽的DHCP Client 命令注入漏洞,编号:CVE-2018-1111,在研究复现中突然有了做DHCP欺骗的想法,于是做了如下的这个实验。


测试思路:

        1. 攻击者IP(10.10.32.33)监听DHCP的Discover请求,伪造DHCP Offer 和 DHCP的ACK,完成自定义IP的分配实现DHCP的伪造。

        2.  新接入的电脑使用DHCP接入网络,尝试获取可用IP。

        3. 被攻击目标先后为:DHCP接入,静态IP接入形式。


测试过程及现象解读:

        为了测试DHCP欺骗,需要寻找一个用于DHCP欺骗的工具,在GitHub上找到了一个使用python的scapy套件编写的脚本,使用起来棒棒的,这是写来玩之前shellshock漏洞的脚本,地址:https://github.com/byt3bl33d3r/DHCPShock/blob/master/dhcpshock.py 

如果对这个漏洞感兴趣可以看这个文章;https://www.trustedsec.com/2014/09/shellshock-dhcp-rce-proof-concept/

        拿到脚本我们读懂几个参数就可以拿来直接做实验了,

#siaddr = DHCP server ip  可以是攻击者IP 也可以是真实的DHCP的Server 地址
#yiaddr = give client one ip  你给它分配的IP,它将用来接入网络的
#xid = transaction id     Transaction ID,可以不管
#chaddr = clients mac address in binary format    发起DHCP的客户端MAC地址

    

        我们还需要注意修改Offer和 ACK响应包里的server_id,router参数,我在测试时修改的截图如下:


image.png

    

        脚本准备好了,就可以开始实验了,输入下面的命令运行脚本:

sudo python dhcpshock.py -i en4 -c "whoami"

        这里指定了网卡,en4    和命令(可以修改下脚本去掉这个)

image.png

    

    现在就可以做网络接入实验了,我们如上面的Offer 和ACK的配置,是给所有新的DHCP接入的电脑返回伪造的包,伪造包欺骗接入电脑使用脚本里设定的如10.10.32.147这个IP地址。

    

    实验一: 新电脑DHCP接入,欺骗分配已存在的IP10.10.32.92,该电脑以DHCP形式接入网络

        测试效果如下图:    

311371526624875_.pic_hd.jpg

        如上如所示,成功欺骗了虚拟机WIn7系统,配置了IP 10.10.32.35.

       可以看到上图中,攻击者10.10.32.33,优先于真正DHCP Server 10.10.8.22进行了IP分配和应答,这导致了DHCP的客户端信任了这个返回包,我们知道DHCP是基于UDP协议,这就给了伪造的机会。

        对比测试,没有攻击干扰时如下:

        311411526625193_.pic_hd.jpg        

        没有干扰时,虚拟机接入,获取到IP 10.10.32.29,并成功的设置为这个IP。


        实验二: 新电脑DHCP接入,欺骗分配IP为已经存在的IP 10.10.32.92,该电脑以DHCP形式接入网络    

   

         实践中找了一个网络中已经存在的IP地址,进行强行的分配测试,发现能够成功夺取该IP,如下图:

311441526625537_.pic_hd.jpg

        

        分析:

                因为10.10.32.92电脑以DHCP配置接入网络,在给Win7欺骗分配这个IP时,Win7尝试使用时提示了IP冲突,这个时候真正的32.92这个IP的电脑,也会出现提示IP冲突。这里猜测:在出现IP冲突时,出于网络主动恢复思路,系统底层应该会主动发起DHCP request 带上之前的分配信息给DHCP Server。win7被欺骗后,一直在强调我用32.92这个IP,受害者也在强调使用这个IP,最终受害者的DHCP Client应该会妥协重新发起获取IP请求,然后使用其他IP。至此。IP成功抢走。。(纯猜测)。。

        

          实验三: 新电脑DHCP接入,欺骗分配IP为已存在的IP-10.10.32.147,该电脑以手动配置静态IP形式

        

        测试如下图:


        318691526626795_.pic_hd.jpg

    

        测试中发现不能长久抢走该IP地址,Win7虚拟机能在莫瞬间的使用这个IP地址,被攻击目标10.10.32.147电脑会出现偶尔的丢包情况。

        

实验结论:

        1、这个脚本是可以做DHCP欺骗的

        2、在网络环境中,DHCP形式接入网络,可能是不安全的。攻击者可以伪造响应包,攻击DHCP客户端,可以分配错误的IP,给定错误的网关IP实现流量劫持等操作。

        3. 静态IP绑定较安全,如果出现网络丢包情况时,可以用wireshark抓包看看DHCP的响应IP,如果非正常的DHCP Server则可能存在攻击者。

        4. 如果网络中存在服务器种了木马,利用CVE-2018-1111和shellshock的漏洞伪造DHCP返回包,攻击内网其他服务器的攻击方式,很难被发现。。不知道有没有防御这种的产品和思路?


参考:

        1. DHCP协议原理分析