一个非常大的半连接列表而消耗非常多的资源——数以万计的半连接,即使是
简单的保存并遍历也会消耗非常多的 CPU 时间和内存,何况还要不断对这个列
表中的 IP 进行 SYN+ACK 的重试。实际上如果服务器的 TCP/IP 栈不够强大,最
后的结果往往是堆栈溢出崩溃---即使服务器端的系统足够强大,服务器端也将
忙于处理攻击者伪造的 TCP 连接请求而无暇理睬客户的正常请求(毕竟客户端
的正常请求比率非常之小),此时从正常客户的角度看来,服务器失去响应,
这种情况我们称作:服务器端受到了 SYN Flood 攻击。
在 synFlood.py 中,我们模拟了 SYN Flood 的过程。其中,random_IP()函
数实现了随机生成一个 IP 地址的功能,因为 SYN Flood 攻击中涉及 IP 欺骗,
以这个随机生成的函数作为攻击数据包的发送地址是必要的。Checksum(msg)函
数是一个计算校验和的函数,因为在生成某些数据包的包头过程中需要计算包
内数据的校验和。接着,通过 nmap 扫描 1-1024 所有端口,找到主机上所有打
开的端口,在之后的 DDoS 中集中向这些端口发起攻击。然后,生成 IP 数据包
的包头[1]和 TCP 数据包的包头[2],将这一数据包生成好之后,通过 while 1
的死循环不断向受攻击者发送虚假数据包,从而实现 DDoS。
4.2 UDP Flood
UDPFlood 是日渐猖厥的流量型 DoS 攻击,常见的情况是利用大量 UDP 小包
冲击 DNS 服务器或 Radius 认证服务器、流媒体视频服务器。100k bps 的
UDPFlood 经常将线路上的骨干设备例如防火墙打瘫,造成整个网段的瘫痪。由
于 UDP 协议是一种无连接的服务,在 UDPFLOOD 攻击中,攻击者可发送大量伪造
源 IP 地址的小 UDP 包。但是,由于 UDP 协议是无连接性的,所以只要开了一个
UDP 的端口提供相关服务的话,那么就可针对相关的服务进行攻击。
在实验中,我们实现了两种基于 UDP Flood 的 DDoS,其中
UdpFlood/udpFlood.py 是通过直接使用 random 函数生成一个数据包实现的;
而 UdpFlood_2/udpFlood.py 继承了 TCP SYN Flood 的思路,通过代码生成一个
虚假的 IP 地址,引入了 IP 欺骗。
4.3 Trinoo
Trinoo 攻击的攻击方法是向被攻击目标主机的随机端口发出全零的 4 字节
UDP 包,在处理这些超出其处理能力的垃圾数据包的过程中,被攻击主机的网
络性能不断下降,直到不能提供正常服务,乃至崩溃。
我们发现,这一攻击模式和 UDP Flood 是极为相似的,基本上可以复用 UDP
Flood 攻击中的代码,需要修改的地方在于将数据包里的数据赋为
“00000000000000000000000000000000”。除此之外,由于它对 IP 地址不做
假,而是通过寻找肉机、端口代理实现隐藏,所以在实验中可以将
random_IP()删去。
4.4 ICMP Flood
ICMP flood 通过高速发送大量的 ICMP Echo Reply 数据包,导致目标网络
的带宽被耗尽,阻止合法的数据通过网络。ICMP Echo Reply 数据包具有较高
的优先级,在一般情况下,网络总是允许内部主机使用 PING 命令,这将导致系
统不断地保留它的资源,直到无法再处理有效的网络流量。
评论0
最新资源