分布式拒绝服务攻击的精髓是,利用分布式的客户端,向服务提供者发起大量看似合法的请求,消耗或长期占用大量资源,从而达到拒绝服务的目的。
从不同的角度看,分布式拒绝服务攻击的方法有不同的分类标准。
依据消耗目标资源的不同,可分为攻击网络带宽资源、攻击系统资源和攻击应用资源三类。
依据攻击数据包发送的频率和速度来划分,又可以分为洪水攻击和慢速攻击。
1.攻击网络带宽资源
无论是服务器的网络接口带宽,还是路由器、交换机等互联网基础设施,其数据包处理能力都是存在着事实上的上限的,当到达或通过的网络数据包数量超过了这个上限时,就会出现网络拥堵、响应缓慢的情况。
消耗网络带宽资源的DDos攻击就是根据这个原理,利用受控主机发送大量的网络数据包,占满被攻击目标的全部带宽,从而使正常的请求无法得到及时有效的响应,造成拒绝服务。
1.1 直接攻击
1.1.1 ICMP/IGMP洪水攻击
网络控制消息协议ICMP用于在TCP/IP网络中发送控制信息,因特网组管理协议IGMP用于管理因特网协议多播组成员。
攻击者使用受控主机向被攻击目标发送大量的ICMP/IGMP报文,进行洪水攻击以消耗目标的带宽资源。
这种类型的攻击出现得很早,但现在已不多见,被攻击目标可以在其网络边界直接过滤并丢弃ICMP/IGMP数据包使攻击无效。
1.1.2 UDP洪水攻击
用户数据报协议UDP是一种面向无连接的传输层协议,主要用于不要求分组顺序到达的传输目的。
利用UDP数据报文,攻击者可以发动洪水攻击,通常会分为小包和大包两种攻击方式。
小包是指64字节大小的数据包,这是以太网上传输数据帧的最小值。
在相同流量下,单包体积越小,包数量就越多。
由于交换机、路由器等网络设备需要对每一个数据包进行检查和校验,因此使用UDP小包攻击能够最有效地增大网络设备处理数据包的压力,造成处理速度的缓慢和传输延迟等拒绝服务效果。
大包是指1500字节以上的数据包,其大小超过了以太网的MTU最大传输单元,使用UDP大包攻击,能够有效地占用网络接口的传输带宽,并迫使被攻击目标在接收到UDP数据时进行分片重组,造成网络拥堵,服务响应缓慢。
UDP洪水攻击出现得很早,它完全依靠受控主机本身的网络性能,通常对攻击目标带宽资源的消耗并不太大。
1.2 反射和放大攻击
1.2.1 ACK反射攻击
在传输控制协议TCP建立连接时,首先会进行TCP三次握手。
在此过程中,当服务器端接收到客户端发来的SYN连接请求时,会对该请求进行ACK应答。
利用TCP握手的ACK应答,即可进行ACK反射攻击。
如果攻击者将SYN的源IP地址伪造成被攻击目标的IP地址,服务器的应答也就会发送给被攻击目标。
由于使用TCP协议的服务在互联网上广泛存在,攻击者可以通过受控主机向大量不同的服务器发送伪造源IP地址的SYN请求,从而使服务器响应的大量ACK应答数据涌向被攻击目标,占用目标的网络带宽资源并造成拒绝服务。
在发动ACK反射攻击时,首先需要进行扫描,获得大量的反射器地址,并分别向这些反射器发送伪造源地址的SYN请求数据。
ACK反射攻击的优点主要在于能够比较有效地隐藏攻击的来源。
1.2.2 DNS放大攻击
域名系统DNS是因特网的一项核心服务,它将域名和IP地址相互映射。DNS使用TCP/UDP 53端口通信,主要使用UDP协议。
通常,DNS响应数据包会比查询数据包大,因此攻击者利用普通的DNS查询请求就能够发动放大攻击。
在以前,对DNS查询的响应数据包被限制在512字节以内,多余的字节根据实现的不同可能会被丢弃或使用TCP协议建立连接并重传。
后来出现了DNS扩展机制EDNS0扩展了DNS数据包的结构,增加了OPT RR字段。
该字段包含了客户端能够处理的最大UDP报文大小的信息,服务端在响应DNS请求时,根据该字段的大小生成响应报文。
攻击者发送的DNS查询请求数据包大小一般为60字节左右,而查询返回结果的数据包大小通常在3000字节以上。使用该方式进行放大攻击能够达到50倍以上的放大效果。
发动DNS放大攻击需要先进行扫描,获得大量的开放DNS解析器地址,并向这些地址发送伪造源IP的查询命令来放大攻击流量。
1.2.3 NTP放大攻击
网络时间协议NTP用于使计算机与时钟源进行同步和校正,它使用UDP 123端口通信。
NTP协议的monlist请求能够获取与目标NTP服务器进行同步的最近600个客户端的IP地址等信息。
这意味着,只需要发送一个很小的请求包,就能够触发大量连续的UDP响应数据包。
使用该方式进行放大攻击能够达到700倍以上的放大效果。
发动NTP放大攻击需要先进行扫描,获得大量的NTP服务器,并向这些NTP服务器发送伪造源地址的请求来放大攻击流量。
1.2.4 SNMP放大攻击
简单网络管理协议SNMP是目前网络中应用最为广泛的网络管理协议,它使用UDP 161端口通信。
攻击者向广泛存在并开启了SNMP服务的网络设备发送GetBulk请求,使用默认通信字符串作为认证凭据,并将源IP地址伪造成攻击目标的IP地址。
设备收到GetBulk请求后,会将响应结果发送给攻击目标。当大量的响应结果涌向攻击目标时,就会导致攻击目标网络拥堵和缓慢,造成拒绝服务。
使用该方式进行放大攻击能够达到25倍以上的放大效果。
在发动SNMP放大攻击时,需要先进行扫描,获得开放SNMP协议的网络设备,虽然开放SNMP协议的网络设备很多,但是还需要猜测它们使用的默认通信字符串,因此该方式更复杂一些。