
DHCP(动态主机分配)服务
这个服务看起比较简单,是个三层设备都有这个功能,连一些服务系统也可以部署这样的服务。
DHCP功能非常强大,主要作用给自动用户分配一些IP地址,DNS地址、网关地址的一些主要参数,在企业无线网络拓扑中还会根据AC/AP的部署方案,分配option的参数给AP寻找AC提供作用等等......

DHCP的请求报文的过程基础内容这里我不做详细介绍,这里主要介绍DHCP的一些攻击防范演示。
DHCP攻击原理概述

DHCP基础配置讲解
先搭建一个DHCP的网络架构,以便引出今天讨论的DHCP攻击话题。
开启DHCP功能
[Huawei]dhcp enable

在连接客户端的接口下采用全局地址池的DHCP服务器,如图所示:
划红线的命令代表了:可以从该接口上线的用户可以从全局地址池中获取IP地址等配置信息了。
配置DHCP地址池里的各项参数:
拓扑中演示的DHCP分配模式为全局地址池模式,通常这种模式应用在DHCP服务器和DHCP客户端不在同一网段的情况,做实验时也可用接口地址池做,我这里只是图了方便。
默认情况下,华为设备上没有创建任何全局地址池,这个地址池配置可为不同网段的DHCP客户端创建多个不同网段的全局地址池。
[GW]ip pool vlan1
[GW-ip-pool-vlan1]network 192.168.8.0 mask 24
[GW-ip-pool-vlan1]gateway-list 192.168.8.200
[GW-ip-pool-vlan1]dns-list 8.8.8.8

当简单的配置完成后,客户端就能够正常获取到了IP地址了,并且能够Ping通网关。


站在网关设备中查看DHCP地址池的概况:
<GW>display ip pool name vlan1
如图所示:我们能够看到地址池中给出的网络地址的等参数信息

查看DHCP分配记录。
[GW]dis ip pool name vlan1 used
我们对照mac地址能很清楚的能够看到,192.168.8.253这个地址分配给了vlan1下的客户端。通常情况下,这个地址不会分配重复(根据源Mac地址来区分。)分配时间也会被记录在这张表中。

如图所示:拓扑中我让客户端释放地址后在重新获取地址。

用wireshark软件嗅探DHCP报文,在众多的报文中用bootp命令筛选出dhcp报文,利于观察


从图中看出DHCP的请求报文携带者vlan1客户端地址的源mac地址,目的mac地址为全F地址,典型的广播报文。那么既然是广播报文,交换机会无条件转发

这就是今天讨论的话题,DHCP泛洪攻击----DOS攻击。


DHCP_DOS攻击原理
我们通常会把DHCP-DOS攻击分为:
①DHCP冒充攻击
②DHCP耗尽攻击
③DHCP-dos攻击
DHCP攻击据目前来看多达10几种,举两个报文例子,请求报文和释放报文:
DHCP Discover 广播报文

如果一个客户端以每秒20000次的频率发送dhcp discover广播请求报文给所在端口的交换机,(黑客会利用软件工具,发送大量的DHCP请求,报文中携带的随机的mac地址)这样交换机会筋疲力尽的处理这些无用的广播报文,不但影响了其性能,也造成其他用户主机无法获取到正常的IP地址。

DHCP Release 释放报文
利用工具_kali linux发送这个报文,不停释放地址,导致DHCP服务器认为地址不用(其实是在使用中),DHCP服务器会把这个地址分配给其他用户,导致用户ip冲突.....

DHCP冒充攻击

在企业的局域网中,往往会有人为或者无意间增设路由器(例如tplink路由设备,在局域网中插入其lan口的话,它会从这个接口中发送DHCP报文,正常的需要关闭。)那么,有些客户端会从TPlinke这个设备上获取到IP地址,这样的话通讯就会发生故障,为了保证DHCP客户端从合法的DHCP服务器获取地址,DHCP Snooping 功能为此诞生。

