针对DNS的DDoS 攻击(分布式拒绝服务攻击)现已成为比较常见的极具破坏力的互联网攻击方式之一:
· 今年1月,国内出现大规模网站无法存取的事件,原因是DNS被劫持。当地用户连到许多以.com与.net为域名的网站时,会被导引到美国Dynamic Internet Technologies公司的IP地址。
· 3月初,谷歌提供给大众的公用DNS服务器8.8.8.8,遭到DNS劫持的持续时间长达22分钟,当时所有使用该DNS服务的网络流量都被绑架,传到巴西和委内瑞拉境内。
· 3月底、4月初,谷歌DNS服务又发生遭到土耳其网络供货商的拦截事件。对方设立了DNS服务器假装是谷歌DNS,挟持当地的网络联机使用假冒的谷歌DNS。
总体而言,DNS攻击事件未来仍将不断发生,而且遭遇的频率将越来越频繁,又很难预防与实时反应。他们是如何实施攻击的?我们又该如何防范呢?
欺骗式攻击
利用DNS基础架构来制造DDoS攻击其实相当容易:攻击者向互联网上的域名服务器发送请求,然后域名服务器做出反应。
攻击者伪装成目标对象的地址而不是基于自身IP地址来发送请求,这些目标对象包括:网页服务器、路由器、另外一个域名服务器、或者互联网上的任何一个节点。
DNS欺骗请求相当容易,因为这些请求通常通过UDP(无连接用户数据报协议)进行传输。从任意IP地址发送DNS请求相当简单,如同在明信片上写上回信地址一样。
尽管容易,欺骗请求还不足以使攻击对象瘫痪,如果对这些请求的回应并不比这些请求自身大的话,攻击者将把大量欺骗请求发送到目标对象上。为了最大限度的对目标对象造成伤害,对每个查询应该获得一个非常大的回应,才可以轻松造成影响。
采用DNS扩展名机制 (EDNS0)后,DNS自1999年以来得到了极大扩展,基于UDP 的DNS信息已经可以携带大量数据。一个回应便能达到4096个字节,而绝大多数请求则在长度上不超过100 个字节。
较早之前,要在互联网Namespace里找到一个较大的回应相对困难,但是现在,各大企业已经开始部署DNSSEC(域名系统安全扩展),实现较大回应已经变得很容易。DNSSEC将密钥和数字签名存储在Namespace里记录在册,这些都会起到积极作用。
现在,充斥网络的图片攻击者正在从你的网页服务器IP地址上向isc.org 域名服务器发送欺骗请求。每个44字节请求,你的网页服务器都会收到4077字节的回应,增大了近93倍。
现在让我们快速计算一下,就能知道这种状况有多糟。假设每个攻击者接入互联网的带宽都是1Mbps,每秒他可以发出2840条44字节的请求,那这个请求数据流就会带来近93Mbps的流量送达你的网页服务器,而每11次攻击就会达到1G。
那么,那些反社会的攻击者到哪里去找到这10个帮凶来共同完成这次攻击呢?事实上,他们不需要找任何人,他们会用到一种由成千上万台电脑组成的僵尸网络来完成攻击。
结果是毁灭性的。在一家DDoS攻击缓解公司Prolexic发布的全球DDoS攻击季报中我们可以看到,最新发现的一个基于DNS的客户受攻击案例,其流量达到了167Gbps,此外,Prolexic 在报告中还指出,DDoS攻击所占用的带宽平均每个季度已经增加了 718 %,达到48Gbps。
但是,我们能不能对isc.org域名服务器进行修正,让它能够识别来自同一IP地址的相同数据在不停发送请求呢?难道这些攻击真的无法遏制吗?
当然能,但绝非只有isc.org域名服务器才可以被攻击者利用来放大攻击流量,还有其他权威域名服务器,但受此影响最大的要算是开放式递归域名服务器了。
开放式递归域名服务器就是一种简单的域名服务器,它可以对任一IP地址发来的递归请求进行处理。我可以把请求 forisc.org的数据发给它,然后它会给我一回应,你也可以做。
互联网上不应有太多开放式递归域名服务器。递归域名服务器的作用,就是代表DNS用户在互联网Namespace上查询数据,就如同在笔记本电脑或者智能手机上查询数据那样。通常情况下,网管员建立递归域名服务器,供某一特定群体使用(就像您以及您的团队)。除非这些社区使用的是OpenDNS 和谷歌公共DNS,但设置这样的公共开放式DNS服务,其目的并不是供诸如摩尔多瓦这样的国家来使用。那些具有公众精神、安全意识且能力最强的管理员,可以在他们的递归域名服务器上设置接入控制,以此来限制对授权系统的使用。
既然如此,究竟多大的问题,我们才可以启用递归域名服务器呢?答案是很大。Open Resolver Project收集了总共3300万个开放式递归域名服务器的名单。黑客们可以向许多服务器发送欺骗请求,是因为他们更愿意将isc.org数据注入你的网页服务器、域名服务器、边界路由器并最终导致他们瘫痪。
以上就是基于DNS的DDoS攻击的工作原理,但谢天谢地,我们还是有一些方法来与它们相抗衡的。
如何渡过危机
你首先要做的是在你的DNS基础架构上加装设备,借此来监测是否正处在攻击之中。有好多公司根本不知道他们接收到的请求究竟是什么,所以他们就无法第一时间知道他们正在受到攻击。
利用BIND的内置统计支持功能,便能轻易实现对请求的判断。比如,BIND域名服务器在执行mdc stats命令或者可配置统计区间的时候,会将数据注入其统计文件,我们可以依据数据来检视查询速率、套接字错误以及其它攻击迹象,如果不能确定攻击如何发展也不要担心,因为对DNS进行监测的部分目的就是要建立起一个标准,以此来判断何谓异常状态。
下一步,让我们看一下面向互联网的基础设施。不要将自己囿于外部权威域名服务器;检查一下交换机、路由器、防火墙以及网络连接。检查是否有单点故障。要确定你是否可以方便并低成本地地避免出现问题。
如果可能的话,需要将外部权威域名服务器所分布的广大区域列入你的考虑范围,这可帮你避免单点故障,同时在没有遭受攻击的情况下也对你大有裨益。递归域名服务器负责解决你所在地区的域名问题,它将查询距离最近的权威域名服务器。所以,跨区分布可以帮你向客户和代理商提供更好更优的性能。如果在某些地区你的客户分布比较集中,那就在这些客户附近配置一台权威域名服务器以做出快速响应。
或许,抵御DDoS攻击的根本之道便是过度配置基础设施。好消息是,要实现域名服务器的过度配置已经不再贵不可及,一台性能优良的域名服务器一秒钟可以处理数十万条请求。
究竟这种过度配置域名服务器要达到何种程度,这取决于:您在网上的价值?在面向网络的基础设施中,有没有其他组件有可能在域名服务器之前出问题?很显然,在边界路由器或者防火墙之后花大价钱部署顶级DNS基础设施并不可取,因为它们有可能会在域名服务器之前失效,一有风吹草动,影响必现。
了解一下现在最强大的DDoS对DNS设备的攻击技术,将对你大有裨益,如果目的不是为钱的话,这种攻击将超过100Gbps。
利用Anycast技术同样也可以抗击DDoS攻击。Anycast技术允许多个服务器来共享某个单一IP地址,因此非常适合DNS。事实上,互联网根域名服务器已经使用Anycast技术多年,用以向全球提供根区域数据,同时这一技术也允许根目录与单一基于UDP的DNS 信息相匹配。
要部署Anycast技术,需要在支撑域名服务器的主机上运行动态路由协议,如OSPF或BGP。路由过程会广播到相邻路由器并路由到一个新的虚拟IP地址。该地址你的域名服务器可以监听到。该路由过程应该足够智能,当本地域名服务器停止响应的时候路由过程也停止广播。你可以使用自建代码将路由守护程序添加到健康域名服务器上,或者购买一款产品来替你完成。Infoblox 公司的NIOS软件, 就包含了对Anycast的支持。
那么Anycast是如何抵御DDoS攻击的呢?假设你有6个外部域名服务器,分属于两个Anycast群组(即三个服务器共用一个Anycast IP地址,剩下三个共用另外一个IP地址)。每个群组里有三个成员,分别来自美国、欧洲和亚洲。DDoS挂载在主服务器上,任何时候都可以通过网络上任何一个点将流量发送到群组里的任何一台服务器之上,发动攻击。除非攻击者能够将足够多的流量从北美、欧洲以及亚洲等地同时发送到你的基础设施上,否则他们无法取得成功。
最后,有一种方法可同时利用广阔的地区分布及Anycast技术,而无需过多投入资金,那就是使用基于云的DNS 提供商,诸如像Dyn和Neustar这样的在其全球数据中心里运行Anycast域名服务器的公司。通过向其支付费用,你可以托管自己的空间并对你的数据请求做出答复。此外,你还可以继续保持对空间数据的直接控制,那就是让服务商配置域名服务器作为你空间的备用,然后将数据从一台由你指定和内容管理的主域名服务器上进行加载。在你运行主域名服务器时一定要确保其处于隐藏状态 (意味着没有域名服务器记录指向它),要不你就会面临风险:攻击者会将它看作单点故障从而实施攻击。在使用基于云的DNS提供商的时候你需要记住这一点:大多数费用或者至少部分费用是基于他们的域名服务器收到的来自你的空间数据的请求次数计算的。在DDoS攻击中,这些请求上会陡然增加,完全失去控制,且对你有百害而无一利。所以一定要确保他们提供抵御DDoS攻击的方案,但又不能由你来承担流量费用。
如何避免成为DDoS攻击的帮凶
现在,你已经知道该如何配制DNS基础设备来抵御DDoS攻击了。这一点很重要,可以保证你在DDoS攻击中不会被挟持从而成为帮凶来祸害他人。
还记得DNS服务器是如何放大流量的吗?攻击者利用开放式递归域名服务器和权威域名服务器作为放大器,发送欺骗请求从而导致域名服务器做出的回应大小超过请求的100多倍,网络上的任何设备都有可能成为其攻击目标。没有人想成为这种攻击的目标,当然,更没有人愿意成为帮凶。攻击者会利用你的域名服务器资源和带宽来发动攻击。如果被攻击对象采取措施阻断了你的域名服务器与其网络之间的流量,当攻击结束后,被攻击对象就无法再在你的空间里恢复原有域名了。
如果你运行的是开放式递归域名服务器,办法很简单:那就是不用。很少有公司会向递归查询开放运营的域名服务器。OpenDNS 和谷歌公共DNS是两个例外,但如果你能读到我这篇文章,我想你应该不会这么做的。我们应该是在递归域名服务器中加装接入控制,确保只有经过授权的请求才会用到它。藉此,我们可以将DNS请求限定在企业内网IP地址上,这样在任何一个域名服务器上都可实现。(微软的DNS服务器不支持基于IP地址的请求接入控制,给它什么它就读取什么。)
如果你运行一台权威域名服务器呢?很显然,你无法限制那些向你发送请求的IP地址,或者只有一部分IP地址可以限制(你可以对那些明显来自虚假IP地址的请求予以拒绝,比如RFC 1918 地址)。但是你可以不回应。
长期以来,活跃在互联网上的两位白帽黑客Paul Vixie 和 Vernon Schryver,发现利用权威域名服务器来放大某些请求模式便可发起DDoS攻击。具体来说,攻击者通过虚假IP地址(或地址块)向域名服务器不停地发送同一请求,以求制造最大限度的攻击。规范的递归服务器不会这样做。当记录回应时间已经耗尽时,回应已经被缓存并且不会再被发送请求。
Vixie和Schryver提出了一个很巧妙的机制,叫做应答频率限制 (Response Rate Limiting, RRL),允许权威域名服务器追踪有多少同样的回应是针对同一请求发出的。当发送次数达到某个设定阈值时,域名服务器就在一段时间内停止发送回应。当权威域名服务器不再收到同一问题的请求时,就会终止对回应的压制,其结果就是权威域名服务器将不再发送高于阈值的任何回应,因此DDoS再也不能发威了。
RRL已被内置在了BIND域名服务器版本9.9.4中,包括NSD和Knot在内的其他域名服务器现在都支持它。当域名服务器升级到全新版本,或者安装了支持RRL的全新应用时,攻击者将DNS基础设施当作放大器的图谋,就越来越难以实现。
希望以上的内容能够帮助您了解DNS基础设施是如何在DDoS攻击中被攻击和被利用的,希望您能够知晓如何做才能更好的抵御DDoS攻击,确保您的域名服务器不会在不知情的情况下被挟持和被利用。