DDoS原理、分类与防御


一、DDoS是什么

DDoS攻击,又称为分布式拒绝服务 (distributed denial-of-service attack,简称DDoS攻击);攻击是通过大规模 Internet 流量淹没目标服务器或其周边基础设施以破坏目标服务器、服务或网络正常流量的恶意行为。DDoS 攻击利用多台受损计算机系统作为攻击流量来源以达到攻击效果。利用的机器可以包括计算机,也可以包括其他联网资源(如 IoT 设备)。总体而言,DDoS 攻击好比高速公路发生交通堵塞,妨碍常规车辆抵达预定目的地。
在这里插入图片描述

据2014年统计,被确认为大规模DDoS的攻击已达平均每小时28次。DDoS发起者一般针对重要服务和知名网站进行攻击,如银行、信用卡支付网关、甚至根域名服务器等。

1. DDoS 攻击的工作原理

DDoS 攻击是通过连接互联网的计算机网络进行的。

这些网络由计算机和其他设备(例如 IoT 设备)组成,它们感染了恶意软件,从而被攻击者远程控制。这些个体设备称为机器人(或僵尸),一组机器人则称为僵尸网络。

一旦建立了僵尸网络,攻击者就可通过向每个机器人发送远程指令来发动攻击。
在这里插入图片描述

当僵尸网络将受害者的服务器或网络作为目标时,每个机器人会将请求发送到目标的 IP 地址,这可能导致服务器或网络不堪重负,从而造成对正常流量的拒绝服务。

由于每个机器人都是合法的 Internet 设备,因而可能很难区分攻击流量与正常流量。

2. 如何识别 DDoS 攻击

DDoS 攻击最明显的症状是网站或服务突然变慢或不可用。但是,造成类似性能问题的原因有多种(如合法流量激增),因此通常需要进一步调查。流量分析工具可以帮助您发现 DDoS 攻击的一些明显迹象:

  • 来自单个 IP 地址或 IP 范围的可疑流量
  • 来自共享单个行为特征(例如设备类型、地理位置或 Web 浏览器版本)的用户的大量流量
  • 对单个页面或端点的请求数量出现不明原因的激增
  • 奇怪的流量模式,例如一天中零碎时间上的激增或看似不自然的模式(例如,每 10 分钟出现一次激增)
3. 常见的 DDoS 攻击有哪几类?

不同的 DDoS 攻击手段针对不同的网络连接组件。为了解不同 DDoS 攻击的工作原理,必需掌握建立网络连接的方式。Internet 网络连接由许多不同的组件或“层”构成。就像打地基盖房子一样,模型中的每一步都有不同的目的。OSI 模型(如下图所示)是一个概念框架,用于描述 7 个不同层级的网络连接。
OSI 模型
虽然几乎所有 DDoS 攻击都涉及用流量淹没目标设备或网络,但攻击可以分为三类。攻击者可能利用一种或多种不同的攻击手段,也可能根据目标采取的防范措施循环使用多种攻击手段。

(1)攻击带宽——容量耗尽攻击

在这里插入图片描述
(1) 直接攻击。直接攻击是指攻击者利用控制的大量主机对受害者发送大量的数据流量, 使得受害者的网络带宽被占据, 并大量消耗服务器和网络设备的处理能力, 达到拒绝服务攻击的目的。例如ICMP/IGMP洪水攻击, UDP洪水攻击等都是典型的DDoS直接攻击方式。

(2) 反射和放大攻击。直接攻击不仅效率低而且容易被追踪, 所以攻击者更多地选择反射攻击。反射攻击又称DRDoS (Distributed Reflection Denial of Service, 分布式反射拒绝服务) , 是指攻击者利用路由器、服务器等设施对请求产生应答, 从而反射出大量的流量对受害者进行攻击的一种DDoS攻击方式。这种攻击方式隐蔽, 更大危害还来自于使用反射过程的放大。放大是一种特殊的反射攻击, 其特殊之处在于反射器对于网络流量具有放大作用, 可以将攻击者较小的流量放大成较大流量, 从而造成更加严重的带宽消耗。

(3) 攻击链路。攻击链路与前面提到的攻击方法不同, 攻击对象不是服务器而是骨干网络上的带宽资源。一种典型的链路攻击方式是Coremelt攻击。首先, 攻击者通过traceroute等手段确定各个僵尸主机与攻击链路之间的位置关系。然后, 由攻击者将僵尸网络分成两部分, 并控制这两部分之间通过骨干网络进行通信。大量的数据包通过骨干网络, 将会造成骨干网络的拥堵和延时。从骨干网络上来看, 通过网络的数据包是真实存在的, 并没有任何有效的方式将真正的数据包与拒绝服务攻击的数据区分开来, 这样使得这种攻击方式更加隐蔽和难以防范。

容量耗尽攻击攻击目标:此类攻击尝试耗尽目标和大型 Internet 之间的可用带宽,从而造成拥塞。运用某种放大攻击或其他生成大量流量的手段(如僵尸网络请求),向目标发送大量数据。
放大示例
跟交通堵塞情况一样,大家都应该清楚:当网络数据包的数量达到或者超过上限时,会出现网络拥堵、响应缓慢的情况。DDoS 就是利用这个原理,发送大量网络数据包,占满被攻击目标的全部带宽,从而造成正常请求失效,达到拒绝服务的目的。

攻击者可以使用 ICMP 洪水攻击(即发送大量 ICMP 相关报文)、或者 UDP 洪水攻击(即发送用户数据报协议的大包或小包),使用伪造源 IP 地址方式进行隐匿,并对网络造成拥堵和服务器响应速度变慢等影响。