DHCP Snooping是一种是一种DHCP安全技术,能够有效防止网络中仿冒DHCP服务器的攻击,保证客户端从合法的服务器获取IP地址,而且能够记录DHCP客户端IP地址与MAC地址等参数的对应关系而生成绑定表,同时还可以防范各种基于DHCP服务的攻击。
DHCP Snooping 功能一旦在交换设备中开启,如图所示:一旦开启snoping功能之后,只会在合法的接口提供DHCP服务,任何接口都不能提供DHCP服务功能,只要接收到DHCP报文就直接丢弃!

那么,会有人问,任何接口都是不合法,怎么提供DHCP服务?
不用担心,DHCP Snooping功能能够实现“信任功能”和“基本侦听功能”。
我来阐述下这两个功能的含义:
信任功能:可以有效的控制DHCP服务器应答报文的来源,防止网络中可能存在的伪造或非法DHCP服务器为其他主机分配IP地址及其其他配置信息。
信任功能将端口分为信任端口和非信任端口。
信任端口:正常转发接收到的DHCP应答报文。
非信任端口:在接收到DHCP服务器响应的DHCP ack、DHCP NAK 、DHCP Offer报文后,就丢弃该报文。
所以,我们只需要在提供服务的接口上开启信任功能即可,就确保了这个接口是合法的,其他接口依旧为非法的,遇到DHCP报文可直接丢弃。
DHCP耗尽攻击演示
实验拓扑如下:
所谓DHCP耗尽攻击,就是攻击者发送大量的伪装mac地址,来请求地址,地址池中的地址固然有限,消耗掉地址后,其他正常用户就无法申请到IP地址了

现在我的客户端能够正常的从网关处获取到IP地址:

并且,我能够在DHCP服务器上看到客户端分配的IP地址以及对应的Mac地址,剩余的IP地址数量也可以看到。

利用kali linux 攻击机,去请求地址。
首先看看我们的攻击主机能不能和拓扑中DHCP服务器取得联系。
如图所示:是可以和拓扑中的DHCP服务器取得通信联系。

这个命令的意思就是从eth0这块网卡中发送大量的DHCP请求报文。报文中会携带大量的随机的Mac地址。
root@kali:~# pig.py eth0

攻击的同时,我们查看DHCP服务器,发现大量的MAC地址,并且地址池里面的地址会迅速耗尽。

持续攻击的话,这个地址池就耗尽了。在后台随意抓取两个DHCP请求报文,发现DHCP的请求报文中里面携带者大量的随机的mac地址。


当然,除了DHCP耗尽攻击之外,我们还可以模拟DHCP_dos攻击
攻击工具:yersinia.
这款工具是一款底层协议入侵工具,它能伪装成多种协议的报文并实施欺骗和攻击。具体的能够伪装协议如图所示:
它会以每秒接近发送两万个攻击请求报文,破坏整个局域网内的主机通讯。

我们打开Kali Linux的yersinia 图形化工具:
root@kali:~# yersinia -G

我们在图形化界面中能够看到其攻击协议很多,单单DHCP协议里面就有4种攻击方式,如图所示:

DHCP 报文泛洪攻击
点击sending discover packet
请求报文泛洪攻击,点击OK

这时,我在拓扑中的客户端与网关通讯就中断了。

就连我真实主机也无法和网关取得联系,通讯故障

点击list attacks,取消攻击

这时候,拓扑中的机器和我真实电脑网络恢复通讯。网络恢复正常。

在实施dhcp泛洪报文的同时,真实主机中抓取无线网卡的流量。

我们能够看到抓取的报文中短短1秒之内发送大量的dhcp请求,这样发送的频率真的是很恐怖!


