浅谈 DDoS 攻击与防御
什么是 DDoS?
DDoS 作为 Distributed Deny of Service 的缩写,在英语中被广泛使用。那么拒绝服务(Denial of Service)又是什么呢?任何会导致合法用户无法正常访问网络服务的行为都被视为拒绝服务攻击。换句话说,拒绝服务攻击的主要目标就是阻止合法用户的正常网络访问。从而达到攻击者难以Trace的目标。
分布式拒绝服务攻击一旦发生后, 攻击网络流量如同 deluge般的流量将会从众多合法的 DoS 攻击源涌入到受攻主机. 这种情况会将合法用户的正常网络请求覆盖, 从而导致这些用户无法正常访问服务器上的网络资源.
DDoS 攻击方式分类
反射型
通常情况下,我们根据目标协议类型以及攻击手段的不同将DDoS分为SYN Flooding、ACK Flooding、Connection Flooding、UDP Flooding、NTP Flooding、SSDP Flooding、DNS-based flooding、HTTP-based flooding、ICMP-based flooding以及CC-based flooding等不同的攻击类型。
每种攻击类型的特征各不相同。而反射型DDoS攻击作为一种新型的变异出现于当前网络环境之中。这种类型的攻击行为是这样的: ATTACKER并不直接向受害者发起DDoS发起者发起DDoS, 而是通过冒充受害者向某些特定服务端口开放的服务提供者发送构造化的请求报文, 该服务提供者会将收到的报文数量远超于请求包的数量倍数地回复数据包到受害者IP地址上, 这一过程从而对受害者造成了间接性的高带宽压制与高响应时间增加的影响。
在这种机制下, ATTACKER的角色扮演行为就显得至关重要了。实际上, 它们往往会选择使用傀儡设备来进行此轮次的DDoS发起活动。

在反射型攻击中,在线者依赖网络协议中的漏洞或缺陷来实施IP欺骗行为。由于许多协议(如ICMP、UDP等)并未经过源IP认证这一机制的存在,在这种情况下容易遭受此类攻击威胁。为了达到更有针对性的效果,在实际操作中黑客通常会选择那些具有放大效应的服务来进行攻击
简而言之,正是通过 IP 欺骗技术实现信号的反射与放大,并且达到了事倍功半的效果。目前常用的反射攻击主要有 DNS 反射攻击、NTP 反射攻击以及 SSDP 反射攻击等。
注:设置源地址为虚假值会导致无法响应;SYN Flood攻击的特点是生成的流量与被攻击的目标接收的流量比例为1:1,并且回报效率低下。
流量放大型
采用层次化策略扩大网络流量的一种攻击类型。例如,在典型的反射型协议如SSDP中, 攻击者将其Search type设为全搜索模式, 进行了全范围设备和服务的扫描, 这种层次化设计带来的放大效应显著。仅需少量伪造源地址查询流量即可生成数十到上百倍数量的回答流量发送至目标。
混合型
在现实中,攻击者的主要目的是破坏对方的安全性。随着技术的发展和网络安全意识的提升,在线犯罪行为已经不再局限于依靠单一的技术手段来实施网络攻击活动。相反地,在分析目标系统的具体情况后会灵活运用各种策略,并主动采取多种措施以达到发起网络攻击的目的
例如,在TCP与UDP共存的情况下,并发进行网络层与应用层的攻击是一种极具破坏力的方式。这种攻击不仅拥有庞大的流量规模,并且充分利用了协议漏洞以及系统的缺陷,在其能力范围内尽可能地发起攻击行动。对于遭受此类攻击的对象而言,在面临来自不同协议栈以及资源分布式的攻击威胁时,相应的分析响应与处理成本将显著上升。

脉冲波型
这一项创新性措施是一种新型DDoS攻击手段,并给某些现有的DDoS解决方案带来了新的挑战。这种技术之所以被称为"脉冲波"是因为其流量图形显示出看似不连贯但规律重复的特点。研究人员发现,在这类持续性的上上下下波动中构成了一个明显的斜三角形结构。整个过程反映出攻击者正在逐步构建机器人并将其目标锁定在被他们选择的目标服务器上

此次新型脉冲波攻击始于零点,在极短时间内升至峰值水平后归于零点后再升至峰值水平,并持续如此循环往复运行;相较而言, 脉冲式DDoS攻击具有较高的防御难度, 因为其攻击模式避免了触发自动化防御系统

