查看原文
其他

DDoS 攻击的治理和缓解

计算机与网络安全 计算机与网络安全 2022-06-01

一次性进群,长期免费索取教程,没有付费教程。

教程列表见微信公众号底部菜单

进微信群回复公众号:微信群;QQ群:16004488


微信公众号:计算机与网络安全

ID:Computer-network

网络安全的实质是人与人之间的较量,是一场战争。正如军事理论家克劳塞维茨所述,即使在战争的防御阶段,也需要进攻因素。网络中对抗DDoS攻击同样需要这两种因素。一方面,我们希望能够阻止正在发生或者即将可能发生的DDoS攻击,减小DDoS攻击的规模,这需要我们积极地安全配置主机、网络和网络设备,消除其中的DDoS安全隐患,我们将这种对抗方法称为“治理”;另一方面,在DDoS攻击已经发生的情况下,作为被攻击的目标,通常会采用各种方式减小DDoS攻击造成的影响,从而保障其服务的可用性,我们将这种对抗方法称为“缓解”。


本文将从治理和缓解两个方面来讨论对抗DDoS攻击的方法。在治理阶段,需要进行僵尸网络的治理、地址伪造攻击的治理和放大器(攻击反射点)的治理;而在缓解阶段,则包含攻击流量的稀释和攻击流量的清洗两部分内容。对抗DDoS攻击的整体方法和过程如下图所示。


DDoS攻击的治理和缓解

一、DDoS攻击的治理


对DDoS攻击的治理包括僵尸网络的治理、地址伪造攻击的治理和攻击反射点(放大器)的治理。


对僵尸网络进行治理,能够从源头停止正在进行的DDoS攻击;对地址伪造攻击进行治理,能够控制和阻止未来可能发生的一部分DDoS攻击,并有利于定位攻击源头;而对攻击反射点的治理则主要在于控制和减小DDoS攻击的规模。


(一)僵尸网络的治理


对僵尸网络进行治理,切断DDoS攻击的源头,从理论上说这是对抗DDoS攻击最为有效的方法。然而,在实际操作过程中,治理僵尸网络需要面对诸多的困难和问题。


进行僵尸网络治理的首要困难在于,我们只有能够检测到网络异常,才能够知道系统感染了僵尸程序。如果僵尸主机用于发动DDOS攻击,单位时间内产生大量的攻击流量,那么安装于网络出口的检测设备或许能提示异常,从部分主机的内存占用上也可能看出端倪。但如果这些通信流量很小,并做了加密,那么这些通信则极有可能被淹没于正常的请求中而不被发觉,而我们也就几乎不能够察觉到受了感染。

检测到感染后,一般就能提取到样本,此刻遇到的另一个困难就是需要对样本进行逆向分析,找出需要的信息。依据样本的难易程度,这有可能要花费相当长的时间。不过走到这一步,治理就可以从两方面着手。


一是根据逆向分析的结果,编写僵尸程序清除工具,分发至企业局域网的其他感染主机进行清除处理,同时将C&C服务器域名或地址以及通信包特征加入规则予以拦截。迫于威胁响应的压力,这种做法通常是优先选择。这样做的不足在于,清除掉的可能只是僵尸网络的冰山一角,整个僵尸网络仍然可以维持运营,我们的网络仍然面临被攻击的风险,如来自这个僵尸网络的DDoS攻击等。


二是接管或摧毁整个僵尸网络。这种做法往往非常困难,因为僵尸网络的分布通常不局限于一个地区、一个国家甚至一个洲,而常常分布于多个国家、多个洲,其相应的控制服务器也分布广泛。因此,这种跨区域的打击行动就需要政府间的协调合作,这往往只有有实力、影响大的跨国公司才能做到。


典型的成功案例就是微软对Nitol(见下图)僵尸网络的打击行动。


Nitol僵尸网络

微软对Nitol僵尸网络的打击行动。


Nitol僵尸程序依靠嵌入盗版的Windows系统进行传播,运行成功后连接3322.org域名与服务器进行通信,主要用于DDoS攻击,自2008年以来该僵尸网络就处于活跃状态。


针对Nitol僵尸网络的行动源自微软寻找不安全供应链的研究。根据由微软提交给法院的文档,该研究开始于2011年8月。取证调查人员在中国购买20台PC,分析后,他们发现零售商正在销售隐藏嵌入该恶意软件的盗版Windows的计算机。该公司表示研究人员在黑市购买的这些PC中20%感染了恶意软件。在仔细检查之后,他们从一台预装盗版Windows XP SP3的笔记本电脑上发现了恶意程序Nitol,还有3台分别感染了Trafog、EggDrop和Malat。只有感染Nitol的计算机在不停地尝试连接一个命令控制服务器,于是微软对此展开了跟踪研究,揭开了一个庞大的僵尸网络,这一行动被称为“Operation b70”。


