分布式拒绝服务 (DDoS) 攻击是指攻击者使用大量设备试图压垮资源并拒绝合法使用该资源。最常见的是,DDoS 攻击针对暴露在互联网上的网站、应用程序或服务,但 DDoS 攻击也可以针对特定的计算机、网关或内部网络资源。
为了防止 DDoS 攻击,必须首先了解容量限制、协议或应用程序 DDoS 攻击这三大类 DDoS 攻击之间的区别。但是,有些攻击不属于这三个类别,大多数攻击者使用多种方法使他们的攻击更难阻止。
主要的 DDoS 攻击类型有哪些?
DDoS攻击通常可以概括为三类攻击:
- 容量(原始攻击量)
- 协议(滥用 IT 协议)
- 应用程序(滥用应用程序功能)
这三个分类又包含细分数十种DDoS攻击类型,例如UDP、ICMP、IP、TCP 和 HTTP洪水攻击及其变体。将在下面深入介绍类别和攻击类型。
容量耗尽型 DDoS 攻击
容量限制型 DDoS 攻击试图压垮资源容量。服务器将因请求而超负荷,网络将因流量而超负荷,数据库也可能因调用而超负荷。
在互联网上,DDoS 攻击旨在使受攻击网站的带宽饱和,攻击强度通常以每秒比特数来衡量。容量耗尽型 DDoS 攻击包括:多种不同的洪水攻击(UDP、CharGen、ICMP)和滥用的应用程序。
UDP 洪水攻击
用户数据报协议 (UDP) 不会与服务器建立双向会话。相反,UDP 只是发送数据包而不等待回复。
此特性为洪水攻击提供了完美的设置,洪水攻击会尝试发送足够的数据包来淹没正在监听其端口以查找真正的 UDP 流量的主机。攻击者知道,在任何端口收到 UDP 数据包后,服务器必须检查与该端口相对应的应用程序,并且协议将触发服务器内的自动进程。
攻击者通过嵌入在 UDP 数据包中的 IP 地址和端口专门攻击互联网或网络内的服务器。攻击旨在通过该处理请求压垮服务器或占用网络带宽。
特定的 UDP 洪水攻击可以使用:
- 域名服务 (DNS)
- 网络时间协议 (NTP)
- 简单服务发现协议 (SSDP)
- 媒体数据,例如音频或视频数据包
- IP 语音 (VoIP) 电话数据包
- 网络基本输入输出系统
- 点对点 (P2P) 网络,例如 BitTorrent 或 Kad 数据包
- 简单网络管理协议 (SNMP)
- 每日名言 (QOTD)
- 视频游戏特定协议,例如 Quake 和 Steam
UDP Flood攻击的变体包括:
- UDP 碎片洪水: UDP 洪水攻击的这种变体会向受害服务器发送更大但碎片化的数据包。服务器将尝试组装不相关的、伪造的和碎片化的 UDP 数据包,并可能在此过程中不堪重负。
- 特定的 UDP 放大攻击:攻击者无需使用大量受感染的设备,而是可以使用受害服务器作为伪造的 IP 地址,向大量合法服务器发送合法的 UDP 请求。这些合法服务器的响应会突然压垮目标设备。放大攻击中经常使用的协议包括:NTP、SNMP 和 SSDP。
CharGEN洪水
CharGEN 协议于 1983 年开发,旨在用于调试、测量和测试。请求服务器通过端口 19 发送传输控制协议 (TCP) 或 UDP 请求来触发该协议。然后,接收设备通过相同的协议向服务器响应:
- 通过 TCP 回复任意生成的字符
- 通过 UDP 回复随机数
发送设备丢弃从主机服务器接收到的任何信息。
攻击者会伪造目标服务器的 IP 地址,并向运行 CharGEN 的联网设备(如打印机和复印机)发送大量请求。然后这些设备会响应请求,并用端口 19 流量轰炸服务器。如果防火墙没有阻止端口 19,那么服务器可能会因尝试分析和响应随机流量而变得不堪重负。
ICMP(Ping)洪水攻击
互联网控制消息协议由网络设备之间发送的特定错误消息和操作信息命令组成,例如时间戳、超时错误、回显请求和回显回复。回显请求和回显回复组合成“ping”命令。
攻击者使用大量设备向服务器发送伪造的 Ping 数据包,而无需等待服务器回复。该协议要求服务器接收请求并做出响应,这会消耗传入和传出带宽。
ICMP碎片洪水
ICMP 碎片洪水攻击是 ICMP 洪水攻击的一种变体,它发送碎片化的 ICMP 数据包而不是完整形成的命令。受害服务器会尝试从伪造的 ICMP 数据包中重建有效命令,并会耗尽资源,试图在故意不相关的碎片之间建立联系。
滥用应用程序攻击
在滥用应用程序攻击中,黑客会破坏合法服务器(如 P2P 服务器)上现有的高流量应用程序。然后,来自一台或多台受感染机器的流量将被重定向到受害服务器,黑客将退出系统并允许其自主运行。
由于受感染的应用程序试图使用正确格式的数据包建立有效连接,因此大多数防御工具都会允许该连接。受害服务器将因流量激增而无法承受。
协议 DDoS 攻击
协议 DDoS 攻击并不严格使用绝对数量,而是滥用协议来压垮特定资源,通常是服务器,但有时是防火墙或负载平衡器。这些攻击通常以每秒数据包数来衡量。
IP 空攻击
所有符合 Internet 协议版本 4 的数据包都包含标头,这些标头应指定该数据包使用的传输协议是 TCP、ICMP 等。但是,攻击者可以将标头设置为空值,并且如果没有丢弃这些数据包的具体指令,服务器将消耗资源来尝试确定如何传送这些数据包。
TCP 洪水攻击
传输控制协议 (TCP) 规定了不同设备通过网络进行通信的方式。各种 TCP 洪水攻击都滥用基本的 TCP 协议,通过欺骗或畸形数据包来破坏资源。
要理解不同的攻击,了解 TCP 的工作原理会很有帮助。传输控制协议需要三个通信序列来建立连接:
- SYN:请求设备(端点或服务器)将同步序列号以数据包形式发送到服务器或其他目标设备(端点)。
- SYN-ACK:服务器以同步序列号加确认号(ACK)组成的响应来响应SYN数据包。
- ACK:请求设备向服务器发送回响应确认号(原始 ACK 号 + 1)。
传输通过由四部分组成的终止序列结束:
- FIN:请求设备向服务器发送会话终止请求(FIN)。
- ACK:服务器向请求设备回应一个ACK响应,请求设备将等待接收FIN数据包。
- FIN:服务器以 FIN 数据包(可能几乎同时)向请求设备做出响应。
- ACK:请求设备向服务器返回最终的 ACK 响应,并关闭会话。
当服务器收到意外的 TCP 数据包时,服务器将发送一个 RST(重置)数据包以重置通信。
滥用 TCP 协议的洪水攻击试图使用格式错误的 TCP 传输来压垮系统资源。
- SYN 洪水攻击:攻击者从伪造的 IP 地址或设置为忽略响应的服务器发送大量 SYN 请求数据包。受害服务器以 SYN-ACK 数据包响应并保持通信带宽开放,等待 ACK 响应。
- SYN-ACK 洪水攻击:攻击者向受害服务器发送大量伪造的 SYN-ACK 响应。目标服务器将占用资源,尝试将响应与不存在的 SYN 请求进行匹配。
- ACK Flood:攻击者向服务器发送大量伪造的 ACK 响应,这会占用资源,试图用不存在的 SYN-ACK 数据包匹配 ACK 响应。TCP PUSH 功能也可用于此类攻击。
- ACK 碎片洪水: ACK 洪水攻击的一种变体,该方法使用最大大小为 1,500 字节的碎片数据包来滥用最大 IP 数据包长度 65,535 字节(包括报头)。当服务器和路由器等其他资源尝试重建碎片数据包时,重建会超出分配的资源,并可能导致内存溢出错误或使资源崩溃。
- RST/FIN 洪水攻击:攻击者使用伪造的 RST 或 FIN 数据包来淹没服务器,并尝试将数据包与不存在的开放 TCP 会话匹配,从而消耗资源。
- 多个 ACK 欺骗会话洪水:在此变体中,攻击者发送多个 ACK 数据包,然后发送 RST 或 FIN 数据包,以更彻底地模仿实际 TCP 流量并欺骗防御。当然,这些数据包是欺骗性的,服务器将消耗其资源,试图将虚假数据包与不存在的开放 TCP 会话进行匹配。
- 多个 SYN-ACK 欺骗会话洪水:此变体使用多个 SYN 和 ACK 数据包,后面还跟有 RST 或 FIN 数据包。与多个 ACK 欺骗会话洪水一样,欺骗数据包会尝试模仿合法 TCP 流量,并尝试将虚假数据包与合法流量匹配,从而浪费服务器资源。
- 同义 IP 攻击:为了执行此方法,攻击者会伪造 SYN 数据包,使用受害服务器的 IP 地址作为数据包的源 IP 地址和目标 IP 地址。然后,无意义的数据包会消耗资源,因为服务器会尝试响应自身(又称局域网拒绝攻击或 LAND 攻击)或解决从自身接收数据包的矛盾,而这些矛盾与无法匹配的 TCP 会话的开放通信有关。
会话攻击
攻击者不必使用伪造的 IP 地址或伪造的数据包即可发起 DDoS 攻击。会话攻击使用多个机器人来达到或超过源 IP 范围,并与目标服务器发起合法的 TCP 会话。来自真实 IP 地址的合法 TCP 会话可以避免 DDoS 检测,但攻击会延迟 ACK 数据包以消耗带宽并耗尽资源以维持空会话。
慢蜂
与会话攻击类似,Slowloris 攻击试图通过空通信消耗服务器资源。对于这种攻击,攻击者向 Web 服务器发送部分 HTTP 请求,以尽可能长时间保持尽可能多的会话打开。这些攻击占用的带宽非常少,很难检测到。
死亡之Ping
Ping of Death 攻击滥用了 IP 数据包的最大长度 65,535 字节(包括报头),其方式与 ACK Fragmentation Flood 类似。由于通过以太网发送数据的最大帧大小通常设置为 1,500 字节,因此攻击者将发送多个符合以太网限制的 IP 片段,但这些片段将组合成一个超过最大 IP 数据包长度的数据包。当接收方计算机重新组合 IP 片段时,它可能会溢出分配给数据包的内存缓冲区或导致计算机崩溃。
Smurf 攻击
名为 Smurf 的恶意软件程序利用 IP 和 ICMP 协议,向具有目标设备 IP 地址的路由器的广播地址发送大量伪造的 ICMP ping 请求。网络上的每个设备都会响应 ping 请求,并可能使接收设备不堪重负。自 1999 年以来,大多数路由器默认不会转发发送到广播地址的数据包,这种攻击效果并不好。
碎片攻击
Fraggle 攻击是 Smurf 攻击的一种变体,它通过欺骗 UDP 数据包而不是 ICMP 数据包,通过针对网络路由器的广播地址来使受害计算机不堪重负。网络上的每个设备都会响应 UDP 请求,并可能使接收设备不堪重负。默认情况下,自 1999 年以来,大多数现代路由器都不会转发发送到广播地址的数据包,这降低了此攻击的有效性。
低轨道离子炮(LOIC)
Low Orbit Ion Cannon 开源软件旨在成为一种网络压力测试工具,它会向目标设备发送大量数据包(UPD、TCP、HTTP)。不幸的是,攻击者会将此攻击部署到僵尸网络并利用它执行 DDoS 攻击。
高轨道离子炮 (HOIC)
高轨道离子炮应用程序用一个公开可用的应用程序取代了低轨道离子炮,该应用程序可以同时向多达 256 个不同的域提交大量 GET 和 HTTP POST 请求。当被恶意攻击者使用时,HOIC 可能比 LOIC 更强大、更具破坏性。
应用程序 DDoS 攻击
应用程序 DDoS 攻击针对应用程序中的漏洞,导致应用程序本身出现故障。与其他专注于破坏基础设施的攻击不同,这种攻击专注于第 7 层软件。但是,它也可能导致 CPU 过载或内存耗尽,从而影响服务器和其他应用程序。应用程序 DDoS 攻击的强度以每秒请求数来衡量。
例如,计算量大的过程(如将商品添加到购物车或进行结账)可能会被滥用,并发出许多并发请求,从而超出程序的限制或主机的资源。其他攻击针对软件中的特定漏洞或使用SQL 注入来破坏数据库。
具有特定名称的应用程序 DDoS 攻击包括:
HTTP 洪水攻击
HTTP 洪水攻击滥用 HTTP 命令,试图压垮网站、托管网站的服务器以及用于访问网站的带宽。这些攻击中使用的机器人可以连续发送多个请求,因此僵尸网络中的大量机器会成倍增加目标网站的流量。
- GET 攻击:攻击者使用僵尸网络发送大量针对大文件(例如大型 PDF 文件或视频)的并发 GET 请求。
- POST 攻击:大量机器人发送大量并发 POST 请求,其中包含大文件以存储在目标服务器上。
- 低速慢速 POST 攻击:攻击者通常使用 RU-Dead-Yet? (RUDY) 工具执行攻击,他们发送 HTTP Post 请求,表示他们将发送大量数据,但随后会非常缓慢地发送少量数据。这种攻击可避开寻找大容量攻击的 DDoS 防御措施,并占用服务器上的资源。
- 单一会话或单一请求攻击:许多反 DDoS 防御措施现在会阻止大量传入数据包,因此攻击者会利用 HTTP 1.1 中的漏洞将许多不同的请求包含在单个 HTTP 数据包中。
- 碎片化 HTTP 洪水攻击:僵尸网络不会发送大量有效请求,而是建立有效的 HTTP 连接,并将 HTTP 数据包拆分为小片段,并以服务器允许的最慢速度发送。这种低速慢速攻击使用的数据包速率对许多 DDoS 防御措施来说似乎是安全的,但软件或服务器会保持会话处于活动状态,并消耗保留带宽的资源。Slowloris 工具可实现这种类型的攻击。
- 递归 GET 洪水:攻击者试图通过请求长列表页面或图片来压垮服务器。这种攻击看似是正常的浏览行为,但僵尸网络只是在消耗资源,现在无法用于合法流量。
- 随机递归 GET 洪水:递归 GET 洪水的一种变体,这种攻击会随机化请求的页面以避免被发现。
重做
正则表达式拒绝服务尝试请求算法上高度复杂的搜索模式,从而浪费资源甚至导致系统崩溃。
还有其他DDoS攻击类型吗?
尽管容量攻击、协议攻击和应用程序攻击是最常见的 DDoS 攻击形式,但有些攻击并不属于明确的分类。
高级持久性 DoS (APDoS)
APDoS 是黑客用来造成严重破坏的一种攻击类型。它使用多种攻击方式,例如 HTTP 泛洪和 SYN 泛洪,并定期针对每秒发出数百万个请求的多个攻击媒介。APDoS 攻击可以持续数周,这主要是因为黑客能够随时切换策略并制造干扰以逃避安全防御。
多向量攻击
攻击者可以部署多个并发攻击来造成 DDoS。例如,攻击者可能会使用容量耗尽攻击来分散防御者的注意力,同时从另一个僵尸网络执行低带宽 HTTP 洪水攻击。
零日 DDoS 攻击
攻击者可能会发现应用程序、协议或硬件的未公开漏洞并执行 DDoS 攻击。当利用新漏洞时,这种攻击就是零日攻击。
综述:阻止和预防 DDoS 攻击
了解 DDoS 攻击的类型,以便能够阻止它们。各种各样的资源都可能受到更多种类的 DDoS 攻击。安全和运营团队需要共同努力,在资源的可访问性和性能与安全性和风险之间取得平衡。
冗余对于防御和恢复 DDoS 攻击至关重要,但众所周知,专职攻击者会同时攻击多个 Web 服务器,因此负载平衡器和冗余是不够的。创纪录的 DDoS 攻击成为头条新闻,并说明了基于 Web 的 DDoS 攻击的潜在数量巨大:
- 谷歌在最大规模的第 7 层 DDoS 攻击中阻止了 4600 万个请求。
- Akamai每秒阻止了 8.09 亿个数据包的流量激增。
- Impervia在四小时内阻止了总计 253 亿次请求的攻击。
防御这些攻击需要设备强化、冗余、反 DDoS 工具和反 DDoS 服务的重叠和支持组合——也许还需要DDoS 预防和响应服务的支持。