DDoS攻击方法简介

一、攻击网络带宽资源

我们可以采用对目标的网络带宽资源进行攻击,目的就是浪费对方有限的网络带宽资源,使得目标服务出现网络滞缓直至网络带宽资源匮乏,无法访问或访问速度慢。

1、直接攻击

直接攻击,使用大量的受控主机直接向被攻击目标发送大量的网络数据包,占用目标的网络带宽,并消耗服务器和网络设备的数据处理能力,达到拒绝服务攻击的目的。【洪水攻击和人海战术可以一样的理解】

直接攻击方法:主要有 ICMP/IGMP洪水攻击和UDP洪水攻击两种。

1)ICMP/IGMP洪水攻击

  • 网络控制消息协议(ICMP)是TCP/IP协议级当中核心之一,用于在网络中发送控制消息,提供可能发生在通信环境中的各种问题反馈。
  • ​ 因特网组管理协议(IGMP)是用于管理因特网协议多播组成员的一种通信协议。

攻击者使用受控主机向目标发送大量的ICMP或IGMP报文,进行洪水攻击以消耗目标的网络带宽资源。在早期使用cmd中的ping命令就可以ping目标主机发送大量的ICMP数据包,当数据包的大小超过了目标网络带宽的极限(当时都是百兆网卡)时候,就会造成目标的网络卡顿(ping素有死亡之ping的雅称);当然这种攻击已经几乎无效,因为目标可以直接过滤掉无效的数据包,使之攻击无效。

2)UDP洪水攻击

用户数据包协议,是一种面向无连接的不可靠的传输层协议,主要用于不要求分组到达目标的传输(内容较小的传输任务)

  • ​ 利用UDP数据包发出的洪水攻击,与ICMP/IGMP的洪水攻击的原理机制差不多,在UDP方面通常选择小包或大包方式攻击目标。
  • ​ 小包指的是 64 字节的数据包,这也是以太网上传输的数据帧的最小值。在相同的流量下,包体积越小,数据包的数量就越多;而由于交换机、路由器等网络设备需要对每个数据包进行校验,因此使用UDP小包攻击能够最大程度的增大网络设备处理数据包的压力,造成处理速度缓慢和传输延迟等攻击效果。
  • ​ 打包指的是1500字节以上的数据包,其大小超过了以太网的最大传输单元。使用大包攻击,可以最大程度的占用网络传输的数据带宽,迫使目标在接收数据不得不进行分片重组,以此造成网络拥堵,服务响应缓慢的目的。

2、反射和放大攻击

使用ICMP和UDP等洪水攻击方式直接对目标展开网络带宽资源的消耗攻击,这种攻击方法的局限性非常的大,而且很容易找到源头,即使伪造了自己的IP位置。

反射攻击(DRDoS),利用路由器、服务器等设备对请求发出应答,从而反射攻击流量并隐藏攻击来源的一种方法。

1)反射攻击

反射攻击时,攻击者使用受控主机发送大量的数据包,这些数据包的特别之处在于:其目的IP地址指向的是作为反射器的网络设施,而源IP地址则被伪造成被攻击目标的IP地址。反射器在收到数据包是,会认为该数据包是由目标所发出的请求,因此会将响应的数据发送给目标,当大量的响应数据包涌向同一个目标时,就会消耗目标的网络带宽资源,以此造成DDoS攻击的目的。

  • ​ 该攻击方法需要在互联网上寻找大量的“反射器”,某些种类的反射攻击不难实现,对于ACK的反射攻击,只需要在互联网上找到开放TCP端口的服务器即可。
  • ​ 反射攻击是无证(不握手)的,所以如果有认证或握手的化,就无法实现下一步;故此反射攻击是建立在UDP协议的网络之上而进行的。
  • ​ 放大攻击是一种特殊的反射攻击,特殊之处在于反射器对于网络流量具有放大作用,因此可以这种反射器成为放大器。

2)ACK反射攻击

TCP连接时候,需要三次握手(SYN—ACK,SYN——ACK),在这个连接的过程中服务端接收客户端发来的SYN连接请求,会对请求进行ACK应答;攻击者就可以利用三次握手时的ACK应答的机制,进行ACK反射攻击。

​ 攻击者将SYN请求的源IP地址伪造成攻击目标的IP地址,服务器在建立TCP连接时的ACK应答数据包,就会根据SYN请求包中的IP地址发送ACK数据包,而ACK数据包就会发给目标主机;当大量的ACK数据包返回到伪造的IP(即目标主机IP)之后,就会造成目标的网络带宽拥堵;攻击实施时,网络扫描大量的反射器地址,然后向这些地址发送伪造后的源IP的SYN请求包。