但是,这种直接方式通常依靠受控主机本身的网络性能,所以效果不是很好,还容易被查到攻击源头。于是反射攻击就出现,攻击者使用特殊的数据包,即 IP 地址指向作为反射器的服务器,源 IP 地址被伪造成攻击目标的 IP,反射器接收到数据包的时候就被骗了,会将响应数据发送给被攻击目标,然后就会耗尽目标网络的带宽资源。

DNS 放大: 利用伪造的 IP 地址(受害者的 IP 地址)向开放式 DNS 服务器发出请求后,目标 IP 地址将收到服务器发回的响应。DNS 放大就好比有人打电话给餐馆说“每道菜都订一份,请给我回电话复述整个订单”,而提供的回电号码实际上属于受害者。几乎不费吹灰之力,就能产生很长的响应并发送给受害者。

(2)攻击系统——协议攻击

在这里插入图片描述
(1) 攻击TCP连接。TCP是一种面向连接的、可靠的、基于字节流量的传输层控制协议。由于在设计之初考虑更多的是协议的可用性, 缺乏对协议的安全性进行周密比较和详细描述, 因此TCP协议存在许多安全缺陷和安全问题。TCP连接洪水攻击的原理, 就是在建立三次握手过程中, 服务器会创建并保存TCP连接信息, 该信息会被保存在连接表中。但是, 连接表中的空间是有限的, 一旦连接表中存储的数据超过了其最大数目, 服务器就无法创建新的TCP连接。攻击者利用大量的受控主机, 占据连接表中所有空间, 使得目标无法建立新的TCP连接。当大量的受控主机进行攻击时, 其攻击效果非常明显。攻击手段主要有:SYN洪水攻击、PSH+ACK洪水攻击、RST攻击、Sock stress攻击等。

(2) 攻击SSL连接。安全套接字 (Secure Sockets Layer, SSL) 是为网络通信协议提供安全及数据完整性的一种安全协议。其在传输层对数据进行加密, 然而SSL协议在加密、解密和密钥协商的过程中会消耗大量的系统资源。SSL洪水攻击的原理, 就是在SSL握手过程中, 无论接收的数据是否有效, 只能先进行解密才能进行验证, 所以攻击者利用这个特性, 向被攻击者发送大量的无用数据, 消耗目标大量的计算资源。

协议攻击攻击目标:协议攻击(也称为状态表耗尽攻击)旨在耗尽 Web 应用程序服务器或中间资源(如防火墙和负载均衡器)的可用状态表容量,进而导致服务中断。协议攻击利用协议堆栈第 3 层和第 4 层的弱点致使目标无法访问。

在这里插入图片描述

创建 TCP 连接需要客户端与服务器进行三次交互,也就是常说的“三次握手”。这个信息通常被保存在连接表结构中,但是表的大小有限,所以当超过存储量,服务器就无法创建新的 TCP 连接。

攻击者利用这一点,用受控主机建立大量恶意的 TCP 连接,占满被攻击目标的连接表,使其无法接受新的 TCP 连接请求。如果攻击者发送了大量的 TCP SYN 报文,让服务器在短时间内产生大量的半开连接,连接表也会被很快占满,导致无法建立新的 TCP 连接,这个方式是 SYN 洪水攻击。

SYN Flood: SYN Flood是互联网上最经典的DDoS攻击方式之一,最早出现于1999年左右,雅虎是当时最著名的受害者。SYN Flood攻击利用了TCP三次握手的缺陷,能够以较小代价使目标服务器无法响应,且难以追查。

标准的TCP三次握手过程如下:

  • 客户端发送一个包含SYN标志的TCP报文,SYN即同步(Synchronize),同步报文会指明客户端使用的端口以及TCP连接的初始序号;
  • 服务器在收到客户端的SYN报文后,将返回一个SYN+ACK(即确认Acknowledgement)的报文,表示客户端的请求被接受,同时TCP初始序号自动加1;
  • 客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加1。

经过这三步,TCP连接就建立完成。TCP协议为了实现可靠传输,在三次握手的过程中设置了一些异常处理机制。第三步中如果服务器没有收到客户端的最终ACK确认报文,会一直处于SYN_RECV状态,将客户端IP加入等待列表,并重发第二步的SYN+ACK报文。重发一般进行3-5次,大约间隔30秒左右轮询一次等待列表重试所有客户端。另一方面,服务器在自己发出了SYN+ACK报文后,会预分配资源为即将建立的TCP连接储存信息做准备,这个资源在等待重试期间一直保留。更为重要的是,服务器资源有限,可以维护的SYN_RECV状态超过极限后就不再接受新的SYN报文,也就是拒绝新的TCP连接建立。

协议攻击示例
SYN Flood正是利用了上文中TCP协议的设定,达到攻击的目的。攻击者伪装大量的IP地址给服务器发送SYN报文,由于伪造的IP地址几乎不可能存在,也就几乎没有设备会给服务器返回任何应答了。因此,服务器将会维持一个庞大的等待列表,不停地重试发送SYN+ACK报文,同时占用着大量的资源无法释放。更为关键的是,被攻击服务器的SYN_RECV队列被恶意的数据包占满,不再接受新的SYN请求,合法用户无法完成三次握手建立起TCP连接。也就是说,这个服务器被SYN Flood拒绝服务了。

简单来说,SYN 洪水就好比补给室中的工作人员从商店的柜台接收请求。

工作人员收到请求,前去取包裹,再等待确认,然后将包裹送到柜台。一时之间,工作人员收到太多包裹请求,来不及确认,直到无法处理更多包裹,实在不堪重负,致使无人能对请求做出回应。