伴随 DDoS 攻击技术的进步, 形成了新型的攻击模式:链路泛洪攻击(Link Flooding Attack)。这种类型的攻击并非直接靶向目标设备, 而是以阻塞目标网络的上一层路由为其主要目的。针对采用 IP Anycast 技术的企业网络而言, 传统的 DDoS 攻击流量会被分散至多个基础设施节点上, 从而有效缓解大规模流量冲击。因此催生了一种创新策略:通过直接控制目标网络 traceroute 的倒数第二跳(即上联路由), 导致链路拥塞加剧。

常见 DDoS 攻击方法
DDoS 攻击可按类型划分为主网络层面和应用层面的两种形式;在攻击手段方面,则主要分为快速数据流量攻击和缓慢数据流量攻击;然而其本质原因在于都会导致系统资源超负荷运转。
网络层 DDoS 攻击
网络层DDoS攻击的主要手段包括SYN Flooding、ACK Flooding、Connection Flooding、UDP Flooding、ICMP Flooding以及Proxy Flooding等多种类型。
SYN Flood 攻击
该攻击类型主要利用了TCP协议中的固有缺陷以生成大量虚假的TCP连接请求报文并发送给目标服务器。这种行为会导致目标系统资源严重不足(包括CPU满负荷运行或内存溢出等现象)。创建一个完整的TCP连接过程需要经历三个阶段:客户端首先发送SYN报文向对方发起连接请求;服务端接收到SYN报文后会回应SYN-ACK报文以确认其接受能力;最后客户端发送ACK报文以完成整个连接过程。
SYN Flooding是指客户端向服务器发送数据包后发生故障导致断开连接;此时服务器接收不到客户端的确认数据包(即第三次握手未能完成),因此服务器通常会重新发送请求并等待一定时间(至少30秒以上)后放弃该未完成的连接
一个用户的异常行为导致服务器的一个线程短暂等待无伤大雅。然而恶意攻击者大量模拟(构造源 IP 并发送SYN包)的情况,则会对服务器造成严重威胁。在维护数以万计的半连接状态时,服务器会消耗大量资源而导致无法及时处理正常客户的请求。结果往往会导致网站出现响应问题并完全失去服务功能。

ACK Flood
ACK Flooding attack occurs after the TCP connection is established. All TCP报文中都包含有ACK标志位字段, 当主机接收到来自某方的一个带有ACK标志位的数据包时, 首先需要验证发送方提供的连接四元组是否存在于本地, 如果确认了连接四元组的存在, 则需进一步确认此连接状态是否处于有效状态; 如果发现上述情况(例如, 在本机未开放目的端口的情况下), 则主机的操作系统协议栈将返回RST报文告知对方相关端口不存在。
在此处的服务器上需要执行两个操作:查询表单以及响应ACK/RST命令。比较一下,在主机和防火墙接收到ACK报文与SYN报文时处理事务的复杂性。显而易见的是,在处理ACK报文中所消耗的资源相对较少。相比之下,在SYN Flooding攻击下给服务器造成的压力更大更为致命。因此攻击者必须使用高流量的小包来携带大量ACK报文才能达到目标。综上所述,在现实环境中只有当攻击程序每秒发送一定数量ACK报文时才会显著影响到主机与防火墙的工作负担水平
当发送数据流量非常大的时候,在接收大量报文并判断其状态时会消耗大量资源。在此情况下,在处理正常的RST报文中也会表现出很强的响应能力。此时客户端的表现是访问页面反应迟钝,并且丢包现象更为明显。然而,在面对极其庞大的攻击流量时,在维护庞大的连接状态表的同时需对数量庞大的ACK报文进行检查以确保其有效性。基于ACK报文状态的有效性进行过滤的这种类型的防火墙能够较为有效地识别并拦截异常数据包。当然,在面对极其庞大的攻击流量时由于需要维护庞大的连接状态表同时需对数量庞大的ACK报文进行检查这种类型的防火墙也会面临巨大的压力最终可能导致网络服务瘫痪
当前,ACK Flooding 通常与其他攻击手段相结合使用,并未作为主要的攻击手段出现。

