在前面章节中,我们简单介绍了DNS系统在协议、软件以及结构中脆弱性,并对DNSSEC协议、去中心化结构等安全增强进行了讨论,接下来针对DNS安全所面临的外部攻击威胁和相应的防御策略做下讨论。
1.DNS缓存投毒攻击
在目前各种DNS攻击手段中,DNS缓存投毒(DNS Cache Poisoning)是比较常见也是危害较大的一种,它通过使用虚假域名解析数据替代DNS服务器缓存中主机记录的真实IP地址信息,从而诱导用户访问错误站点,达成攻击目的。
1.1传统DNS缓存投毒
DNS系统采用树状分形结构,在标准解析链条中,递归服务器在接收到客户主机发起的解析请求后,会发起全球迭代查询,最终在域名授权的权威服务器获得最终的解析记录。为了缩短解析时间,提高域名解析和web访问的速度,DNS系统引入了缓存机制。递归服务器从权威服务器请求到查询结果后,除了告知客户主机外还会将结果保存在自身缓存中一段时间,这就是DNS缓存(DNS Cache)。DNS缓存投毒攻击就是通过污染DNS缓存,用虚假的IP地址信息替换DNS服务器中真实IP地址信息,达成攻击效果。
目前DNS采用UDP协议传输和应答数据包,采用简单的信任机制,对首先收到的应答数据包仅进行发送IP地址、端口和随机查询ID的确认,而不会对数据包的合法性进行验证,如果数据包确认就会将其作为正确应答数据包,继续DNS解析过程,丢弃后续到达的所有数据包。这个过程所存在的缺陷,为攻击者仿冒权威服务器向缓存DNS服务器发送伪造应答包提供了机会。如果攻击者抢先在权威服务器之前将伪造的应答数据包发送到DNS服务器,并与原查询包IP地址、端口和随机查询ID匹配,就能成功污染DNS缓存,使得在该缓存有效期内,将使用该缓存服务器的客户主机对该域名的访问请求至受攻击者控制的IP地址。
传统DNS缓存投毒攻击有较大的局限性,必须等待原DNS缓存失效,缓存DNS服务器重新向权威服务器发起请求时发动攻击。然而当前大多数缓存DNS服务器的DNS缓存TTL设置时间较长,导致攻击者可以利用的攻击时间很短,攻击成功率很低。然而新型的Kaminsky攻击克服了这一缺陷,大幅提升了攻击成功率,使得DNS缓存投毒攻击的破坏性大幅上升。
1.2 Kaminsky 缓存投毒攻击
传统DNS缓存投毒,污染的目标是域名所对应的IP地址信息,而Kaminsky攻击所针对的目标则上升到了域名授权的权威域名服务器。
与传统DNS缓存投毒攻击不同,Kaminsky攻击发送给缓存DNS服务器的域名主机并不是真实的,而是使用随机序列与目标域名的组合。
如24678.example.com,其中example.com是目标域名,而24678为随机生成序列。显然24678.example.com的域名主机记录在DNS服务器中是不存在,缓存DNS在接收到这个域名请求后需要进行迭代请求。
攻击者会抢先在权威服务器之前将伪造的应答数据包发送值缓存服务器中,在伪造的应答数据包中,资源记录部分与正确应答包的结果是一样的,比如24678.example.com的DNS的IP地址、UDP端口号、应答结果是NXDOMAIN。但除此之外,攻击者还伪造了一个example.com的ns记录,将其指向攻击者控制的服务器。这条ns记录也会被写入缓存DNS服务器的缓存中,在DNS缓存时间有效内,对example.com的所有域名查询都被发送到攻击者控制的服务器上。
与传统DNS缓存投毒相比,Kaminsky攻击不受DNS缓存TTL的限制,其所污染的目标不再局限于域名对应的IP地址信息,而是域名主机的NS记录,破坏力更高,危害性更强。
2.DNS缓存投毒攻击的防御策略
针对DNS缓存投毒攻击,目前有几种比较可行的防御策略:
(1)Bind软件采用源端口随机性较好的较高版本,源端口的随机性可以有效降低攻击成功概率,增加攻击难度。
(2)增加权威服务器数量,目前国内外权威服务器数量得到明显提升,但仍需进一步加强。
(3)在DNS应答数据包验证方面,除原查询包IP地址、端口和随机查询ID外,增加其他可认证字段,增强认证机制。
(4)改进现有DNS协议框架,可以在DNS服务器上配置DNSSEC,或引入IPv6协议机制。
(5)UDP端口随机化,不再使用固定的53端口,在UDP端口范围内随机选择端口,可以使ID号和端口号的组合空间扩大6万多倍,降低缓存投毒的命中率。
(6)及时刷新DNS,重建DNS缓存,或者根据服务器性能适当减小缓存记录的TTL值。
(7)可以限制DNS动态更新,设置静态的DNS映射表,可以保护重要网站不被攻击。