此类攻击利用 TCP 握手(两台计算机发起网络连接时要经过的一系列通信),通过向目标发送大量带有伪造源 IP 地址的 TCP“初始连接请求”SYN 数据包来实现。

目标计算机响应每个连接请求,然后等待握手中的最后一步,但这一步却永远不会发生,因此在此过程中耗尽目标的资源。

(3)攻击应用——应用程序层攻击

在这里插入图片描述
(1) 攻击DNS服务器。DNS服务是网络服务中一项核心服务, 对DNS服务器攻击造成的影响更具威胁性。针对DNS服务器的攻击, 主要有DNS QUERY洪水攻击和DNS NXDOMAIN攻击两类。DNS QUERY洪水攻击是利用大量的查询请求, 使得DNS服务器进行大量查询, 消耗其大量的计算和存储资源, 使得DNS服务器的服务质量下降, 甚至完全停止服务。在发起该攻击方式时, 考虑到DNS服务器的查询方式, 需要发送大量的不同域名的地址查询, 而且尽量不要选择存储在DNS缓存记录里面的域名。DNS NXDO-MAIN攻击是DNS QUERY洪水攻击的一种变种, 后者攻击时发送的是真实的域名地址, 前者则发送大量不存在的域名地址, 使得DNS服务器进行大量递归查询, 从而使得正常的请求速度变慢, 甚至是拒绝服务。

(2) 攻击Web服务器。随着Web的迅速发展, 人们的生活因此而变得方便快捷, 大量的商务也因此更加方便。所以一旦Web服务器遭到拒绝服务攻击, 那么就会对其承载的大量服务造成巨大的影响。攻击Web服务器, 常用的手段包括HTTP (s) 洪水攻击、Slowloris攻击、慢速POST请求攻击、数据处理过程攻击等。

应用程序层攻击攻击目标:有时称为第 7 层 DDoS 攻击(参考 OSI 模型第 7 层),此类攻击的目标是耗尽目标资源。攻击目标是生成网页并传输网页响应 HTTP 请求的服务器层。 在客户端执行一项 HTTP 请求费用很低,但目标服务器做出响应却可能比较昂贵,因为服务器通常必须加载多个文件并运行数据库查询才能创建网页。第 7 层攻击很难防御,因为很难确定流量是否存在恶意。

应用程序层攻击示例
由于 DNS 和 Web 服务的广泛性和重要性,这两种服务就成为消耗应用资源的分布式拒绝服务攻击的主要目标。

比如,向 DNS 服务器发送大量查询请求,从而达到拒绝服务的效果,当 DNS 服务的可用性受到威胁,互联网上大量的设备都会受到影响而无法正常使用;如果攻击者利用大量的受控主机不断地向 Web 服务器恶意发送大量 HTTP 请求,要求 Web 服务器处理,就会完全占用服务器资源,让正常用户的 Web 访问请求得不到处理,导致拒绝服务。一旦 Web 服务受到这种攻击,就会对其承载的业务造成致命的影响。

DNS Query Flood: 作为互联网最基础、最核心的服务,DNS自然也是DDoS攻击的重要目标之一。打垮DNS服务能够间接打垮一家公司的全部业务,或者打垮一个地区的网络服务。前些时候风头正盛的黑客组织anonymous也曾经宣布要攻击全球互联网的13台根DNS服务器,不过最终没有得手。

UDP攻击是最容易发起海量流量的攻击手段,而且源IP随机伪造难以追查。但过滤比较容易,因为大多数IP并不提供UDP服务,直接丢弃UDP流量即可。所以现在纯粹的UDP流量攻击比较少见了,取而代之的是UDP协议承载的DNS Query Flood攻击。简单地说,越上层协议上发动的DDoS攻击越难以防御,因为协议越上层,与业务关联越大,防御系统面临的情况越复杂。

DNS Query Flood就是攻击者操纵大量傀儡机器,对目标发起海量的域名查询请求。为了防止基于ACL的过滤,必须提高数据包的随机性。常用的做法是UDP层随机伪造源IP地址、随机伪造源端口等参数。在DNS协议层,随机伪造查询ID以及待解析域名。随机伪造待解析域名除了防止过滤外,还可以降低命中DNS缓存的可能性,尽可能多地消耗DNS服务器的CPU资源。

HTTP Flood(cc攻击): HTTP 洪水攻击类似于同时在大量不同计算机的 Web 浏览器中一次又一次地按下刷新,大量 HTTP 请求涌向服务器,导致拒绝服务。

这种类型的攻击有简单的,也有复杂的。

较简单的实现可以使用相同范围的攻击 IP 地址、referrer 和用户代理访问一个 URL。复杂版本可能使用大量攻击性 IP 地址,并使用随机 referrer 和用户代理来针对随机网址。

简单来说,HTTP Flood是针对Web服务在第七层协议发起的攻击。它的巨大危害性主要表现在三个方面:发起方便、过滤困难、影响深远。

SYN Flood和DNS Query Flood都需要攻击者以root权限控制大批量的傀儡机。收集大量root权限的傀儡机很花费时间和精力,而且在攻击过程中傀儡机会由于流量异常被管理员发现,攻击者的资源快速损耗而补充缓慢,导致攻击强度明显降低而且不可长期持续。HTTP Flood攻击则不同,攻击者并不需要控制大批的傀儡机,取而代之的是通过端口扫描程序在互联网上寻找匿名的HTTP代理或者SOCKS代理,攻击者通过匿名代理对攻击目标发起HTTP请求。匿名代理是一种比较丰富的资源,花几天时间获取代理并不是难事,因此攻击容易发起而且可以长期高强度的持续。