微软发现,Nitol能通过可移除存储媒介和网络共享传播,它的文件名叫LPK.DLL——所有应用程序都需要载入的DLL文件,因此非常便于传播。它有多个变种,变种A主要在中国流传,每个变种都硬编码一个命令控制服务器域名,感染最集中地区是广东、北京、上海和台北,主要控制命令服务器都位于中国,85.53%的病毒分析样本连接的是中国的服务器,53.33%的病毒样本连接3322.org下的子域名以获取控制命令服务器IP地址。微软点名指控3322.org域名的注册所有者以及其他不知姓名的嫌疑人,迫于法律诉讼压力,3322.org域名持有者同意与微软和中国的计算机应急响应小组合作,以阻止网络犯罪分子使用该域名。根据协议,域名持有者将把任何来自3322.org的受感染的流量引向一台由中国管理的被称为sinkhole(模拟僵尸网络的指挥和控制中心的服务器)的特殊服务器。根据微软后来发布的报告显示,自此有超过3700万的恶意连接从3322.org断开,由此给了Nitol僵尸网络灭绝性的打击。


作为网络犯罪的主要平台之一,黑客利用僵尸网络展开不同的攻击,可以导致大量机密或个人隐私泄密,也可以通过DDoS攻击使整个基础信息网络瘫痪。因此,对僵尸网络进行治理显得十分迫切而重要。


(二)地址伪造攻击的治理


在当前的互联网环境中,伪造地址发起网络攻击是一件非常容易的事。这一现象给DDoS的治理和防护带来了诸多困难。


首先,伪造地址使得追查攻击源变得更加困难,而攻击者承担的风险更小,也就更肆无忌惮。


其次,伪造地址使得DDoS能够达到更大的攻击规模,尤其是DNS反射式DDoS攻击,可以将原始攻击流量放大数十倍,加剧威胁的程度。


最后,伪造地址使得防护DDoS攻击变得更困难,受害者难以使用源地址过滤的方式阻挡攻击。


很明显,减少地址伪造对DDoS的治理和防护有很大帮助,而实现这一目标在技术层面并不困难,CERT和IETF都给出了简单有效的解决方案。


1、CERT Advisory CA-1996-21


1996年9月,纽约互联网服务商Panix遭遇DDoS,攻击者使用的是SYN FLOOD。CERT对此反应非常迅速,当月就发布了名为“TCP SYN Flooding and IP Spoofing Attacks”的CA-1996-21号公告。这份公告简要但准确地描述了SYN FLOOD的攻击原理和检测方法。CERT显然认识到地址伪造带来的巨大威胁,但同时也明白在当前的网络环境中无法彻底消除它。于是,一个简单有效的缓解方法被提了出来:路由过滤。具体而言,就是互联网服务提供商在网络出入口处的路由器上,对符合以下条件的数据包进行过滤:


  • 从外部接口进入内部网络的数据包,但源地址属于内部网络;

  • 由内部网络向外发送的数据包,但是源地址不属于内部网络。


之后众多网络设备和系统厂商都支持这种类型的过滤,包括Cisco、3COM、IBM、Sun等。


2、RFC 2827


2000年5月,IETF发布了RFC 2827“Network Ingress Filtering Defeating Denial of Service Attacks which employ IP Source Address Spoofing”。该文认为,只要对下游流量中的地址欺骗流量过滤,就可以近乎完全消除此类攻击场景。RFC 2827提供了一个实例,如下图所示。攻击者位于204.69.207.0/24网段,属于ISP D的区域中,通过路由器“router 2”,试图攻击其他主机。如果“router 2”执行了入口流量过滤,只允许源地址在204.69.207.0/24网段内的数据包流出,反之则全部禁止,那么攻击将无法进行。

伪造地址攻击示意

此外,RFC 2827认为,未来的网络设备应该实施远程访问服务器上的自动过滤。通常,用户通过接入服务器连入网络,并具有唯一的IP地址(动态或静态分配)。如果远程访问服务器可以在入口检查每一个数据包,那么就能确保用户发出的不是伪造源地址的数据包。已经有一些设备厂商和ISP开始实现此类功能,但由于缺乏激励和动力,更大范围的部署迟迟未能实现。


3、Unicast Reverse Path Forwarding


Unicast Reverse Path Forwarding(Unicast RPF,单播反向路径转发)也是一种缓解地址伪造的技术。一旦开启了这种功能,路由器会对进入的数据包检查源地址和源端口是否在路由表中。如果存在,则认为该数据包是通过最优路径到达该路由器,应该正常转发,否则丢弃。具体分为5个步骤:


1)对于Input方向的数据包,检查访问控制列表ACL是否允许通过;

2)按照Unicast RPF检查是否由最优路径抵达;

3)Forwarding Information Base(FIB)查找;

4)对于Output方向,检查访问控制列表ACL是否允许通过;

5)转发数据包。


在IETF的最佳实践BCP 84中对这种方式有较详细的介绍。这份文档名为“Ingress Filtering for Multihomed Networks”。


4、分布式过滤方法


除了上述方法外,还有很多研究者提出了其他方法来减缓或杜绝地址伪造。例如有学者提出了“基于路由的分布式包过滤方法”(Route-based Distributed Packet Filtering,DPF)。其原理是路由器根据数据包的源地址和目的地址判断其转发路径是否经过自己。如果不经过,则丢弃该数据包。如下图所示,攻击者位于AS 7中,试图对AS 4的目标进行攻击,于是将攻击源地址伪装成AS 2中的成员。当攻击数据包经过AS 6与AS 7之间的边界路由器时,路由器会判断从AS2到AS4的路径,发现不会经过自己,就将数据包丢弃。

