UDP Flooding的相关理论
    UDP 是一个无连接的传输层协议,所以在数据传输过程,不需要建立连接和进行认证。攻击者只需要向目标发送大量巨大的 UDP 数据包,就会使目标所在的网络资源被耗尽。UDP Flooding 是一种传统的攻击方式,近年来黑客
    经过精心设计,又创造了新的攻击方法。
    攻击者使用源 IP 欺骗的方法向有漏洞的 UDP服务器发送伪造请求。UDP 服务器不知道请求是伪造的,于是礼貌地准备响应。当成千上万的响应被传递给一个不知情的目标主机时,这个攻击问题就会发生。
    传输层的内容主要包括源端口、目的端口、长度和校验码4个部分
    Source Port:表示这个数据包的源端口,大学为2字节,当不需要对方回应时,可以全部为0
    Destination Port:表示目的端口号,大小为2字节
    Length:表示长度,大小为2字节,表示UDP报文的长度
    Checksum:表示校验码,接收方以此来判断传输中是否有错
    这里需要注意的是,通常两个互相通信的程序所使用的端口号往往是不同的。

    UDP Flooding攻击
    UDP Flooding是一种传统的攻击方式,近年来黑客经过精心设计,又创造了新的攻击方法。就在2018年的2月28日,Memcache服务器被曝出存在UDP反射放大攻击漏洞。攻击者可利用这个漏洞来发起大规模的DDoS攻击,从而影响网络正常运行。漏洞的形成原因为Memcache 服务器UDP 协议支持的方式不安全、默认配置中将 UDP 端口暴露给外部链接。攻击者向端口11211 上的 Memcache 服务器发送小字节请求。由于 UDP 协议并未正确执行,因此 Memcache 服务器并未以类似或更小的包予以响应,而是以有时候比原始请求大数千倍的包予以响应。由于 UDP 协议即包的原始 IP 地址能轻易遭欺骗,也就是说攻击者能诱骗 Memcache 服务器将过大规模的响应包发送给另外一个 IP 地址即 DDoS 攻击的受害者的 IP 地址。这种类型的 DDoS 攻击被称为“反射型 DDoS”或“反射 DDoS”。响应数据包被放大的倍数被称为 DDoS 攻击的“放大系数”。
    所有放大攻击背后的想法技术一样的。攻击者使用源IP欺骗的方法向有漏洞的UDP服务器发送伪造请求。UPD服务器不知道请求是伪造的,于是礼貌第准备响应。当成千上万的响应被传递给一个不知情的目标主机时,这个攻击问题就会发送了

    模拟UDP Flooding攻击
    考虑到这次试验要消耗大量的系统资源,所以这个实验中我们不使用ENSP。我们在这次试验中需要使用两个虚拟机,一个是Kali Linux 2,另一个是Windows 2003,这两个系统的设置和第12章相同即可。 即便如此,在使用虚
    拟设备时,由于产生的数据包数量众多,而且十分巨大。WireShark也经常会出现假死状态。
    image.png
    sudo hping3 -q -n -a 10.0.0.1 —udp -s 53 -p 68 —flood 192.168.0.130 -d 100

    WireShark中的绘图功能分析UDP Flooding攻击
    image.png
    我们将使用WireShark将捕获到的数据包打开,进行分析。这个数据文件中捕获到的数据包跟前面的几种泛洪攻击有相同的地方,都是间隔时间短,发送数量大。所以我们也可以使用前面的统计功能来分析这个攻击。
    image.png
    这个数据包的源端口为53,目的端口为68.
    image.png
    每个数据包的数据部分都是大量的”58”

    WireShark中提供的绘图功能可以用更直观的形式展示数据包的数量。我们利用菜单栏上的“统计
    (statistics)”->”IO图表(IO graph)”选项来生成一个图表,打开的”IO图表”对话框如下所示:
    image.png

    如何防御UDP Flooding

    1. 基于目的 IP 地址的限流
    2. 基于目的安全区域的限流
    3. 基于会话的限流

    除了这种简单粗暴的限流机制之外,在华为公司编写的《华为防火墙技术漫谈》中还提到了另一种更有建设性的思路:指纹学习。
    指纹学习是通过分析 UDP 报文中的数据内容来判断它是否异常。防火墙首先会对发往某个服务器的 UDP 报文进行统计,当达到指定阈值时,就会开始进行指纹学习。如果这些报文携带的数据具有相同特征,就会被学习成指纹。后续的报文如果具有与此指纹相匹配的特征就会被当成攻击报文而丢弃。