UDP,虽然与TCP一样位于传输层, UDP协议却不需要建立连接就可以传输数据,而且少了很多的控制机制,因而传输速度高于TCP协议,所以也得到了广泛的使用。不过, UDP协议也面临着一个和TCP协议一样的威胁,那就是泛洪攻击。不过不同于TCP协议占用服务器连接数的方式, UDP协议因为不需要建立连接,所以攻击者将目标转向了带宽,他们构造大量体积巨大的UDP数据包并发往目标,从而导致目标网络的瘫痪。由于依赖UDP的应用层协议五花八门,差异极大,因此针对UDPFlooding的防护非常困难。
本文内容:
UDP是一个无连接的传输层协议,所以在数据传输过程,不需要建立连接和进行认证。攻击者只需要向目标发送大量巨大的UDP数据包,就会使目标所在的网络资源被耗尽。 UDP Flooding是一种传统的攻击方式,近年来黑客经过精心设计,又创造了新的攻击方法。
攻击者使用源IP欺骗的方法向有漏洞的UDP服务器发送伪造请求。UDP服务器不知道请求是伪造的,于是礼貌地准备响应。当成干上万的响应被传递给一个不知情的目标主机时,这个攻击问题就会发生。
这次我们采用Kali Linux 2中自带的Hping3来进行一次拒绝服务攻击。
现在我们就利用刚刚介绍过的hping3参数来构造一次基于UDP协议的拒绝服务攻击,在Kali Linux 2中打开一个终端,然后在终端中输入:
hping3 -q -n -a 10.0.0.1 --udp -s 53 -p 68 --flood 目标IP -d 1000
源地址为10.0.0.1,源端口53,目的端口68
现在攻击就开始了,在这个过程中可以随时使用dtrl+C组合键来结束,在攻击的同时我们使用Wireshark捕获这个过程产生的数据包。
现在我们使用Wireshark中提供的绘图功能来直观地查看这些数据包对网络造成了什么影响。Wireshark中提供的绘图功能可以用更直观的形式展示数据包的数量。我们利用菜单栏上的"统计(statistics) "-"IO图表(IO graph) "选项来生成一个图表,打开的"IO图表"对话框
防火墙设备
除了这种简单粗暴的限流机制之外,在华为公司编写的《华为防火墙技术漫谈》中还提到了另一种更有建设性的思路:指纹学习。
指纹学习是通过分析UDP报文中的数据内容来判断它是否异常。防火墙首先会对发往某个服务器的UDP报文进行统计,当达到指定阈值时,就会开始进行指纹学习。如果这些报文携带的数据具有相同特征,就会被学习成指纹。后续的报文如果具有与此指纹相匹配的特征就会被当成攻击报文而丢弃。