下面介绍一些关于DHCP攻击的防御方案
DHCP泛洪攻击防御手段
在企业生产环境中,这里的防御手段要在所有的接入层交换机上的客户端流入接口上配置针对DHCP Dos的攻击防御 ,但会对接口转发性能略有影响,鱼和熊掌不可兼得!

提供两种方案:
①流量抑制及风暴控制
②DHCP 报文限速功能

①流量抑制及风暴控制。
我们知道在DHCP DOS攻击的时候每秒的报文能到到接近两万次的广播报文---dhcp请求报文,对局域网造成严重的资源耗尽现象。
ENSP模拟器能配置,但是效果不生效。(真实机没有问题)
通过配置风暴控制,能够防范广播风暴,保障设备转发性能。
配置风暴控制
针对拓扑,客户端流入接口下批量配置:
[Huawei]port-g group-member GigabitEthernet 0/0/1 GigabitEthernet 0/0/6 GigabitEthernet 0/0/2

举例控制广播报文
(限制进入接口的广播、未知组播或者未知单播类型报文的速率)避免设备受到大的流量冲击
[Huawei-port-group]storm-control broadcast min-rate 200 max-rate 250
当用户接口流出每秒200个请求广播报文,最小为每秒200,最大阈值为250个

关于这个阈值:如图所示,超过200低于250的时候,设备不会采取任何动作,高于250丢弃报文到小于200时停止丢弃。

之前说过在ENSP中,这条指令虽然能输入,但是在接口下什么也看不到,真机中不存在这样的效果。

配置风暴控制的动作分为多余的流量进行丢弃和超过阈值接口关闭。

我们选择shudown接口动作
[Huawei-GigabitEthernet0/0/1]storm-control action shutdown

接口激活可以手动激活:执行以下命令
[Huawei-GigabitEthernet0/0/1]shutdown
[Huawei-GigabitEthernet0/0/1]undo shutdown
也可以自动恢复激活:ENSP模拟器中没有这条命令

但是真机中是有的。
[HUAWEI]error-down auto-recovery cause storm-control interval 60
设定在60秒时间之后我们可以使这个接口自动恢复为up功能


也可以将将此故障以日志的形式体现:
[HUAWEI-GigabitEthernet0/0/1]storm-control enable log


②DHCP 报文限速功能
关于dhcp报文限速功能其实就是DHCP Snooping功能的一个延伸---check功能。因此我们注意的需要提前开启DHCP Snooping。
DHCP报文泛洪攻击的原理无非就是向设备发送大量的DHCP报文(每秒能够达到2万次),这样就会对设备的性能造成巨大的冲击,最终导致设备无法正常工作,
而dhcp报文限速的功能,就可以在一定时间的允许规定数目的报文上送协议栈,多余的报文将被丢弃!
配置限制DHCP报文限速功能:
系统视图
VLAN视图
接口视图
如三者同时配置,生效的顺序:接口视图>VLAN视图>全局视图
关于DHCP 报文限速功能,我们需要配合DHCP Snooping功能,在华为官方中这样对DHCP snooping介绍的,应用如下:
防止DCHP服务器仿冒攻击。
防止非DHCP用户攻击。
防止DHCP报文泛洪攻击。
防止DHCP服务器拒绝服务攻击。
通过Option82的支持实现对DHCP客户端的安全控制。

对照拓扑,这里我举例在接口模式下进行配置:
全局模式开启DHCP服务:
[Huawei]dhcp enable

使能DHCP snooping功能:
[Huawei]dhcp snooping enable
[Huawei-GigabitEthernet0/0/1]dhcp snooping enable
使能DHCP 报文检查检查功能:
[Huawei-GigabitEthernet0/0/1]dhcp snooping check dhcp-rate enable
rate:指定上送到DHCP协议栈的检查速率,取值为1-100整数个PPS。缺省情况下是100pps(每秒100个)。

这里,我限制为这个接口接收DHCP报文为每秒30个,超过此规定速率的视为丢弃!
[Huawei-GigabitEthernet0/0/1]dhcp snooping check dhcp-rate 30