分布式过滤

虽然类似的方法已广泛提出,但伪造地址攻击并未得到有效遏制,主要是因为ISP缺乏采用这些技术的动力。各国政府完善相应法规并执行监管,才是杜绝地址伪造的必由之路。


(三)攻击反射点的治理


反射式DDoS攻击,尤其是DNS反射攻击,已成为当前最具破坏力的攻击形式之一。2013年3月,反垃圾邮件组织Spamhaus遭受了流量高达300Gbit/s的DDoS攻击,这是迄今为止最大规模的DDoS攻击,而采用的方法就是DNS反射攻击。


反射式DDoS攻击备受攻击者青睐,主要原因有两个。第一,通过伪造地址隐藏攻击源;第二,大多数反射攻击同时具有放大作用,可以将攻击流量放大数十倍。反射攻击包括ACK、DNS、SNMP、NTP、CHARGEN等种类,其中DNS反射攻击最为普遍。这是因为互联网中存在大量可作为反射点的DNS服务器,而且DNS反射攻击可以实现较大的反射倍数。


下面以DNS反射点为例,介绍反射点的治理方法,NTP、SNMP等其他协议的反射点也依然需要进行有效治理,而只有绝大多数反射点都进行了有效的管理和配置,才能够减小放大攻击的威胁。


对于放大攻击来说,流量一旦经过反射点放大,占用带宽就会急剧上升,而无论采用何种防护方法,也都意味着成本或代价急剧上升。所以,针对反射点进行治理,对于减少流量型DDoS攻击具有事半功倍的效果。


治理反射点最直接有效的方法是提高DNS服务器的安全性。而大多数DNS服务器的管理员并非不想做到这一点,只是无从入手。针对不同的需要,接下来介绍三种方式:第一,通过Open Resolver Project验证DNS服务器的安全性;第二,安装Response Rate Limiting模块,快速实现治理的目的;第三,参考NIST SP 800-81,全面建设安全的DNS服务器。


1、Open Resolver Project


Open Resolver Project是一个国际组织,它致力于减少DNS放大攻击造成的威胁。这个组织定期维护一份DNS服务器列表,包括了3300万台服务器,其中的2800万台存在风险。下图是该组织2013年10月13日的统计结果。


Open Resolver Project的定期统计结果

Open Resolver Project提供查询功能(见下图),使用者可以查询任何网段中开放的地址解析器,查询结果包括从多个地址向其发送请求的响应结果。如果一个DNS服务器可以被从任意地址访问,并无限速地回应查询请求,那么它就可以被用作DDoS攻击的反射点。


Open Resolver Project的查询界面

Open Resolver Project建议DNS的维护者检查以下配置:


  • 限制允许访问的地址范围,以防被滥用,具体操作可以参考Team CYMRU Website。

  • 采用RRL,Knot DNS和NSD已经将其作为标准选项,而BIND还需要安装一个补丁程序。

  • 用户端设备(Customer Premises Equipment,CPE)不应在广域网接口监听DNS数据包,包括网络和广播地址。

2、RRL


2013年7月25日,互联网系统协会(Internet Systems Consortium,ISC)宣布,为了防御利用DNS发起的反射式DDoS攻击,最新版的BIND软件增加了响应速率限制(Response Rate Limiting,RRL)模块,并声称这会是缓解DNS反射攻击的最有效方法。


响应速率限制(RRL)是对DNS协议的一种增强功能,目的是缓解DDoS放大攻击。RRL官方网站认为,之所以DNS服务器很容易被用于反射攻击,是由于三方面的原因:


  • DNS查询通常使用UDP协议,因为这是一种不验证来源的协议,所以很容易伪造。攻击者可以将发送的请求数据包中源地址改为攻击目标的地址,这样DNS服务器会向受害者发送回复,也就是反射式DDoS攻击。

  • 大部分ISP不检查发自他们的数据包中源地址是否真实。这使得互联网中伪造地址盛行。

  • 几个字节的DNS请求数据包,就可以引发数倍甚至数十倍大小的响应。例如,查询isc.org的EDNS0数据包只有36个字节长(不包括UDP、IP和以太网头部),而触发的响应数据包长达3576个字节(不包括UDP、IP和以太网头部)。攻击者可以控制攻击引发巨量的增幅。


RRL官方网站给出了BIND服务器配置RRL的简要步骤:要启用RRL,需要在named.conf中添加一条配置语句。现在假设服务器为example.com,由它提供权威域名解析服务,并收到大量对域名testhost.example.com的查询请求,这些请求都有支持DNSSEC DNS安全扩展。


因为example.com是DNSSEC签名的,所以响应数据包会比较大。在请求日志中可以看到:


07-Jun-2013 12:27:34.102 queries: info: client 1.2.3.4#58540 (testhost.example.com): query: testhost.example.com IN A +ED (1.2.3.4)

07-Jun-2013 12:27:41.606 queries: info: client 1.2.3.4#55979 (testhost.example.com): query: testhost.example.com IN A +ED (1.2.3.4)

07-Jun-2013 12:27:59.196 queries: info: client 1.2.3.4#47516 (testhost.example.com): query: testhost.example.com IN A +ED (1.2.3.4)