Connection Flood
Connection Flood 属于一类典型且高效的针对高带宽网络的服务攻击模式。其机制基于真实地址发起大量连接请求,并在建立后长时间处于未释放状态。持续占用系统资源直至留下过多等待(WAIT)状态链接、最终导致系统效能下降直至完全阻塞新请求。
其中一种攻击方式是每隔一秒向服务器发送大量连接请求,在技术细节上与固定源IP的SYN Flooding attack相似,在策略上存在显著区别在于采用真实来源IP地址。通常可以通过防火墙设置每个来源IP地址每秒允许的连接次数来实现防护效果。
现在已有工具采用缓慢建立连接的方式(即几秒钟即可与服务器完成一次通信),在接通后并不会立即释放资源并定期发送不必要的数据包以维持与服务器的联系。如此一来单个 IP 地址即可与服务器建立成百上千次通信联系而由于服务器能够处理的连接数量是有限的因此这种机制便达到了拒绝服务的目的

UDP Flood 攻击
基于UDP是一种不依赖于网络连接的技术特性可知,在实际应用场景中攻击者可以通过模仿真实的源IP地址来发送大量UDP报文从而达到大流量攻击的目的
ICMP Flood 攻击
此攻击可归类为大规模流量攻击, 其机制在于持续发送异常的 ICMP 模报文, 造成目标网络带宽被大量占用, 然而该过程也会消耗一定的系统资源. 此外, 现如今日许多服务器均启用防火墙以阻止ICMP 模报文传输, 因此这种防御策略已不再适用
Smurf 攻击
这种攻击与 ICMP 恶意流量攻击相似但又具备独特的特性能够巧妙地修改进程。Smurf 攻击通过配置响应地址为受害网络中的公共广播地址发送 ICMP 应答数据包从而干扰受害主机的工作状态最终使得整个受害网络陷入瘫痪状态。更为复杂的技术手段则是将源地址设定为第三方潜在的目标主机迫使该主机在遭受 ICMP 流量干扰时不得不崩溃。
应用层 DDoS 攻击
DDoS 攻击在应用程序层并非在网络层发起攻击,在应用程序建立连接握手成功后开始影响应用程序处理请求时
CC 攻击
CC攻击(Challenge Collapsar)作为一种DDoS攻击手段存在。其前身名为Fatboy攻击,并被广泛应用于网络安全领域中。关于CC攻击的历史背景则较为丰富,在应对拒绝服务攻击方面具有较高的知名度和良好的声誉。然而出于挑衅目的,并非恶意针对Collapsar品牌开发了一款名为Challenge Collapsar的工具,并将其简称定为CC
CC 攻击的本质是利用代理服务器向目标系统发送大量消耗资源的大容量页面请求,最终导致对方服务器资源耗尽而出现宕机崩溃的情况。为此,在执行 CC 攻击之前,我们应优先选择那些运行缓慢且占用大量资源的任务,例如:访问数据库时频繁调用的操作或读写硬盘的大文件操作等。相较于传统的大规模分布式拒绝服务(DDoS)攻击而言,这种类型的攻击难以确定真实的发起源 IP地址,因为其不具备明显的异常流量特征可循,只能观察到持续正常的请求输入与突然失去响应的状态转移过程,导致目标服务器完全陷入瘫痪状态。

