漏洞之 DDoS(Distributed Denial of Service,分布式拒绝服务)
什么是 DDoS
DDoS(Distributed Denial of Service,分布式拒绝服务)。
那什么是拒绝服务(Denial of Service)呢?凡是能导致合法用户不能够正常访问网络服务的行为都算是拒绝服务攻击。也就是说拒绝服务攻击的目的非常明确,就是要阻止合法用户对正常网络资源的访问,从而达成攻击者不可告人的目的。
分布式拒绝服务攻击一旦被实施,攻击网络包就会从很多 DoS 攻击源犹如洪水般涌向受害主机。从而把合法用户的网络请求淹没,导致合法用户无法正常访问服务器的网络资源。
常见 DDoS 攻击方法
DDoS 攻击从层次上可分为网络层攻击与应用层攻击,从攻击手法上可分为快型流量攻击与慢型流量攻击,但其原理都是造成资源过载,导致服务不可用。
网络层 DDoS 攻击
网络层 DDoS 攻击常见手段有:SYN Flood、ACK Flood、Connection Flood、UDP Flood、ICMP Flood、TCP Flood、Proxy Flood 等。
SYN Flood 攻击
SYN Flood 攻击是一种利用 TCP 协议缺陷,发送大量伪造的 TCP 连接请求,从而使得被攻击方资源耗尽(CPU 满负载或内存不足)的攻击方式。
标准的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 就是用户向服务器发送报文后突然死机或掉线,那么服务器在发出应答报文后就无法收到客户端的确认报文(第三次握手无法完成),这时服务器端一般会重试并等待一段时间(至少 30s)后再丢弃这个未完成的连接。
一个用户出现异常导致服务器的一个线程等待一会儿并不是大问题,但恶意攻击者大量模拟(构造源 IP 去发送 SYN 包)这种情况,服务器端为了维护数以万计的半连接而消耗非常多的资源,结果往往是无暇理睬正常客户的请求,甚至崩溃。从正常客户的角度看来,网站失去了响应,无法访问。
ACK Flood
ACK Flood 攻击是在 TCP 连接建立之后进行的。所有数据传输的 TCP 报文都是带有 ACK 标志位的,主机在接收到一个带有 ACK 标志位的数据包的时候,需要检查该数据包所表示的连接四元组是否存在。如果存在则检查该数据包所表示的状态是否合法,然后再向应用层传递该数据包。如果在检查中发现该数据包不合法(例如:该数据包所指向的目的端口在本机并未开放),则主机操作系统协议栈会回应 RST 包告诉对方此端口不存在。
这里,服务器要做两个动作:查表、回应 ACK/RST。对比主机以及防火墙在接收到 ACK 报文和 SYN 报文时所做动作的复杂程度,显然 ACK 报文带来的负载要小得多。这种攻击方式显然没有 SYN Flood 给服务器带来的冲击大,因此攻击者一定要用大流量 ACK 小包冲击才会对服务器造成影响。所以在实际环境中,只有当攻击程序每秒钟发送 ACK 报文的速率达到一定的程度,才能使主机和防火墙的负载有大的变化。
当发包速率很大的时候,主机操作系统将耗费大量的精力接收报文、判断状态,同时要主动回应 RST 报文,正常的数据包就可能无法得到及时的处理。这时候客户端的表现就是访问页面反应很慢,丢包率较高。但是状态检测的防火墙通过判断 ACK 报文的状态是否合法,借助其强大的硬件能力可以较为有效的过滤攻击报文。当然如果攻击流量非常大,由于需要维护很大的连接状态表同时要检查数量巨大的 ACK 报文的状态,防火墙也会不堪重负导致网络瘫痪。
目前 ACK Flood 并没有成为攻击的主流,而通常是与其他攻击方式组合在一起使用。
Connection Flood
Connection Flood 是典型的并且非常有效的利用小流量冲击大带宽网络服务的攻击方式。这种攻击的原理是利用真实的 IP 地址向服务器发起大量的连接,并且建立连接之后很长时间不释放。长期占用服务器的资源,造成服务器上残余连接 (WAIT 状态) 过多,效率降低,甚至资源耗尽,无法响应其它客户所发起的连接。
其中一种攻击方法是每秒钟向服务器发起大量的连接请求,这类似于固定源 IP 的 SYN Flood 攻击,不同的是采用了真实的源 IP 地址。通常这可以在防火墙上限制每个源 IP 地址每秒钟的连接数来达到防护目的。
但现在已有工具采用慢速连接的方式,也即几秒钟才和服务器建立一个连接,连接建立成功之后并不释放并定时发送垃圾数据包给服务器使连接得以长时间保持。这样一个 IP 地址就可以和服务器建立成百上千的连接,而服务器可以承受的连接数是有限的,这就达到了拒绝服务的效果。
UDP Flood 攻击
由于 UDP 是一种无连接的协议,因此攻击者可以伪造大量的源 IP 地址去发送 UDP 包,此种攻击属于大流量攻击。正常应用情况下,UDP 包双向流量会基本相等,因此在消耗对方资源的时候也在消耗自己的资源。
由于UDP属于无连接协议,消耗的系统资源较少,相同条件下容易产生更高的流量,是流量型攻击的主要手段。当受害系统接收到一个UDP数据包的时候,它会确定目的端口正在等待中的应用程序。当它发现该端口中并不存在正在等待的应用程序,它就会产生一个目的地址无法连接的ICMP数据包发送给该伪造的源地址。如果向受害者计算机端口发送了足够多的UDP数据包的时候,系统就会造成拒绝服务攻击,因此,UDP FLOOD成为了流量型拒绝服务攻击的主要手段。
ICMP Flood 攻击
此攻击属于大流量攻击,其原理就是不断发送不正常的 ICMP 包(所谓不正常就是 ICMP 包内容很大),导致目标带宽被占用。但其本身资源也会被消耗,并且目前很多服务器都是禁 ping 的(在防火墙里可以屏蔽 ICMP 包),因此这种方式已经落伍。
Smurf 攻击(反射型)
这种攻击类似于 ICMP Flood 攻击,但它能巧妙地修改进程。
Smurf 攻击是经典的 DDoS 攻击,Smurf 攻击是以最初发动这种攻击的程序名 Smurf 来命名。这种攻击方法结合使用了 IP 欺骗和 ICMP 回复方法使大量网络传输充斥目标系统,引起目标系统拒绝为正常系统进行服务。
攻击的过程大致是这样的:Attacker 向一个具有大量主机和因特网连接的网络广播地址发送一个欺骗性 Ping 包,而欺骗性 Ping 分组的源地址就是 Victim(9.9.9.9)希望攻击的目标。路由器接收到这个发送给 IP 广播地址(1.1.1.255)的分组后,由于 ICMP 并不会进行握手而验证源 IP 地址,路由器认为这就是广播分组,进而会对本地网段中的所有主机(1.1.1.2,1.1.1.3,1.1.1.4,1.1.1.5,1.1.1.6) 进行广播。网段中的所有主机都会向欺骗性分组的 IP 地址发送 echo 响应信息。如果这是一个很大的以太网段,可能会有上百台主机对收到的 echo 请求进行回复,这些目标系统很快就会被大量的 echo 信息吞没,这样就能轻而易举地阻止该系统处理其它任何网络传输,从而达到拒绝为正常系统服务的结果。
这种攻击不仅影响目标系统,还影响目标公司的因特网连接。那么如何防止这种类型的攻击?
- 阻塞 Smurf 攻击的源头。Smurf 攻击依靠攻击者的力量使用欺骗性源地址发送 echo 请求,用户可以使用路由器的访问控制来保证内部网络中发出的所有传输信息都具有合法的源地址,以防止这种攻击。
- 阻塞 Smurf 的反弹站点。用户可以有两种选择以阻塞 Smurf 攻击的反弹站点。第一种方法可以通过 ACL 阻止所有入站 echo 请求,这样可以防止这些分组到达自己的网络。如果不能阻塞所有入站 echo 请求,用户就需要让自己的路由器把网络广播地址映射成为 LAN 广播地址。
应用层 DDoS 攻击
应用层 DDoS 攻击不是发生在网络层,是发生在 TCP 建立握手成功之后,应用程序处理请求的时候。常见的有:CC 攻击、DNS Flood、慢速连接攻击等。
CC 攻击
CC 攻击(Challenge Collapsar)是 DDoS 攻击的一种,其前身名为 Fatboy 攻击,也是一种常见的网站攻击方法。CC 攻击还有一段比较有趣的历史,Collapsar 是绿盟科技的一款防御 DDoS 攻击的产品品牌,Collapasar 在对抗拒绝服务攻击的领域内具有比较高的影响力和口碑。然而黑客为了挑衅,研发了一款 Challenge Collapasar 工具简称 CC,表示要向 Collapasar 发起挑战。
CC 攻击的原理就是借助代理服务器针对目标系统的消耗资源比较大的页面不断发起正常的请求,造成对方服务器资源耗尽,一直到宕机崩溃。因此在发送 CC 攻击前,我们需要寻找加载比较慢,消耗资源比较多的网页。比如:需要查询数据库的页面、读写硬盘的文件等。相比其它的 DDoS 攻击 CC 更有技术含量一些,这种攻击你见不到真实源 IP。见不到特别大的异常流量,但造成服务器无法进行正常连接。
Slowloris 攻击
Slowloris 是一种慢速连接攻击,Slowloris 是利用 Web Server 的漏洞或设计缺陷,直接造成拒绝服务。其原理是:以极低的速度往服务器发送 HTTP 请求,Apache 等中间件默认会设置最大并发链接数,而这种攻击就是会持续保持连接,导致服务器链接饱和不可用。Slowloris 有点类似于 SYN Flood 攻击,只不过 Slowloris 是基于 HTTP 协议。
Slowloris PoC
1 |
|
完整的 HTTP 请求头结尾应该是两次的 \r\n\r\n
,这里少了一次,因此服务器将会一直等待。
Slow Attack
Slow Attack 也是一种慢速 DoS 攻击,它通过消耗服务器的系统资源和连接数,导致 Web 服务器无法正常工作。常见的攻击方式包括 Slow Header、Slow Body 和 Slow Read。
- Slow Header:正常的 HTTP Header 以两个 CLRF 结尾,通过发送只包含一个 CLRF 的畸形 Header 请求来占用 Web 服务器连接,从而达到消耗掉服务器所有可用的连接数。最终造成 Web 服务器资源饱和并拒绝新的服务。
- Slow Read:向服务器请求很大的文件,然后通过设置 TCP 滑动窗口较小值,导致服务器以极慢的速度传输文件。这样,就会占用服务器大量的内存,从而造成拒绝服务。
- Slow Body:在向服务器发送 HTTP Post 包时,指定一个非常大的 Content-Length 值,然后以极低的速度发包并保持连接不断,最终导致服务器连接饱和不可用。
Kali Linux 提供的专用测试工具 SlowHTTPTest 能够实现以上三种 Slow Attack 方式。
JavaScript DDoS
基于 JavaScript 的 DDoS 攻击利用的工具是普通网民的上网终端,这也意味着只要装有浏览器的电脑,都能被用作为 DDoS 攻击者的工具。当被操纵的浏览器数量达到一定程度时,这种 DDoS 攻击方式将会带来巨大的破坏性。
攻击者会在海量访问的网页中嵌入指向攻击目标网站的恶意 JavaScript 代码,当互联网用户访问该网页时,则流量被指向攻击目标网站。比较典型攻击事件:GitHub DDoS 攻击。
ReDoS 攻击
ReDoS (Regular expression Denial of Service), 中文译作正则表达式拒绝服务攻击。
开发人员使用了正则表达式来对用户输入的数据进行有效性校验,当编写校验的正则表达式存在缺陷或者不严谨时,攻击者可以构造特殊的字符串来大量消耗服务器的系统资源,从而造成服务器的服务中断或停止。
更详细介绍可参考:浅析 ReDoS 的原理与实践
DNS flood
DNS 服务是整个互联网的基础服务,在我们链接互联网的时候,需要通过 DNS 解析将域名转化成对应的 IP 地址。
DNS Query Flood
DNS 作为互联网的核心服务之一,自然也是 DDoS 攻击的一大主要目标。DNS Query Flood 采用的方法是操纵大量傀儡机器,向目标服务器发送大量的域名解析请求。服务器在接收到域名解析请求时,首先会在服务器上查找是否有对应的缓存,若查找不到且该域名无法直接解析时,便向其上层 DNS 服务器递归查询域名信息。
通常,攻击者请求解析的域名是随机生成或者是网络上根本不存在的域名。由于在本地域名服务器无法查到对应的结果,本地域名服务器必须使用递归查询向上层域名服务器提交解析请求,引起连锁反应。解析过程给本地域名服务器带来一定的负载,每秒钟域名解析请求超过一定的数量就会造成域名服务器解析域名超时。
根据微软的统计数据,一台 DNS 服务器所能承受的动态域名查询的上限是每秒钟 9000 个请求。而一台 P3 的 PC 机上可以轻易地构造出每秒钟几万个域名解析请求,足以使一台硬件配置极高的 DNS 服务器瘫痪,由此可见 DNS 服务器的脆弱性。
DNS 反射攻击
理论上来说 ISP 的 DNS 服务器只响应来自它自己客户 IP 的 DNS Query 响应,但事实上互联网上大量 DNS 服务的默认配置缺失,导致了会响应所有 IP 的 DNS Query 请求。
同时,DNS 大部分使用 UDP 协议,UDP 协议没有握手过程让其去验证请求的源 IP。如下图所示,攻击者(实际上是攻击者控制的傀儡机)发送大量伪造了 Victim IP 的请求给 DNS 服务器,DNS 服务器成为放大器将 DNS 响应回复给受害者。
下面再来看一下 DNS 如何将请求数据包进行放大,输入(x.x.x.x为 DNS 服务器 IP):
1 |
|
返回结果,这里为了节约篇幅,我们省略了大部分的响应内容。我们可以看到,响应的内容远远大于请求的数据包内容,这里就产生了放大的效果。
1 |
|
不幸的是,目前互联网上存在大量的 DNS 服务器可以被利用,黑客使用网络扫描器工具可以很容易的发现这些 DNS 服务器并加以利用。这需要:
a. 如果您是 DNS 的管理员,需要加固 DNS 服务器,可以按照下面的配置关闭递归功能和限制可查询的 IP 地址。
1 |
|
b. 如果是受害者,首先可以通过网络层的 ACL 规则来防御, 或者使用抗 DDoS 系统进行流量清洗,目前大部分的云服务商都有这类功能。
SSDP 反射攻击
互联网上家用路由器、网络摄像头、打印机、智能家电等智能设备普遍采用 UPnP(即插即用)协议作为网络通讯协议, 而 UPnP 设备的发现是通过源端口为 1900 的 SSDP(简单服务发现协议)进行相互感知。
利用 SSDP 协议进行反射攻击的原理与利用 DNS 服务、NTP 服务类似,都是伪造成被攻击者的 IP 地址向互联网上大量的智能设备发起 SSDP 请求,接收到请求的智能设备根据源 IP 地址将响应数据包返回给受害者。随着物联网和智能设备的快速发展和普及,利用智能设备展开 DDoS 攻击会越来越普遍。SSDP 的请求报文示例如下:
1 |
|
返回的报文如下:
1 |
|
那么该如何防护 SSDP 攻击呢?
a. 对于不需要即插即用服务的设备,关闭即插即用服务。
b. 在被 SSDP DDoS 攻击的时候,通过网络设备的 ACL 规则过滤 SSDP 指纹过滤。或者引入 DDoS 防护系统。
NTP 反射攻击
NTP 是网络时间协议(Network Time Protocol)的简称,是用来使计算机时间同步化的网络协议。NTP 包含一个 monlist 功能,也被称为 MON_GETLIST,主要用于监控 NTP 服务器,NTP 服务器响应 monlist 后就会返回与 NTP 服务器进行过时间同步的最后 600 个客户端的 IP,响应包按照每 6 个 IP 进行分割,最多有 100 个响应包。我们可以通过 ntpdc 命令向一个 NTP 服务器发送 monlist 以及结合抓包来看下实际的效果。
1 |
|
在上面的命令行中我们可以看到一次含有 monlist 的请求收到了 602 行数据,除去头两行是无效数据外,正好是 600 个客户端 IP 列表,并且从 wireshark 中我们也可看到显示有 101 个 NTP 协议的包,除去一个请求包,正好是 100 个响应包。
a. 如果作为 NTP 管理员,需要加固 NTP 服务,NTP 服务器升级到 4.2.7p26 或者更高的版本。关闭现在 NTP 服务的 monlist 功能,在ntp.conf 配置文件中增加选项disable monitor
b. 如果是受害者,如何防御 NTP 反射和放大攻击?首先可以通过网络层的 ACL 规则来防御, 或者使用抗 DDoS 系统进行流量清洗,目前大部分的云服务商都有这类功能。
无线 DDoS 攻击
Auth Flood 攻击
Auth Flood 攻击,即身份验证洪水攻击。该攻击目标主要针对那些处于通过验证和 AP 建立关联的关联客户端,攻击者将向 AP 发送大量伪造的身份验证请求帧(伪造的身份验证服务和状态代码),当收到大量伪造的身份验证请求超过所能承受的能力时,AP将断开其他无线服务连接。
Deauth Flood 攻击
Deauth Flood 攻击即为取消验证洪水攻击,它旨在通过欺骗从 AP 到客户端单播地址的取消身份验证帧来将客户端转为未关联 / 未认证的状态。对于目前的工具来说,这种形式的攻击在打断客户无线服务方面非常有效和快捷。一般来说,在攻击者发送另一个取消身份验证帧之前,客户端会重新关联和认证以再次获取服务。攻击者反复欺骗取消身份验证帧就能使所有客户端持续拒绝服务。
Association Flood 攻击
Association Flood 攻击即为关联洪水攻击。在无线路由器或者接入点内置一个列表即为连接状态表,里面可显示出所有与该 AP 建立连接的无线客户端状态。它试图通过利用大量模仿和伪造的无线客户端关联来填充 AP 的客户端关联表,从而达到淹没 AP 的目的。
由于开放身份验证(空身份验证)允许任何客户端通过身份验证后关联。利用这种漏洞的攻击者可以通过创建多个到达已连接或已关联的客户端来模仿很多客户端,从而淹没目标 AP 的客户端关联表。
Disassociation Flood 攻击
Disassociation Flood 攻击即为取消关联洪水攻击,和 Deauth Flood 攻击表现方式很相似。它通过欺骗从 AP 到客户端的取消关联帧来强制客户端成为未关联 / 未认证的状态。一般来说,在攻击者发送另一个取消关联帧之前,客户端会重新关联以再次获取服务。攻击者反复欺骗取消关联帧就能使客户端持续拒绝服务。
Disassociation Broadcast 攻击和 Disassociation Flood 攻击原理基本一致,只是在发送程度及使用工具上有所区别。前者很多时候用于配合进行无线中间人攻击,而后者常用于目标确定的点对点无线 DoS,比如:破坏或干扰指定机构或部门的无线接入点等。
RF Jamming 攻击
RF Jamming 攻击即为 RF 干扰攻击。该攻击是通过发出干扰射频达到破坏正常无线通信的目的。而前面几种攻击主要是基于无线通信过程及协议的。RF 为射频,主要包括无线信号发射机及收信机等。
DDoS 攻击方式分类1
直接攻击。
直接攻击是指攻击者利用控制的大量主机对受害者发送大量的数据流量, 使得受害者的网络带宽被占据, 并大量消耗服务器和网络设备的处理能力, 达到拒绝服务攻击的目的。例如ICMP/IGMP洪水攻击, UDP洪水攻击等都是典型的DDoS直接攻击方式。
反射型
一般而言,我们会根据针对的协议类型和攻击方式的不同,把 DDoS 分成 SYN Flood、ACK Flood、Connection Flood、UDP Flood、NTP Flood、SSDP Flood、DNS Flood、HTTP Flood、ICMP Flood、CC 等各类攻击类型。
每一种攻击类型都有其特点,而反射型的 DDoS 攻击是一种新的变种。攻击者并不直接攻击目标服务的 IP,而是利用互联网的某些特殊服务开放的服务器,通过伪造被攻击者的 IP 地址向有开放服务的服务器发送构造的请求报文,该服务器会将数倍于请求报文的回复数据发送到被攻击 IP,从而对后者间接形成 DDoS 攻击。
如下图所示,这里的攻击者(Attacker,实际情况中更多的会利用傀儡机进行攻击)不直接把攻击包发给受害者,而是冒充受害者给放大器(Amplifiers)发包,然后通过放大器再反射给受害者。
在反射型攻击中,攻击者利用了网络协议的缺陷或者漏洞进行 IP 欺骗,主要是因为很多协议(例如 ICMP、UDP 等)对源 IP 不进行认证。同时,要达到更好的攻击效果,黑客一般会选择具有放大效果的协议服务进行攻击。
总结一下就是利用 IP 欺骗进行反射和放大,从而达到四两拨千斤的效果。目前常见的反射攻击有:DNS 反射攻击、NTP 反射攻击、SSDP 反射攻击等。
注:将源地址设为假的无法回应,即为 SYN Flood 攻击。制造流量和攻击目标收到的流量为 1:1,回报率低。
流量放大型
通过递归等手法将攻击流量放大的攻击类型,比如:以反射型中常见的 SSDP 协议为例,攻击者将 Search type 设置为 ALL。搜索所有可用的设备和服务,这种递归效果产生的放大倍数是非常大的,攻击者只需要以较小的伪造源地址的查询流量就可以制造出几十甚至上百倍的应答流量发送至目标。
混合型
在实际情况中,攻击者只求达到打垮对方的目的。发展到现在,高级攻击者已经不倾向使用单一的攻击手段。而是根据目标系统的具体环境灵动组合,发动多种攻击手段。
比如:TCP 和 UDP、网络层和应用层攻击同时进行,这样的攻击既具备了海量的流量,又利用了协议、系统的缺陷,尽其所能地展开攻势。对于被攻击目标来说,需要面对不同协议、不同资源的分布式的攻击,分析、响应和处理的成本就会大大增加。
脉冲波型
这是一种新型的 DDoS 攻击方法,给某些 DDoS 攻击解决方案带来了问题,因为它允许攻击者攻击以前认为是安全的服务器。之所以将这种新技术命名为脉冲波,是由于其攻击流量展现出来的图形看起来很像不连贯的重复的脉冲状。这类攻击通常呈现一个有上有下的斜三角形的形状,这个过程体现了攻击者正在慢慢地组装机器人并将目标对准待攻击的目标。
一次新的脉冲波攻击从零开始,在很短的时间跨度内达到最大值,然后归零,再回到最大值,如此循环重复,中间的时间间隔很短。脉冲波型 DDoS 相对难以防御,因为其攻击方式避开了触发自动化的防御机制。
链路泛洪
随着 DDoS 攻击技术的发展,又出现了一种新型的攻击方式 Link Flooding Attack,这种方式不直接攻击目标而是以堵塞目标网络的上一级链路为目的。对于使用了 IP Anycast 的企业网络来说,常规的 DDoS 攻击流量会被分摊到不同地址的基础设施,这样能有效缓解大流量攻击。所以攻击者发明了一种新方法,攻击至目标网络 traceroute 的倒数第二跳,即上联路由,致使链路拥塞。
DDoS 攻击方式分类2
漏洞型(基于特定漏洞进行攻击):只对具备特定漏洞的目标有效,通常发送特定数据包或少量的数据包即可达到攻击效果。
业务型(消耗业务系统性能额为主):与业务类型高度相关,需要根据业务系统的应用类型采取对应的攻击手段才能达到效果,通常业务型攻击实现效果需要的流量远低于流量型。
流量型(消耗带宽资源为主):主要以消耗目标业务系统的带宽资源为攻击手段,通常会导致网络阻塞,从而影响正常业务。
DDoS 攻击现象判定方法
SYN 类攻击判断
- 服务器 CPU 占用率很高。
- 出现大量的
SYN_RECEIVED
的网络连接状态。 - 网络恢复后,服务器负载瞬时变高。网络断开后瞬时负载下将。
UDP 类攻击判断
- 服务器 CPU 占用率很高。
- 网卡每秒接受大量的数据包。
- 网络 TCP 状态信息正常。
CC 类攻击判断
- 服务器 CPU 占用率很高。
- Web 服务器出现类似 Service Unavailable 提示。
- 出现大量的 ESTABLISHED 的网络连接状态且单个 IP 高达几十个甚至上百个连接。
- 用户无法正常访问网站页面或打开过程非常缓慢,软重启后短期内恢复正常,几分钟后又无法访问。
DDoS 攻击防御方法
网络层 DDoS 防御
- 限制单 IP 请求频率。
- 网络架构上做好优化,采用负载均衡分流。
- 防火墙等安全设备上设置禁止 ICMP 包等。
- 通过 DDoS 硬件防火墙的数据包规则过滤、数据流指纹检测过滤、及数据包内容定制过滤等技术对异常流量进行清洗过滤。
- 采用 ISP 近源清洗,使用电信运营商提供的近源清洗和流量压制,避免全站服务对所有用户彻底无法访问。这是对超过自身带宽储备和自身 DDoS 防御能力之外超大流量的补充性缓解措施。
应用层 DDoS 防御
- 优化操作系统的 TCP/IP 栈。
- 应用服务器严格限制单个 IP 允许的连接数和 CPU 使用时间。
- 编写代码时,尽量实现优化并合理使用缓存技术。尽量让网站静态化,减少不必要的动态查询。网站静态化不仅能大大提高抗攻击能力,而且还给骇客入侵带来不少麻烦,至少到现在为止关于 HTML 的溢出还没出现。
- 增加 WAF(Web Application Firewall)设备,WAF 的中文名称叫做 Web 应用防火墙。Web 应用防火墙是通过执行一系列针对 HTTP / HTTPS 的安全策略来专门为 Web 应用提供保护的一款产品。
- 使用 CDN / 云清洗,在攻击发生时,进行云清洗。通常云清洗厂商策略有以下几步:预先设置好网站的 CNAME,将域名指向云清洗厂商的 DNS 服务器;在一般情况下,云清洗厂商的 DNS 仍将穿透 CDN 的回源的请求指向源站,在检测到攻击发生时,域名指向自己的清洗集群,然后再将清洗后的流量回源。
- CDN 仅对 Web 类服务有效,针对游戏类 TCP 直连的服务无效。这时可以使用 DNS 引流 + ADS (Anti-DDoS System) 设备来清洗,还有在客户端和服务端通信协议做处理(如:封包加标签,依赖信息对称等)。
DDoS 攻击究其本质其实是无法彻底防御的,我们能做得就是不断优化自身的网络和服务架构,来提高对 DDoS 的防御能力。