从中可以看出,地址1.2.3.4在不断发送同样的请求,所以有理由怀疑这是一次针对1.2.3.4的DNS反射攻击。


如果我们并不希望限制请求回应的速率,而只想记录这一过程,可以对named.conf配置文件进行编辑,添加如下语句:


options {

directory "/var/named";

rate-limit {

responses-per-second 5;

log-only yes;

};

};)


设置之后,可以在日志文件中看到:


07-Jun-2013 12:41:42.336 queries: info: client 1.2.3.4#53459 (testhost.example.com): query: testhost.example.com IN A +ED (1.2.3.4)

07-Jun-2013 12:41:42.336 query-errors: info: client 1.2.3.4#53459 (testhost.example.com): would rate limit slip response to 1.2.3.0/24 for testhost.example.com IN A  (3ee9836b)


如果希望正式开启RRL,那么删除“log-only yes”这一语句,然后重新加载。对于之后的请求,日志如下:


07-Jun-2013 12:44:44.868 queries: info: client 1.2.3.4#57114 (testhost.example.com): query: testhost.example.com IN A +ED (1.2.3.4)

07-Jun-2013 12:44:44.869 query-errors: info: client 1.2.3.4#57114 (testhost.example.com): rate limit drop response to 1.2.3.0/24 for testhost.example.com IN A  (3ee9836b)


通过配置RRL可以用于应对多种攻击场景,更多内容可以阅读BIND9的管理员参考手册中关于RRL的内容。


3、NIST SP 800-81


2006年5月,NIST发布了特别出版物SP 800-81第1版,名为“安全域名系统部署指南”(Secure Domain Name System(DNS)Deployment Guide)。2013年9月,第2版发布。


这份指南认为,由于DNS缺乏对系统边界的定义,以及缺乏数据验证,使得它会面临以下威胁:


  • 利用假冒身份欺骗DNS服务器,借以实施拒绝服务攻击。

  • 入侵者或虚假的DNS信息提供者可以毒化DNS的缓存,例如一个企业的DNS信息提供服务器,这将导致错误访问子域名。

  • 篡改DNS服务器中对历史查询的缓存,可能导致使用该DNS服务器的用户访问有害的非法资源。

  • 如果域名解析请求的数据违反了DNS规范的定义,就可能产生不良影响。例如增加系统的负载、保存过时的数据,甚至使系统无法提供服务。对于DNS,数据内容决定着整个系统的完整性。

对于这些威胁,SP 800-81提出了以下通用建议:

  • 实施适当的系统和网络安全控制,确保DNS托管环境,如操作系统和应用程序安装补丁程序、进程隔离和网络的容错性。

  • 对于一个企业控制范围内的DNS服务器,对DNS事务(DNS transaction)进行保护,例如域名解析数据的更新和备份。保护的方法可以参考互联网工程任务组(IETF)的事务签名(TSIG)规范,使用基于共享秘密的散列消息认证码。

  • 使用基于非对称加密的数字签名来保护DNS的请求/应答事务,具体内容可以参考IETF的域名系统安全扩展(DNSSEC)规范。

这指南认为,DNS安全的主要目标是数据的完整性和来源认证,以确保域名信息的真实性和传输途径中的完整性。此外,该指南还介绍了如何配置和部署DNS以防止DDoS攻击。重点包括以下几个方面:

  • DNS协议和服务基础组件;

  • 讨论DNS主机环境的威胁、安全对象和防护方法;

  • 推荐的DNS请求/应答机制安全性;

  • 减少DNS的信息泄露;

  • DNS的安全管理操作。

二、DDoS攻击的缓解


前面介绍了通过治理对抗DDoS攻击的方法,大部分的治理方法需要在DDoS攻击发生之前就配置,并且需要世界范围内的网络运营商、网络公司和网络组织进行有效合作,才能达到较好的对抗效果。然而,对于世界上许多中小型的企业和组织来说,他们并没有能力进行大范围的网络治理和僵尸网络打击行动,却比大型公司和组织更可能遭受DDoS攻击。对于这些中小型企业和组织来说,难道只能处于被动挨打的位置吗?


事实上,在DDoS攻击已经发生的情况下,可以通过一些缓解技术来减少攻击对自身业务和服务的影响,从而在一定程度上保障业务正常运行。


DDoS缓解技术有时也称为DDoS防护技术,但是“缓解”更能体现这种技术的本质,这是因为通常它并不能彻底根除DDoS攻击对于目标的影响,而只能最大限度地减小。近年来,随着DDoS攻防研究不断深入,人们对于DDoS缓解的认识也在不断演进。


误区:系统优化和增加带宽能够有效缓解DDoS攻击。


系统优化主要是指对被攻击系统的核心参数进行调整,例如增加TCP连接表的数量,降低TCP建立连接的超时时间等。对于小规模的DDoS攻击,系统优化的方法的确具有一定程度的缓解作用。但当攻击者成倍地增大DDoS攻击的规模和攻击流量时,这些系统优化的作用就显得微乎其微了。


