目录
DHCP饿死攻击
DHCP Sever仿冒攻击
DHCP攻击防范
DHCP动态主机配置协议,是给主机提供自动获取IP地址等配置信息的服务。在主机对DHCP服务器发送DHCP Discover请求之后,服务器回复offer,主机再回复request,最后服务器回复ACK确认。但是就是在这四次的交互过程中就容易受到网络的攻击。
在实际网络中针对DHCP的攻击行为主要有:DHCP饿死攻击;DHCP Sever仿冒攻击。
DHCP饿死攻击
DHCP饿死攻击是DOS攻击的一种方式,目的是通过发送大量的DHCP Discover请求,去耗尽DHCP地址池里面的地址,在地址池耗尽的时候,DHCP服务器会采取不回答或者回复0.0.0.0的方式表达地址耗尽,使得DHCP Sever不能给主机提供服务。
在同一个主机向DHCP服务器请求IP地址的时候,在已经获得IP地址,第二次请求的情况下,DHCP服务器向主机回复有同样地址的offer。在服务器第一次给主机分配IP地址时,服务器会记录IP地址和主机的client hardware address(主机的mac地址),意思是记录下这个IP地址分配给哪个MAC地址了,这个记录就叫CHDDR,封装在DHCP数据包里面,在主机向DHCP服务器发送discover的时候,主机的MAC地址会写在CHDDR里面记录在DHCPdiscover发送出去。再主机第二次发送discover请求的时候,DHCP服务器就会知道discover请求里面的CHDDR记录的MAC地址,说我以前给这个主机分配过IP地址,分配的IP地址是192.168.1.1(假设),现在他请求我,我给他回offer分配的IP还是192.168.1.1。同样的主机同样的MAC地址,给DHCP服务器发送DHCPdiscover请求,他收到DHCP分配的IP地址是一样,即offer里的IP地址是一样的;也就是说要实现DHCP的饿死攻击,就必须要修改不通的MAC地址,然后发送DHCPdiscover请求,才能耗尽DHCP地址池里面的地址。
按拓扑结构,完成接口的IP信息配置,用路由器来充当DHCP服务器。
命令:[DHCP-Sever]dhcp enable,在系统视图下开启DHCP服务
命令:[DHCP-Sever]int g0/0/1
命令:[DHCP-Sever-GigabitEthernet0/0/1]dhcp select interface,在接口模式下,开启接口的IP地址池
命令:[DHCP-Sever-GigabitEthernet0/0/1]display ip pool,查看地址池的简要信息
查看地址池的名称,网关、掩码还有数量13
命令:[DHCP-Sever]display ip pool interface GigabitEthernet0/0/0/1 all,查看IP地址池在接口下名字是GigabitEthernet0/0/0/1地址池的信息,在系统视图下查看地址池的信息IP地址的范围是在100.1到100.14,还可以看到IP地址的分配情况
现在测试同一个主机多次发送DHCP请求,在路由器上抓包有四次DHCP交互申请分配IP地址和三次免费ARP询问是否有谁用这个IP地址,没有回复则可以使用。在offer的回包中分配的IP地址是100.14在主机上查看是192.168.100.14
开始第二次DHCPdiscover请求第二次回包数据和分配的IP地址还是192.168.100.14
DHCP服务器绑定,DHCPdiscover消息中CHADDR会有主机的MAC地址信息记录的MAC地址信息,就会记录到DHCP服务器中下次再收到同样的请求时,会根据记录分配同样的IP地址。
DHCP服务器是通过DHCP消息内部的CHADDR来进行记录和绑定IP和MAC地址信息的,不通过数据包以太网Ⅱ的MAC地址进行绑定。这是因为在由许多主机连接的网络中,他并不是直接和DHCP服务器进行连接的,他是与多个中继进行连接,路由转发协议,在跨子网转发的时候,经过路由转发路由交换,其数据包里面的源MAC地址就会发生改变,变成路由器中继的MAC地址,但是记录在DHCP消息中的CHADDR的数据不会改变。
攻击模拟的拓扑结构
如果需要进行DHCP饿死攻击,就必须不断伪造不同的CHADDR地址的DHCPdiscover消息来获取IP地址。
可以利用kali虚拟机进行模拟攻击,利用在kali安装好的软件进行模拟攻击。在攻击之前先除去主机原先申请的IP地址,除去DHCP服务器上的绑定信息,通过关闭和重启地址池的方式来实现。
命令:[DHCP-Sever-GigabitEthernet0/0/1]undo dhcp select interface,关闭接口的地址池
命令:[DHCP-Sever-GigabitEthernet0/0/1]dhcp select interface,打开接口的地址池
命令:[DHCP-Sever-GigabitEthernet0/0/1]display ip pool interface GigabitEthernet0/0/0/1,查看地址池的分配情况,地址池的地址清除完毕
用kali虚拟机进行模拟DHCP饿死攻击看到攻击过程获取到192.168.100.14到192.168.100.2的IP地址
再查看一下DHCP服务器的记录表,可以看到IP地址被占用了,饿死攻击成功
对DHCP服务器的0/0/1口进行数据抓包(抓包在攻击之前,清楚地址池的信息之后就已经开始)我们看数据包,知道是DHCP的四部交互,每一次交互完成,其分配到的IP地址就不一样第一个discover请求他的网卡地址是82:d0,是攻击机的网卡地址,下面的是CHADDR地址60:f4第二个discover请求,他的以太网Ⅱ地址还是82:d0,但是他的CHADDR地址变为了fc:5b。再看DHCP服务器里面的记录表表中192.18.100.14记录的MAC地址是60:f4;192.168.100.13记录的是fc:5b,这和discover中的CHADDR地址是一致的,可以说明,DHCP服务器的地址绑定看的是CHADDR中的MAC地址信息和以太网Ⅱ的地址信息无关。
现在DHCP服务器的地址池里面已经没有地址,下面用主机向DHCP服务器发送请求地址请求后查看主机 IP地址,发现没有配置到地址。DHCP饿死攻击成功。
DHCP Sever仿冒攻击
DHCP饿死攻击的作用,当攻击者耗尽了DHCP服务器地址池中的IP地址之后,攻击者可以将自己变成仿冒的DHCP服务器,向主机发送 IP地址,伪造假的网关地址,伪造假的域名地址,诱骗主机将自己的数据转发到攻击机上。这就是DHCP的Sever仿冒攻击。
用Kali伪造一个DHCPsever,对主机进行模拟攻击
发起攻击后,用主机获去DHCP服务器的IP地址可以看到获取的是再kali模拟攻击里面自己仿冒的DHCP服务器配置的地址。去看他的数据包
就有一个DHCP四部交互的过程,0.0.0.0的广播地址还有192.168.11.100的回包地址,说明是攻击机的回报,然后打开ACK的回包ACK回包中,给主机配置了IP地址是192.168.11.210,记录了主机的MAC地址是74:ee,是主机自己的MAC地址配置了DHCP服务器的IP地址192.168.11.100,配置了IP地址的续租时间,配置了掩码,配置了路由器地址192.168.11.100,配置了域名服务器地址DNSserver192.168.11.100,还配置了域名名字huawei.com。都是按照在kali攻击里面部署的去配置,证明服务器仿冒攻击成功。
DHCP攻击防范
DHCP snooping(DHCP流量监听)。在主机向DHCP申请discover消息的时候,会广播消息,在交换机开启了DHCP snooping之后,交换机会对DHCP消息转发到正确的DHCP服务器的接口上,对于连接DHCP服务器的端口需要设置一个信任端口,允许DHCP的流量从这里转发出去,而没有设置信任度端口的DHCP流量就不能转发出去,让DHCP服务器能收到discover请求,能给主机提供服务,让攻击者不能收到DHCP请求,不能截获主机的流量信息。
在攻击之前,先将主机配置成手动获取IP地址,然后清除DHCP服务器地址池的信息
命令:[DHCP-Sever-GigabitEthernet0/0/1]undo dhcp select interface,关闭接口地址池
命令:[DHCP-Sever-GigabitEthernet0/0/1]dhcp select interface,开启接口地址池
命令:[DHCP-Sever-GigabitEthernet0/0/1]display ip pool interface GigabitEthernet0/0/0/
1 all,查看地址池的信息地址池信息为空,地址池清楚完毕。
首先先把DHCP服务器的g0/0/1口的DHCP服务禁用,对交换机的g0/0/3口抓包,然后开启交换机DHCPsnooping的功能
命令:[SW1]dhcp enable,首先开启交换机的DHCP功能
命令:[SW1]dhcp snooping enable,再开启DHCPsnooping功能
命令:[SW1]vlan 1
命令:[SW1-vlan1]dhcp snooping enable,再在vlan下面开启DHCPsnooping功能
命令:[SW1-vlan1]dhcp snooping trusted interface g0/0/2,设置交换机的g0/0/2为信任端口
用主机申请DHCP在DHCP服务器上收到了DHCP的discover请求,但是没有回复,是因为关闭了DHCP服务器的功能在攻击机上没有收到discover的信息请求,说明只有被DHCPsnooping信任的端口才可以转发DHCP消息。
添加信任端口可以防范DHCP服务器伪造攻击。
把DHCP服务器的DHCP接口服务打开,在让主机重新获取DHCP服务器里面的IP地址成功在DHCP服务器上获取到地址。
DHCP饿死攻击防范。在使用饿死攻击的话需要伪造不同的CHADDR地址的DHCPdiscover消息来获取地址,但是在每次发送消息的时候,数据包中的以太网Ⅱ的MAC地址是不变的。在开启DHCPsnooping(DHCP流量监听)后,收到DHCP discover消息后,会对DHCPdiscover判断,判断以太网Ⅱ的源MAC地址和DHCP报文中的CHADDR是否相同,如果不同就认为是伪造消息。这时开启DHCPcheck功能,对伪造的信息进行丢弃。需要注意的是,DHCPsnooping只能进行监听,丢弃的动作还需要DHCPcheck去执行。
开启接口的DHCPcheck
命令:[SW1]port-group 1,创建一个接口组,组号为1
命令:[SW1-port-group-1]group-member GigabitEthernet 0/0/1 to g0/0/24,定义接口组的成员
命令:[SW1-port-group-1]dhcp snooping check dhcp-chaddr enable,给接口打开DHCPcheck功能
然后用kali模拟饿死攻击这个时候攻击没反应就拿不到地址,查看交换机g0/0/3口的数据还是有discover请求发出,证明攻击存在,但是应为discover每一个CHADDR地址和以太网Ⅱ的源MAC地址不一样,数据被DHCPcheck舍弃这是第一个discover攻击请求的信息这是第二个discover攻击请求的信息
他们的CHADDR地址和以太网Ⅱ的源MAC地址都不一样,不一样的话,就被DHCPsnooping认为是攻击信息,然后被DHCPcheck丢弃discover信息。再回到地址池查看地址的配置情况,确实是没有分配地址。然后再用主机去发DHCPdiscover请求主机就成功获得地址池里的IP地址。
kali模拟攻击会存在在攻击时可以伪造数据中的以太网Ⅱ的源MAC地址和DHCP报文中的CHADDR地址字段同时变化,去欺骗DHCPsnooping,去实现消耗DHCP服务器里面的IP地址,达到饿死攻击的效果。开始攻击攻击效果是,每秒钟以上千次的数据发送频率去发送discover请求。随机打开两个discover请求,可一看到每一次的以太网Ⅱ源MAC地址都会发生变化,而且源MAC地址和CHADDR地址是一致的再查看地址池的消息,已经被攻击,停止给主机分配地址了,被饿死攻击了。所以说,遇到这种攻击的时候,再采用DHCPsnooping防范就已经不够了。
在开启DHCPsnooping和DHCPcheck,面对这种可以仿造变化地址的攻击方式,以每秒上千次的攻击频率去攻击,交换机需要对每一个数据进行检验判断,需要消耗大量的内存,消耗CPU的资源。
Yersinia DHCP DOS(上一个地址可变的攻击)的攻击防范无法通过CHADDR和DHCPcheck去防御,需要通过端口安全的方式去实现。
Yersinia攻击伪造,会伪造源MAC地址和CHADDR,同时会让交换机学习到大量的MAC地址,可以同过设置接口的允许MAC地址的学习数量,如果学习数量超过可允许范围内,就关闭端口shutdown,禁止数据传输。
给交换机设置端口安全。
命令:[SW1]port-group 1,进入接口组
命令:[SW1-port-group-1]port-security enable,端口安全打开
命令:[SW1-port-group-1]port-security max-mac-num 1,设置端口安全最大允许学习的MAC地址数量为 1设置端口安全的动作方式,第一个是保护,直接丢弃数据;第二个是丢弃数据并报警;第三个是直接关闭接口;
命令:[SW1-port-group-1]port-security protect-action shutdown,选择安全保护动作是关闭接口
用kali模拟攻击
可以看到交换机接口学习MAC地址数量过多,接口直接关闭了交换机直接报出日志,MAC地址的数量超出限制,接口g0/0/3将关闭
然后再重新打开接口g0/0/3,再对DHCP服务器的地址池的信息清理一下,准备重新发起攻击。看能不能抵御住这种攻击。在DHCP服务器的g0/0/1口收到了DHCP的discover消息,然后回复了一个offer,分配给攻击机的地址是19.168.100.14。在到地址池查看配置信息,是分配给CHADDR地址的IP地址192.168.100.14。
然后再用主机申请IP地址从主机上和DHCP服务器地址池里可以看到,主机成功分配到地址。
这种设置安全端口的方式,不仅可以防止饿死攻击,还可以对主机进行分配IP地址的服务。