DNS 欺骗攻击(DNS Spoofing / DNS Cache Poisoning)

一、先一句话点透本质

DNS 欺骗就是:让你问"www.bank.com的 IP 是多少?",收到的答案被篡改成攻击者的 IP——你以为在访问真网站,其实连的是假站点。

它不是"黑进你的电脑"那么重,而是污染名字解析这个信任链条中的某一环,让域名→IP 这张对照表在关键环节上"指错路"。


二、为什么 DNS 天然脆弱?(理解攻击面)

正常 DNS 查询链路大概是这样:

浏览器 → 本机 DNS 缓存 → hosts 文件
         ↓ 未命中
     系统配置的 DNS 服务器(如 8.8.8.8 / 企业 DNS)
         ↓ 未命中
     递归查询 → 根 → .com → 权威 NS → 拿到真实 IP

关键弱点有三个:

弱点

说明

早期 DNS 协议无验证

原始 DNS(UDP 53)靠一个 16-bit Transaction ID(2^16=65536)匹配"这是哪次查询的回答",但查询内容和应答都明文,不验证身份

信任关系

你的电脑/路由器无条件相信DNS服务器的回答;下级DNS部分相信上级DNS的回答

缓存放大效应

一个错误答案一旦被接受,会被缓存一段时间(TTL),期间所有用户都被骗


三、DNS 欺骗发生在哪几层?(四类攻击位置)

① 本地 Hosts 文件篡改(最原始)

C:\Windows\System32\drivers\etc\hosts
— 或 —
/etc/hosts

攻击者如果能写你机器的 hosts 文件:

203.0.113.99   www.bank.com

→ 操作系统查 DNS 时 hosts 优先级最高,直接返回假 IP。

本质:不是"骗 DNS",而是绕过 DNS

  • 需要:主机已经被入侵(恶意软件/提权写入)

  • 危害:精准、持久(除非被发现清掉)


② 本地 DNS 缓存投毒(本机级)

你本机维护一个 DNS 缓存(ipconfig /displaydns/ systemd-resolve --statistics)。

某些恶意脚本/广告软件/木马可以在本机注入假缓存条目,或通过本地监听端口劫持。

现实中这块通常要配合主机入侵或浏览器恶意扩展,单独靠远程投毒本机缓存比较受限(因为现代系统做了随机源端口 + Transaction ID)。


DNS 服务器缓存污染(Cache Poisoning)——经典意义上的 DNS 欺骗

这才是教科书里的主角。

攻击思路(核心逻辑)

假设受害者用企业 DNS 服务器 192.168.1.1,它还没缓存 www.bank.com

攻击者同时向这台 DNS 服务器:

  1. 发一个合法查询(或诱使它发):"嘿 DNS 服务器,帮我查 www.bank.com"

  2. DNS 服务器向外递归查询……

  3. 攻击者狂轰滥炸伪造应答包

假装是 bank.com 的权威 DNS 服务器,回复:
"www.bank.com → 203.0.113.99"

并猜测正确的 Transaction ID + 源端口,抢在真权威服务器之前到达。

→ 如果猜中,DNS 服务器说:"哦,这就是答案",缓存 下来

→ 接下来公司里所有人查 www.bank.com都得到假 IP

受害者 PC → 企业 DNS(已中毒)
            "www.bank.com 的 IP?"
             → 缓存答:203.0.113.99(攻击者)
              受害者 → 连上假银行站点 → 账号密码被盗
为什么历史上能成功?

条件

老 DNS 实现

现代缓解

Transaction ID 可预测

弱随机

✅ 强随机 0~65535

源端口固定(53)

早期很多实现

✅ 随机源端口(1024~65535)

不复验来源

收到就信

✅ 校验是否来自正在等的上游

允许额外记录注入

应答中带"附加记录"自动采信

✅ 严格校验 authority section