增加带宽实际上属于一种退让策略,这种退让策略还包括购买冗余硬件、增添性能更好的服务器等。只要攻击者的DDoS攻击造成资源消耗不高于目前的带宽、计算等资源的承载能力,那么攻击就是无效的;而一旦DDoS攻击的资源消耗超出了目前的承载能力,则通过再次退让来使其无效化。增加带宽等退让策略从理论上讲的确能够完全解决DDoS攻击的问题,然而在实际上这种方式并不符合经济规律。我们可以从《DDoS 攻击的成本和收益》的内容中了解到,事实上攻击者增大DDoS攻击规模的成本并不高,而采用退让策略缓解DDoS攻击则需要不断增加带宽、服务器等基础设施的投入,这些投入不可能无限制增加,因此退让策略也不是缓解DDoS攻击的有效方法。


误区:防火墙和入侵检测/防御系统能够缓解DDoS攻击。


防火墙是最常用的安全产品,但是防火墙的设计原理中并没有考虑针对DDoS攻击的缓解。传统的防火墙是以高强度的检查作为代价来进行防护的,检查的强度越高,计算的代价越大。而DDoS攻击中的海量流量会造成防火墙性能急剧下降,不能有效地完成包转发的任务。同时,传统防火墙一般都部署在网络入口位置,虽然这在某种意义上保护了网络内部的所有资源,但是往往也成为DDoS攻击的目标。


入侵检测/防御系统是应用最广泛的攻击检测/防护工具,但在面临DDoS攻击时,入侵检测/防御系统通常也不能满足要求。入侵检测/防御系统一般是基于规则进行应用层攻击的检测,在其设计之初就是作为一种基于特征的应用层攻击检测设备。但是目前的DDoS攻击大部分采用基于合法数据包的攻击流量,因此入侵检测/防御系统无法对DDoS攻击进行基于特征的有效检测。同时,入侵检测/防御系统也面临着和防火墙同样的性能问题。


下面会对缓解DDoS攻击的技术和方法进行介绍。


缓解DDoS攻击的主要方法是对网络流量进行清洗,即设法将恶意的网络流量从全部流量中去掉,只将正常的网络流量交付该服务器。然而,随着分布式拒绝服务攻击的流量不断增大,单一的流量清洗设备和流量清洗中心已经无法处理如此大规模的网络流量了,因此,面对当今的DDoS攻击时,在进行流量清洗前还需要进行流量稀释。


(一)攻击流量的稀释


正如分布式拒绝服务攻击的名字所强调的,“分布式”是其最主要的特点。在分布式拒绝服务攻击当中,攻击的来源通常分布非常广泛,经常会出现从一个国家的不同位置甚至从整个世界的不同位置同时向目标发起攻击的情况。从每一个攻击来源来看,其攻击流量可能并不很大,但是当成千上万个攻击流汇聚到被攻击目标时,全部的攻击流量就会完全占满被攻击目标的网络出口带宽,这时无论再进行什么形式的流量清洗,都已经不会有任何的效果了(见下图)。

攻击流向被攻击目标汇聚

因此,在面对超大流量的分布式拒绝服务攻击时,首先要做的就是将流量进行稀释和分散。在流量被稀释和分散以后,攻击情况就从多对一变成多对多,这样到达每个流量清洗设备或流量清洗中心的网络流量都会下降到其能够处理的范围之内,也就能够进行进一步的清洗工作了。


目前比较流行的攻击流量稀释的方法是使用内容分发网络(Content Delivery Network,CDN)或任播(Anycast)技术。


1、CDN


CDN技术的初衷是提高互联网用户对网站静态资源的访问速度,但是由于分布式多节点的特点,它也能够对分布式拒绝服务攻击的流量产生稀释的效果。


所谓CDN,就是在互联网范围内广泛设置多个节点作为代理缓存,并将用户的访问请求导向最近的缓存节点,以加快访问速度的一种技术手段。


那么,用户的访问请求是如何被导向最近的缓存节点的呢?这通常通过智能DNS来实现。在许多情况下,对于资源和服务的访问请求是以域名的形式发出的,传统的域名解析系统会将同一域名的解析请求解析成一个固定的IP地址(见下图),因此,整个互联网对于该域名的访问都会被导向这个IP地址。

传统DNS解析

智能DNS则有所不同。在智能DNS系统中,一个域名会对应一张IP地址表,当收到域名解析请求时,智能DNS会查看解析请求的来源,并给出地址表中距离请求来源最接近的IP地址,这个地址通常也就是最接近用户的CDN缓存节点的IP地址(见下图)。在用户收到域名解析应答时,认为该CDN节点就是他请求的域名所对应的IP地址,并向该CDN节点发起服务或资源请求。

智能DNS解析

CDN节点在收到用户的请求时,会在其存储的缓存内容中寻找用户请求的资源,如果找到,就直接将资源响应给用户;如果在CDN节点中找不到用户请求的资源,则CDN节点会作为代理服务器向源站请求该资源,获取资源后将结果缓存并返回给用户。对于有大量静态资源的网站,使用CDN进行代理缓存一般能够减少源站80%的访问流量。


可以看到,在使用CDN技术之后,互联网上的用户可以通过智能DNS利用CDN的节点快速获取所需要的资源和服务,同时由于CDN节点的缓存作用,能够在很大程度上减轻源站的网络流量负载(见下图)。

CDN稀释流量

