一、DDoS概述
DDoS攻击是由DoS攻击发展而来的,根据攻击原理和方式的区别,可以把DDoS攻击分为两个阶段,即从传统的基于网络层的DDoS攻击和现阶段较为常见的基于应用层的DDoS攻击,这两类攻击方式各有特点,都对网络的安全造成了极大的危害。对于应用层DDoS攻击来说,基于Web服务器的攻击是最常见的。
二、DDoS的两种类型
1.系统漏洞型
这种类型的攻击是利用操作系统或者应用程序本身所具有的漏洞来发起的,攻击者通过构造出针对攻击目标的漏洞的报文来对攻击目标发起攻击,攻击者利用这种攻击方式以达到拒绝服务攻击的目的。
2.资源耗尽型
资源耗尽型攻击主要目标是消耗掉系统的带宽或者例如资源等,攻击者发送大量的非法的请求数据包,使攻击目标出现资源或者带宽上的迅速消耗,从而无法响应其他正常的用户的请求。
三、网络层DDoS攻击原理及方式
常见的网络层DDoS攻击就是利用TCP/IP协议族的一些特征,控制大量的傀儡机发送合理的请求来消耗攻击目标主机的CPU和内存资源,由于攻击目标主机资源的快速消耗,就会使得合法的用户无法得到所请求的服务。
常见的网络层DDoS攻击方式有:
1.SYN-Flood攻击
SYN-Flood攻击是指攻击者利用TCP三次握手的原理,向目标主机发送大量SYN标志的TCP请求,当服务器接收的这些请求数据包的时候,会为这些连接请求建立会话,并且把这些并未建立完整连接的会话排到缓冲区队列中。攻击者可以发送源地址为假的分组,等待服务器发送分组,而由于源地址为假,因为系统发送回来的分组就等不到源地址主机的响应,因此,服务器的带宽和资源将在维持大量的这类半连接上被消耗掉,一旦请求超过了服务器的缓冲区容量,此时服务器就不能再接收新的连接请求了。此时其他合法的用户就无法建立与服务器的连接。
2.ACK-Flood攻击
ACKFlood攻击。在TCP连接建立之后,所有的数据传输TCP报文都是带有ACK标志位的,主机在接收到一个带有ACK标志位的数据包的时候,需要检查该数据包所表示的连接四元组是否存在,如果存在则检查该数据包所表示的状态是否合法,然后再向应用层传递该数据包。如果在检查中发现该数据包不合法,例如该数据包所指向的目的端口在本机并未开放,则主机操作系统协议栈会回应RST包告诉对方此端口不存在。通常状态检测防火墙所做的事情与此类似,只不过防火墙只拦截非法的数据包,而不主动回应。
对比主机以及防火墙在接收到ACK报文和SYN报文时所做动作的复杂程度,显然ACK报文带来的负载要小得多。所以在实际环境中,只有当攻击程序每秒钟发送ACK报文的速率达到一定的程度,才能使主机和防火墙的负载有大的变化。当发包速率很大的时候,主机操作系统将耗费大量的精力接收报文、判断状态,同时要主动回应RST报文,正常的数据包就可能无法得到及时的处理。这时候客户端(以IE为例)的表现就是访问页面反应很慢,丢包率较高。但是状态检测的防火墙通过判断ACK报文的状态是否合法,借助其强大的硬件能力可以较为有效的过滤攻击报文。当然如果攻击流量非常大(特别是千兆线路上,我们曾经观察到~Mbps左右的ACKFlood),由于需要维护很大的连接状态表同时要检查数量巨大的ACK报文的状态,防火墙也会不堪重负导致全网瘫痪。
3.UDP-Flood攻击
UDP在Internet中的应用是比较广泛的,尤其在一类实时性要求较高,而对数据包传输的完整性要求不高的应用来说,这其中以视频和即时通信最为典型,这些服务首先要求保证的不是质量而是实时性。UDPFlood常发生对DNS服务器以及流媒体视频服务器上,UDP是基于无连接的协议,当攻击目标接收到一个UDP数据包时,它会确定目的端口所对应的应用程序。当攻击目标主机发现该应用程序并不存在时,会产生一个目的地址无法连接的ICMP数据包发
送给源地址。如果向攻击目标主机的端口发送了足够多的UDP数据包的时候,攻击目标主机就会崩溃。常见的UDP攻击有NTP攻击。
4.ICMP攻击
ICMPFlood的攻击原理和ACKFlood原理类似,属于流量型的攻击方式,也是利用大的流量给服务器带来较大的负载,影响服务器的正常服务。由于目前很多防火墙直接过滤ICMP报文,因此ICMPFlood出现的频度较低。
四、应用层DDoS攻击原理及方式
传统上的攻击DDoS是指发生在网络层的DDoS攻击,如本章上文所指的DDoS攻击一般就是指代的网络层DDoS攻击。而应用层DDoS攻击是在网络层DDoS攻击的基础上发展起来的,应用层DDoS攻击是一种新型的攻击方式,这类攻击方式的本质还是基于洪水式的攻击方式,即攻击者通过代理服务器或者僵尸网络向攻击目标发送大量的高频合法请求,以达到消耗攻击目标带宽的目的,然而,应用层DDoS攻击更为主要的目的是要能够消耗主机资源。
常见的应用层DDoS攻击有:
1.DNS-Flood攻击
DNS-Flood就是攻击者操纵大量傀儡机器,对目标发起海量的域名查询请求。为了防止基于ACL的过滤,必须提高数据包的随机性。常用的做法是UDP层随机伪造源IP地址、随机伪造源端口等参数。在DNS协议层,随机伪造查询ID以及待解析域名。随机伪造待解析域名除了防止过滤外,还可以降低命中DNS缓存的可能性,尽可能多地消耗DNS服务器的CPU资源。
2.慢连接攻击
在POST提交方式中,允许在HTTP的头中声明content-length,也就是POST内容的长度。在提交了头以后,将后面的body部分卡住不发送,这时服务器在接受了POST长度以后,就会等待客户端发送POST的内容,攻击者保持连接并且以10S-S一个字节的速度去发送,就达到了消耗资源的效果,因此不断地增加这样的链接,就会使得服务器的资源被消耗,最后可能宕机。
3.CC攻击
CC攻击是基于页面攻击的,主要攻击目标是提供网页访问服务的服务器。这些网页往往存在ASP,JSP,PHP等脚本程序,并且CC攻击会重点调用Mssql、Mysql、Oracle等数据库,并对这些数据库发起操作。对于网页的访问来说,如果只是查看静态的网页内容,这种服务是不会占用太多服务器的资源的,然而当需要访问涉及到用户与页面之间存在交互的动态网页,这时就需要占用服务器的大量资源了。比如用户在对数据库进行查找,修改时,服务器第一次会把用户所发出的对于数据库的操作返回,进行相应的操作后,第二次再把结果返回给用户,这其中就包括了至少两次的输入输出操作。如果同一时刻有大量的用户发起这样的请求,服务器的性能会很快下降。CC攻击利用了这个特点,模拟许多用户不间断的对服务器进行访问,而且CC攻击往往是攻击服务器上开销比较大的动态页面。这样的攻击方式有很强的隐蔽性,使得系统很难区分是正常的用户操作还是恶意的攻击。CC攻击和HTTPGET攻击的攻击方式差不多,唯一的区别在于CC攻击是利用了代理作为攻击的发起点,这一方面使得追查攻击源变得困难。而HTTPGET攻击则并没有使用代理的方式。另一方面CC攻击还利用了代理服务器的缓存特性,即当客户端断开连接得时候,代理服务器还能保持和服务器的一段时间的连接,这个特性可以保障CC攻击的发起者无需关心由服务器发回的响应,而继续保持对服务器的持续交互。CC攻击的这种特性更加严重损害了服务器的性能。因此,CC攻击对服务器性能所造成的损失将更为巨大,也更加难以防范。而当HTTPGET连接被断开之后,发起攻击的傀儡机也就不能再继续发送请求数据包了,这种情况下HTTPGET攻击就比CC攻击显得易于防范,其危害也相应的就显得较易控制。
五、应用层攻击与网络层攻击的差异
应用层DDoS攻击和传统的网络层DDoS攻击之间存在着较大的差别,很多网络层DDoS攻击的特性在应用层攻击中已经不复存在了,这两类攻击的具体差别体现在以下几个方面:
1.两者实现的层次不同
网络层DDoS攻击发生在低层,而应用层DDoS攻击利用了高层协议实现。网络层DDoS攻击的典型攻击方式是:攻击者使用虚假的IP地址来控制攻击节点,然后由被控制的攻击节点向目标主机发送大量的攻击数据包,这些数据包包括有UDP和ICMP等,同时这种攻击方式将会利用TCP协议三次握手机制的缺点,使得攻击目标在收到这些不存在的IP地址的连接请求之后,为了维护一个开销非常大的半开连接而需要消耗大量的CPU和内存资源,最终将导致无法再为用户提供服务。而应用层则DDoS则不然,以Web服务为例,基于Web的应用(如HTTP和HTTPS)通过开放的TCP端口为客户提供服务,应用层DDoS攻击利用了高层的协议,其攻击得以实现是以正常TCP连接和IP分组为前提,因此这就不具备传统DDoS攻击的行为特征(以TCP半开放连接最为显著),而且它无法采用虚假的IP地址(利用虚假的IP地址将无法建立合法和有效的TCP连接)的方法。因为基于网络层的检测系统很难对高层的行为进行判断,所以系统就无法判断经过这些端口的用户请求由正常用户还是攻击者发出的,因此针对高层协议的应用层DDoS攻击的请求可以顺利穿越基于底层协议的检测系统。
2.应用层DDoS有更多更复杂的形式以Web服务器为例,它可以提供诸如数据库查询、客户端服务端的交互等服务,所以攻击者通过大量傀儡机向攻击目标主机发送请求数据包的攻击方式并不是应用层DDoS攻击的主流攻击方式,相反,应用层DDoS攻击可以用低速率的请求、少量的攻击节点来实现攻击效果。从这点上来看,应用层的DDoS攻击远比网络层DDoS攻击来的复杂,它可以实现更多的功能。因此,应用层DDoS攻击可以产生更大的破坏力。这种以简单的HTTP请求就可以触发服务器执行一系列复杂操作的攻击方式是应用层DDoS和网络层DDoS攻击的差异之一。