作者:Lemon
本人近期一直在研究DDOS攻击,并通读了《破坏之王-DDOS攻击与防范》一书,书中对于DDOS的攻击方式与防范写的很详细,很推荐阅读,并针对本书中的DDOS攻击方式做了总结。
1、攻击网络宽带资源
1.1直接攻击
使用大量的受控主机向被攻击目标发送大量的网络数据包,以沾满被攻击目标的宽带,并消耗服务器和网络设备的网络数据处理能力,达到拒绝服务的目的。
直接攻击的主要方法有ICMP/IGMP洪水攻击和UDP洪水攻击两种。
-
1.1.1 ICMP/UDP洪水攻击
网络控制消息协议(ICMP)是TCP/IP协议族的核心协议之一,它用于在TCP/IP网络中发送控制消息,提供可能发生在通信环境的各种问题反馈,通过这些消息,管理者可以对所发生的问题做出诊断,然后采取适当的解决措施。
因特网组管理协议(IGMP)是用于管理因特网协议多播组成员的一种通信协议,IP主机和相邻的路由器利用IGMP来建立多播组的组成员。
攻击者使用受控主机向被攻击目标发送大量的ICMP/IGMP报文,进行洪水攻击以消耗目标的宽带资源,这种类型的攻击出现的很早,使用hping等工具就能简单的发起攻击。但现在使用这种方法发动的攻击已见不多,被攻击目标可以在其网络边界直接过滤并丢弃ICMP/IGMP数据包使攻击无效化。
-
1.1.2 UDP洪水攻击
用户数据包协议(UDP)是一种面向无连接的传输层协议,主要用户不要求分组顺序到达的传输,提供面向实事务的简单的不可靠信息传送服务。
利用UDP数据报文,攻击者也可以发送洪水攻击,UDP洪水攻击和ICMP/IGMP洪水攻击的原理基本相同,通常,攻击者会使用小包和大包两种方式进行攻击。
小包是指64字节大小的数据包,这是以太网上传输数据帧的最小值,在相同流量下,单包体积越小,数据包的数量就越多。由于交换机、路由器等网络设备需要对没一个数据包进行检查和校验,因此使用UDP小包攻击能够最有效的增大网络设备处理数据包的压力,造成处理速度的缓慢和传输延迟等拒绝服务攻击的效果。
大包是指1500字节以上的数据包,其大小超过了以太网的最大传输单元,使用UDP大包攻击,能够有效的占用网络接口的传输宽带,并迫使被攻击目标在接受到UDP数据时进行分片重组,造成网络拥堵,服务器响应速度变慢。
UDP洪水攻击也是很早就出现的一种拒绝服务攻击方式,这种攻击发动简单,有相当多的工具都能够发动UDP洪水攻击,如hping,LOIC等,但UDP洪水攻击完全依靠受控主机本身的网络性能,因此通常对目标宽带资源的消耗并不太大。https://www.secpulse.com/archives/64088.html
1.2发射和放大攻击
攻击者可以使用ICMP/IGMP洪水攻击和UDP洪水攻击等方式直接对被攻击目标展开消耗网络宽带资源的分布式拒绝服务攻击,但这种攻击方式不仅较低,还很容易被查到攻击的源头,虽然攻击者可以使用伪造源IP地址的方式进行隐藏,但更好的方式是使用反射攻击技术。
发射攻击又被称为DRDoS(分布式反射拒绝服务)攻击,是指利用路由器、服务器等设施对请求产生应答,从而反射攻击流量并隐藏攻击来源的一种分布式拒绝服务攻击技术。
在进行反射攻击时,攻击者使用受控主机发送大量的数据包,这些数据包的特别之处在于,其目的IP地址指向作为反射器的服务器、路由器等设施,而源IP地址则被伪造成被攻击目标的IP地址,反射器在收到数据包时,会认为该数据包是否被攻击目标所发来的请求,因此会将相应数据发送给被攻击目标,当大量的响应数据包涌向攻击目标时,就会耗尽目标的网络宽带资源,造成拒绝服务攻击。
发动反射攻击需要在互联网上找到大量的发射器,某些种类的反射攻击并不难实现,例如,对于ACK反射攻击,只需要找到互联网上开放的TCP端口的服务器即可,而这种服务器在互联网上的存在是非常广泛的。
发动反射攻击通常会使用无需认证或者握手的协议,反射攻击需要将请求数据的源IP地址伪造成被攻击目标的IP地址,如果使用的协议需要进行认证或者握手,则该认证或握手过程没有办法完成,也就不能进行下一步的攻击,因此,绝大多数的反射攻击都是使用基于UDP协议的网络服务进行的,
相比于直接伪造源地址的分布式拒绝服务攻击,反射攻击由于增加了一个反射步骤,因此更加难以追溯攻击来源,但是,这并不是反射攻击真正的威胁,真正的威胁在于利用反射原理进行的放大攻击。
放大攻击是一种特殊的反射攻击,其特殊之处在于反射器对于网络流量具有放大作用,因此我们也可以将这种反射器成为放大器,进行放大攻击的方式与反射攻击的方式也是基本一致的,不用之处在于反射器(放大器)所提供的网络服务需要满足一定条件。
在反射器所提供的网络服务协议中,需要存在请求和响应数据量不对称的情况,响应数据量需要大于请求数据量,响应数据量与请求数据量的比值越大,放大器的放大倍数也就越大,进行放大攻击所产生的消耗宽带资源的效果也就越明显。
放大器所使用网络服务部署的广泛性决定了该放大攻击的规模和严重程度,如果存在某些网络服务,不需要进行认证并且放大效果非常好,但是在互联网上部署的数量很少,那么利用该网络服务进行放大也不能达到很大的流量,达不到有效的消耗宽带资源的效果,这种网络服务也就不能作为主要的放大攻击流量,而只能作为辅助手段。
1.2.1 ACK反射攻击
我们知道,在传输控制协议建立连接时,首先会进行TCP三次握手,在这个工程中,当服务器端接收到客户端发来的SYN连接请求时,会对该请求进行ACK应答,利用TCP握手的ACK应答,即可进行ACK反射攻击。
如果攻击者将SYN的源IP地址伪造成被攻击目标的IP地址,服务器的应答也就会直接发送给被攻击目标,由于使用TCP协议的服务在互联网上广泛存在,攻击者可以通过受控主机向大量不同的服务器发送伪造源IP地址的SYN请求,从而使服务器响应的大量ACK应答数据涌向被攻击目标,占用目标的网络宽带资源并拒绝服务。
在发动ACK反射攻击时,首先需要进行扫描,获得大量的反射器地址,并分别向这些反射器发送伪造源地址的SYN请求数据,因此相比于直接攻击,这种方式显得复杂了一些,ACK反射攻击的优点主要在于其能够比较有效地隐藏攻击的来源。
1.2.2 DNS放大攻击
域名系统是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,而不用去记住那些难以记忆的IP地址,DNS使用的TCP与UDP端口号都是53,主要使用的UDP协议。
通常,DNS的相应数据包会比查询数据包大,因此攻击者利用普通的DNS查询请求就能够发动放大攻击,并将攻击流量放大2~10倍,但更有效的方法是使用RFC2671中定义的DNS扩展机制EDNS0。
****EDNS0
在没有EDNS0以前,对DNS查询的响应数据包被限制在512字节以内,当需要应答的数据包超过512字节时,根据DNS服务器实现的不同,可能会丢弃超过512字节的部分,也可能会使用TCP协议建立连接并重新发送,无论是哪站方式,都不利于进行DNS放大攻击。
在EDNS0中,扩展了DNS数据包的结果,增加了OPT RR字段,在OPT RR字段中,包含了客户端能够处理的最大UDP报文大小的信息,服务器在响应DNS请求时,解析并记录下客户端能够处理的最大UDP报文的大小,并根据该大小生成响应的报文。
攻击者能够利用dig和EDNS0进行高效的DNS放大攻击,攻击者向广泛存在的开放DNS解析器发送dig查询命令,将OPT RR字段中UDP报文大小设置为很大的值,并将请求的源IP地址伪造成被攻击目标的IP地址。DNS解析器收到查询请求后,会将解析的结果发送给被攻击目标,当大量的解析结果涌向目标时,就会导致目标网络拥堵和缓慢,造成拒绝服务攻击。
攻击者发送的DNS查询请求数据包大小一般为60字节左右,而查询返回结果的数据包大小通常为300字节以上,因此,使用该方式进行放大攻击能够达到50倍以上的放大效果,这种放大效应所产生的攻击效果是非常惊人的,只要攻击的发起端能够发出2Gbit/s的宽带,就能够在目标网络处产生 100Gbit/s的宽带消耗,在2013年3月在Spamhaus的分布式拒绝服务攻击中,主要就是用了DNS放大攻击技术,使得攻击流量达到了史无前例的300Gbit/s,设置拖慢了局部互联网的响应速度。
与ACK反射攻击类似,发动DNS放大攻击也需要先进行扫描,以获得大量的开放DNS解析器的地址,并向这些开放DNS解析器发送伪造源地址的查询命令来放大攻击流量。
1.2.3 NTP放大攻击
网络时间协议是用来使计算器时间同步化的一种协议,他可以使计算机与时钟源进行同步化并提供高精准度的时间校正,NTP使用UDP123端口进行通信。
在NTP协议的服务器实现上,通常会实现一系列Mode7的调试接口,而接口中的monlist请求能够获取到目标NTP服务器进行同步的最后600个客户端的IP地址等信息。这意味着,只需要发送一个很小的请求包,就能触发大量连续的包含IP地址信息等数据的UDP响应数据包。
实际上,monlist请求返回的数据量与一段时间内和NTP服务器交互的客户端数据量有关,由于NTP服务使用的是UDP单包通信,因此攻击者可以将伪造源IP地址的UDP请求包发送给NTP放大器,伪造客户端与NTP服务器的交互,增加“和NTP服务器交互的客户端的数量”,以此来增加monlist请求的响应数据量并增大NTP放大器的放大倍数,只要向NTP放大器发送600个不超过64字节的请求包(约40KB数据),就能够快速的将NTP放大器的放大倍数提高到700倍以上,并在该服务器的NTP服务关闭或重新启动之前一直保持这么大的放大倍数。
攻击者发送的monlist请求数据包大小不超过64字节,而请求返回的结果会包含100个482字节的UDP响应数据,因此使用该方式进行放大攻击能够达到700倍以上的放大效果。
与ACK反射攻击和DNS放大攻击类似,发动NTP放大攻击也需要先进行网络扫描,以获取大量的NTP服务器,并向这些NTP服务器发送伪造源地址的请求来放大攻击流量,相比于DNS放大攻击,NTP放大攻击的放大倍数更大,因此其危害也更加严重,在针对Spamhaus的大规模分布式拒绝服务攻击事件中,如果攻击者不使用DNS放大攻击而改用NTP放大攻击,那么攻击流量将会达到2Tbit/s以上。
1.2.4 SNMP放大攻击
简单网络管理协议是目前网络中应用最为广泛的网络管理协议,他提供了一个管理框架来监控和维护互联网的设备,SNMP协议使用UDP161端口进行通信。
利用SNMP协议中的默认通信字符串和GetBulk请求,攻击者能够开展有效的SNMP放大攻击。
由于SNMP的效果很好,网络硬件厂商开始把SNMP加入到它们制作的每一台设备,这导致各种网络设备上都可以看到默认启用的SNMP服务,从交换机到路由器,从防火墙到网络打印机,无一例外,同时,许多厂商安装的SNMP都采用了默认的通信字符串,这些通信字符串是程序获取设备信息和修改配置必不可少的,最常见的默认通信字符串是public和private,除此之外还有许多厂商私有的默认通信字符串,几乎所有运行SNMP的网络设备上,都可以找到某种形式的默认通信字符串。
在SNMPv1中定义的get请求可以尝试一次获取多个MIB对象,但相应消息的大小受到设备处理能力的限制,如果设备不能返回全部请求的响应,则会返回一条错误信息。在SNMPv2中,添加了getbulk请求,该请求会通知设备返回尽可能多的数据,这使得管理程序能够通过发送一次请求就获得大段的检索信息。
攻击者向广泛存在并开启了SNMP服务的网络设备发送getbulk请求,使用默认通信字符串作为认证凭据,并将源IP地址伪造成攻击目标的IP地址,设备收到getbulk请求后,会将响应结果发送给攻击目标,当大量的响应结果涌向攻击目标时,就会导致攻击目标网络拥堵和缓慢,造成拒绝服务攻击。
攻击者发送的getbulk请求数据包约为60字节,而请求的响应数据能够达到1500字节以上,因此,使用该方式进行放大攻击能够达到25倍以上的放大效果,这也是一种放大效应明显且有效的放大攻击方式。
在发动SNMP放大攻击时,同样需要先进行网络扫描以找到开放了SNMP协议的网络社保,虽然开放SNMP协议的网络设备很多,但是在扫描到这些设备之后还需要对他们所使用的默认字符串进行猜测,因此,相比DNS放大攻击,不论是简单度还是放大倍数的影响力,SNMP放大攻击都略逊一筹,不过从总体上来看,SNMP放大攻击依然是一种非常有效的消耗宽带资源的攻击方式。
1.3攻击链路
攻击链路与以前介绍的几种攻击方法有所不同,其攻击的目标并不是作为互联网断点的服务器的宽带资源,而是骨干网上的链路的宽带资源,对链路进行攻击的一种典型的方式是Coremelt攻击。
Coremelt是安全研究人员在2009年提出的一种针对链路的分布式拒绝服务攻击方法,攻击者需要控制一个分布足够广泛的僵尸网络来发动Coremelt攻击。
首先,攻击者通过traceroute等手段来判断各个僵尸主机和将要攻击的链路之间的位置关系,并根据结果将僵尸主机分为两个部分,然后,攻击者控制僵尸主机,使其与链路另一侧的每一台僵尸主机进行通信并收发大量数据,这样,大量的网络数据包就会经过骨干网上的被攻占链路,造成网络拥堵和延时。
从骨干网上来看,这些僵尸主机之间相互收发的数据包确实是真是存在的通信数据,没有办法将这些通信数据与真正的合法通信数据进行有效的区分,因此这种攻击方式更加难以防护和缓解。
2、攻击系统资源
误区:DDOS攻击都是消耗网络宽带资源的攻击。
很多时候,新闻报道中提到DDOS攻击,都会以“攻击流量达到*****”的语句来描述攻击的猛烈程度,这种以攻击流量的宽带作为DDOS攻击危害程度描述指标的说法,通常会让人们误以为DDOS攻击都是消耗网络宽带资源的攻击。
事实上,除了网络宽带资源,DDOS攻击还有消耗系统资源和应用资源的攻击方法,而攻击流量的大小只是决定攻击危害程度的一个方面,对于相同种类的攻击,通常攻击流量越大,其危害也越大,而如果在相同攻击流量的情况下,不同的攻击方法造成的危害和影响则不尽相同。
有时候,人们会错误的将SYN洪水攻击认为是消耗网络宽带资源的DDOS攻击,而事实上,这种攻击的主要危害在于耗尽系统链接表资源,相同攻击流量的SYN洪水攻击会比UDP洪水攻击的危害更大。
2.1 攻击TCP连接
TCP是一种面向连接的、可靠的、基于字节流的传输层通讯协议,不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层无法提供这样的流机制,在现实的互联网中,这种连接通常通过TCP协议来实现。
TCP连接包括三个阶段:连接创建,数据传送和连接终止,由于在协议的设计过程当中只专注于协议的可用性,而没有对协议的安全性进行比较周密和详细的考虑,因此TCP协议存在很多安全缺陷和安全性问题。
TCP连接的三个阶段都容易受到拒绝服务攻击的影响,我们会在这里对这些攻击手段分别进行介绍。
2.1.1 TCP连接洪水攻击
TCP连接洪水攻击是在连接创建阶段对TCP资源进行攻击的。
在三次握手进行的过程中,服务器会创建并保存TCP连接的信息,这个信息通常被保存在连接表结构中,但是,连接表的大小是有限的,一旦服务器接收到的连接数量超过了连接表能存储的数量,服务器就无法创建新的TCP连接了。
攻击者可以利用大量受控主机,通过快速建立大量恶意的TCP连接占满被攻击目标的连接表,使目标无法接受新的TCP连接请求,从而达到拒绝服务攻击的目的。
TCP连接洪水攻击是攻击TCP连接的最基本方法,当有大量的受控主机发起攻击时,其效果非常明显。
2.1.2 SYN洪水攻击
SYN洪水攻击是最经典的一种拒绝服务攻击方式,这种攻击方式在2000年以前就出现过,直到现在依然被攻击者大规模的广泛使用,近年来,SYN洪水攻击仍然占据全部分布式拒绝服务攻击的三分之一以上。
TCP半开连接:
在建立TCP连接的过程中,如果在服务器返回SYN+ACK报文后,客户端由于某种原因没有对其进行确认,这时服务器端就需要重传SYN+ACK报文,并等待客户端的确认报文直到TCP连接超时,这种等待客户确认的连接状态通常被称为半开连接
在连接超时之前,半开连接会一直保存在服务器的连接表中。
由于连接表的大小是有限的,如果在短时间内产生大量的半开连接,而这些连接又无法很快的结束,连接表就会很快被占满,导致新的连接TCP连接无法建立。
SYN洪水攻击就是攻击者利用受控主机发送大量的TCP SYN报文,使服务器打开大量的半开连接,占满服务器的连接表,从而影响正常用户与服务器建立会话,造成拒绝服务。
攻击者在发送TCP SYN报文时,可以在收到服务器返回的SYN+ACK报文后,跳过最后的ACK报文发送,使连接处于半开状态,但是这样会很明显的暴露出进行SYN洪水攻击的IP地址,同时相应报文会作为反射流量占用攻击者的宽带资源,所以更好的方式是攻击者将SYN报文的源IP地址随机伪造其他主机的IP地址或者不存在的IP地址,这样攻击目标将会应答发送给被伪造的IP地址,从而占用连接资源并隐藏攻击来源。
SYN洪水攻击发动简单,效果明显,有大量的攻击工具都能够发动这种攻击,至今依然是攻击者最爱好的攻击方法之一。
2.1.3 PSH+ACK洪水攻击
在TCP数据传输的过程中,可以通过设置PSH标志位来表示当前数据传输结束,需要服务端进行处理。
在正常的TCP传输过程当中,如果待发送的数据会清空发送缓冲区,那么操作系统的TCP/IP协议栈就会自动为该数据包设置PSH标志,同样,当服务端接收到一个设置了PSH+ACK标志的报文时,意味着当前数据传输已经结束,因此需要立即将这些数据投递交给服务进程并清空接收缓冲区,而无须等待判断是否还会有额外的数据到达。
由于带有PSH标志位的TCP数据包会强制要求接收端将接收缓冲区清空并将数据提交给应用服务进行处理,因此当攻击者利用受控主机向攻击目标发送大量的PSH+ACK数据包时,被攻击目标就会消耗大量的系统资源不断地进行接收缓冲区的清空处理,导致无法正常处理数据,从而造成拒绝服务。
单独使用PSH+ACK洪水攻击对服务器产生的影响并不十分明显,更有效的方式是SYN洪水攻击与ACK洪水攻击相结合,这样能够绕过一部分防护设备,增强攻击的效果。
2.1.4 RST洪水攻击
在TCP连接的终止阶段,通常是通过带有FIN标志报文的四次交互(TCP四次握手)来切断客户端与服务端的TCP连接,但是客户端或服务器其中之一出现异常状况,无法正常完成TCP四次握手以终止连接时,就会使用RST报文将连接强制中断。
TCP RST攻击:
在TCP连接中,RST表示复位,用来在异常时关闭连接,发送端在发送RST报文关闭连接时,不需要等待缓冲区中的数据报全部发送完毕,而会直接丢弃缓冲器的数据并发送RST报文,同样,接收端在收到RST报文后,也会清空缓冲区并关闭连接,并且不必发送ACK报文进行确认。
攻击者可以利用RST报文的这个特性,发送伪造的带有RST标志位的TCP报文,强制中断客户端与服务端的TCP连接,在伪造RST报文的过程中,服务端的IP地址和端口号是已知的,攻击者还需要设法获取客户端的IP地址和端口号,并且使RST报文的序列号处于服务器的接收窗口之内,如果攻击者和被攻击客户端或服务器处于同一内网,这些信息可以通过欺骗和嗅探等方式获取到。
TCP RST攻击的原理如图所示
很多情况下,攻击者不会与被攻击客户端或服务器处于同一内网,导致发动TCP RST攻击时难以获取端口和序列号,在这种情况下,攻击者可以利用大量的受控主机猜测端口和序列号,进行盲打,发送RST洪水攻击,只要在数量巨大的RST报文中有一条与攻击目标的端口号相同,并且序列号落在目标的接收窗口之中,就能够终端连接。
RST洪水攻击的原理如图所示
严格来说,TCP RST攻击和RST洪水攻击是针对用户的拒绝攻击方式,这种攻击通常被用来攻击在线游戏或比赛的用户,从而影响比赛的结果并获得一定的经济利益。
2.1.5 Sockstress攻击
Sockstress攻击是研究人员在2008年提出的一种攻击TCP连接的方法,与前面几种攻击方式不同的是,Sockstress攻击不需要在短时间内发送大量的攻击流量,因此不属于洪水攻击,而是一种慢速攻击。
在TCP传输数据时,并不是将数据直接递交给应用程序处理,而是先临时存储在接受缓冲区里,该接收缓冲区的大小是由TCP窗口表示的,如果TCP窗口大小为0,则表示接收缓冲区已被填满,发送端应该停止发送数据,知道接收端的窗口发生了更新,Sockstress攻击就是利用该原理长时间维持TCP连接,以达到拒绝服务攻击的目的。
Sockstress攻击首先会完成TCP三次握手以建立TCP连接,但是在三次握手的最后一次ACK应答中,攻击者将其TCP窗口大小设置为0,随后 进行一次数据请求,攻击目标在传输数据时,发现接收端的TCP窗口大小为0,就会停止传输数据,并发出TCP窗口探测包,询问攻击者其TCP窗口是否有更新,由于攻击者没有更改TCP窗口的大小,被攻击目标就会一直维持TCP连接等待数据发送,并不断进行窗口更新的探测,如果攻击者利用大量的受控主机进行Sockstress攻击,被攻击目标会一直维持大量的TCP连接并进行大量窗口更新探测,其TCP连接表会逐渐耗尽,无法连接新的连接而导致拒绝服务。
Sockstress攻击的原理如图所示
Sockstress攻击的另一种方式是将TCP窗口设置为一个非常小的值,例如4字节,这样攻击目标将不得不把需要发送的数据切分成大量4字节大小的分片,这会极大的消耗目标的内存和处理器资源,造成系统响应缓慢和拒绝服务。
2.2 攻击SSL连接
安全套接层是为网络通信提供安全及数据完整性的一种安全协议,SSL能够在传输层对网络连接进行加密,以防止传输的数据明文被监听和截获。
然而,SSL协议加密、解密和秘钥协商的过程中会消耗大量的系统资源,严重降低机器的性能,因此,通常只有在传输密码等机密信息时才使用SSL协议进行传输。
攻击者可以利用SSL协议消耗资源的特性进行拒绝服务攻击。
2.2.1 THC SSL DOS攻击
在进行SSL数据传输之前,通信双方首先要进行SSL握手,以协商加密算法交换加密秘钥,进行身份验证,通常情况下,这样的SSL握手过程只需要进行一次即可,但是在SSL协议中有一个Renegotiation选项,通过它可以进行秘钥的重新协商以建立新的秘钥。
THC SSL DOS攻击是安全研究人员在2011年提出的一种针对SSL的拒绝服务攻击方法,这种方法就是利用Renegotiation选项,造成被攻击目标资源耗尽,在进行SSL连接并握手之后,攻击者反复不断的进行秘钥重新协商过程,而秘钥重新协商过程需要服务器投入比客户端多15倍的CPU计算资源,攻击者只需要一台普通的台式机就能拖慢一台高性能服务器,而如果有大量主机同时进行攻击,则会使服务器忙于协商秘钥而完全停止响应。
THC SSL DOS攻击的原理如图所示
另外,即使服务器不支持Renegotiation,攻击者依然可以通过另行打开新的SSL连接的方式来制造类似的攻击效果。
2.2.2 SSL洪水攻击
在SSL握手的过程中,服务器会消耗较多的CPU计算资源进行加解密,并进行数据的有效性检验,对于客户端发过来的数据,服务器需要先花费大量的计算资源进行解密,之后才能对数据的有效性进行检验,重要的是,不论数据是否是有效的,服务器都必须先进行解密才能够做检查,攻击者可以利用这个特性进行SSL洪水攻击。
在进行洪水攻击时,一个要点是需要攻击者能够在客户端大量的发出攻击请求,这就需要客户端所进行的计算尽可能的少,对于SSL洪水攻击,比较好的方式是在数据传输之前,进行SSL握手的过程中发动攻击,攻击者并不需要完成SSL握手和秘钥交换,而只需要在这个过程中让服务器去解密和验证,就能够大量的消耗服务器的计算资源,因此,攻击者可以非常容易的构造秘钥交换过程中的请求数据,达到减少客户端计算量的目的。
SSL洪水攻击的原理如图所示
攻击者可以使用SSL Squeeze等工具来发动SSL洪水攻击。
3.攻击应用资源
近年来,消耗应用资源的分布式拒绝服务攻击正逐渐成为拒绝服务攻击的主要手段之一,而由于DNS和Web服务的广泛性和重要性,这两种服务也就成为了消耗应用资源的分布式拒绝服务攻击的最主要的攻击目标。
3.1 攻击DNS服务
DNS服务是互联网的一项核心服务,通过使用DNS,人们在访问网络时不需要记住其IP地址,而只需输入其域名即可,在IPv6网络环境下,由于IP地址由原来的32位扩展到了128位,变得更加难以记忆,DNS服务也就变得更加重要,当DNS服务的可用性收到威胁时,互联网上的大量设备都会受到影响甚至无法正常运行,历史上曾有多次针对DNS的攻击事件,都造成了较大影响。
针对DNS服务的攻击方法主要有DNS QUERY洪水攻击和DNS NXDOMAIN洪水攻击两种
3.1.1 DNS QUERY洪水攻击
DNS查询和解析过程:
当客户端向DNS服务器查询某域名时,DNS服务器会首先检查其本地缓存中是否有该域名的记录,如果缓存中有该域名的记录(即命中),则直接讲缓存中记录的IP地址作为非权威应答返回给客户端,如果在缓存中没有找到该域名的记录,则会进行迭代查询,从根域名开始,逐级进行域名解析,直到解析出完整的域名,之后服务器会将域名解析结果作为应答发送给客户端,并生成一条解析记录保存到缓存中。
DNS查询和解析过程如图所示:
在DNS解析的过程中,客户端发起一次查询请求,DNS服务器可能需要进行额外的多次查询才能完成解析的过程并给出应答,在这个过程中会消耗一定的计算和网络资源,如果攻击者利用大量受控主机不断发送不同域名的解析请求,那么DNS服务器的缓存会被不断刷新,而大量解析请求不能命中缓存又导致DNS服务器必须消耗额外的资源进行迭代查询,这会极大的增加DNS服务器的资源消耗,导致DNS响应缓慢甚至完全拒绝服务。
DNS QUERY洪水攻击的原理如图所示
进行DNS QUERY洪水攻击的要点在于每一个DNS解析要求所查询的域名应是不同的,这样可以比较有效的避开NDS服务器缓存中的解析记录,达到更好的资源消耗效果。
3.1.2 DNS NXDOMAIN洪水攻击
DNS NXDOMAIN洪水攻击是DNS QUERY洪水攻击的一个变种攻击方式,区别在于后者是向DNS服务器查询一个真实存在的域名,而前者是向DNS服务器查询一个不存在的域名。
在进行DNS NXDOMAIN洪水攻击时,DNS服务器会进行多次域名查询,同时,其缓存会被大量NXDOMAIN记录所填满,导致响应正常用户的DNS解析请求的速度变慢,这与DNS QUERY洪水攻击所达到的效果类似,除此之外,一部分DNS服务器在获取不到域名的解析结果时,还会再次进行递归查询,向其上一级的DNS服务器发送解析请求并等待应答,这进一步增加了DNS服务器的资源消耗,因此,DNS NXDOMAIN洪水攻击通常比DNS QUERY洪水攻击的效果更好。
DNS NXDOMAIN洪水攻击 的原理如果所示
3.2 攻击web服务
近年来,web技术发展非常迅速,人们可以通过浏览器使用web服务,简单方便的获取需要的信息,而许多机构和企业的重要信息和关键业务也是通过web服务的方式对外提供,一旦web服务受到解决服务攻击,就会对其承载的业务造成致命的影响。
3.2.1 HTTP洪水攻击
Web服务通常使用超文本传输协议进行请求和响应数据的传输。
常见的HTTP请求有GET请求和POST请求两种,通常GET请求用于从wen服务器获取数据和资源,例如请求页面、获取图片和文档等;POST请求用于向web服务器提交数据和资源,例如发送用户名/密码、上传文件等。在处理这些HTTP请求的过程中,web服务器通常需要解析请求、处理和执行服务端脚本、验证用户权限并多次访问数据库,这会消耗大量的计算资源和IO访问资源。
如果攻击者利用大量的受控主机不断的向web服务器发送恶意大量HTTP请求,要求web服务器处理,就会完全占用服务器的资源,造成其他正常用户的web访问请求处理缓慢设置得不到处理,导致拒绝服务,这就是HTTP洪水攻击。
由于HTTP协议是基于TCP协议的,需要完成三次握手建立TCP连接才能开始HTTP通信,因此进行HTTP洪水攻击时无法使用伪造源IP地址的方式发动攻击,这时,攻击者通常会使用HTTP代理服务器,HTTP代理服务器在互联网上广泛存在,通过使用HTTP代理服务器,不仅可以隐藏来源以避免被追查,还能够提高攻击的效率--攻击者连接代理服务器并发送完成请求后,可以直接切断与该代理服务器的连接并开始连接下一个代理服务器,这时代理服务器与目标web服务器的HTTP连接依然保持,web服务器需要继续接收数据并处理HTTP请求。
HTTP洪水攻击的原理如图所示
与DNS服务类似,web服务也存在缓存机制,如果攻击者的大量请求都命中了服务器缓存,那么这种攻击的主要作用仅体现咋消耗网络宽带资源上,对于计算和IO资源的消耗是非常有限的,因此,高效的HTTP洪水攻击应不断发出针对不同资源和页面的HTTP请求,并尽可能请求无法被缓存的资源,从而加重服务器的负担,增强攻击效果。
此外,如果web服务器支持HTTPS,那么进行HTTPS洪水攻击是更为有效的一种攻击方式,一方面,在进行HTTPS通信时,web服务器需要消耗更多的资源用来进行认证和加解密,另一方面,一部分的防护设备无法对HTTPS通信数据流进行处理,也会导致攻击流量绕过防护设备,直接对web服务器造成攻击。
HTTP洪水攻击是目标对web服务威胁最大的攻击之一,有大量的攻击工具支持HTTP洪水攻击,发动简单其效果明显,已经成为攻击者使用的主要攻击方式之一。
3.2.2 Slowloris攻击
Slowloris攻击是一种针对web服务器的慢速HTTP攻击,由安全研究人员在2009年提出。
在HTTP协议中规定,HTTP头部以连续的“ ”作为结束标志,许多web服务器在处理http请求的头部信息时,会等待头部传输结束后再进行处理,因此,如果web服务器没有接受到连续的“ ”,就会一直接受数据并保持与客户端的连接,利用这个特性,攻击者能够长时间与web服务器保持联系,并逐渐耗尽web服务器的连接资源。
攻击者在发送HTTP GET请求时,缓慢的发送无用的header字段,并且一直不发送“ ”结束标志,这样就能够长时间占用与web服务器的连接并保证该连接不被超时中断,然而,web服务器能够处理的并发连接数是有限的,如果攻击者利用大量的受控主机发送这种不完整的HTTP GET请求并持续占用这些连接,就会耗尽web服务器的连接资源,导致其他用户的http 请求无法被处理,造成拒绝服务。
Slowloris攻击原理如图所示
攻击者使用Slowloris、slowhttptest等工具就可以简单的发动Slowloris攻击。在Slowloris攻击方法出现以后,IIS、nignx等一部分web服务器软件针对该攻击方法进行了修改,但是Apache.dhttpd等web服务器软件依然会受到Slowloris攻击的影响。
3.2.3 慢速POST请求攻击
慢速POST请求攻击也是一种针对web服务器的慢速http攻击,由安全研究人员在2010年提出,与Slowloris攻击不同的是,慢速POST请求攻击利用缓慢发送HTTP BODY的方式达到占用并耗尽web服务器连接资源的目的。
在HTTP头部信息中,可以使用Content-Length字段来指定HTTP消息实体的传输长度,当web服务器接收到的请求头部中含有Content-Length字段时,服务器会将该字段的值作为 HTTP BODY的长度,持续接收数据并在达到Content-Length值时对HTTP BODY的数据内容进行处理,利用这个特性,攻击者能够长时间与web服务器保持连接,并逐渐耗尽web服务器的连接资源。
攻击者在发送HTTP POST请求时,在请求头部中将Content-Length设置为一个很大的值,并将HTTP BODY以非常缓慢的速度一个字节一个字节的向web服务器发送,这样,web服务器就需要一直维持与客户端的连接并等待数据传输结束,由于Content-Length被设置成了很大的值,而HTTP BODY的传输速度又非常缓慢,攻击者就可以长时间占用这个连接,通过间断性的发送单字节的HTTP BODY内容,攻击者就能够确保连接不因超时而导致中断,如果攻击者利用大量的受控主机发送这种缓慢的HTTP POST请求并持续占用这些连接,就会耗尽web服务器的连接资源,导致其他用户的HTTP请求无法被处理,造成拒绝服务。
慢速POST请求攻击原理如图:
攻击者可以使用Slowhttptest等攻击发动慢速POST请求攻击,与Slowloris攻击有所不同,由于HTTP协议设计上的原因,所有的web服务器软件都会受到慢速POST请求攻击的影响。
3.2.4 数据处理过程攻击
web服务器在收到HTTP请求之后,需要检查并处理其中的数据,通过恶意构造请求数据的内容,攻击者可以显著的增加数据处理过程中的资源消耗,造成拒绝服务攻击。
这里已正则表达式拒绝服务攻击和哈希冲突拒绝服务攻击为例进行说明。
正则表达式拒绝服务攻击又被称为ReDoS,是安全研究人员在2009年发现的一种拒绝服务攻击方法,在处理请求数据时,web应用通常会使用正则表达式进行字符的匹配操作,一部分正则表达式引擎会使用一种被称为非确定性有限状态自动机的实现方式,以便能够处理复杂的正则表达式,例如包含了向后引用或者捕获括号的正则表达式。然而,这种正则引擎的实现方式也导致了其处理时间增加,尤其是在确定“否定匹配”时,正则引擎需要对所有可能的匹配路径全部进行测试,如果位于web应用中的正则表达式写的不好,需要测试的匹配路径数量会随着输入字符串的长度呈指数级增长,利用恶意构造的输入字符串,攻击者只需要提交相对较短的输入字符串,就可以强制正则引擎处理数亿个匹配路径,所需时间可以达到几个小时甚至几天,只需要几个这种类似的恶意正则表达式匹配请求,就能够完全占用web服务器的计算资源,造成web服务器拒绝服务。
哈希冲突拒绝服务攻击是安全研究人员在2011年提出的一种拒绝服务攻击方法,web应用在处理请求中的POST数据时,通常使用键-值对的方式来进行存储,在PHP、Python、Java等语言中,键-值对的实质是一个哈希表,web应用程序通过计算“键”的哈希来获取其所对应的的“值”。正常情况下,这个哈希表的哈希冲突较少,因此进行查找和插入的速度很快,正常状态下的哈希表如图所示。
如果攻击者构造一组恶意的POST数据,使得请求中的“键”的哈希值全部相同,那么保存POST数据的哈希表就会因此退化成为链表 ,对哈希表的查找和插入等操作规则变成了对链表的遍历操作,造成大量的计算资源被占用,导致拒绝服务攻击。如图所示为大量冲突状态下的哈希表。(本文属于安全脉搏原创现金奖励计划,未经允许,严禁转载。https://www.secpulse.com/archives/64088.html)