在发生了分布式拒绝服务攻击时,智能DNS会将来自不同位置的攻击流量分散到对应位置的CDN节点上,这使得CDN节点成为区域性的流量吸收中心,从而达到流量稀释的效果。在流量被稀释到各个CDN节点后,就可以在每个节点处进行流量清洗,只将正常的请求交付给源站,从而达到防护源站的目的。


不过,利用智能DNS实现的CDN技术只能分散和稀释通过域名发起的分布式拒绝服务攻击的流量,如果攻击者直接通过IP而不是通过域名进行攻击,那么不会进行智能DNS解析,攻击流量也无法分散到各个CDN节点上。更好的流量稀释方法是使用Anycast技术。


2、Anycast


Anycast技术是一种网络寻址和路由方法。通过使用Anycast,一组提供特定服务的主机可以使用相同的IP地址,同时,服务访问方的请求报文将会被IP网络路由到这一组目标中拓扑结构最近的一台主机上。


网络寻址。


在IP网络中,存在三种寻址方法:单播寻址、多播寻址和任播寻址(见下图)。


网络寻址的三种方式

  • Unicast寻址(单播寻址)


单播寻址是最常见的寻址方法,在单播寻址中,网络地址和网络节点是一对一的对应关系,每一个目的地址对应一个单独的接收节点。


  • Multicast寻址(多播寻址)


在多播寻址中,网络地址和网络节点是一对多的关系,每一个目的地址对应一群接收可复制消息的节点。请求发出者的数据报文会被发送到该地址对应的全部主机上。组播寻址也可以看做是多播寻址的一种。


  • Anycast寻址(任播寻址)


在任播寻址中,网络地址和网络节点也是一对多的关系,每一个目的地址对应一群接收节点,但消息只会发送给拓扑结构上最近的节点。


Anycast通常是通过在不同的节点处同时使用BGP协议向外声明同样的目的IP地址的方式实现的。如下图所示,服务器A和服务器B是Anycast的两个节点,它们通过BGP协议同时向外声明其IP地址为10.0.0.1。

Anycast示例

当客户端位于路由器1的网络内时,它将会通过路由器1来选择路由的下一跳。而在路由器1看来,到达服务器IP地址10.0.0.1的网络拓扑如下图所示。显然,转发到路由器2的距离更短,因此,路由器1会将请求报文转发给路由器2而不是路由器3,从而实际上发送给了服务器A,达到发送给Anycast之中“最近”节点的目的。


路由器1眼中的网络拓扑结构

对无状态的服务Anycast通常用来提供高可用性保障和负载均衡,例如DNS服务。几乎全部的互联网根域名服务器都部署了Anycast。在各大洲不同位置的A、C、E、F、I、J、K、L和M根域名服务器都使用了Anycast寻址技术,以提供一种分布式的服务。同时,许多商业DNS服务提供商也部署了Anycast寻址以便提高查询性能,保障系统冗余并实现负载均衡。


Anycast通常具有高度的可靠性,它可以提供自动故障恢复。Anycast应用通过外部“心跳”来监测服务器的功能,如果服务器出现故障,就会立即撤销服务器的路由公告。


使用Anycast技术能够稀释分布式拒绝服务攻击流量。在Anycast寻址过程中,流量会被导向网络拓扑结构上最近的节点,在这个过程中,攻击者并不能对攻击流量进行操控,因此攻击流量将会被分散并稀释到最近的节点上,每一个节点上的资源消耗都会减少(见下图)。

Anycast稀释流量

当Anycast组中某一个成员或者几个成员受到攻击时,负责报文转发的路由器可以根据各个组成员的响应时间来决定报文应该转发到哪个成员上,由于受到攻击的成员没有响应,所以报文就不会被转发到那里。同时,由于Anycast的高度可靠性,即使少数节点被分布式拒绝服务攻击打垮而出现故障,其周围的客户端请求也能够被快速地引导向依然可用的服务节点,从而保证服务的高可用性(见下图)。

Anycast保障服务的高可用性

(二)攻击流量的清洗


流量清洗是指在全部的网络流量中区分出正常流量和恶意流量,将恶意流量阻断和丢弃,而只将正常的流量交付给服务器。


与其他的网络安全检测和防护手段类似,流量清洗也需要考虑漏报率和误报率的问题。通常,漏报率和误报率是一对矛盾,需要通过对检测和防护规则的调整来进行平衡。


如果流量清洗的漏报率太高,就会有大量的攻击请求穿透流量清洗设备,如果无法有效地减少攻击流量,也就达不到减轻服务器压力的效果(见下图)。

漏报过多则无法达到清洗效果

相反,如果误报率太高,就会出现大量的正常请求在清洗过程中被中断,严重影响正常的服务和业务运行(见下图)。


误报过多影响正常业务运行

优秀的流量清洗设备,应该能够同时将误报率和漏报率降低到可以接受的程度,这样就能够在不影响网络或业务系统正常运行的情况下,最大限度地将恶意攻击流量从全部网络流量中去除。要达到这个目的,需要同时使用多种准确而高效的清洗技术,这些技术包括:IP信誉检查、攻击特征匹配、速度检查与限制、TCP代理和验证、协议完整性验证和客户端真实性验证。


1、IP信誉检查


IP信誉检查原本是用于识别和对抗垃圾邮件的一种技术,不过这种技术也可以用来在网络层进行流量清洗。