另一方面,HTTP Flood攻击在HTTP层发起,极力模仿正常用户的网页请求行为,与网站业务紧密相关,安全厂商很难提供一套通用的且不影响用户体验的方案。在一个地方工作得很好的规则,换一个场景可能带来大量的误杀。

最后,HTTP Flood攻击会引起严重的连锁反应,不仅仅是直接导致被攻击的Web前端响应缓慢,还间接攻击到后端的Java等业务层逻辑以及更后端的数据库服务,增大它们的压力,甚至对日志存储服务器都带来影响。

有意思的是,HTTP Flood还有个颇有历史渊源的昵称叫做CC攻击。CC是Challenge Collapsar的缩写,而Collapsar是国内一家著名安全公司的DDoS防御设备。从目前的情况来看,不仅仅是Collapsar,所有的硬件防御设备都还在被挑战着,风险并未解除。

(4)慢速连接攻击

提起攻击,第一反应就是海量的流量、海量的报文。但有一种攻击却反其道而行之,以慢著称,以至于有些攻击目标被打死了都不知道是怎么死的,这就是慢速连接攻击,最具代表性的是rsnake发明的Slowloris。

HTTP协议规定,HTTP Request以\r\n\r\n结尾表示客户端发送结束,服务端开始处理。那么,如果永远不发送\r\n\r\n会如何?Slowloris就是利用这一点来做DDoS攻击的。攻击者在HTTP请求头中将Connection设置为Keep-Alive,要求Web Server保持TCP连接不要断开,随后缓慢地每隔几分钟发送一个key-value格式的数据到服务端,如a:b\r\n,导致服务端认为HTTP头部没有接收完成而一直等待。如果攻击者使用多线程或者傀儡机来做同样的操作,服务器的Web容器很快就被攻击者占满了TCP连接而不再接受新的请求。

很快的,Slowloris开始出现各种变种。比如POST方法向Web Server提交数据、填充一大大Content-Length但缓慢的一个字节一个字节的POST真正数据内容等等。

(5)混合攻击

在实际的生活中,攻击者并不关心使用的哪种攻击方法管用,只要能够达到目的,一般就会发动其所有的攻击手段,尽其所能的展开攻势。对于被攻击目标来说,需要面对不同的协议、不同资源的分布式拒绝服务攻击,分析、响应和处理的成本就会大大增加。

随着僵尸网络向小型化的趋势发展,为降低攻击成本,有效隐藏攻击源,躲避安全设备,同时保证攻击效果,针对应用层的小流量慢速攻击已经逐步发展壮大起来。因此,从另一个角度来说,DDoS 攻击方面目前主要是两个方面:一是 UDP 及反射式大流量高速攻击,二是多协议小流量及慢速攻击。

一般而言,高级攻击者从来不会使用单一的手段进行攻击,而是根据目标环境灵活组合。普通的SYN Flood容易被流量清洗设备通过反向探测、SYN Cookie等技术手段过滤掉,但如果在SYN Flood中混入SYN+ACK数据包,使每一个伪造的SYN数据包都有一个与之对应的伪造的客户端确认报文,这里的对应是指源IP地址、源端口、目的IP、目的端口、TCP窗口大小、TTL等都符合同一个主机同一个TCP Flow的特征,流量清洗设备的反向探测和SYN Cookie性能压力将会显著增大。其实SYN数据报文配合其他各种标志位,都有特殊的攻击效果,这里不一一介绍。对DNS Query Flood而言,也有独特的技巧。

首先,DNS可以分为普通DNS和授权域DNS,攻击普通DNS,IP地址需要随机伪造,并且指明服务器要求做递归解析;但攻击授权域DNS,伪造的源IP地址则不应该是纯随机的,而应该是事先收集的全球各地ISP的DNS地址,这样才能达到最大攻击效果,使流量清洗设备处于添加IP黑名单还是不添加IP黑名单的尴尬处境。添加会导致大量误杀,不添加黑名单则每个报文都需要反向探测从而加大性能压力。

另一方面,前面提到,为了加大清洗设备的压力不命中缓存而需要随机化请求的域名,但需要注意的是,待解析域名必须在伪造中带有一定的规律性,比如说只伪造域名的某一部分而固化一部分,用来突破清洗设备设置的白名单。道理很简单,腾讯的服务器可以只解析腾讯的域名,完全随机的域名可能会直接被丢弃,需要固化。但如果完全固定,也很容易直接被丢弃,因此又需要伪造一部分。

其次,对DNS的攻击不应该只着重于UDP端口,根据DNS协议,TCP端口也是标准服务。在攻击时,可以UDP和TCP攻击同时进行。

HTTP Flood的着重点,在于突破前端的cache,通过HTTP头中的字段设置直接到达Web Server本身。另外,HTTP Flood对目标的选取也非常关键,一般的攻击者会选择搜索之类需要做大量数据查询的页面作为攻击目标,这是非常正确的,可以消耗服务器尽可能多的资源。但这种攻击容易被清洗设备通过人机识别的方式识别出来,那么如何解决这个问题?很简单,尽量选择正常用户也通过APP访问的页面,一般来说就是各种Web API。正常用户和恶意流量都是来源于APP,人机差别很小,基本融为一体难以区分。

(6)来自P2P网络的攻击

前面的攻击方式,多多少少都需要一些傀儡机,即使是HTTP Flood也需要搜索大量的匿名代理。如果有一种攻击,只需要发出一些指令,就有机器自动上来执行,才是完美的方案。这种攻击已经出现了,那就是来自P2P网络的攻击。

