Fork me on GitHub

拒绝服务攻击小结

最近在不少春招的面试题看到DDOS相关的内容,之前虽说对DDOS也有了解,但是仔细想想,发现仍旧是停留在比较表面的层次,所以有了这篇学习记录。

0x01 序

只要是能够让服务器因为CPU,链接数达到上限等原因而导致服务器拒绝正常请求的攻击就是拒绝服务攻击。根据拒绝服务攻击的实现方式的不同,或者说攻击所在的网络层次不同,可以将其细分为很多种,从网上找到一张表格,让我对DOS攻击刮目相看。本文将收集整理几种比较常见的,也是业界讨论最多的DOS攻击方式,包括原理和防御手段。

OSI   层级  攻击内容 
Network Based (2-4层)  IP Fragment 
Tear Drop 
SYN Flood (Dirt Jumper) 
TCP (connection) Flood 
e.g. SYN-ACK, ACK & PUSH-ACK, RST or   FIN and Fragmented ACK 
Christmas Tree
Fake Session
LAND 
Redirect Traffic Attack 
ICMP Flood, Ping Floods and SMURF   Attacks 
Ping of Death ICMP 
DNS  based   (4层)  UDP Flood 
UDP Fragment 
DNS Flood (Distributed and DNS   Blacklisting)
e.g. DNS UDP Flood, DNS Query Flood and   DNS NXDOMAIN Flood 
SSL/TLS based (5–6层)  SSL Floods, Malformed SSL (e.g. empty SSL HELLO) 
SSL THC attack (Extending from SSL   Renegotiation vulnerability) 
Application based (6–7层)  Slowloris (Nuclear DDoSer, Slowhttptest) 
Keep-Dead 
Slow POST (R-U-Dead-Yet, Tor Hammer,   Nuclear DDoSer, Slowhttptest) 
HashDoS 
Apache Killer (Slowhttptest) 
HTTP GET Flood, Recursive GET Flood (Web   Scraping), Dirt Jumper (HTTP Flood) 
#RefRef (exploit SQLi - OWASP Top 10   vulnerability as entry) 
XML “Bomb” (DTD attack), XML External   Entity DoS 

0x02 TCP Flood

TCP Flood 大致分为以下两种:

  • SYN Flood
  • ACK Flood

SYN Flood

学习过计网的同学应该知道,SYN标记位用来同步序列号,出现在TCP链接建立之初。SYN Flood攻击就是利用了TCP链接的过程,发送大量包含虚假源IP的SYN包,让服务器保持大量的半链接状态,半链接状态下的系统资源在等待重试期间一直保留,从而消耗服务端资源。

防御手段

具体移步参考文献[1]

1. 无效连接监视释放。

  • 缩短SYN Timeout时间
  • 根据主机并发能力设置连接阀值,达到阈值时拆除

2. 延缓TCB(线程控制块)分配方法,降低半连接资源消耗

  • Syn Cookie技术
  • Syn Cache技术

3. 使用SYN Proxy防火墙,有些操作系统不提供上述的解决方案,那么使用一些商业的防火墙可以比较好的实现上述的防御方法。

ACK Flood

ack flood攻击利用的是三次握手的第二段,也就是TCP标志位syn和ack都置1,攻击主机伪造海量的 虚假ack包发送给目标主机,目标主机每收到一个带有 ack标志位的数据包时,都会去自己的TCP连接表中查看有没有与ack的发送者建立连接 ,如果有则发送三次握手的第三段ack+seq完成三次握手,成功 建立TCP连接。如果没有则发送ack+rst 断开连接。但是在这个过程中会消耗一定的CUP计算资源,如果瞬间 收到海量的syn+ack数据包将会 消耗大量的cpu资源使得正常的连接无法建立或者增加延迟,甚至造成服务器瘫痪、死机。

防御手段

1. 对称性检测法,这种攻击的一个十分明显的特新就是三次握手的第一次SYN的进入包要远远小于SYN/ACK的进入包。

2. 防火墙状态hash表的维持。通过维护一张表示活跃度的连接状态表,对大量不活跃的链接进行拒绝或者不响应。

0x03 DNS Flood

在理解了DNS逐层查询的流程后,理解DNS Flood相对就比较简单。因为DNS协议是没有认证机制的,这就导致容易被黑客利用。我们就分析一下这两类服务可能面临的DNS攻击风险。第一类:黑客伪造客户端源IP发送大量的DNS请求报文,造成DNS request flood攻击。DNS request flood是当前最常见的DNS攻击,这类攻击可以针对缓存服务器,也可以针对授权服务器。第二类:黑客伪造成授权服务器发送大量的DNS回应报文,造成DNS reply flood攻击。下面就从这两个攻击展开叙述DNS Flood。

DNS Request Flood

DNS request flood攻击原理其实很简单,就是黑客控制僵尸网络向DNS服务器发送大量的不存在域名的解析请求,最终导致服务器因大量DNS请求而超载,无法继续响应正常用户的DNS请求,从而达到攻击的目的。在DNS request flood攻击过程中,攻击的目标可能是DNS授权服务器,也可能是DNS缓存服务器。黑客伪造的客户端IP地址可能是虚假源IP地址,也可能是现网真实存在的IP地址。

防御手段

1. TC源认证主动防御。

达到请求阀值后,将TC标志位设为1,要求用户以TCP方式重发查询请求

2. 直接重传被动防御

