DDOS攻击方式总结

Author Avatar
LittleBlack 7月 03, 2019
  • 在其它设备中阅读本文章

作者:Lemon

本人近期一直在研究 DDOS 攻击,并通读了《破坏之王-DDOS 攻击与防范》一书,书中对于 DDOS 的攻击方式与防范写的很详细,很推荐阅读,并针对本书中的 DDOS 攻击方式做了总结。

1、攻击网络宽带资源


1.1 直接攻击

使用大量的受控主机向被攻击目标发送大量的网络数据包,以沾满被攻击目标的宽带,并消耗服务器和网络设备的网络数据处理能力,达到拒绝服务的目的。

Image.png

直接攻击的主要方法有 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(分布式反射拒绝服务)攻击,是指利用路由器、服务器等设施对请求产生应答,从而反射攻击流量并隐藏攻击来源的一种分布式拒绝服务攻击技术。

Image [1].png

在进行反射攻击时,攻击者使用受控主机发送大量的数据包,这些数据包的特别之处在于,其目的 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 应答数据涌向被攻击目标,占用目标的网络宽带资源并拒绝服务。

Image [2].png

在发动 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 解析器发送伪造源地址的查询命令来放大攻击流量。

Image [3].png

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 服务关闭或重新启动之前一直保持这么大的放大倍数。

Image [4].png

攻击者发送的 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 请求后,会将响应结果发送给攻击目标,当大量的响应结果涌向攻击目标时,就会导致攻击目标网络拥堵和缓慢,造成拒绝服务攻击。

Image [5].png

攻击者发送的 getbulk 请求数据包约为 60 字节,而请求的响应数据能够达到 1500 字节以上,因此,使用该方式进行放大攻击能够达到 25 倍以上的放大效果,这也是一种放大效应明显且有效的放大攻击方式。

在发动 SNMP 放大攻击时,同样需要先进行网络扫描以找到开放了 SNMP 协议的网络社保,虽然开放 SNMP 协议的网络设备很多,但是在扫描到这些设备之后还需要对他们所使用的默认字符串进行猜测,因此,相比 DNS 放大攻击,不论是简单度还是放大倍数的影响力,SNMP 放大攻击都略逊一筹,不过从总体上来看,SNMP 放大攻击依然是一种非常有效的消耗宽带资源的攻击方式。

1.3 攻击链路

攻击链路与以前介绍的几种攻击方法有所不同,其攻击的目标并不是作为互联网断点的服务器的宽带资源,而是骨干网上的链路的宽带资源,对链路进行攻击的一种典型的方式是 Coremelt 攻击。

Coremelt 是安全研究人员在 2009 年提出的一种针对链路的分布式拒绝服务攻击方法,攻击者需要控制一个分布足够广泛的僵尸网络来发动 Coremelt 攻击。

Image [6].png

首先,攻击者通过 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 连接请求,从而达到拒绝服务攻击的目的。

Image [7].png

TCP 连接洪水攻击是攻击 TCP 连接的最基本方法,当有大量的受控主机发起攻击时,其效果非常明显。

2.1.2 SYN 洪水攻击

SYN 洪水攻击是最经典的一种拒绝服务攻击方式,这种攻击方式在 2000 年以前就出现过,直到现在依然被攻击者大规模的广泛使用,近年来,SYN 洪水攻击仍然占据全部分布式拒绝服务攻击的三分之一以上。

TCP 半开连接:

在建立 TCP 连接的过程中,如果在服务器返回 SYN+ACK 报文后,客户端由于某种原因没有对其进行确认,这时服务器端就需要重传 SYN+ACK 报文,并等待客户端的确认报文直到 TCP 连接超时,这种等待客户确认的连接状态通常被称为半开连接

Image [8].png

在连接超时之前,半开连接会一直保存在服务器的连接表中。

由于连接表的大小是有限的,如果在短时间内产生大量的半开连接,而这些连接又无法很快的结束,连接表就会很快被占满,导致新的连接 TCP 连接无法建立。

SYN 洪水攻击就是攻击者利用受控主机发送大量的 TCP SYN 报文,使服务器打开大量的半开连接,占满服务器的连接表,从而影响正常用户与服务器建立会话,造成拒绝服务。

攻击者在发送 TCP SYN 报文时,可以在收到服务器返回的 SYN+ACK 报文后,跳过最后的 ACK 报文发送,使连接处于半开状态,但是这样会很明显的暴露出进行 SYN 洪水攻击的 IP 地址,同时相应报文会作为反射流量占用攻击者的宽带资源,所以更好的方式是攻击者将 SYN 报文的源 IP 地址随机伪造其他主机的 IP 地址或者不存在的 IP 地址,这样攻击目标将会应答发送给被伪造的 IP 地址,从而占用连接资源并隐藏攻击来源。

Image [9].png

SYN 洪水攻击发动简单,效果明显,有大量的攻击工具都能够发动这种攻击,至今依然是攻击者最爱好的攻击方法之一。

2.1.3? PSH+ACK 洪水攻击

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

在正常的 TCP 传输过程当中,如果待发送的数据会清空发送缓冲区,那么操作系统的 TCP/IP 协议栈就会自动为该数据包设置 PSH 标志,同样,当服务端接收到一个设置了 PSH+ACK 标志的报文时,意味着当前数据传输已经结束,因此需要立即将这些数据投递交给服务进程并清空接收缓冲区,而无须等待判断是否还会有额外的数据到达。

由于带有 PSH 标志位的 TCP 数据包会强制要求接收端将接收缓冲区清空并将数据提交给应用服务进行处理,因此当攻击者利用受控主机向攻击目标发送大量的 PSH+ACK 数据包时,被攻击目标就会消耗大量的系统资源不断地进行接收缓冲区的清空处理,导致无法正常处理数据,从而造成拒绝服务。

