12.7. 拒绝服务攻击

12.7.1. 简介

DoS(Denial of Service)指拒绝服务,是一种常用来使服务器或网络瘫痪的网络攻击手段。

在平时更多提到的是分布式拒绝服务(DDoS,Distributed Denial of Service) 攻击,该攻击是指利用足够数量的傀儡计算机产生数量巨大的攻击数据包,对网络上的一台或多台目标实施DDoS攻击,成倍地提高威力,从而耗尽受害目标的资源,迫使目标失去提供正常服务的能力。

12.7.2. UDP反射

基于UDP文的反射DDoS攻击是拒绝服务攻击的一种形式。攻击者不直接攻击目标,而是利用互联网中某些开放的服务器,伪造被攻击者的地址并向该服务器发送基于UDP服务的特殊请求报文,使得数倍于请求报文的数据被发送到被攻击IP,从而对后者间接形成DDoS攻击。

常用于DoS攻击的服务有:

  • NTP

  • DNS

  • SSDP

  • Memcached

其中DNS攻击主要是指DNS Request Flood、DNS Response Flood、虚假源+真实源DNS Query Flood、权威服务器攻击和Local服务器攻击。

12.7.3. TCP Flood

TCP Flood是一种利用TCP协议缺陷的攻击,这种方式通过伪造IP向攻击服务器发送大量伪造的TCP SYN请求,被攻击服务器回应握手包后(SYN+ACK),因为伪造的IP不会回应之后的握手包,服务器会保持在SYN_RECV状态,并尝试重试。这会使得TCP等待连接队列资源耗尽,正常业务无法进行。

12.7.4. Shrew DDoS

Shrew DDoS利用了TCP的重传机制,调整攻击周期来反复触发TCP协议的RTO,达到攻击的效果。其数据包以固定的、恶意选择的慢速时间发送,这种模式能够将TCP流量限制为其理想速率的一小部分,同时以足够低的平均速率进行传输以避免检测。

现代操作系统已经对TCP协议进行了相应的修改,使得其不受影响。

12.7.5. Ping Of Death

在正常情况下不会存在大于65536个字节的ICMP包,但是报文支持分片重组机制。通过这种方式可以发送大于65536字节的ICMP包并在目标主机上重组,最终会导致被攻击目标缓冲区溢出,引起拒绝服务攻击。

现代操作系统已经对这种攻击方式进行检查,使得其不受影响。

12.7.6. Challenge Collapsar (CC)

CC攻击是一种针对资源的DoS攻击,攻击者通常会常用请求较为消耗服务器资源的方式来达到目的。

CC攻击的方式有很多种,常见的攻击可以通过大量访问搜索页、物品展示页等消耗大的功能来实现。部分HTTP服务器也可通过上传超大文件、发送大量且复杂的参数的请求来实现攻击。

12.7.7. 慢速攻击

HTTP慢速攻击是由Wong Onn Chee 和 Tom Brennan在2012年的OWASP大会上正式披露,用低速发包来消耗服务器资源以达到拒绝服务的目的。

慢速攻击分为 Slow headers / Slow body / Slow read 三种攻击方式。Slow headers 一直不停的慢速发送HTTP头部,消耗服务器的连接和内存资源。Slow body 发送一个 Content-Length 很大的 HTTP POST请求,每次只发送很少量的数据,使该连接一直保持存活。Slow read以很低的速度读取Response。

12.7.8. 基于服务特性

  • 压缩包解压
    • 巨大的0字节的压缩包

  • 读文件
    • /dev/urandom 等无限制的文件

  • 受限制的反序列化
    • 反序列化巨大的数组

  • 正则解析
    • 消耗巨大的回溯表达式

12.7.9. 常用的防护方式

  • 基于特定攻击的指纹检测攻击,对相应流量进行封禁/限速操作

  • 对正常流量进行建模,对识别出的异常流量进行封禁/限速操作

  • 基于IP/端口进行综合限速策略

  • 基于地理位置进行封禁/限速操作

12.7.10. 参考链接