3)DNS放大攻击

DNS域名系统;作为将域名和IP地址相互映射的一个分布式数据库,主要使用的是UDP协议。通常,DNS响应数据包会比查询数据包大,因此攻击者可以利用普通的DNS查询请求发起一个反射放大(多倍)攻击。更有效方法是使用RFC 2671中定义的DNS扩展机制EDNS0;

​ 攻击者可以利用dig和EDNS0进行高效的DNS放大攻击;攻击者向开放的DNS解析器发送dig查询命令,将OPT RR字段中的UDP报文大小设置为大值4096,并将源IP地址伪造成目标的IP地址,DNS解析器收到查询请求后就会将解析的结果发送给攻击目标IP。

4)NTP放大攻击

  • 网络时间协议NTP,是用来使计算机时间同步化的一种协议,他可以使计算机与时钟源进行同步化并提高精确度的时间校正,NTP使用UDP-123端口进行通信。
  • ​ 在NTP协议的服务器上,通常会实现一系列的Mode 7的调试接口,而接口中的monlist请求能够获取到与目标NTP服务器进行同步的最后600个客户端的IP地址等通信。这意味着,只需要发送一个很小的请求包,就能够触发大量连续的包含IP地址信息等数据的UDP响应数据包。
  • ​ 与ACK反射攻击和DNS放大攻击的机制类似,发送NTP放大攻击也需要进行实现的网络扫描,获得大量的NTP服务器。

5)SNMP放大攻击

  • 简单网络管理协议SNMP,是目前最广泛的网络管理协议,SNMP使用UDP 161端口进行通讯;利用SNMP协议中默认的通讯字符串和GetBulk请求,攻击者能够进行SNMP放大攻击。
  • 由于SNMP服务效果好,所以SNMP协议几乎写入了每一台网络设备中,各种设备都是默认的开启了SNMP服务;同时SNMP都采用了默认的通讯字符串,这些通讯字符串是程序获取设备信息和修改配置必不可少的,最常见的默认通讯字符串是public和private,除此之外还有很多厂商私有的默认通讯字符串。
  • ​ 在SNMP中定义的get请求可以尝试以此获取多个MIB对象,但响应消息的大小收到设备处理能力的限制,如果设备不能返回全部请求的响应,则会返回一条错误信息。后来添加了getbulk请求,该请求会通知设备返回尽可能多的数据,这使得管理程序能够通过发送一次请求就获得大段的检索信息。
  • ​ 攻击者向开启SNMP服务的王阿罗设备发送getbulk请求,使用默认通信字符串作为认证凭据,并将源IP为伪装为目标的IP地址;设备接收到getbulk请求后,会将响应数据包结果发给经伪装的源IP地址(即目标IP地址)

6)攻击链路

攻击链路与直接攻击方式和反射/放大攻击方式有所不同;其攻击的目标不是端到端的带宽资源,而是骨干网上的链路的带宽资源。

Coremelt是一种正对链路的分布式拒绝服务的攻击方式,攻击者需要控制一个分布足够广泛的僵尸网络来发送Coremelt攻击。

二、攻击系统资源

在很多时候都会误以为DDoS攻击都是消耗网络带宽资源的攻击,但是除此之外,DDoS也有消耗系统资源的攻击方式。

1、攻击TCP连接

TCP是一种面向连接、可靠的、基于字节流的传输层协议,不同的主机应用层之间需要可靠的端到端的连接,但是IP层无法提供这样的流机制,在现实中都是依靠TCP协议来实现。

​ TCP的连接过程俗称为“三次握手”,在三次握手的阶段都是很容易受到DDoS攻击的。

1)TCP连接洪水攻击

TCP洪水攻击是在“建立连接”阶段对TCP资源进行攻击的。

  • ​ 在三次握手进行的过程中,服务器会创建并保存TCP连接的信息,但这个信息通常会被保存在连接表的结构中;但是连接表的大小是有限的,一旦服务器接收到的连接数量超过了连接表存储的数量时,服务器就无法创建新的TCP连接了。
  • ​ 攻击者可以利用大量的受控主机,向目标主机建立TCP连接,占满目标主机的连接表使得目标主机无法接收新的TCP连接。

2)SYN洪水攻击

SYN洪水攻击是最经典的一种DDoS攻击方式,这种攻击(SYN洪水攻击)方式是主要的DDoS攻击方式之一。