高级P2P攻击,是直接欺骗资源管理服务器。如迅雷客户端会把自己发现的资源上传到资源管理服务器,然后推送给其他需要下载相同资源的用户,这样,一个链接就发布出去。通过协议逆向,攻击者伪造出大批量的热门资源信息通过资源管理中心分发出去,瞬间就可以传遍整个P2P网络。更为恐怖的是,这种攻击是无法停止的,即使是攻击者自身也无法停止,攻击一直持续到P2P官方发现问题更新服务器且下载用户重启下载软件时为止。

4. DDoS攻击检测技术
(1)基本方法

常见的入侵检测方法分为误用检测和异常检测两种。误用检测通过匹配攻击基本特征库检测攻击, 一旦发生攻击, 系统能够快速作出判断, 且误报率低。异常检测则通过发现当前网络状态明显偏离正常状态检测攻击。由于误用检测只能检测攻击类型已知、攻击报文具有明显误用特征的入侵行为, 因此对系统漏洞型的DDoS攻击有较好的作用。随着DDoS攻击的日益发展, 通过操纵大量的傀儡机来达到攻击目标。在原来伪造大量虚假报文的基础上, 改进到可以发送大量的真实报文。所以误用检测对DDoS攻击已经不能有效地进行阻止, 异常检测在防御DDoS攻击发挥着日益重要的作用。

(2)基于流量特征的攻击检测

基于流量特征的攻击检测是一种基于知识的检测方法。首先收集已知的DDoS攻击的各种特征, 然后将当前网络中的数据包与收集到的各种数据特征进行比较。如果特征与DDoS攻击的特征匹配, 则可以检测出遭受了DDoS攻击。这种检测方法能够准确检测攻击行为, 辨别攻击的类型, 可以采用相应措施来阻止攻击。但缺点是不能检测未知的入侵, 总是滞后于新出现的攻击方式, 需要不断更新特征库, 对系统依赖性较大, 不但系统移植性差, 而且维护工作量也大。这种检测方法一般用于检测利用漏洞型的DDoS攻击。基于流量特征的攻击检测主要使用了特征匹配、模型推理、状态转换和专家系统的方法。

(3)基于流量异常的攻击检测

基于流量异常的检测是目前常用的方法。基于流量的攻击方法必然会带来流量异常变化。因此, 通过建立模型来判断流量是否异常, 从而知道服务器是否被攻击。流量异常检测可以检测到未知类型的攻击, 然而仅仅通过流量的异常变化并不能判断是否是因为流量攻击而导致的流量异常变化。如正常上班时间周一到周五, 公司服务器的访问数量是一定的, 但是流量异常变化可能是由于人员突然集中或者发生紧急情况人员突然撤离。由此可知流量导致的变化不只是由于攻击造成的, 还有种种可能的原因, 要从中将正常的流量变化与遭受攻击时的流量变化进行区分, 需要确定正常流量是如何变化的。这是确定遭到攻击所必须解决的问题。

已有研究中, 大量异常流量是通过检测时的流量特征进行建模来识别攻击。这种单纯依靠检测时的流量进行区分攻击的方式是不准确的。一旦出现与攻击类似的异常流量变化就会导致检测结果出错。所以这种检测方式是不完善的。


二、DDoS 攻击工具

(1) LOIC

LOIC 是一个颇受欢迎的 DOS 攻击的淹没式工具,会产生大量流量,可以在多种平台运行,包括 Linux、Windows、Mac OS、Android 等。早在 2010 年,黑客组织对反对维基解密的公司和机构的攻击活动中,该工具被下载了 3 万次以上。

LOIC 界面友好,易于使用,初学者也可以很快上手。但是由于该工具需要使用真实 IP 地址,现在已经停用。

(2)HULK (HTTP Unbearable Load King)

HULK 是另一个 DOS 攻击工具,这个工具使用 UserAgent 的伪造,来避免攻击检测,可以通过启动 500 线程对目标发起高频率 HTTP GET FLOOD 请求,更可怕的是每一次请求都是独立的,可以绕过服务端的缓存措施,让所有请求得到处理。HULK 是用 Python 语言编写,对获得的源码进行更改也非常方便。

(3)R.U.D.Y.

R-U-Dead-Yet 是一款采用慢速 HTTP POST 请求方式进行 DOS 攻击的工具,它提供了一个交互式控制台菜单,检测给定的 URL,并允许用户选择哪些表格和字段应用于 POST-based DOS 攻击,操作非常简单。

而且,它也使用的是 Python 语言编写,可移植性非常好。R.U.D.Y.能够对所有类型的 Web 服务端软件造成影响,因此攻击的威胁非常大。这些工具在保持攻击力的同时还再加强易用性,而免费和开源降低了使用门槛。随着攻防对抗的升级,工具会越来越智能化。


三、DDoS 防御

(一)攻击源消除

DDoS攻击需要大量的傀儡机才能完成, 离开了傀儡机那么攻击者就不能实施。因此, 可以采取各种措施防止攻击者获得大量傀儡机, 从攻击源头上消除攻击。攻击者能够控制的傀儡机大都是系统存在严重安全漏洞的计算机, 所以要防范计算机成为傀儡机, 就必须对主机的硬件或软件系统存在的安全漏洞进行全面检测, 及时打补丁、修补漏洞。当然在当前的网络体系中, 还可以通过破坏DDoS攻击形成的条件来对该攻击进行防范。当前网络架构下, 接收端被动接收报文, 而对于发送端没有约束。基于授权的攻击预防技术可以控制发送端的流量, 从而达到从源头上解决DDoS攻击。对于一部分不需要向外提供服务的对象, 也可以通过隐藏自己在网络上的存在, 从而达到防范DDoS攻击的效果。