IP信誉机制是指为互联网上的IP地址赋予一定的信誉值,那些过去或现在经常被作为僵尸主机发送垃圾邮件或发动拒绝服务攻击的IP地址会被赋予较低的信誉值,说明这些IP地址更有可能成为网络攻击的来源。


当发生分布式拒绝服务攻击时,流量清洗设备会对通过的网络流量进行IP信誉检查,在其内部的IP地址信誉库中查找每一个数据包来源的信誉值,并会优先丢弃信誉值低的IP地址所发来的数据包或建立的会话连接,以此保证信誉高的IP地址与服务器的正常通信。


IP信誉检查的极端情况就是IP黑名单机制,即如果数据包的来源存在于黑名单之中,则不进行任何处理,直接丢弃该数据包。这种方式一般会造成较多的误报,影响正常服务的运行。


2、攻击特征匹配


在大多数情况下,发动分布式拒绝服务攻击需要借助攻击工具。为了提高发送请求的效率,攻击工具发出的数据包通常是由编写者伪造并固化到工具当中的,而不是在交互过程中产生的,因此一种攻击工具所发出的数据包载荷会具有一些特征。


流量清洗设备可以将这些数据包载荷中的特征作为指纹,来识别工具发出的攻击流量。指纹识别可以分为静态指纹识别和动态指纹识别两种。静态指纹识别是指预先将多种攻击工具的指纹特征保存在流量清洗设备内部,设备将经过的网络数据包与内部的特征库进行比对,直接丢弃符合特征的数据包;动态指纹识别则需要清洗设备对流过的网络数据包进行学习,在学习到若干个数据包的载荷部分之后,将其指纹特征记录下来,后续命中这些指纹特征的数据包会被丢弃,而长期不被命中的指纹特征会逐渐老化直至消失。


3、速度检查与限制


一些攻击方法在数据包载荷上可能并不存在明显的特征,没有办法进行攻击特征匹配,但却在请求数据包发送的频率和速度上有着明显的异常。这些攻击方法可以通过速度检查与限制来进行清洗。


例如,在受到THC SSL DoS攻击时,会在同一个SSL会话中多次进行加密密钥的重协商,而正常情况下是不会反复重协商加密密钥的。因此,当流量清洗设备进行统计时,如果发现SSL会话中密钥重协商的次数超过了特定的阈值,就可以直接中断这个会话并把来源加入黑名单中。


再如,在受到Slowloris和慢速POST请求攻击时,客户端和服务器之间会以非常低的速率进行交互和数据传输。流量清洗设备在发现HTTP的请求长时间没有完成传输时,就可以将会话中断。


此外,对于UDP洪水攻击等一些没有明显特征、仅通过大流量进行攻击的方法,可以通过限制流速的方式对其进行缓解。


4、TCP代理和验证


SYN洪水攻击等攻击方式都是利用TCP协议的弱点,将被攻击目标的连接表占满,使其无法创建新的连接而达到拒绝服务攻击的目的。流量清洗设备可以通过TCP代理和验证的方法来缓解这种攻击造成的危害。


在一个TCP SYN请求到达流量清洗设备后,设备并不将它交给后面的服务器,而是直接回复一个SYN+ACK响应,并等待客户端回复。


如果SYN请求来自合法的用户,那么他会对SYN+ACK进行响应,这时流量清洗设备会代替用户与其保护的服务器建立起TCP连接,并将这个连接加入信任列表当中(见下图)。之后,合法的用户和服务器之间就可以透过流量清洗设备,进行正常数据通信。对于用户来说整个过程是完全透明的,正常的交互没有受到任何影响。


正常用户的TCP交互

而如果这个SYN请求来自攻击者,那么他通常不会对SYN+ACK进行应答,从而形成半开连接。这样流量清洗设备会暂时保留这个半开连接,并在经过短暂的超时时间之后丢弃这个连接(见下图)。


SYN洪水攻击清洗

相比于所保护的服务器,流量清洗设备对连接表操作进行了专门优化,能够处理极其庞大的连接请求数量,因此即使有非常多的SYN请求同时涌向清洗设备,清洗设备也能够处理。在这个过程中,由于清洗设备拦截在被保护的服务器之前,服务器并没有消耗任何的连接资源,因此保证了服务器的性能不受影响。


流量清洗设备在作为TCP代理进行防护时,除了拦截半开连接外,还可以进行TCP协议的一些交互式验证。例如,在收到第一个SYN请求时,通过直接丢弃、发送RST包或发送错误序列号的ACK包的方式来中断连接过程,并检查客户端是否重新发起连接请求。通过这种验证,也可以识别并丢弃许多不合法的连接。


5、协议完整性验证


为了提高发送攻击请求的效率,大多数的攻击方法都会只发送攻击请求,而不接收服务器响应的数据,或者无法完全理解和处理响应数据。因此,如果能够对请求来源进行交互式验证,就可以检查请求来源协议实现的完整性。对于协议实现不完整的请求来源,通常可以将其作为攻击主机丢弃其发送的数据。


在DNS解析的过程中,如果域名解析请求获得的响应数据中Flags字段的Truncated位被置位,通常客户端就会使用TCP 53端口重新发送域名解析请求(见下图)。


