DNS缓存污染是一种利用DNS协议弱点的攻击方式,攻击者向递归解析服务器发送伪造的响应报文,抢在真实授权服务器答复之前完成应答,从而让错误的域名解析记录被写入缓存。受到污染的缓存会把用户正常访问的域名指向钓鱼或挂马站点,且在一定生存时间内持续生效。要应对这个问题,需要从协议验证、解析路径以及终端缓存管理三个维度同时着手。

DNS缓存污染的底层原理与常见入口
DNS默认走UDP协议且缺乏强身份认证,递归解析器发出查询后,只要收到的响应报文事务ID与端口猜测正确,就会被当作合法答案。攻击者可监听或盲猜这些字段,在真实响应到达前塞入伪造记录。一旦缓存接受,后续所有相同域名的请求都会直接返回污染结果,不需要再次攻击。这种机制决定了污染影响的不仅是单台电脑,更常发生在运营商或企业内网的公用递归服务器上。
另一个容易被忽视的入口是本地HOST解析顺序与转发配置。部分路由器把上游DNS设成了不可信的公共节点,下级设备全部继承错误缓存。还有一些应用程序自带HTTPDNS旁路,但若降级到系统DNS时未做校验,也会踩坑。理解这些入口有助于我们分清该清终端还是该换上游,而不是盲目执行flush命令。
从攻击成本看,现代随机化事务ID与源端口已让盲注难度上升,但中间人场景依旧高危。内网ARP欺骗配合DNS假响应,可稳定污染网关缓存。因此防护不能只靠用户侧,网络管理员必须评估递归服务的可信度,必要时开启DNSSEC以降低伪造命中率。
实用防护手段:验证、换源与加密查询
部署DNSSEC是最直接的协议层防护。它在权威区对资源记录做数字签名,递归解析器拿到响应后会用信任锚验证链条,伪造记录因无合法签名被丢弃。在支持的系统里,只需向上游确认开启validation即可,例如Unbound配置dnssec-validation: yes。不过DNSSEC不隐藏查询内容,且依赖权威方部署,覆盖面有限。
切换可信公共解析能减少被污染概率。将终端或路由器上游改为具备过滤能力的服务,并在支持时启用DoT或DoH加密通道,可避免链路中间人篡改。下面一段是Linux下systemd-resolved使用DoT的配置示例,把明文查询变成TLS上行:
[Resolve] DNS=1.1.1.1#cloudflare-dns.com Domains=~. DNSOverTLS=yes
强制TCP查询也是一种退避方案。虽然多数DNS用UDP,但TCP带序号与握手,伪造难度更高。某些防火墙可设规则让特定域名走TCP,或解析器开启use-vc选项。缺点是延迟略增,不适合高并发场景。综合来看,小型网络用加密公共DNS,大型内网自建带DNSSEC的递归,是性价比最高的组合。
各系统清除本地DNS缓存的标准操作
Windows平台最常用的是ipconfig /flushdns,它会清空系统解析缓存并立即生效。若污染发生在浏览器自身缓存,还需在设置里清除主机解析记录。对于企业域控,有时要连带重启DNS Client服务,否则组策略下发的旧记录可能滞留。示例如下:
ipconfig /flushdns net stop dnscache net start dnscache
Linux发行版差异较大。使用nscd的系统执行sudo nscd -i hosts;采用systemd-resolved的用resolvectl flush-caches;而纯resolv.conf直连的场景其实没有系统级缓存,只需杀掉应用层缓存进程。错误做法是反复重启网络却不清服务,结果污染依旧。下面的脚本适配两种常见环境:
if command -v resolvectl > /dev/null; then resolvectl flush-caches elif command -v nscd > /dev/null; then sudo nscd -i hosts fi
macOS在Big Sur之后用sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder。路由器层面通常没有命令行,只能改上游DNS后断电重启,或进管理页清除 resolver 状态。清除只是补救措施,若上游仍在投毒,几分钟内会再被写入,所以清缓存必须和换解析源同步做。
防护与清除的协同策略及风险规避
单点操作往往治标不治本。正确流程是先切断污染上游,比如把路由器DNS改成可信节点,再于终端清缓存,最后用dig +trace或nslookup比对真实IP。若清完立刻又脏,说明链路中有持久化假响应,需要抓包确认是本地中间件还是运营商问题。
风险方面,盲目开启DoH可能被部分网络识别并阻断,反而退回明文。企业环境应白名单化可信解析器,避免员工随意切公共DNS引发数据外发。另外,DNSSEC验证失败会导致域名整体解析失败,运维需监控trust anchor到期,防止误判污染而关停正常业务。
从长期看,养成定期清缓存习惯不如固化安全解析配置。将加密DNS写进组策略或启动脚本,配合系统级刷新任务,能在不改变用户行为的前提下降低污染面。当协议层与应用层形成闭环,缓存污染就从高危漏洞退化为可忽略的背景噪声。
DNS_cache_pollutionDNS_cache_flushDNS_security修改时间:2026-08-18 17:28:37