国科云:浅谈DNS缓存投毒常见类型和防御策略

为了提升解析效率减轻各级服务器的解析压力,DNS系统中引入了缓存机制,但这同样也带来了较大的安全隐患,为攻击者利用DNS缓存进行投毒攻击创造了条件,对DNS系统的安全造成了巨大破坏。本文国科云将分析缓存投毒的两种主要类型,并对缓存投毒的防御策略进行简单介绍。

DNS缓存投毒攻击类型

在目前各种DNS攻击手段中,DNS缓存投毒(DNS Cache Poisoning)是比较常见也是危害较大的一种,它通过使用虚假域名解析数据替代DNS服务器缓存中主机记录的真实IP地址信息,从而诱导用户访问错误站点,达成攻击目的。

传统DNS缓存投毒

DNS系统采用树状分形结构,在标准解析链条中,递归服务器在接收到客户主机发起的解析请求后,会发起全球迭代查询,最终在域名授权的权威服务器获得最终的解析记录。为了缩短解析时间,提高域名解析和web访问的速度,DNS系统引入了缓存机制。

缓存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缓存投毒攻击的破坏性大幅上升。

Kaminsky 缓存投毒攻击

传统DNS缓存投毒,污染的目标是域名所对应的IP地址信息,而Kaminsky攻击所针对的目标则上升到了域名授权的权威域名服务器。

与传统DNS缓存投毒攻击不同,Kaminsky攻击发送给缓存DNS服务器的域名主机并不是真实的,而是使用随机序列与目标域名的组合。

如24678.example.com,其中example.com是目标域名,而24678为随机生成序列。显然24678.example.com的域名主机记录在缓存DNS服务器中是不存在的,缓存DNS在接收到这个域名请求后需要进行迭代请求。

攻击者会抢先在权威服务器之前将伪造的应答数据包发送至缓存DNS服务器中,在伪造的应答数据包中,资源记录部分与正确应答包的结果是一样的,比如24678.example.com的DNS的IP地址、UDP端口号、应答结果是NXDOMAIN。但除此之外,攻击者还伪造了一个example.com的ns记录,将其指向攻击者控制的服务器。这条ns记录也会被写入缓存DNS服务器的缓存中,在DNS缓存时间有效内,对example.com的所有域名查询都被发送到攻击者控制的服务器上。

与传统DNS缓存投毒相比,Kaminsky攻击不受DNS缓存TTL的限制,其所污染的目标也不再局限于域名对应的IP地址信息,而是域名主机的NS记录,破坏力更高,危害性更强。

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映射表,可以保护重要网站不被攻击。

国科云DNS安全解决方案

国科云解析是基于云技术的新一代权威解析技术,能够通过DNSSEC、健康监测、减小TTL值等手段,应对DNS缓存投毒、NS篡改等DNS攻击手段,域名解析的安全性和准确性得到了保障。

DNSSEC

国科云解析支持DNS安全扩展协议(DNSSEC),能够对DNS记录进行数字签名,保证DNS应答报文的真实性和完整性,保护用户不被重定向至非预期地址,有效应对DNS缓存投毒及其他形式的篡改。

健康监测

云解析在国内及海外设置多个解析监测节点,能够通过ping命令、TCP/UDP探测和http(s)协议等方式对网站健康状态进行实时监测,当发现因缓存投毒导致的域名状态异常时,会及时发出告警,为网站管理者进行故障处理提供技术标准和依据。

减小TTL

TTL是DNS缓存在DNS服务器上的生存时间。TTL值越小,DNS服务器就会在越短时间内请求权威服务器,获取最新的解析记录,更好地规避缓存投毒带来的风险。国科云解析最低支持1S的TTL,能够做到DNS缓存秒级刷新,最大限度降低缓存投毒带来的劫持风险。

DNS在互联网上应用广泛,其安全关系着整个互联网的稳定。缓存投毒作为DNS攻击最常见的方式之一,破坏力强,影响范围广,如果与其他技术结合,将产生更严重的危害。因此,了解缓存投毒的工作原理和防御策略,对于加强DNS系统安全,维护互联网的健康秩序,具有重要意义。

(本文部分图片和文字引用自网络,如有侵权行为,请联系删除)

相关推荐
材料苦逼不会梦到计算机白富美5 小时前
golang分布式缓存项目 Day 1
分布式·缓存·golang
Java 第一深情5 小时前
高性能分布式缓存Redis-数据管理与性能提升之道
redis·分布式·缓存
HBryce246 小时前
缓存-基础概念
java·缓存
想要打 Acm 的小周同学呀13 小时前
LRU缓存算法
java·算法·缓存
hlsd#13 小时前
go 集成go-redis 缓存操作
redis·缓存·golang
镰刀出海13 小时前
Recyclerview缓存原理
java·开发语言·缓存·recyclerview·android面试
奶糖趣多多15 小时前
Redis知识点
数据库·redis·缓存
CoderIsArt16 小时前
Redis的三种模式:主从模式,哨兵与集群模式
数据库·redis·缓存
ketil2720 小时前
Redis - String 字符串
数据库·redis·缓存
生命几十年3万天1 天前
redis时间优化
数据库·redis·缓存