(二)攻击缓解

若要缓解 DDoS 攻击,关键在于区分攻击流量与正常流量。

例如,如果因发布某款产品导致公司网站涌现大批热情客户,那么全面切断流量是错误之举。如果公司从已知恶意用户处收到的流量突然激增,或许需要尽量缓解攻击。

真正的难点在于区分真实客户流量与攻击流量。

在现代 Internet 中,DDoS 流量以多种形式出现。流量设计可能有所不同,从非欺骗性单源攻击到复杂的自适应多方位攻击无所不有。

多方位 DDoS 攻击采用多种攻击手段,以期通过不同的方式击垮目标,很可能分散各个层级的缓解工作注意力。

同时针对协议堆栈的多个层级(如 DNS 放大(针对第 3/4 层)外加 HTTP 洪水(针对第 7 层))发动攻击就是多方位 DDoS 攻击的一个典型例子。

为防护多方位 DDoS 攻击,需要部署多项不同策略,从而缓解不同层级的攻击。

(1)黑洞路由

有一种解决方案几乎适用于所有网络管理员:创建黑洞路由,并将流量汇入该路由。在最简单的形式下,当在没有特定限制条件的情况下实施黑洞过滤时,合法网络流量和恶意网络流量都将路由到空路由或黑洞,并从网络中丢弃。

如果互联网设备遭受 DDoS 攻击,则该设备的互联网服务提供商(ISP)可能会将站点的所有流量发送到黑洞中作为防御。这不是理想的解决方案,因为它相当于让攻击者达成预期的目标:使网络无法访问。

(2)速率限制

限制服务器在某个时间段接收的请求数量也是防护拒绝服务攻击的一种方法。

虽然速率限制对于减缓 Web 爬虫窃取内容及防护暴力破解攻击很有帮助,但仅靠速率限制可能不足以有效应对复杂的 DDoS 攻击。

然而,在高效 DDoS 防护策略中,速率限制不失为一种有效手段。

(3)Web 应用程序防火墙

通过 DDoS 硬件防火墙对异常流量的清洗过滤,通过数据包的规则过滤、数据流指纹检测过滤、及数据包内容定制过滤等顶尖技术能准确判断外来访问流量是否正常,进一步将异常流量禁止过滤。

Web Application Firewall (WAF) 是一种有效工具,有助于缓解第 7 层 DDoS 攻击。在互联网和源站之间部署 WAF 后,WAF 可以充当反向代理,保护目标服务器,防止其遭受特定类型的恶意流量入侵。

通过基于一系列用于识别 DDoS 工具的规则筛选请求,可以阻止第 7 层攻击。有效的 WAF 的一个关键价值是能够快速实施自定义规则以应对攻击。

(4)Anycast 网络扩散

此类缓解方法使用 Anycast network,将攻击流量分散至分布式服务器网络,直到网络吸收流量为止。

这种方法就好比将湍急的河流引入若干独立的小水渠,将分布式攻击流量的影响分散到可以管理的位置,从而分散破坏力。

Anycast 网络在缓解 DDoS 攻击方面的可靠性取决于攻击规模及网络规模和效率。采用 Anycast 分布式网络是 Cloudflare 实施 DDoS防护策略的一个重要组成部分。

Cloudflare 拥有 51 Tbps 的网络,比有记录的最大 DDoS 攻击大一个数量级。

(5)采用高性能的网络设备

要保证网络设备不能成为瓶颈,因此选择路由器、交换机、硬件防火墙等设备的时候要尽量选用知名度高、口碑好的产品。再就是假如和网络提供商有特殊关系或协议的话就更好了,当大量攻击发生的时候请他们在网络接点处做一下流量限制来对抗某些种类的DDoS攻击是非常有效的。

CDN 高防 IP是针对互联网服务器在遭受大流量的 DDoS 攻击后导致服务不可用的情况下,推出的付费增值服务,用户可以通过配置高防 IP,将攻击流量引流到高防 IP,确保源站的稳定可靠,通常可以提供高达几百 Gbps 的防护容量,抵御一般的 DDoS 攻击绰绰有余。

此外还可以:提高网络带宽保证;升级主机服务器硬件等等,这就是传说中的技术不够,用钱凑。
在这里插入图片描述

(6)高级DDoS 防护和缓解:Cloudflare CDN

内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全国的海量加速节点,使其用户可就近获取所需内容,避免网络拥堵、地域、运营商等因素带来的访问延迟问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。

Cloudflare 的内容分发网络(CDN)是一组分布在不同地理位置的服务器,可确保快速交付 Internet 内容,包括 HTML 页面、JavaScript 文件、样式表和图像。在 Cloudflare 上缓存静态资源可减少服务器负载和带宽,不会因带宽峰值而产生额外费用。

分布式拒绝服务(DDoS)攻击通过用流量淹没其基础架构来中断网站服务。Cloudflare 的 CDN 的网络容量为史上最大 DDoS 攻击的 15 倍,并且可以处理现代 DDoS 以确保您的网站正常运行。