DHCP耗尽攻击防御
提供两种方案:
①DHCP Snooping
②端口安全技术
DHCP耗尽攻击原理:DHCP服务器通常根据DHCP Request报文中的应用层中的CHADDR(客户端硬件地址字段) 来确认客户端的mac地址,如果黑客在某个接口下利用这一DHCP请求特质,改变源mac地址或者CHADDR字段中的客户 Mac地址,造成DHCP地址池有限的地址会被耗尽,一旦地址池耗尽,会导致新注册用户在请求地址时发生问题。如图所示:

为了抑制大量DHCP用户恶意申请IP地址,使能DHCP Snooping,可以配置设备或接口允许接入最大的DHCP用户数,当接入的DHCP用户数达到该值,不在允许任何用户通过此设备或者接口成功申请到IP地址。
那么,会用同行有这样的疑问,这样配置是否会影响到接入层交换机端口下用家用路由器拓展的用户呢??
这个疑虑可以打消,因为这些用户是从这些家用路由器中获取地址。除非在正常用户使用下限制一个mac地址接入。

配置防止DHCP服务器拒绝服务攻击
①配置接口允许学习的DHCP Snooping绑定表项的最大个数
前提开启DHCP Snooping功能
可以在接口视图和vlan视图下操作,这里我在接口下举例。
配置接口允许写的的DHCP Snooping绑定表项最大个数为10.
[Huawei-GigabitEthernet0/0/1]dhcp snooping max-user-number 10
取值范围1-1024的整数。

如果在企业生产环境中,对安全性能还要严格的话,可以开启检查报文中chaddr字段检查功能。
使能检测DHCP Request 报文帧头mac地址与DHCP数据区中CHADDR字段是否一致功能。
[Huawei-GigabitEthernet0/0/1]dhcp snooping check dhcp-chaddr enable
这条命令应用场景在于,一般情况下DHCP Request 报文中CHADDR字段与发送该报文的客户端mac地址是相同的,DHCP服务器是依据CHADDR字段来确认客户端Mac地址的,如果攻击者(指的是实验中kali Linux攻击机)不断改变DHCP Request报文中的CHADDR字段向DHCP服务器申请IP地址的话,就需要这条命令来判断了。


②端口安全
-----初学者请巩固数通相关技术
对接入用户安全性较高的网络中,虽然我们配置了DHCP Snooping-检查报文中chaddr字段检查功能,高明的黑客会同时改变客户端源Mac和CHADDR字段,这样,我们的检查功能就失效了,为了加一层保险,配置端口安全功能(端口安全动态、mac学习的限制数量就箭在弦上,)。此时接口学习到的MAC地址会被转换为安全MAC地址,接口学习的最大MAC数量达到上限后吗,不在学习新的MAC地址,仅允许这些MAC地址和交换机通信。
使能端口安全功能:
[Huawei-GigabitEthernet0/0/1]port-security enable

端口默认限制数为1,如果有多个用户通过一个接口接入的话,我们要使用如下命令:可以指定最大mac地址数量(这里我最大数量限定为10个)
新网络形成后,前10个学习到的客户端视为合法主机。
[Huawei-GigabitEthernet0/0/1]port-security max-mac-num 10

启用接口Mac地址自动粘贴功能,提高效率,不用手动建立,就会被接口自动学习,最多允许学习10个。

超过10个Mac地址后,我们要定义一个动作:在华为对端口安全功能采取的动作有3种。
protect 丢弃动作
restrict :丢弃并告警动作。
shutdown :关闭接口动作。
这里我选择一般的丢弃动作:
[Huawei-GigabitEthernet0/0/1]port-security protect-action protect
这样的话,这个接口如果接入多台PC,只允许接入10个主机,超过的就会被丢弃!(在ENSP模拟中支持的效果并不理想,不做演示。真机没有问题)






