DNS 缓存投毒攻击怎么防?先看懂它为什么能骗过递归服务器

DNS 缓存投毒攻击怎么防?先看懂它为什么能骗过递归服务器

一、它攻击的不是服务器,是信任链

DNS 缓存投毒攻击是一种针对域名解析缓存系统的定向破坏行为:攻击者通过伪造或篡改 DNS 响应数据包,把恶意 IP 地址注入递归服务器的缓存,使得大量用户访问特定域名时被引导至攻击者控制的服务器。

它隐蔽的原因在于——它不入侵目标服务器,而是污染了系统内部的信任链条。用户看到的是正常的网址、正常的浏览器、正常的 HTTPS 标志(因为仿冒站点可能同时伪造证书),唯独解析结果被换掉了。

缓存机制本身是善意的:递归服务器完成一次解析后把结果存入本地缓存并设置 TTL,同域名重复查询直接命中缓存,响应速度从毫秒级提升到微秒级,同时也减轻了根服务器和权威服务器的压力。问题在于,这份「信任上一次的答案」的机制给了投毒可乘之机。

二、投毒成功的两个前提条件

  1. 攻击者必须能预测或观察目标递归服务器发出的查询 ID 和源端口号。
  2. 攻击者必须在合法响应到达之前抢先发送伪造的应答数据包。

一旦两个条件同时满足,伪造记录就会被缓存,有效期可持续数小时甚至数天。这就是为什么单次成功投毒能影响一整个区域内的所有客户端。

三、技术链条:预测 → 伪造 → 放大

查询 ID 与端口预测。早期版本 DNS 协议使用 16 位随机查询 ID 和固定源端口,可预测空间很大。攻击者通过连续发送查询并观察响应模式建立统计模型,猜测下一个查询 ID;配合生日攻击原理,在短时间内发送大量伪造响应,大幅提高命中概率。

响应数据包的伪造策略。伪造响应必须包含正确的查询 ID、源端口、域名记录以及附加记录字段。攻击者在应答部分填入恶意 IP,同时利用附加信息字段植入更多伪造记录以扩大污染范围。这些包往往伪装成来自权威服务器,以增强欺骗性。

缓存持久化与传播放大。攻击者会设置较长的 TTL 延长污染时间。更严重的是,下级递归服务器向上级查询时若上级缓存已被污染,恶意记录会继续向下传播,形成级联效应——一次成功投毒足以影响整个网络区域。

四、三种典型危害场景

场景攻击者怎么做你会有什么感受
钓鱼网站重定向把银行、电商等敏感域名的解析结果替换为仿冒站点 IP界面和官方几乎一致,但账号密码、验证码全被后台记录;因为仿冒站可伪造证书,你对 HTTPS 的信任也失效
软件更新供应链污染把自动更新请求指向恶意服务器下载到的更新包是植入后门的木马;软件更新常以管理员权限运行,最终控制权完全落入攻击者手中
内网渗透与横向移动把内部域名解析到攻击机地址,诱导员工访问伪造内部系统域账号凭据被窃取或远程控制工具被植入,为后续横向移动铺路

值得注意的是,攻击者无需破解任何应用层密码就能实现大规模流量劫持和数据窃取。

五、四层防御:从协议到运维

没有单一技术手段能完全杜绝风险,必须构建多层防护网。

  • 启用 DNSSEC。通过数字签名对 DNS 记录做身份验证,确保响应数据的完整性和来源真实性。递归服务器在缓存记录前会验证签名,无法通过验证的伪造响应会被丢弃。它从根源上消除了数据包伪造的可能,但需要权威服务器和递归服务器共同支持。
  • 采用随机化源端口机制。现代 DNS 服务器软件已支持源端口随机化,每次查询使用不同源端口,大幅增加猜测难度。结合查询 ID 随机化,攻击者成功投毒的概率从百分之几骤降至百万分之一以下。这项措施无需额外硬件投入,只需升级软件版本并调整配置即可生效。
  • 部署缓存污染检测与清洗工具。对缓存记录做定期完整性校验,一旦发现某域名解析结果与权威服务器记录不一致,立即告警并清除相关缓存;同时通过分析异常查询模式,提前识别投毒攻击的试探行为。
  • 实施最小化缓存策略。对高风险域名手动缩短 TTL 值,减少恶意记录在缓存中的存活时间;限制递归服务器的开放查询范围,只允许内部可信客户端使用,避免成为公共 DNS 放大器。定期清理缓存并监控缓存命中率异常波动,也能有效降低攻击面。

六、个人用户能做什么

企业侧的三层防护(DNSSEC、端口随机化、检测清洗)普通人享受不到,但有三条自己就能做的:

  • 保持 DNS 软件更新:端口随机化、查询 ID 随机化这类防护都靠版本。
  • 使用可信解析服务:避免使用公共开放递归,也别图省事用来源不明的 DNS 缓存。
  • 关注异常解析结果:网址没输错却跳到奇怪页面,尤其是要求输入账号密码的,先停手。
理解投毒链条,是制定有效防御的前提;防御不能只靠一个开关,得让协议层、部署层、运维层同时发力。