在《DNS攻击防范科普系列》的前几讲中,我们介绍了常见的DNS攻击、以及防范DDoS攻击、保障操作安全的方法。今天我们给大家带来的是对DNS缓存投毒攻击的防范。首先我们先来说说什么是“DNS缓存投毒”。
DNS缓存投毒介绍
缓存投毒(DNS cache poisoning),又称DNS缓存污染(DNS cache pollution),是指一些刻意制造(投毒)或无意中制造(污染)出来的DNS数据包,让DNS缓存服务器缓存了错误的域名解析记录。
DNS缓存投毒工作方式是:由于通常的DNS查询没有任何认证机制,而且DNS查询通常基于的UDP是无连接不可靠的协议,因此DNS的查询非常容易被篡改,通过对UDP端口53上的DNS查询进行监听,一经发现与关键词相匹配的请求则立即伪装成目标域名的解析服务器(NS,Name Server)给查询者返回错误结果。
为了减少网络上的流量,一般的DNS缓存服务器都会把域名数据缓存起来,待下次有其他DNS客户端要求解析同样的域名时,可以立即提供服务。当缓存服务器缓存了错误的域名数据时,DNS客户端在请求这些域名时就会得到错误的结果。
DNS缓存投毒原理
目前DNS采用UDP协议传输查询和应答数据包,采用简单信任机制,对首先收到的DNS应答数据包仅进行原查询包发送IP地址、端口和ID的确认,而不会对数据包的合法性做任何分析,若匹配,则接受其为正确应答数据包,继续DNS解析过程,并且丢弃后续到达的所有应答数据包。这就使得攻击者可以仿冒权威DNS服务器向缓存DNS服务器发送伪造应答包,力争抢先完成应答以污染DNS缓存。若攻击者发送的伪造应答包在权威名字服务器发送的正确应答包之前到达缓存DNS服务器,并与原查询包IP地址、端口、ID相匹配,就能够成功污染DNS缓存。
下面我们来看看几种投毒类型:
1、通过随机响应包造成投毒的“生日攻击”
在 2008 年之前,所有DNS请求包都使用固定源端口53发送解析请求。因此,除了ID之外,欺骗DNS回复所需的所有信息都是有限的。用这种弱点攻击 DNS 被称为“生日悖论”,平均需要256次来猜测ID。为了使攻击成功,伪造的DNS回复必须在合法权威DNS服务器响应之前到达缓存DNS服务器。如果伪造响应首先到达,它将由缓存DNS缓存,并且直到其生存时间(TTL)到期,递归DNS不会向权威DNS请求解析相同的域名。
2、Kaminsky缓存投毒
2008年,在Black Hat上有人公布了一种新型缓存投毒的原理。其中基本的随机猜测技术不变。该攻击利用了 DNS 响应包的AUTHORITY SECTION字段,因为 DNS 响应可以是直接应答(请求的直接IP地址)或引用(对给定区域具有权威性的服务器)。基本思想是攻击者选择他们希望攻击的域,然后向目标解析器查询尚未被解析器缓存的子域(查询不存在的子域是一个很好的选择,因为不存在的子域记录是没有被DNS服务器缓存的)。由于子域不在缓存中,因此DNS递归服务器向该域的权威服务器发送查询。正是在这一点上,攻击者用大量伪造的响应来淹没正常应答,每个伪造的响应都有不同的伪造ID号。如果攻击者成功注入伪造响应,则递归DNS服务器将为权威服务器缓存错误的IP。对受感染域的递归DNS服务器的未来 DNS 查询将导致所有请求被转发到攻击者控制器权威解析器,使攻击者能够提供恶意响应,而无需为每个新 DNS 记录注入假条目。
DNS缓存投毒应对方法
防止DNS缓存投毒的最佳方法是实施加密和身份验证的安全方法DNSSEC。作为整个互联网的骨干和基石协议,DNS目前最常用的实施方式,是未加密的明文传输的方式。DNSSEC是一种较好的对DNS进行身份验证的方法,DNS服务器对DNS解析器的应答,采用DNSSEC的签名方式。然后DNS解析器使用签名来验证DNS响应,确保记录未被篡改。此外,它还提供从TLD到域权威区域的信任链,确保整个DNS解析过程是安全的。
尽管有这些明显的好处,但DNSSEC的采用速度很慢。主要问题是DNSSEC设置很复杂,需要升级设备和系统、以及相应的服务,才能处理新协议。此外,由于DNS缓存投毒等攻击形式并没有得到相应的重视。DNSSEC也没有被提高到较高的优先级上进行实施。
阿里云DNS致力于保障用户域名解析的安全性,我们非常重视用户的安全和隐私性保护。给大家透露一下,阿里云DNS对DNSSEC的支持已经在紧张的研发中了。待DNSSEC功能上线后,阿里云将更好的保护您的DNS服务器,助您有效应对缓存投毒攻击。
了解阿里DNS,请戳链接:https://www.aliyun.com/product/dns