拒绝服务攻击的常见类型

一. 什么是 DoS & DDoS ?

  拒绝服务攻击(Denial-of-Service Attack)亦称洪水攻击,是一种网络攻击手法,其目的在于使目标电脑的网络或系统资源耗尽,使服务暂时中断或停止,导致其正常用户无法访问。

  分布式拒绝服务攻击(Distributed Denial-of-Service Attack),是使用网络上两个或两个以上被攻陷的电脑作为 “僵尸” 向特定的目标发动 “拒绝服务” 式攻击。

 

二. 常见类型及攻击原理

  (1)被攻击特征

  受害主机在 DDoS 攻击下,明显特征就是大量的不明数据报文流向受害主机,受害主机的网络接入带宽被耗尽,或者受害主机的系统资源(存储资源和计算资源)被大量占用,甚至发生死机。前者可称为带宽消耗攻击,后者称为系统资源消耗攻击。两者可能单独发生,也可能同时发生。

 

DDOS按拒绝对象可以分为:带宽消耗型攻击、资源消耗型攻击。

拒绝服务攻击的常见类型_第1张图片

 

从协议层次划分:

 

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 

 

(2)下面简单介绍一些常见的DDOS攻击类型:

普通DDOS

  普通拒绝服务攻击是指一些传统的攻击方式,如SYN FLOOD攻击、ACK FLOOD攻击、CC攻击、UDP FLOOD攻击等等。

新型DDOS

  Websocket、临时透镜、慢速DDOS、ReDOS

 

1. SYN FLOOD攻击

  SYN FLOOD攻击是利用TCP协议的一些特性发动的,通过发送大量伪造的带有SYN标志位的TCP报文使目标服务器连接耗尽,达到拒绝服务的目的。要想理解SYN FLOOD的攻击原理必须要先了解TCP协议建立连接的机制。SYN FLOOD攻击就是在三次握手机制的基础上实现的。攻击者通过伪造IP报文,在IP报文的原地址字段随机填入伪造的IP地址,目的地址填入要攻击的服务器IP地址,TTL、Source Port等随机填入合理数据,TCP的目的端口填入目的服务器开放的端口,如80、8080等,SYN标志位置1。然后不停循环将伪造好的数据包发送到目的服务器。

  

2. ACK FLOOD攻击

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

 

3. UDP FLOOD攻击

  UDP FLOOD攻击顾名思义是利用UDP协议进行攻击的,UDP FLOOD攻击可以是小数据包冲击设备也可以是大数据包阻塞链路占尽带宽。不过两种方式的实现很相似,差别就在UDP的数据部分带有多少数据。相比TCP FLOOD攻击,UDP FLOOD攻击更直接更好理解,有一定规模之后更难防御,因为UDP攻击的特点就是打出很高的流量,一个中小型的网站出口带宽可能不足1G,如果遇到10G左右的UDP FLOOD攻击,单凭企业自身是无论如何也防御不住的,必须需要运营商帮你在上游清洗流量才行,如果遇到100G的流量可能地方的运营商都没有能力清洗了,需要把流量分散到全国清洗。UDP FLOOD攻击就像是一块大石头,看着普普通通的好像跟现代机枪炸弹不是一个等级的武器,但是如果石头足够大,就不一样了。

 

4. CC攻击

  CC攻击全称Challenge Collapsar,中文意思是挑战黑洞,因为以前的抗DDOS攻击的安全设备叫黑洞,顾名思义挑战黑洞就是说黑洞拿这种攻击没办法,新一代的抗DDOS设备已经改名为ADS(Anti-DDoS System),基本上已经可以完美的抵御CC攻击了。CC攻击的原理是通过代理服务器或者大量肉鸡模拟多个用户访问目标网站的动态页面,制造大量的后台数据库查询动作,消耗目标CPU资源,造成拒绝服务。我们都知道网站的页面有静态和动态之分,动态网页是需要与后台数据库进行交互的,比如一些论坛用户登录的时候需要去数据库查询你的等级、权限等等,当你留言的时候又需要查询权限、同步数据等等,这就消耗很多CPU资源,造成静态网页能打开,但是需要和数据库交互的动态网页打开慢或者无法打开的现象。这种攻击方式相对于前两种实现要相对复杂一些,但是防御起来要简单的多,提供服务的企业只要尽量少用动态网页并且让一些操作提供验证码就能抵御一般的CC攻击。

 

