绿盟科技 何坤
2009不平凡的一年。全球各种DDoS事件频发,国内有“5.19”断网事件,国外有韩国总统官邸青瓦台、国防部、国会、新韩银行、韩国外换银行“7.7”事件,7.28日,BIND又爆出最新的漏洞。
DDoS的影响已经上升到运营商网络、甚至国家网络安全的层面。在本文中,我们将会分析DNS在DDoS下的安全情况及应对策略。
国内运营商的省级DNS系统为少数几家厂商所建设,架构较为固定。典型的DNS系统架构有以下三种:
早期建设的DNS系统架构如图1(a),DNS服务器集群均连接于一台四层交换机之上,由四层交换机负责DNS查询请求的负载均衡,每台DNS Server的DNS 查询请求负载能力约为10kpps,单台四层性能交换机的极限性能约为40~50kpps左右;由于四层交换机性能的限制,(a)图所示的架构并不能充分发挥DNS Server集群的负载能力,因此有了如图1(b)的架构。此种架构需要在未连接四层交换机的DNS Server上运行一个可以实现OSPF路由协议的软件,与上连的Cisco 6509通过OSPF实现负载均衡,注意如图所示的结构实际上是6路负载均衡,即整个DNS系统的极限性能约为60kpps,属于过渡性架构;由于四层交换机的存在,还是限制了DNS系统的性能的提升,最新的DNS系统建设开始采用如图1(c)所示的架构。所有的DNS Server均与上连的Cisco 6509通过OSPF实现负载均衡。由于三层交换机的性能远超过四层交换机,DNS集群的可扩展性大大增强。
DNS具有如下特点:
(1) DNS是开放的协议,无验证机制,并且在传输过程中未加密。
(2) 绝大多数DNS使用BIND,而BIND代码是开放的。
(3)整个互联网对DNS的依赖不言而喻,反过来也同样,一旦网络出现故障,DNS对外也将无法提供服务,两者的安全性紧密相连。
DNS主要具有如下风险:
(1) DNS cache投毒。参见BUGTRAQ ID: 30131;CVE(CAN) ID: CVE-2008-1447。
(2)漏洞频出,几个针对BIND漏洞的恶意包就可以瘫痪整个DNS服务。参见CVE CAN ID:CVE-2009-0696。
(3)DDoS攻击。除了针对DNS服务器的DDoS攻击,若网络架构设计不合理,针对网络设备或其他应用的DDoS也可能会造成DNS瘫痪。笔者就曾经遇到由于网络设计不合理,网络出现一点拥塞,DNS服务器本身没有Down掉,上面的交换机带宽就已经被堵满的案例。
具体来说,DNS协议与DDoS相关的缺陷主要有如下:
(1)缺乏合法性验证,客户端程序主要通过收到的DNS响应序列号及端口号来确认与查询是否匹配,却没有机制来认证应答内容的合法性;同样,服务器端也无法验证客户端发出的请求是否合法。
(2)UDP无连接,每次DNS访问都是独立的,客户端与DNS服务器之间的UDP访问没有三次握手阶段,这在加快了数据传输的同时,也是造成防御措施匮乏的一个重要原因。
(3)开放的体系,大多DNS服务器的各类数据未进行加密且没有访问控制,不同地区的客户都可以访问各个DNS服务器。据统计互联网中75%的DNS服务器允许递归查询,40%的DNS服务器允许区域传送。
图1 DNS系统架构
以上缺陷导致DNS成为目前最脆弱的互联网基础设施,DNS服务中断后的很短时间内,属于该区域的用户能够很快感知到,因而DNS服务是否能够正常运行极为重要和敏感。
DNS服务本身需要对公众开放,不可能网络隐身。甚至连禁止Ping包都需要做部分考量,要知道,一般网民想了解DNS是否存活的时候,都是发几个Ping包来验证(而不是使用nslookup),如果发现无法Ping通,而此时恰好网络有些“卡”,这时候公众的矛头很可能就会指向DNS。正因为这些特点,对DNS的保护并不是架两台防火墙,封几个端口就能做的事情,必须要做到深层次的检测和防护。
我们看下面的拓扑图(如图2),这是一个典型的省网DNS的部署架构,为了最大可能的避免网络瓶颈,我们“恨不得”将DNS服务器直接挂在网络出口处,这样可保证带宽足够;更“恨不得”架设无数台DNS服务器,做超级DNS集群,这样可保证冗余性及处理性能。然而,现实中,当出现针对性的DDoS攻击的时候,通常会攻击流量巨大,即使是强大的DNS集群,在攻击时都会显得弱不禁风,且部署DNS的成本是不得不考虑的,增加DNS服务器的投资应以自身业务增长的量为基石,而不是仅为了防御DDoS攻击。
基于以上考虑,在拓扑中,我们部署了黑洞NTA及黑洞ADS设备(又称Defender),其中黑洞NTA用于实时DNS流量监控,一旦发现存在异常流量行为将会通知黑洞ADS进行动态流量牵引防护,两者分工明确,一个用于检测分析、一个用于DDoS攻击防护。
NTA信息来源为Netflow信息,NTA的部署极为简单,只需要网络可达,Netflow由路由器从现网流量中采样获取,然后发送给NTA进行信息分析;NTA上线之后,会自动学习现网DNS的流量情况,动态生成流量模型曲线,通过比对当前流量情况及行为判断是否存在攻击。同时,NTA还内置了各类蠕虫特征库,可直接检测到网络中蠕虫的情况。
一旦发现NTA发现攻击,可自动的通知Defender进行流量牵引和清洗,又或是通过Email告警、短信告警的方式通知管理员,让管理员人工操作流量清洗,管理操作方式十分灵活。
当然,NTA除了在攻击的时候可以发挥其应有的作用,在风平浪静的时候,NTA还可提供详细的数据报表,方便管理员进行数据分析。
之前我们提到,对DNS的保护并不是架两台防火墙,封几个端口就能做的事情。这不是说封端口没有作用,根据DNS服务的几个特点,黑洞Defender(流量清洗设备)可设置如下清洗防护策略:
(1)DNS服务器几乎不会开启除DNS服务以外的服务,TCP应用很少。除TCP53、及UDP53端口,在Defender上大可对其余端口设置非常严格的清洗策略,或是直接禁掉。
(2)ICMP可以不必完全禁止,但不等于说完全放行,可设定合理的清洗阀值,当DNS服务遭遇DDoS攻击挑战时,清洗设备自动对ICMP进行清洗。
(3)DNS请求报文的平均长度通常约为100字节,基本上都小于500字节,可以限制500字节以上的DNS报文。
(4)每一个区域DNS提供商,大可限制只允许本区域的用户可以访问其DNS。
(5)限制每一个源IP的DNS请求发包数量,正常情况下,一个用户的DNS请求数量是有限的。
(6)利用清洗设备的DNS防护算法,对DNS流量进行精细清洗。
(7)通常情况下,DNS管理员对自己服务器中,哪些域名请求量最多十分清楚。一旦发现DNS请求中出现大量非这些“知名域名”的请求,或是这些“知名域名”请求量出现了陡增,基本上可以判定出现异常,“5.19”就是一个很明显的例子,这时,大可在清洗设备中人工干掉异常的域名。
基于DNS的特点,Defender内置了两种DNS防护算法。
简单的说,一种是通过分析DNS查询内容,基于流量模型的防护算法,Defender通过自学习DNS查询内容,根据自身算法得出一个流量模型,一旦Defender发现DNS流量异常则会启用防护,不符合流量模型的DNS请求将会被丢弃,这是一种基于复杂数学统计的防护算法。
图2 网络拓扑
另外一种是通过反向探测客户端协议行为,判定客户端是否正常的防护算法。UDP是面向无连接的协议,从技术上来说,清洗设备很难做到只通过UDP报文就能够判定源IP的真假性,而TCP是面向连接的。通常情况下,客户端都是使用UDP进行DNS查询,实际上,DNS协议支持TCP查询,正是基于这一点,Defender在使用反向探测DNS算法的时候,巧妙的将原本是UDP的查询请求转成TCP查询请求,从而可以通过使用TCP协议对客户端进行真假性验证,达到防范的目的。
任何防护技术都有其相应的局限性,Defender集成了两种防护算法,可以在攻防中灵活应对。
本文主要关注了现有DNS架构及风险情况,以及如何使用黑洞Defender与NTA应对。需要指出的是,除了使用清洗设备进行DDoS攻防之外,还可以将清洗设备与其他技术相结合,比如清洗设备与“Anycast”DNS分布技术相结合,在清洗设备进行流量清洗的同时,进行DNS流量的负载均衡。
总之,在DNS面临越来越多的挑战下,相应的防护技术会越来越多,也越来越成熟。而这一切,都是为了创造一个和平宁静的网上环境。
[1] 易鑫.DNS防护参考.绿盟科技.2009.
[2] 张小妹.基于DNS的拒绝服务攻击研究与防范.解放军信息工程大学.2009.