正常用户的域名请求交互

而攻击者使用的攻击工具由于不接收或不处理解析请求的响应数据,也就不会使用TCP 53端口进行重新连接。流量清洗设备可以利用这个区别来有效地区分合法用户与攻击者,拦截恶意的DNS攻击请求(见下图)。


DNS洪水攻击清洗

对于提供HTTP服务的Web服务器,也可以使用类似的方式进行协议完整性验证。例如,可以使用HTTP协议中的302重定向来验证请求的来源是否接收了响应数据并完整实现了HTTP协议的功能。HTTP的302状态码表示被请求的资源被临时转移,并会给出一个转移后的地址。正常的合法用户在接收到302重定向后会顺着跳转地址寻找对应的资源(见下图)。


正常用户的Web页面重定向过程

而攻击者的攻击工具由于不接收或不处理响应数据,则不会进行跳转,因此攻击请求会被清洗设备拦截,Web服务器不会受到任何影响(见下图)。


HTTP洪水攻击清洗

6、客户端真实性验证


进行协议完整性验证能够清洗掉一部分简单的攻击工具所发送的攻击流量,但是,一些攻击工具在开发过程中使用了现成的协议库,这样就能够完整实现协议交互,通过协议完整性检验。对于这些攻击工具,需要使用客户端真实性验证技术进行攻击流量清洗。


客户端真实性验证是指对客户端程序进行挑战–应答式的交互验证,检查客户端能否完成特定的功能,以此来确定请求数据是否来自真实的客户端。


对基于页面的Web服务,可以通过检查客户端是否支持JavaScript来验证请求是否来自真实的浏览器客户端。当收到HTTP请求时,流量清洗设备会使用JavaScript等脚本语言发送一条简单的运算操作。如果请求是由真实的浏览器发出的,那么浏览器会进行正确运算并返回结果,流量清洗设备进行结果验证后就会让浏览器跳转到Web服务器上真正的资源位置,不会影响正常用户的访问(见下图)。


正常客户端的脚本验证

而如果请求是由攻击者通过攻击工具发送的,由于大部分工具没有实现JavaScript的解析和执行功能,因而不能返回正确的运算结果,流量清洗设备会直接丢弃这些请求,而不会给出跳转到Web服务器的连接,因此Web服务器不会受到影响(见下图)。


伪造客户端攻击的流量清洗

当然,攻击者也可以牺牲工具的一部分攻击效率,并在工具中加入JavaScript的解析和执行功能,以便通过JavaScript验证。这时,则需要使用验证码进行人机识别。


验证码的全称是“全自动区分计算机和人类的图灵测试”(Completely Automated Public Turing test to tell Computers and Humans Apart,CAPTCHA),这是一种用于分辨人与计算机的反向图灵测试。


图灵测试和反向图灵测试。


图灵测试(又称“图灵判断”)是图灵提出的一个关于机器人的著名判断原则。


图灵测试是一种测试机器是不是具备人类智能的方法。被测试的包括一个人和一台声称自己有人类智力的机器。测试人在与被测试者(一个人和一台机器)隔开的情况下,通过一些装置(如键盘)向被测试者随意提问。问过一些问题后,如果测试人不能确认被测试者的答复中哪个是人、哪个是机器的回答,那么这台机器就通过了测试,并被认为具有人类智能。目前,还没有一台机器能够通过图灵测试。


可以看出,图灵测试是由人来出题考验机器,其目的是让出题人无法分辨给出答案的是人还是机器;而验证码与这个过程相反,是由机器来自动生成题目,其目的是让出题人能够有效地分辨给出答案的是不是真实的人。因此,验证码通常被认为是一种反向图灵测试。


常见的验证码是让用户输入一个扭曲变形的图片上所显示的文字。对于真实的人类用户来说,通常能够比较容易地识别出这些文字,给出正确的识别结果,从而通过测试并继续进行访问(见下图)。


正常用户完成验证码输入后进行Web访问

而对于计算机来说,想要识别验证码中的文字则相当困难。对于无法给出验证码正确识别结果的请求,流量清洗设备会直接丢弃,从而保护Web服务器不受影响(见下图)。


攻击程序无法自动完成验证码的挑战

误区:DDoS的云端清洗服务和本地缓解设备可以相互替代。


DDoS其实是多种攻击的统称,不同的攻击也许要不同的缓解方法。通常,云端清洗服务主要采用稀释和分流的方法,擅长应对流量型DDoS攻击;而本地缓解设备能够处理的流量较小,更容易组合使用多种清洗技术,适合对抗系统资源消耗型和应用资源消耗型DDoS攻击。用户应该根据自己的业务特点和主要威胁,选择适合自身的解决方案。


三、结语


本文从“治理”和“缓解”两个方面,讨论了DDoS的对抗方法。具体包括僵尸网络的治理、地址伪造攻击的治理、攻击反射点的治理、攻击流量的稀释,以及攻击流量的清洗。从中可以看到,对抗DDoS攻击是一个涉及多个层面的问题,在有的环节,有效性和收益率并不对等。所以,只有政府、运营商、标准组织、安全厂商和最终用户共同合作,才能最终有效抑制这种攻击。

微信公众号:计算机与网络安全

ID:Computer-network

【推荐书籍】

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存