5. 反射DDOS

  很多协议的请求包要远小于回复包,以一个字节的数据换十个字节的数据回来这就是一种放大,但是你这单纯的放大攻击的是自己,所以说想要攻击别人就要在发送请求包时把源地址写成要攻击的人的地址,这样回复的大字节报文就去你要攻击的人那里了。
  这里放大主要利用的是NTP的monlist(listpeers也行)、DNS的AXFR(ANY也行)、SNMP的getbulkrequest。
  monlist是返回最近600个与当前NTP服务器通信过的IP地址;
  AXFR是区域传送(有地方叫域传送),比如freebuf.com下的所有域名返回给请求者;
  SNMPV2版本中新加的getbulkrequest用于一次请求大量的信息,减少管理站与被管理设备的交互次数。

 

6. Websocket

  websocket是HTML5一种新的协议,它实现了浏览器与服务器全双工通信(full-duple)。目前主流的浏览器都能很好地支持websocket,而且用它实现DOS攻击也并不是很难,只要在js代码中写入相应的代码,当人们打开这个网页时浏览器会自动执行js代码去请求连接要攻击的IP地址。

 

7. 临时透镜

  这种攻击是一种典型的通过时间延时进行流量放大攻击的方法。如果攻击者可以控制多个时间段的多个数据包,让它们同时到达目标,这样就能使流量瞬间到达一个峰值,对目标造成很大危害。这个攻击方式道理不难理解,但是实现起来可是不容易,要让相同源和目的IP的IP报文走不同的路径到达目的地,这一点就是要实现临时透镜攻击的关键所在,我国的互联网基本上是由四张网(电信、联通、移动、教育网)通过互联互通组成的,任意两点之间的路径都能有千千万万条,但是怎么才能有我们自己控制报文的路线呢?我想到的第一个办法就是用IP协议的宽松源路由选项,学过或者平时比较了解TCP/IP的童鞋们可能听说过这个宽松源路由,但我估计很少有人用。IP数据在传输时通常由路由器自动为其选择路由,但是网络工程师为了使数据绕开出错网络或者为了测试特定线路的吞吐率,需要在信源出控制IP数据报的传输路径,源路由就是为了满足这个要求设计的。源路由有两种,一种叫严格源路由另一种就是我们要说的宽松源路由。IP选项部分可以最多带上9个IP地址作为这个数据报要走的路径,严格源路由是每一跳都必须按照指定的路由器去走,但是宽松源路由的不用这么严格。我国大部分运营商都禁止了源路由,不过有人说在国外不禁止源路由,国外有服务器的朋友可以去测试一下是不是真的。

 

8. 慢速DDOS

一说起慢速攻击,就要谈谈它的成名历史了。HTTP Post慢速DoS攻击第一次在技术社区被正式披露是2012年的OWASP大会上,由Wong Onn Chee和Tom Brennan共同演示了使用这一技术攻击的威力。对任何一个开放了HTTP访问的服务器HTTP服务器,先建立了一个连接,指定一个比较大的content-length,然后以非常低的速度发包,比如1-10s发一个字节,然后维持住这个连接不断开。如果客户端持续建立这样的连接,那么服务器上可用的连接将一点一点被占满,从而导致拒绝服务。和CC攻击一样,只要Web服务器开放了Web服务,那么它就可以是一个靶子,HTTP协议在接收到request之前是不对请求内容作校验的,所以即使你的Web应用没有可用的form表单,这个攻击一样有效。在客户端以单线程方式建立较大数量的无用连接,并保持持续发包的代价非常的低廉。实际试验中一台普通PC可以建立的连接在3000个以上。这对一台普通的Web server将是致命的打击。更不用说结合肉鸡群做分布式DoS了。鉴于此攻击简单的利用程度、拒绝服务的后果、带有逃逸特性的攻击方式,这类攻击一炮而红,成为众多攻击者的研究和利用对象。发展到今天,慢速攻击也多种多样。

 

9. ReDoS

  ReDoS(Regular expression Denial of Service)正则表达式拒绝服务攻击。开发人员使用了正则表达式来对用户输入的数据进行有效性校验,当编写校验的正则表达式存在缺陷或者不严谨时, 攻击者可以构造特殊的字符串来大量消耗服务器的系统资源,造成服务器的服务中断或停止。
正则表达式引擎分成两类,一类称为DFA(确定性有限状态自动机),另一类称为NFA(非确定性有限状态自动机)。两类引擎要顺利工作,都必须有一个正则式和一个文本串,一个捏在手里,一个吃下去。DFA捏着文本串去比较正则式,看到一个子正则式,就把可能的匹配串全标注出来,然后再看正则式的下一个部分,根据新的匹配结果更新标注。而NFA是捏着正则式去比文本,吃掉一个字符,就把它跟正则式比较,然后接着往下干。一旦不匹配,就把刚吃的这个字符吐出来,一个一个吐,直到回到上一次匹配的地方。

 

参考文章 

http://blog.csdn.net/qq_32400847/article/details/63262965

http://361531.blog.51cto.com/351531/1035717/

你可能感兴趣的:(拒绝服务攻击的常见类型)