经典的 Kaminsky 漏洞(2008)​ 就是把"猜中概率"从几十年提升到几分钟级别,迫使全球 DNS 升级。


④ 中间人(MITM)/ 链路层欺骗(局域网内最实用)

如果攻击者和你在同一 WiFi / 同一交换机域

  • ARP 欺骗 → 把你流量引到自己

  • 然后拦截你的 DNS 请求(UDP 53),直接回复假答案

你的 PC: "www.taobao.com → ?"
攻击者(MITM)截获 → 伪造 DNS response → 203.0.113.99

这在公共 WiFi 场景特别有效——因为:

  • UDP 无连接、无认证

  • 大多数设备默认用 DHCP 下发的 DNS(攻击者通过 DHCP 还能把自己的 DNS 塞给你)


四、攻击完整链条(以中间人型为例)

① 攻击者接入同一网段
      ↓ ARP Spoofing / Rogue AP
② 你的 DNS 请求(UDP 53)流经攻击者
      ↓
③ 攻击者拦截 OR 让请求到自己的假 DNS
      ↓
④ 回复:www.alipay.com = 203.0.113.99(攻击者搭的钓鱼站)
      ↓
⑤ 浏览器显示 "http://www.alipay.com"(没绿锁 → 警觉用户会发现)
   但如果是 HTTP(非 HTTPS)→ 用户可能无感被钓鱼
⑥ 账号/Cookie/表单数据 → 攻击者收走

⚠️ 注意:如果目标是 HTTPS 站点,光 DNS 欺骗还不够——浏览器会报证书不匹配(NET::ERR_CERT_COMMON_NAME_INVALID),除非攻击者还能搞定伪造证书(需要 CA 被攻破或用户点"继续忽略")。

所以 DNS 欺骗常配合 SSL Stripping(把 https:// 降级为 http://)一起用。


五、危害到底有多大?

场景

影响

银行/支付/邮箱登录页

钓鱼→凭证窃取

软件更新检查域名

指向恶意包 → 供应链投毒

内网域名(ldap、git、jenkins)

转向内网钓鱼 → 横向移动

缓存污染企业 DNS

整个公司同时受害,一个投毒影响几百人


六、防御体系(分层)

1)协议层(最根本)

技术

做什么

DNSSEC

给 DNS 记录加数字签名, resolver 可验证"这个答案确实来自真正的权威所有者,未被改"

DoH / DoT(DNS over HTTPS / TLS)

加密 + 防链路篡改,防止 MITM 直接读/改 DNS 报文

但:DNSSEC 部署率至今仍不理想(需要权威侧配、运维复杂度),DoH/DoT 引入新的隐私与管控争议(企业想看员工 DNS 还是不想看?)

2)网络层

  • 交换机开 DHCP Snooping + ARP Inspection(防 ARP 欺骗)

  • 企业 DNS 服务器:

    • 随机源端口 ✅

    • 严格校验 Transaction ID ✅

    • 不以"附加记录"盲信非授权域 ✅

    • 限速递归、隔离递归器与外网 ✅

3)终端/用户侧

  • HTTPS Everywhere / HSTS​ 机制——证书校验是 DNS 欺骗的终极防线

  • 不忽略浏览器证书警告

  • 公共 WiFi 走 VPN

4)架构

  • 内网关键服务尽量用 IP + 证书 pinning​ 或内部 CA 签的正式证书,别只靠"域名解析可信"

  • 监控:异常 TTL、同一域名突然解析到境外异常 IP → 告警


七、一句话总结

DNS 欺骗的本质是破坏"名字→地址"这个信任锚:要么改你本机的对照表(hosts/缓存),要么抢答你的 DNS 查询(MITM),要么污染你依赖的 DNS 服务器的缓存(缓存投毒)——最终让你把信任交给攻击者。防御靠三层:DNSSEC/加密(协议信任)、防 ARP+DHCP 欺骗(链路隔离)、HTTPS 证书校验(最后一道铁壁)。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