- Slowloris 攻击
Slowloris是一种基于HTTP协议的缓流量攻击方式。该缓流量攻击通过Web服务器的漏洞或设计缺陷实现拒绝服务。其工作原理为:向服务器发送速度极低的HTTP请求序列,并依赖Apache等中间件默认设置的最大并发链接数进行高并发请求处理。这种持续维持高并发连接的行为使得网络资源被耗尽而无法正常响应客户端请求。值得注意的是:虽然这类缓流量攻击同样会造成拒绝服务现象但它并非完全依赖SYN包机制而是建立在HTTP协议的基础上
- Slowloris PoC
# 构造以下畸形 HTTP 请求包
GET / HTTP/1.1\r\n
Host: Victim host\r\n
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)\r\n
Content-Length: 42\r\n
正常的HTTP请求头应该以两个换行符\r\n\r\n结束,在此情况下只添加了一个换行符\r\n导致服务器无法正确处理后续请求
Slow Attack也被认为是另一种类型的慢速DoS攻击其机制主要体现在对目标服务器的系统资源利用和连接数量上的消耗这种攻击方式通常通过持续的数据流量请求耗尽目标服务器的能力从而导致Web服务器处于低效运行状态常见的攻击模式包括多种类型如Slow Header Slow Body以及Slow Read等
慢首节:遵循标准规范的HTTP头信息通常以双换行符结尾(CRLF),但通过发送仅包含一个换行符(CRLF)的异常HTTP头信息来耗尽Web服务器的所有连接口。这种行为会导致Web服务器系统因资源耗尽而无法接受新的请求
Slow Read:向服务器发起请求上传较大的文件块,并通过将 TCP 滑动窗口大小设置为较小值来限制数据传输速率。这种做法会导致网络传输速度显著降低,并使目标服务器内存被大量占用。从而使得目标服务器内存被大量占用并最终引发拒绝服务事件。
Slow attack method: When sending an HTTP POST package to the server, set the Content-Length field's value to extremely large, then send data packets at a very low speed while continuously maintaining connection with the server. Eventually, this will result in the server's connection entering a saturated state and becoming unavailable.
Kali Linux 支持的专业测试工具 SlowHTTPTest 覆盖包括了以上三种 Slow Attack 方式。
基于 JavaScript 的 DDoS 攻击工具是由普通网民的上网终端构成的。这也表明只要是配备有浏览器的电脑设备就可以作为 DDoS 攻击者使用的工具。当受控制的浏览器数量达到一定程度时这种 DDoS 攻击方式将可能造成极大的破坏性影响攻击者会在拥有大量访问量的网页中植入指向其目标网站的具体恶意代码这些攻击行为往往会对受害者网站造成严重的功能性和数据性损害
ReDoS 攻击
ReDoS (Regular expression Denial of Service),中文译作"正则表达式拒绝服务攻击"。开发人员利用正则表达式对用户的输入数据进行了有效性验证。当编写校验的正则表达式出现缺陷或不够严谨时,攻击者可以生成特定字符串来显著消耗服务器的系统资源,从而导致服务器服务中断或停止。更详细介绍可参考:「浅析 ReDoS 的原理与实践」一文。
DNS被视为互联网的关键服务之一
常见情况而言,在线攻击者试图获取特定的DNS记录可能会选择随机创建对应的DNS名称。
当本地DNS服务器未能找到对应的记录时,
本地DNS服务器不得不停止常规操作,
转而依赖于向更高层次的DNS服务器发起递归查询,
从而引发一系列连锁反应。
尽管如此,
这样的DNS解析过程会对本地DNS服务器产生一定的负担或压力。
当单秒内的DNS解析请求量达到一定规模时,
会导致本地DNS服务出现响应迟钝的现象。