​ TCP半开连接:

  • ​ 在建立TCP连接过程中,服务器返回了响应的SYN+ACK报文后,如果客户端没有对其进行确认,服务器就会重传SYN+ACK报文并等待客户端的确认,由此就会形成TCP的半开状态,在半开状态下,如果一直维持半开连接就会一直保存在服务器的连接表中。
  • ​ 由于连接表的大小是有限的,如果在短时间内产生大量的半开连接,而连接又是没有意义的连接,就会大量的占满连接表的空间。
  • ​ 受控主机系向目标发送大量的SYN报文,跳过最后的ACK报文发送,使得连接处于半开状态;但由此hi很容易的暴露受控主机的IP地址,同时响应报文会作为反射流量占用攻击者的带宽资源;所以更有力的方法就是:攻击者将SYN报文的源IP地址伪造成其他主机的IP地址或者不存在的IP地址,这样使得目标会将响应报文发送给伪造的IP地址,从而占用连接i帧元并隐藏攻击源。

3)PSH+ACK洪水攻击

TCP数据传输过程中,可以通过设置PSH标志位来表示当前数据传输结束,需要服务端进行处理。

  • ​ 在正常的TCP传输过程中,如果待发送的数据会清空发送缓冲区,那么操作系统的TCP/IP协议栈就会自动为该TCP数据包设置PSH标志,同样当服务端接收到一个设置了PSH+ACK标志的报文时,意味着当前数据传输已经结束,因此需要立即将这些数据递交给服务进程并清空接收缓冲区,而无需等待判断是否会有额外的数据。
  • ​ 由于带有PSH标志的TCP数据包会强制要求接收端将接收缓冲区清空并将数据提交给应用服务进行处理,因此当攻击者利用受控主机向目标发送大量的PSH+ACK报文数据包的时候,目标就会消耗大量的系统资源不断的进行接收缓冲区的清空处理,导致无法正常处理数据,从而造成DDoS。
  • ​ 单独使用PSH+ACK洪水攻击的作用不会太明显,更有效的方式是SYN洪水攻击与ACK攻击方式相结合,这样可以绕过一部分防护设备,增强攻击的效果。

4)RST洪水攻击

TCP断开时,通常会有带有FIN标志报文的四次交互(四次挥手)来断TCP的连接,但若是客户端或服务端出现异常,则无法正常的完成四次挥手终止连接,就会使用RST报文将连接强制终止。

RST表示复位,用来在异常的时候关闭连接,发送端发送RST报文关闭连接时,不需要等待缓冲区中的数据报全部发送完毕,而会直接丢弃缓冲区中的数据包并发送RST报文;同样接收端在接收到RST报文后也就会清空缓冲区关闭两者之间的TCP连接。

攻击这可以利用RST报文的这个特性,发送伪造的带有RST标志的TCP报文,强制中断客户端与服务端的TCP连接;在伪造RST报文的过程中服务器的IP地址和端口号是已知的,攻击者还需要设法获得客户端的IP地址和端口号,并且使得RST报文的序列号处于服务器的接收窗口内。【如果攻击者和目标处于同一内网下,可以通过ARP欺骗或这网路嗅探获得】

在不知道客户端的IP和端口情况下,常常采用“盲打”的猜解策略,只要巨大数据量的中的一条RST报文可以和客户端的ip和端口匹配上,就能够中断连接。

​ 通常这种强制截断TCP连接的DDoS攻击方法,往往是针对在线用户的游戏、视频服务。

5)Sockstress攻击

Sockstress攻击不属于洪水攻击,而是一种慢速攻击方法。

  • ​ 在TCP连接时,并不是将数据直接递交给应用程序处理,而是先临时存储在接收缓冲区中,该接收缓冲区的大小是由TCP窗口表示的;如果TCP窗口大小为0,则表示接收缓冲区已经被填满,发送端应该停止发送数据,知道接收端的窗口发送了更新。Sockstress攻击就是利用该原理长时间的维持TCP连接,完成DDoS的目的。
  • ​ 首先完成TCP连接,但是在第三次握手的ACK应答中,攻击者将TCP窗口设置为0 ,随后进行以此数据请求;攻击目标在传输数据时候,发现TCP窗口为0,就会停止传输数据,并发出TCP窗口探测包,询问攻击者TCP窗口的更新,如果窗口没有更新就会一直维持这TCP连接的状态,一直等待数据的发送并不断的发送TCP窗口探测包。由此攻击者利用大量的受控主机,目标就会一直维持TCP连接的状态并一直收到窗口更新的探测数据,TCP连接表就会每逐渐被消耗。
  • ​ Sockstress的另一攻击方法就是将TCP窗口设置为一个 非常小的字节值,这样攻击目标就不得不吧需要发送的数据切分成大量的*字节数据大小分片,将会极大的消耗目标的内存和处理器资源,使得服务缓慢。