达到阀值后,系统在第一次收到DNS请求后,就会记录DNS请求的域名、源IP等基本信息,并HASH成一个值,记录到系统一张表里。后续一定时间戳内,如果再收到这个HASH值相同的DNS请求,就认定为重传包,放行。时间戳会随着收到的每一个相同HASH值的DNS请求包而不断的刷新。

3. CNAME模式

达到阀值后,将请求的域名使用CANME DNS记录重定向到本身,等待用户再次查询CANME记录的域名,如果是正常的查询流量就再次将域名重定向回来。利用到一般的攻击流量是不会重新查询的特征。

DNS Reply Flood

DNS服务器收到DNS reply报文时,不管自己有没有发出去过解析请求,都会对这些DNS reply报文进行处理。DNS reply flood就是黑客发送大量的DNS reply报文到DNS缓存服务器,导致缓存服务器因为处理这些DNS reply报文而资源耗尽,影响正常业务。DNS reply flood大多都是虚假源攻击,直接攻击缓存服务器,当然还有一种攻击手段叫做DNS反射,可以达到攻击主机的目的。黑客将自己的源IP地址伪造成被攻击目标的IP地址,然后向一系列网络中开放的DNS服务器发送大量的查询请求。通过伪造DNS请求报文的源IP地址,控制DNS回应报文的流向,这些DNS回应报文就会都被引导到被攻击目标,导致被攻击目标的网络拥塞,拒绝服务。而开放式的DNS服务器在全球有超过几千万台,这些服务器接入带宽往往都比较高,而且,DNS reply报文大小通常也是DNS request报文的几倍甚至几十倍,还可达到放大攻击的效果。对于控制成千上万台僵尸主机的黑客来说,制造几G乃至数十G的DNS攻击流量并不太困难。

上述两种攻击的区别:

1、传统DNS reply flood一般攻击目标是DNS缓存服务器;而DNS反射攻击一般攻击目标是客户端。

2、传统DNS reply flood大多是虚假源攻击,而DNS反射攻击中,DNS请求是真实的,所以DNS回应报文也都是真实的,是由网络中真实的DNS服务器发出的,属于真实源攻击。这种情况下,再使用前面刚讲过的源认证方式,对于DNS反射攻击就不适用了。

上述两种攻击防御手段

1. 域名限速

2. 源IP限速

3. 记录请求会话表,将查询请求查表,如果不匹配则是攻击流量

4. 验证源IP的合法性,达到阀值后,用户第一次请求阻断,发送DNS request查询源IP真实性,通过再继续之前逻辑流

0x04 HTTP Flood(Challenge Collapsar)

CC攻击发生在第七层,一般方式是在很短的时间里对网站发起大量请求,消耗目标服务器的资源,使目标网站负载过高而不能访问。CC攻击和UDP Flood, TCP SYN Flood这类位于TCP/IP第四层的攻击相比,对自己的资源消耗更少,对服务器的攻击强度更高,有四两拨千斤的效果。通常发起CC攻击是使用专门的攻击工具,同时模拟成多个用户,向目标网站发起多个请求,一般这些软件为了防止地址被屏蔽,还内置通过代理攻击的功能。可以通过多个代理服务器对目标发起攻击,使封IP的防御方式变的失效。

防御手段

1. Http头中还会带有Referer,UserAgent等多项信息。检测发起请求是工具还是正常浏览器。

2. 通过302跳转在请求头中加入token

首先为每个访问者定义一个字符串,保存在Cookies中作为Token,必须要带有正确的Token才可以访问后端服务。当用户第一次访问时,会检测到用户的Cookies里面并没有这个Token,则返回一个302重定向,目标地址为当前页面,同时在返回的Http头中加入set cookies字段,对Cookies进行设置,使用户带有这个Token。一般浏览器支持重定向,而CC软件不一定像浏览器支持这些跳转操作。

3. 在页面中嵌入JavaScript来设置token并跳转。

因为cc软件基本不具有js渲染的功能,所以这样可以很好的防止CC攻击。

关于token设置的原则:

  1. 不同性,每个IP地址的Token不同
  2. 健壮性,无法伪造,不可预测,不可绕过
  3. 一致性,即对相同的客户端,每次生成的Token相同

0x05 DDOS

DDOS的全名是分要布式拒绝服务攻击,攻击的发动需要有一大群可控的肉鸡。根据最近几年的案例,DDOS利用的肉鸡源多是一些嵌入式的联网设备,如存在漏洞的摄像头,路由器等。防御的手段看到一篇腾讯部门的文章,感觉总结得蛮全面的。

参考::https://www.zhihu.com/question/19581905/answer/578131116

防御手段

1. 采用高性能的网络设备
2. 保证服务器系统的安全首先要确保服务器软件没有任何漏洞,防止攻击者入侵。
3. 充足的网络带宽保证。
4. 把网站做成静态页面或者伪静态。
5. 增强操作系统的TCP/IP栈
6. HTTP 请求的拦截HTTP 请求的特征一般有两种:IP 地址和 User Agent 字段。
7. 部署CDN
8. 隐藏服务器的真实IP,使用CDN的ip地址做解析
9. 定期检查企业网骨干需要定期检查主要的网络节点。
10. 利用专业的安全防护产品。

参考文献

[1] https://blog.csdn.net/bill_lee_sh_cn/article/details/6065704
[2] https://www.jianshu.com/p/dff5a0d537d8
[3] http://www.zhiding.cn/techwalker/documents/J9UpWRDfVYHE5WsKHS2hlN_bH8qtYoiIEWO_a1TSMjjg

-------------本文结束感谢您的阅读-------------