刘永鹏
上海交通大学电子与通信工程系上海200240
摘要院拒绝服务是用分布式的客户端,向服务者发起大量看似合法的请求,消耗或长期占用大量资源,从而达到拒绝向受众提供服务的目的。针对基于JavaScript 的DDOS 攻击,防御这一攻击的唯一方式是全面启用HTTPS。
教育期刊网 http://www.jyqkw.com
关键词 院拒绝服务;DDOS 攻击;防御
DDOS 是英文Distributed Denial of Service 的缩写,即“分布式拒绝服务”,那么什么又是拒绝服务(Denial of Service)呢?可以这么理解,用分布式的客户端,向服务者发起大量看似合法的请求,消耗或长期占用大量资源,从而达到拒绝向受众提供服务的目的。也就是说拒绝服务攻击的目的非常明确,就是要阻止合法用户对正常网络资源的访问,从而达成攻击者不可告人的目的。DOS 的攻击策略侧重于通过很多“僵尸主机”(被攻击者入侵过或可间接利用的主机)向受害主机发送大量看似合法的网络包,从而造成网络阻塞或服务器资源耗尽而导致拒绝服务,分布式拒绝服务攻击一旦被实施,攻击网络包就会犹如洪水般涌向受害主机,从而把合法用户的网络包淹没,导致合法用户无法正常访问服务器的网络资源,因此,拒绝服务攻击又被称为“洪水式攻击”,常见的DDOS 攻击手段有SYN Flood、ACK Flood、UDP Flood、ICMP Flood、TCP Flood、Connections Flood、Script Flood、Proxy Flood 等。
2 发展
曾经有安全专家把DDoS 攻击比作互联网“核武器”:一旦调动足够数量遍布互联网的“肉鸡”和存在各种协议漏洞的开放服务器,就可以瘫痪掉任何互联网业务。尽可能地对被攻击目标造成最大程度的资源破坏是DDoS 攻击的初衷。站在这个角度上来看DDoS 攻击的发展,可以梳理出清晰的脉络,DDoS 攻击的发展趋势呈明显的三个阶段性。
第一阶段,由个人计算机组建僵尸网络,发动DDoS 攻击;第二阶段,利用互联网开放服务器(如DNS、NTP)发起反射攻击;
第三阶段,利用智能辕IoT 设备协议(如SSDP)的脆弱性发起反射攻击。
拒绝服务攻击存在的根源是Internet 架构自身缺陷,由于最初Internet 架构未考虑拒绝服务攻击,从而导致几乎所有Internet 服务均易遭受拒绝服务攻击。纵观近五年DDoS 攻防双方的对抗交锋,攻击方技术不断演进,将“以大欺小”(流量型攻击)与“以小搏大”(资源耗尽型)两种攻击方式组合起来,利用逐渐提高的网络带宽增强攻击力等;而防守方则通过流量清洗设备等多种手段予以应对。
最为传统的DDoS 攻击多利用僵尸主机(Zombies,又叫“肉鸡”)组成僵尸网络来发起。“肉鸡”是指中了木马,或者被一些人留了后门的计算机,成为“肉鸡”的计算机可以被黑客远程操控。“肉鸡”的存在多由于用户系统存在各种脆弱性导致,系统一旦被入侵,黑客可获得控制权。黑客在这些“肉鸡”所有者不知情的情况下,发起对既定攻击目标的攻击。“肉鸡”对于互联网,特别是网站系统的威胁是很大的。即便单个“肉鸡”的攻击能力有限,但如果“肉鸡”数量很多,汇总后的攻击流量也将是惊人的。
虽然肉鸡的效果显著,但是无论组建还是僵尸网络的维护都需要较高的成本,伴随黑客不断对更低成本获得更大效果的追求,利用互联网开放服务器发起反射拒绝服务攻击逐渐流行。反射拒绝服务攻击又称DRDoS 攻击,或分布式反射拒绝服务攻击。其原理是黑客伪造成被攻击者的IP 地址,向互联网上大量开放特定服务的服务器发起请求,接收到请求的那些主机根据源IP 地址将响应数据包返回给受害者。整个过程中,返回响应的服务器并不知道请求源的恶意动机。黑客往往会选择那些响应包远大于请求包的服务来利用,这样才可以以较小的流量换取更大的流量,获得几倍甚至几十倍的放大效果。一般来说,可以被利用来做放大反射攻击的服务包括DNS 服务、NTP 服务、SNMP 服务、Chargen 服务等。利用NTP 协议的反射放大效果最好,超过500 倍。也就是说攻击者只需要发起100Mbps 的请求流量,经过NTP 服务器的反射放大,可以换来5Gbps 的攻击流量。2014 年2 月,在国外某云计算服务提供商遭受的400Gbps DDoS 攻击中,黑客就采用了NTP 反射放大攻击。
随着互联网上存在DNS、NTP、SNMP 等协议脆弱性的开放服务漏洞不断被修复,可以用来发起反射攻击的服务器数量越来越少。互联网上家用路由器、网络摄像头、打印机、智能家电等设备数量的激增,让黑客看到了另一个可以不断挖掘的金山。这些智能设备普遍采用UPnP(即插即用)协议作为网络通讯协议,而UPnP 设备的发现是通过源端口为1900 的SSDP(简单服务发现协议)进行相互感知。利用SSDP 协议进行反射攻击的原理与利用DNS 服务、NTP 服务类似,都是伪造成被攻击者的IP 地址向互联网上大量的智能设备发起SSDP 请求,接收到请求的智能设备根据源IP 地址将响应数据包返回给受害者(见下图)。
根据USCERT 的数据,SSDP 的放大倍数是30 倍,虽然较NTP和Chargen 等协议的放大倍数小很多,但是由于互联网上智能设备的数量非常庞大,随着IoT 的发展,这个数字更将呈现几何级数的增加。这无疑为黑客提供了丰富的攻击来源。SSDP 严峻的形势在阿里云上同样得到了体现。根据阿里云云盾安全运营团队在2015 年6月的统计,在对阿里云用户的UDP DDoS 攻击中,80%的攻击方式为SSDP 反射放大攻击。
3 新型DDos 攻击
3.1“胡乱域名”攻击
一种针对域名服务器的新型分布式拒绝服务攻击(DDoS),可称之为“胡乱域名”攻击。它能给递归域名服务器和权威域名服务器造成严重破坏。
这种“无意义域名”DDoS 攻击通常是这样进行的:攻击者选定一个域作为目标,如abc.example。在目标域内,攻击者操纵僵尸网络产生大量随机域名。然后向递归域名服务器发起大量针对这些无意义域名的查询请求。递归域名服务器转而将请求发送到abc.example 的权威服务器以查询这些域名。权威域名服务器返回“请求的域名不存在”的响应(NXDOMAIN)。递归服务器中继转发这一响应给原始请求者,并缓存下域名不存在的记录。请求,响应,缓存,再来一遍。如果攻击者发起这种胡乱域名解析请求的速度足够快,聚合查询的速度将令abc.example 权威域名服务器应接不暇濒临崩溃。真正的伤害就发生了:僵尸主机继续向递归域名服务器发送无意义域名的查询请求。权威域名服务器终于崩溃,不再响应请求,递归域名服务器也就需要花费长得多的时间来处理单个域名解析请求。
这将占用递归域名服务器上的递归查询时间片,最终导致资源耗尽,拒绝接受其他递归查询,尽管其中包含了合法的查询请求。至此,域名服务器拒绝任何新入递归请求,停止向客户提供服务。
3.2 基于JavaScript 的DDOS 攻击
最近几年DDoS 攻击技术不断推陈出新:攻击者用一种新型且很有趣的方式欺骗用户参与到攻击活动中。去年CloudFlare 就见证了一次使用NTP 映射的攻击,可能是DDoS 攻击史上最大的一次攻击(大于400Gbps)。今年的DDoS 攻击又出现了一个新的攻击趋势:使用恶意的JavaScript 欺骗用户参与DDoS 攻击。NTP 或者DNS 映射攻击造成的后果受到傀儡服务器数量的限制,同时攻击流量也受傀儡服务器容量的限制。随着时间的推移,服务器会不断的更新补丁,能被攻击者利用的服务器数量也在不断的减少。而基于JavaScript 的DDOS 攻击有一个非比寻常的特点:任何有浏览器的设备都可能参与攻击,其潜在攻击规模接近无限。现代网站的交互作用大多数都是采用JavaScript。
JavaScript 脚本可直接注入HTML 中,或者通过<script src="">HTML 从远程服务器载入。Web2.0 的出现使得网站可以从JavaScript中加载不同步的内容(content asynchronously)。Web2.0 更注重交互性,用户在发布内容的过程中不仅实现了与网络服务器之间的交互,也实现了同一网站不同用户之间的交互,以及不同网站之间信息的交互。然而从JavaScript 中制造出HTTP(S)请求会使浏览器使用起来更加的有趣,甚至还可以将浏览器变成一种攻击武器。
例如,下面的脚本(略有修改)就会向受害网站发送大量的请求:
function imgflood() {
var TARGET = ´victim-website.com´
var URI = ´/index.php?´
var pic = new Image()
var rand = Math.floor(Math.random() * 1000)
pic.src = ´http://´+TARGET+URI+rand+´=val´
}
setInterval(imgflood, 10)
该脚本会在目标网页上生成一个图片按钮,图片按钮会指向“victim-website.com”网站。只要用户访问了含有该脚本的网页,那么他就会成为“victim-website.com”DDoS 攻击中的一员。
4 防御
对于DDoS 攻击,普遍采用的防护手段包括:
淤源验证辕反向探测,对源进行探测和人机识别,段包括cookie、识别码等;
于限源,即对源IP 或协议进行限制,blacklist 是一个常见手段;
盂特征丢弃,依据数据包的特征或访问行为进行丢弃,如基于Payload 特征、发包行为特征、QPS 特征等;
榆限速,对流量辕访问的速率进行限流。
特别对于大流量DDoS 攻击的防护,与电信运营商配合也是必不可少的。其中包括与运营商配合实施就源清洗,以及在运营商侧路由器上对特定协议或特定来源的IP 进行限制都是降低防护开销的办法。当然,针对于网络层DDoS 攻击(Layer-4 DDoS)和应用层DDoS(Layer-7 DDoS)攻击不同的攻击策略,在具体防护时,采取的手段也不尽相同。这里不再赘述。此外,对于网站来说,通过CDN 进行DDoS 防护也是一个不错的手段,CDN 多节点彼此互备,以及对协议的限制,具有与生俱来的抗DDoS 能力和高可用性。同时,CDN 往往与云WAF 系统配合工作,两者协同成为防护HTTP Flood 的利器。
针对“胡乱域名”攻击而言,当递归域名服务器开始发生递归查询时间片资源不足的情况时,你就可以从早先记录下的系统日志消息中发现无意义域名攻击的踪迹。这些日志消息记录了由于时间片缺乏而被拒绝服务的查询者的IP 地址。首先,确认日志记录中的这些IP 地址是否是你的域名服务器应该服务的范围。如果不是,你简单利用访问控制列表将域名服务器配置为只为已授权用户提供服务即可。如果恶意查询来自合法IP 地址,很显然,你得换个手段阻止它们。备选方案之一就是使用BIND 提供的极为顺手的响应策略域(RPZ)功能,它可以暂时性阻止你的域名服务器为问题域提供查询服务。当然,除此之外,你还需要将qname-wait-recurse 选项设置为no。这可以使你的域名服务器不询问abc.example 域名服务器就直接向所有abc.example 域内的域名解析请求返回NXDOMAIN 响应。
针对基于JavaScript 的DDOS 攻击,防御这一攻击的唯一方式是全面启用HTTPS。DDoS 攻击技术正在快速演化,最近出现的基于JavaScript 的DDoS 攻击具有一个与众不同的特点:任何有浏览器的设备都可能参与攻击,其潜在攻击规模接近无限。现代网站的绝大多数互动采用的都是JavaScript。JavaScript 脚本可直接植入HTML 中,或者是从远程服务器载入。JavaScript 攻击主要发生在共享JavaScript 脚本在第三方服务器上被替换,或者是在传输过程中被中间人替换。对于屏蔽服务器上被替换的脚本,目前HTTP 还没有相关机制,但W3C 已经提出了名叫子资源完整性的新功能,使用哈希值验证脚本,如果哈希值不匹配浏览器可以阻止其运行。支持子资源完整性的浏览器暂时还只有Chrome 和Firefox。对于传输过程中脚本被中间人替换成恶意代码,全面启用HTTPS 是唯一有用的方法。