2、攻击SSL连接

安全套接层(SSL)是为了网络通信提供安全及数据完整性的一种安全协议;SSL能够在传输层对网络进行加密,以防止传输的数据明文被监听和截获。

​然而,SSL协议在加密、解密和秘钥协商的过程中会消耗大量的系统资源,严重降低机器的性能,通常只在传输加密机制内容信息的时候才会使用SSL协议进行传输。

​在SSL协议秘钥协商过程中,客户端与服务器端消耗的CPU计算资源因为秘钥的算法不同消耗的资源不同。例如使用RSA系列的公钥密码算法,那么服务器端索要消耗的资源就要比客户端多;在极端的情况下,使用RSA 4096进行加密解密,服务器端需要花费相当于客户端资源的25倍才能完成计算。由此,攻击者可以利用SSL协议消耗资源的特性进行DDoS攻击。

1)THC SSL DoS攻击

在进行SSL数据传输之前,通信双方首先要进行SSL握手,以协商加密的算法交换加密秘钥,进行身份认证;通常情况下这样的SSL握手过程只需进行一次即可,但是在SSL协议中只有Renegotiation选项,通过它可以进行秘钥的重新协商以建立新的秘钥。

​利用Renrgotiation选项,造成目标的资源耗尽;在进行SSL连接握手之后,攻击者反复不断的进行秘钥重新协商过程,而秘钥重新协商过程需要服务器投入比客户端多15倍的CPU计算资源;攻击者只需要一台普通的台式机就可以拖慢一台高性能的服务器,而如果有大量的主机同时攻击,则会使服务器忙与协商秘钥而完全停止响应。

2)SSL洪水攻击

在SSL握手的过程中,服务器会消耗较多的CPU计算资源进行加解密,并进行数据的有效性校验;对于客户端发过来的数据,服务器端需要花费大量的计算资源进行加解密,之后才能对数据的有效性进行校验;重要的是不论数据是否有效,服务器都必须先进行解密才能够做检查;由此攻击者可以利用这个特性来进行SSL洪水攻击。

​SSL洪水攻击,一个要点是需要攻击者能够在客户端大量的发出攻击请求,这就需要客户端所进行的计算尽可能的少;对于SSL洪水攻击,比较好的方式是在数据传输之前进行SSL握手的过程中发动攻击;攻击者并不需要完成SSL握手和秘钥交换,而只需要在这个过程中让服务器去解密和验证,就能够大量的消耗服务器端的计算资源,因此,攻击这可以非常的容易的构造秘钥交换过重的请求数据,达到减少客户端的计算量的目的。

​攻击者可以使用SSLSqueeze等工具发动SSL洪水攻击。

三、攻击应用资源

1、攻击DNS服务

DNS服务是互联网的一项核心服务;通过使用DNS,人们在访问网站时不需要记忆其IP地址,而只需输入域名则可以访问。针对DNS服务的攻击方法主要有DNS QUERY洪水攻击和DNS NXDOMAIN洪水攻击两种方式。

1)DNS QUERY洪水攻击

  • DNS QUERY洪水攻击是指向DNS服务器发送大量查询请求以达到拒绝服务的效果。
  • ​在DNS解析的过程中,客户端发起一次查询请求,DNS服务器可能需要进行额外的多次查询才可以完成解析的过程并给出应答,在这个过程中会消耗一定的计算和网络资源;如果攻击者利用大量的受控主机不断发送不同域名的解析请求,那么DNS服务器的缓冲会被不断刷新,而大量的解析请求不能命中缓冲又导致DNS服务器必须消耗额外的资源进行迭代查询,这会极大地增加DNS服务器的资源消耗,导致DNS响应缓慢甚至完全拒绝服务。
  • ​DNS QUERY洪水攻击的要点在于每一个DNS解析请求所查询的域名应是不同的,这样可能比较有效的避开DNS解析的记录,更加有效的消耗资源。