Image [10].png

单独使用 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 攻击的原理如图所示

Image [11].png

很多情况下,攻击者不会与被攻击客户端或服务器处于同一内网,导致发动 TCP RST 攻击时难以获取端口和序列号,在这种情况下,攻击者可以利用大量的受控主机猜测端口和序列号,进行盲打,发送 RST 洪水攻击,只要在数量巨大的 RST 报文中有一条与攻击目标的端口号相同,并且序列号落在目标的接收窗口之中,就能够终端连接。

RST 洪水攻击的原理如图所示

Image [1200].png

严格来说,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 攻击的原理如图所示

Image [12].png

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 攻击的原理如图所示

Image [13].png

另外,即使服务器不支持 Renegotiation,攻击者依然可以通过另行打开新的 SSL 连接的方式来制造类似的攻击效果。

2.2.2 SSL 洪水攻击

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

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

SSL 洪水攻击的原理如图所示

Image [14].png

攻击者可以使用 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 查询和解析过程如图所示:

Image [15].png

在 DNS 解析的过程中,客户端发起一次查询请求,DNS 服务器可能需要进行额外的多次查询才能完成解析的过程并给出应答,在这个过程中会消耗一定的计算和网络资源,如果攻击者利用大量受控主机不断发送不同域名的解析请求,那么 DNS 服务器的缓存会被不断刷新,而大量解析请求不能命中缓存又导致 DNS 服务器必须消耗额外的资源进行迭代查询,这会极大的增加 DNS 服务器的资源消耗,导致 DNS 响应缓慢甚至完全拒绝服务。

DNS QUERY 洪水攻击的原理如图所示

Image [16].png

进行 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 洪水攻击 的原理如果所示

Image [17].png

3.2 攻击 web 服务

近年来,web 技术发展非常迅速,人们可以通过浏览器使用 web 服务,简单方便的获取需要的信息,而许多机构和企业的重要信息和关键业务也是通过 web 服务的方式对外提供,一旦 web 服务受到解决服务攻击,就会对其承载的业务造成致命的影响。

3.2.1? HTTP 洪水攻击

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

Image [18].png

常见的 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 洪水攻击的原理如图所示

Image [19].png

与 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 头部以连续的“\r\n\r\n”作为结束标志,许多 web 服务器在处理 http 请求的头部信息时,会等待头部传输结束后再进行处理,因此,如果 web 服务器没有接受到连续的“\r\n\r\n”,就会一直接受数据并保持与客户端的连接,利用这个特性,攻击者能够长时间与 web 服务器保持联系,并逐渐耗尽 web 服务器的连接资源。

攻击者在发送 HTTP GET 请求时,缓慢的发送无用的 header 字段,并且一直不发送“\r\n\r\n”结束标志,这样就能够长时间占用与 web 服务器的连接并保证该连接不被超时中断,然而,web 服务器能够处理的并发连接数是有限的,如果攻击者利用大量的受控主机发送这种不完整的 HTTP GET 请求并持续占用这些连接,就会耗尽 web 服务器的连接资源,导致其他用户的 http 请求无法被处理,造成拒绝服务。

Slowloris 攻击原理如图所示

Image [20].png

攻击者使用 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 请求攻击原理如图:

Image [21].png

攻击者可以使用 Slowhttptest 等攻击发动慢速 POST 请求攻击,与 Slowloris 攻击有所不同,由于 HTTP 协议设计上的原因,所有的 web 服务器软件都会受到慢速 POST 请求攻击的影响。

3.2.4 数据处理过程攻击

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

这里已正则表达式拒绝服务攻击和哈希冲突拒绝服务攻击为例进行说明。

正则表达式拒绝服务攻击又被称为 ReDoS,是安全研究人员在 2009 年发现的一种拒绝服务攻击方法,在处理请求数据时,web 应用通常会使用正则表达式进行字符的匹配操作,一部分正则表达式引擎会使用一种被称为非确定性有限状态自动机的实现方式,以便能够处理复杂的正则表达式,例如包含了向后引用或者捕获括号的正则表达式。然而,这种正则引擎的实现方式也导致了其处理时间增加,尤其是在确定“否定匹配”时,正则引擎需要对所有可能的匹配路径全部进行测试,如果位于 web 应用中的正则表达式写的不好,需要测试的匹配路径数量会随着输入字符串的长度呈指数级增长,利用恶意构造的输入字符串,攻击者只需要提交相对较短的输入字符串,就可以强制正则引擎处理数亿个匹配路径,所需时间可以达到几个小时甚至几天,只需要几个这种类似的恶意正则表达式匹配请求,就能够完全占用 web 服务器的计算资源,造成 web 服务器拒绝服务。

哈希冲突拒绝服务攻击是安全研究人员在 2011 年提出的一种拒绝服务攻击方法,web 应用在处理请求中的 POST 数据时,通常使用键-值对的方式来进行存储,在 PHP、Python、Java 等语言中,键-值对的实质是一个哈希表,web 应用程序通过计算“键”的哈希来获取其所对应的的“值”。正常情况下,这个哈希表的哈希冲突较少,因此进行查找和插入的速度很快,正常状态下的哈希表如图所示。

Image [22].png

如果攻击者构造一组恶意的 POST 数据,使得请求中的“键”的哈希值全部相同,那么保存 POST 数据的哈希表就会因此退化成为链表 ,对哈希表的查找和插入等操作规则变成了对链表的遍历操作,造成大量的计算资源被占用,导致拒绝服务攻击。如图所示为大量冲突状态下的哈希表。

Image [23].png