使用Cloudflare CDN的五个好处:

  1. 隐藏服务器IP,SYN/ACK攻击直接豁免,亦可避免攻击者扫描服务器端口找到漏洞;
  2. 防火墙前置,在CDN上即已缓解/过滤异常请求[GET/POST]压力;
  3. 验证码前置,即人机验证;(技术不够的DDoS攻击根本绕不过,攻击随即缓解;
  4. 缓存静态资源,大大减少服务器带宽压力;
  5. Page Rule,Page Rule 使您能够根据页面的 URL 进行各种操作,例如创建重定向、微调缓存行为或启用和禁用各种服务。

分布式集群防御的特点是在每个节点服务器配置多个 IP 地址,并且每个节点能承受不低于 10G 的 DDoS 攻击,如一个节点受攻击无法提供服务,系统将会根据优先级设置自动切换另一个节点,并将攻击者的数据包全部返回发送点,使攻击源成为瘫痪状态,从更为深度的安全防护角度去影响企业的安全执行决策。

服务器前端加CDN中转(免费的有百度云加速、360网站卫士、加速乐、安全宝等),如果资金充裕的话,可以购买高防的盾机,用于隐藏服务器真实IP,域名解析使用CDN的IP,所有解析的子域名都使用CDN的IP地址。此外,服务器上部署的其他域名也不能使用真实IP解析,全部都使用CDN来解析。另外,防止服务器对外传送信息泄漏IP,最常见的是,服务器不使用发送邮件功能,如果非要发送邮件,可以通过第三方代理(例如sendcloud)发送,这样对外显示的IP是代理的IP。总之,只要服务器的真实IP不泄露,10G以下小流量DDOS的预防花不了多少钱,免费的CDN就可以应付得了。如果攻击流量超过20G,那么免费的CDN可能就顶不住了,需要购买一个高防的盾机来应付了,而服务器的真实IP同样需要隐藏。

(7)使用缓存

后端对MySQL进行缓存处理,避免对数据库频繁查询;如使用Redis + PHP方案

(8)静态化

将网站尽可能做成静态页面,不仅能大大提高抗攻击能力,而且还给黑客入侵带来不少麻烦,最好在需要调用数据库的脚本中,拒绝使用代理的访问,经验表明,使用代理访问你网站的 80%属于恶意行为。

静态可以很好的减轻服务器负载,是湮灭DDoS攻击者最后的倔强;

静态页面:htm、html、shtml、xml

静态网页是指存放在服务器文件系统中实实在在的HTML文件。当用户在浏览器中输入页面的URL,然后回车,浏览器就会将对应的html文件下载、渲染并呈现在窗口中。早期的网站通常都是由静态页面制作的。

动态页面:asp、jsp、php、perl、cgi

动态网页是相对于静态网页而言的。当浏览器请求服务器的某个页面时,服务器根据当前时间、环境参数、数据库操作等动态的生成HTML页面,然后在发送给浏览器(后面的处理就跟静态网页一样了)。很明显,动态网页中的“动态”是指服务器端页面的动态生成,相反,“静态”则指页面是实实在在的、独立的文件。

由于静态页面不会涉及数据库请求,也无需经过PHP处理,几乎零消耗;这样的情况下,只需要使用到nginx,而nginx的高性能低消耗,基本无敌。

实现静态化的方案:

  1. 部署CDN,缓存静态资源。如使用:Cloudflare CDN
  2. 配置静态镜像,自动切换静态镜像脚本:主要用于网页的排版展示,论坛,社区不可用(因为这些地方需要交互,需要大量调用数据库,PHP等)
(9)封禁异常请求IP
(10)使用TLS1.3

Transport Layer Security (TLS) 保证客户端和 Web 服务器之间通过 HTTPS 进行加密通信。它取代了现已弃用的安全套接字层(SSL)协议。 使用 TLS 加密网络流量时,用户会在浏览器窗口中的 URL 框附近看到一个绿色挂锁。

通过在 Cloudflare 仪表板的 SSL/TLS 应用中设置Minimum TLS Version,您可以管理域在通过 Cloudflare 进行代理时使用的 TLS 版本。

TLS 1.3 是 TLS 协议的最新且最安全的版本。它具有比旧版本更短的延迟以及多个新功能。 当前在 Chrome(从第 66 版开始)和 Firefox(从第 60 版开始)中以及在 Safari 和 Edge 浏览器的开发中都支持 TLS 1.3。
在这里插入图片描述

(11)专项防御
  1. SYN Flood防御
    前文描述过,SYN Flood攻击大量消耗服务器的CPU、内存资源,并占满SYN等待队列。相应的,我们修改内核参数即可有效缓解。
    此外,可以分别为启用SYN Cookie、设置SYN最大队列长度以及设置SYN+ACK最大重试次数。
    SYN Cookie的作用是缓解服务器资源压力。启用之前,服务器在接到SYN数据包后,立即分配存储空间,并随机化一个数字作为SYN号发送SYN+ACK数据包。然后保存连接的状态信息等待客户端确认。启用SYN Cookie之后,服务器不再分配存储空间,而且通过基于时间种子的随机数算法设置一个SYN号,替代完全随机的SYN号。发送完SYN+ACK确认报文之后,清空资源不保存任何状态信息。直到服务器接到客户端的最终ACK包,通过Cookie检验算法鉴定是否与发出去的SYN+ACK报文序列号匹配,匹配则通过完成握手,失败则丢弃。当然,前文的高级攻击中有SYN混合ACK的攻击方法,则是对此种防御方法的反击,其中优劣由双方的硬件配置决定
    tcp_max_syn_backlog则是使用服务器的内存资源,换取更大的等待队列长度,让攻击数据包不至于占满所有连接而导致正常用户无法完成握手。net.ipv4.tcp_synack_retries是降低服务器SYN+ACK报文重试次数,尽快释放等待资源。这三种措施与攻击的三种危害一一对应,完完全全地对症下药。但这些措施也是双刃剑,可能消耗服务器更多的内存资源,甚至影响正常用户建立TCP连接,需要评估服务器硬件资源和攻击大小谨慎设置。
    除了定制TCP/IP协议栈之外,还有一种常见做法是TCP首包丢弃方案,利用TCP协议的重传机制识别正常用户和攻击报文。当防御设备接到一个IP地址的SYN报文后,简单比对该IP是否存在于白名单中,存在则转发到后端。如不存在于白名单中,检查是否是该IP在一定时间段内的首次SYN报文,不是则检查是否重传报文,是重传则转发并加入白名单,不是则丢弃并加入黑名单。是首次SYN报文则丢弃并等待一段时间以试图接受该IP的SYN重传报文,等待超时则判定为攻击报文加入黑名单。
    首包丢弃方案对用户体验会略有影响,因为丢弃首包重传会增大业务的响应时间,有鉴于此发展出了一种更优的TCP Proxy方案。所有的SYN数据报文由清洗设备接受,按照SYN Cookie方案处理。和设备成功建立了TCP三次握手的IP地址被判定为合法用户加入白名单,由设备伪装真实客户端IP地址再与真实服务器完成三次握手,随后转发数据。而指定时间内没有和设备完成三次握手的IP地址,被判定为恶意IP地址屏蔽一定时间。除了SYN Cookie结合TCP Proxy外,清洗设备还具备多种畸形TCP标志位数据包探测的能力,通过对SYN报文返回非预期应答测试客户端反应的方式来鉴别正常访问和恶意行为。
    清洗设备的硬件具有特殊的网络处理器芯片和特别优化的操作系统、TCP/IP协议栈,可以处理非常巨大的流量和SYN队列。
  2. HTTP Flood防御
    HTTP Flood攻击防御主要通过缓存的方式进行,尽量由设备的缓存直接返回结果来保护后端业务。大型的互联网企业,会有庞大的CDN节点缓存内容。
    当高级攻击者穿透缓存时,清洗设备会截获HTTP请求做特殊处理。最简单的方法就是对源IP的HTTP请求频率做统计,高于一定频率的IP地址加入黑名单。这种方法过于简单,容易带来误杀,并且无法屏蔽来自代理服务器的攻击,因此逐渐废止,取而代之的是JavaScript跳转人机识别方案。
    HTTP Flood是由程序模拟HTTP请求,一般来说不会解析服务端返回数据,更不会解析JS之类代码。因此当清洗设备截获到HTTP请求时,返回一段特殊JavaScript代码,正常用户的浏览器会处理并正常跳转不影响使用,而攻击程序会攻击到空处。
  3. DNS Flood防御
    DNS攻击防御也有类似HTTP的防御手段,第一方案是缓存。其次是重发,可以是直接丢弃DNS报文导致UDP层面的请求重发,可以是返回特殊响应强制要求客户端使用TCP协议重发DNS查询请求。
    特殊的,对于授权域DNS的保护,设备会在业务正常时期提取收到的DNS域名列表和ISP DNS IP列表备用,在攻击时,非此列表的请求一律丢弃,大幅降低性能压力。对于域名,实行同样的域名白名单机制,非白名单中的域名解析请求,做丢弃处理。
  4. 慢速连接攻击防御
    Slowloris攻击防御比较简单,主要方案有两个。
    第一个是统计每个TCP连接的时长并计算单位时间内通过的报文数量即可做精确识别。一个TCP连接中,HTTP报文太少和报文太多都是不正常的,过少可能是慢速连接攻击,过多可能是使用HTTP 1.1协议进行的HTTP Flood攻击,在一个TCP连接中发送多个HTTP请求。
    第二个是限制HTTP头部传输的最大许可时间。超过指定时间HTTP Header还没有传输完成,直接判定源IP地址为慢速连接攻击,中断连接并加入黑名单。
(三)攻击预防
(1)减少公开暴露

对于企业而言, 减少不必要的分开曝光是十分有效的防御DDoS攻击的一种方式, 及时关闭不必要的服务, 设置安全群组和私有网络, 禁止对主机的非开放服务, 限制打开最大SYN连接数, 限制特定IP地址的访问。通过这些方式可以减少受到攻击的可能性。

(2)利用扩展和冗余

DDoS攻击对不同的协议层具有多种攻击方式, 因此尽可能采取多种手段进行防范。利用扩展和冗余是在受到攻击前做好防范。它能使得系统在遭受攻击时具有一定的可扩展性, 不至于一旦受到攻击就将完全暂停服务, 尽可能减少DDoS攻击带来的危害。

(3)提升网络带宽保证能力

网络带宽直接决定抗DDoS攻击的能力, 如果带宽仅仅只能10M的话, 无论如何都不能抵御DDoS攻击。理论上讲网络带宽越大越好, 但是考虑到经济原因, 不可能无限制地将网络带宽提高, 要在经济能力允许的范围内尽量提高网络带宽的保证能力。

(4)分布式资源共享服务器

将数据和程序分布在多个服务器上, 建立分布式资源共享服务器。分布式资源共享服务器有利于协调整个系统共同解决问题, 进行更加优化的资源分配。能够克服传统的资源紧张与响应瓶颈的缺陷, 分布式规模越大, 防御攻击也就更加容易。

(5)监控系统性能

对系统性能进行监控也是预防DDoS攻击的一种重要方式, 不合理的服务器配置会使得系统容易被DDoS攻击, 对API、CDN和DNS等第三方服务进行监控, 对网络节点进行监视, 及时发现并清理可能出现的漏洞。当这些性能出现异常后, 及时进行维护。对网络日志进行定期查阅, 看是否有异常入侵, 及时做好防范工作。


至此,文章也就进入尾声了。希望本文能够起到抛砖引玉之效,也欢迎大家的批评交流。


如果您有任何疑问或者好的建议,期待你的留言、评论与关注!

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邓大帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值