参考微软的数据表明,在处理动态域名查询时,在线DNS服务器的最大承受能力为每秒9,000次请求。然而,在具备P3级性能的个人计算机上,则可轻松构建出每秒高达数万次域名解析请求的能力——这足以导致一台配置极为先进的DNS服务器出现崩溃——从而凸显出DNS服务器运行中的易感性
无线 DDoS 攻击
认证流量攻击
即身份认证流量攻击(CCAA)。这种类型的网络入侵行为主要针对的是那些已通过身份验证并与AP(接入点)建立关联的客户端设备。当接收的伪造身份验证请求数量超出其处理能力时,在AP处触发并割裂其他无线服务连接。
Deauth Flooding Attack
Deauth Flooding Attack即指一种通过模拟取消身份验证过程来将客户端转为未关联/未认证状态的技术手段。该方法旨在通过伪造从 Access Point(AP)到 Client 单播地址的取消身份验证帧来达到这一目的。
对于现有的工具而言,在干扰客户无线接入服务方面具有显著效果与效率的优势。
通常情况下,在每个攻击周期中到达Access Point发送一个取消身份验证帧之前的时间段内,默认情况下会经历一次重新连接与认证过程以恢复接入服务的能力。
当攻击者持续模拟取消身份验证过程时可使所有客户端持续处于脱敏状态。
Association Flood 攻击即为此处的一种网络攻击方式。无线路由器或接入点内预设的一个列表即为此处的状态表,在此表中可清楚列出所有与该访问点(AP)建立连接的无线终端设备状态信息。该攻击方法旨在通过大量伪造的无线终端设备关联模拟来充实AP的客户机相关联列表数据量,从而达到对该访问点客户机相关联列表进行覆盖的目的。基于开放身份验证机制(如空身份验证),任何符合条件的终端设备均能完成认证并建立连接关系。值得注意的是,该漏洞的存在使得攻击者可利用该漏洞创建多个到达已连接或已建立相关联关系的具体终端设备,从而能够进行大规模的数据模仿复制工作,最终实现对该访问点客户机相关联列表的有效覆盖。
Disassociation Flood 攻击 即是取消关联洪水攻击的一种表现形式, 其与 Deauth Flood 攻击的表现方式具有相似性。这种攻击机制通过伪造从接入点(AP)到客户端之间的取消绑定帧, 使得客户端被迫处于一种未认证状态。通常情况下, 在攻击者发送一个新的取消绑定帧之前, 客户端会自动重新建立连接以获取服务。因此, 当攻击者不断伪造取消绑定帧时, 就能够持续让客户端拒绝服务
Disassociation Broadcast 攻击与 Disassociation Flood 攻击基于相同的原理,在发送程度以及工具应用上存在差异。前者通常被用来辅助进行无线中间人攻击活动的展开;而后者则主要用于目标设备确定后的单播型无线 DoS 攻击策略实施过程中的破坏或干扰环节。
射频干扰攻击(RF jamming)是一种典型的无线电电子战手段。这种技术通过发射强大的干扰信号来压制正常通信系统的工作频率点。在无线网络中常见的其他相关攻击手段则主要建立在对现有通信过程及协议的破坏上。其中RF代表射频,在无线电领域主要涉及无线电发射机与接收机等相关设备的技术应用
DDoS 攻击现象判定方法
SYN 类攻击判断
服务器 CPU 占用率很高。
出现大量的 SYN_RECEIVED 的网络连接状态。
网络恢复后,服务器负载瞬时变高。网络断开后瞬时负载下将。
UDP 类攻击判断
服务器 CPU 占用率很高。
网卡每秒接受大量的数据包。
网络 TCP 状态信息正常。
CC 类攻击判断
服务器 CPU 占用率很高。
Web 服务器出现类似 Service Unavailable 提示。
在实际应用中通常会遇到大量 ESTABLISHED 的网络连接状态,并且每个 IP 地址最多可同时支持几十到上百个连接请求
用户遇到连接问题或网站页面打开速度较慢,在进行了短暂的轻微重启后,在几分钟内恢复工作状态;随后几分钟再次遇到连接问题。
DDoS 攻击防御方法
网络层 DDoS 防御
限制单 IP 请求频率。
网络架构上做好优化,采用负载均衡分流。
防火墙等安全设备上设置禁止 ICMP 包等。
采用基于数据包规则的过滤、结合数据流指纹识别异常流量特征以及实施定制化的处理机制来清洗和筛选异常流量。
基于电信运营商提供的解决方案进行近源清洗,并采取流量控制措施来防止全站服务对所有用户造成完全的访问中断。这一策略可视为针对超出自身带宽储备及防御能力范围内的巨大流量所设计的一种辅助缓解方案。
应用层 DDoS 防御
优化操作系统的 TCP/IP 栈。
应用服务器严格限制单个 IP 允许的连接数和 CPU 使用时间。
编写代码时应注重提升性能并科学配置缓存机制;尽可能使网站达到静态化状态以减少动态查询的问题;静态化不仅能够显著提高抗攻击能力还面临诸多挑战;目前尚未发现针对HTML溢出漏洞的可行防御机制
建议部署WAF设备,并了解其官方名称被称为Web应用防火墙。该技术通过一系列安全策略对HTTP/HTTPS通信进行防护工作。
采用 CDN 或者云端 cleaning 策略,在遭受网络攻击时实施 cleaning 操作。常见的 cloudsCleaningProvider 方案通常包括以下几个步骤:首先,在大多数情况下(即未受到特定异常情况影响),cloudsCleaningProvider 的 DNS记录仍然会转发来自 CDN 服务器的请求至原站;其次,在检测到异常流量或 DDoS 攻击触发后,请确保将当前 domain 注册信息设置为指向本 cloudsCleaningCluster 进行处理,并等待 clean 完成后重新连接至原有 DNS记录;最后,请确保 clean 过程结束后能够正常恢复至原有状态并完成流量回源处理。
当Web服务存在性能瓶颈时,在线游戏类应用无法通过CDN实现有效的负载均衡配置。此时应当考虑采用DNS分流技术与ADS系统(抗DDoS防御系统)相结合的方法来进行流量清洗工作;此外,在客户端与服务器之间的通信协议处理上可采取封包加标签、依赖信息对称等方式进行优化
DDoS 攻击的本质其实是无法被彻底防御的;我们所能做的就是持续改进自身的网络及服务架构以增强自身网络及服务架构的防护水平。