2)DNS NXDOMAIN洪水攻击

  • DNS NXDOMAIN洪水攻击是DNS QUERY洪水攻击的变种攻击方式,区别在于后者是向DNS服务器查询一个真实存在的域名,而前者是向DNS服务器查询的一个不存在的域名。
  • ​在进行DNS NXDOMAIN洪水攻击是,DNS服务器会进行多次域名查询,同时,其缓存会被大量的NXDOMAIN记录所填满,导致响应正常用户的DNS解析请求的速度边慢;这与DNS QUERY方式所达到的效果类似。除此之外,一部分DNS服务器在获取不到域名的解析结果时,还会再次进行递归查询,向上一级的DNS服务器发送解析请求并不等待应答,这进一步增加了DNS服务器的资源消耗。

2、攻击Web服务

1)HTTP洪水攻击

Web服务通常使用HTTP协议进行请求和响应数据的传输。

  • ​常见的HTTP请求有GET请求和POST请求两种;通常GET请求用于从Web服务器获取数据和资源;POST请求用于向Web服务器提交数据和资源。处理这些HTTP请求的过程中,Web服务器通常需要解析请求、处理和执行服务端脚本、验证用户权限并多次访问数据库,这回消耗大量的计算资源和IO访问资源。
  • ​由于HTTP协议是基于TCP协议的,需要完成三次握手建立TCP连接才能开始HTTP通信,因此HTTP洪水攻击时无法使用伪造源IP地址来攻击;攻击者一般都会采用HTTP代理服务器来进行攻击。
  • ​与DNS服务类似,Web服务也存在缓存机制;如果攻击者的大量请求都命中了服务器缓存,那么这种攻击主要作用就会体现在消耗目标网络带宽资源上,对于计算机和IO资源的消耗是非常有限的;因此,高效的HTTP洪水攻击应不断发出针对不同资源和页面的HTTP请求,并尽可能请求无法被缓存的资源,从而加重服务器的负担。
  • ​此外,如果服务器端还支持HTTPS服务,那么HTTPS洪水攻击更是一种有效的攻击方法,因为HTTPS在处理HTTP数据之上还需要调用资源对请求进行解密操作;故此会导致过大的服务负担。

2)Slowloris攻击

Slowloris攻击是一种针对Web服务器的慢速HTTP攻击。在HTTP协议中规定:以连续的“rnrn”作为结束标志;许多服务器在处理HTTP服务请求的时候,会等待头部传输结束后在进行处理。因此,如果Web服务器没有接收到连续的“rnrn”结束标志,就会一直接收数据并保持与客户端的额连接,利用该特性就可让受控主机长时间的的与Web服务器保持连接,并逐渐的消耗服务器的连接资源。

​攻击者在发送HTTP GET请求时,缓慢的发送无用的header字段,并且一直不发送结束标志,如此以来就可以长时间的占用与Web服务器的连接并保持该链接不被超时原因而中断。然而Web服务器的并发连接数量是有限的,如果攻击者利用大量的受控主机发送不完整的HTTP GET请求并长时间的占用连接资源,就会拖垮Web服务器。

3)慢速POST请求攻击

慢速POST请求攻击,是一种针对Web服务器的慢速HTTP攻击,与Slowloris不同的是,慢速POST请求攻击利用缓慢发送HTTP BODY的方式占用并耗尽Web服务器的连接资源。

​在HTTP头信息中,可以使用COnternt-Length字段时,服务器会将该字段的值作为HTTP BODY的长度;当Web服务器接收到含有Content-Lengthde的头部信息的时候会对HTTP BODY的数据内容进行处理。利用这个特性我们可以是攻击者长时间的与Web服务器保持连接,并逐渐耗尽Web服务器的连接资源。

4)数据处理过程攻击

Web服务器端接收到HTTP请求后,需要检查并处理其中的数据,通过恶意构造请求数据的内容,攻击者可以显著的增加数据处理过程中的资源消耗。

四、混合攻击(归类)

攻击协议层网络层攻击传输层攻击应用层攻击
洪水攻击方法ICMP/IGMP洪水攻击UDP洪水攻击
TCP洪水攻击
SYN洪水攻击
PSH+ACK洪水攻击
ACK反射攻击
RST洪水攻击
SSL洪水攻击
DNS QUERY洪水攻击
DNS NXDOMAIN洪水攻击
DNS放大攻击
HTTP放大攻击
SNMP放大攻击
NTP放大攻击
慢速攻击方法Sockstress攻击
THC SSL DoS攻击
Slowloris攻击
慢速 POST 请求攻击
数据处理过程攻击

发表评论