DNS 劫持(DNS Hijacking) 和 DNS 污染(DNS Poisoning/Spoofing) 是两种常见的 DNS 安全攻击手段,它们都旨在篡改 DNS 解析结果,将用户引导到恶意网站。
DNS 劫持详解
什么是 DNS 劫持
DNS 劫持是指攻击者通过各种手段控制或篡改 DNS 解析过程,使用户访问恶意网站而非目标网站。
DNS 劫持的类型
1. 本地劫持
攻击方式:
- 修改本地 hosts 文件
- 篡改路由器 DNS 设置
- 恶意软件修改系统 DNS 配置
常见场景:
shell# 攻击者修改 hosts 文件 192.168.1.100 www.bank.com # 指向钓鱼网站
2. 路由器劫持
攻击方式:
- 利用路由器默认密码或漏洞
- 修改路由器 DNS 服务器地址
- 所有通过该路由器的设备都受影响
3. ISP 劫持
攻击方式:
- ISP 级别的 DNS 服务器被攻击或恶意配置
- 返回错误的解析结果
- 某些 ISP 甚至会劫持不存在的域名到广告页面
4. 权威 DNS 劫持
攻击方式:
- 攻击域名注册商账户
- 篡改域名的 NS 记录
- 将域名指向攻击者控制的 DNS 服务器
DNS 劫持的危害
| 危害类型 | 具体表现 |
|---|---|
| 钓鱼攻击 | 用户访问伪造的银行、电商网站 |
| 信息窃取 | 窃取用户账号密码、个人信息 |
| 广告注入 | 强制插入广告或重定向到广告页面 |
| 恶意软件分发 | 诱导下载木马、病毒 |
DNS 污染/欺骗详解
什么是 DNS 污染
DNS 污染(又称 DNS 缓存投毒)是指攻击者向 DNS 服务器注入虚假的 DNS 记录,污染 DNS 缓存,使后续查询返回错误结果。
DNS 污染的工作原理
shell1. 攻击者向本地 DNS 服务器发送大量伪造的 DNS 响应 2. 在合法响应到达之前,伪造响应被缓存 3. 后续用户查询该域名时,返回错误的 IP 地址 4. 用户被重定向到恶意网站
DNS 污染 vs DNS 劫持
| 特性 | DNS 劫持 | DNS 污染 |
|---|---|---|
| 攻击目标 | DNS 配置或服务器控制 | DNS 缓存 |
| 攻击位置 | 客户端、路由器、DNS 服务器 | 主要是 DNS 服务器缓存 |
| 持久性 | 长期有效(直到配置恢复) | 受 TTL 限制 |
| 影响范围 | 取决于被攻击的层级 | 影响使用该缓存的所有用户 |
防范措施
1. 使用 DNSSEC(DNS Security Extensions)
原理:
- 为 DNS 记录添加数字签名
- 验证 DNS 响应的真实性和完整性
- 防止 DNS 欺骗和缓存投毒
工作流程:
shell1. 权威 DNS 服务器对记录进行数字签名 2. 解析器使用公钥验证签名 3. 验证通过才使用解析结果
局限性:
- 部署复杂,需要整个链路支持
- 增加 DNS 响应大小
- 部分域名和 ISP 尚未支持
2. 使用 HTTPS(DoH)和 TLS(DoT)
DNS over HTTPS (DoH)
shell客户端 ←──HTTPS 加密隧道──→ DoH 服务器(如 Cloudflare 1.1.1.1)
- 通过 HTTPS 协议加密 DNS 查询
- 防止中间人窃听和篡改
- 端口 443,难以被识别和拦截
DNS over TLS (DoT)
shell客户端 ←──TLS 加密隧道──→ DoT 服务器
- 通过 TLS 协议加密 DNS 查询
- 专用端口 853
- 更轻量级,但容易被识别
3. 使用可信的 DNS 服务器
推荐的公共 DNS:
| 服务商 | IPv4 | 特点 |
|---|---|---|
| Cloudflare | 1.1.1.1 | 速度快,支持 DoH/DoT |
| 8.8.8.8 | 稳定可靠,全球覆盖 | |
| Quad9 | 9.9.9.9 | 内置恶意域名拦截 |
| 阿里 | 223.5.5.5 | 国内访问速度快 |
4. 定期检查和加固
客户端防护
bash# 检查 hosts 文件是否被篡改 cat /etc/hosts # 检查 DNS 配置 cat /etc/resolv.conf # 使用 dig 验证解析结果 dig @1.1.1.1 www.example.com
路由器防护
- 修改默认管理密码
- 禁用远程管理功能
- 定期更新固件
- 使用可靠的 DNS 服务器
5. 应用层防护
HTTP Strict Transport Security (HSTS)
httpStrict-Transport-Security: max-age=31536000; includeSubDomains
- 强制使用 HTTPS 连接
- 防止 SSL 剥离攻击
Certificate Pinning
- 应用程序内置服务器证书指纹
- 验证服务器身份,防止中间人攻击
检测 DNS 劫持的方法
1. 多 DNS 服务器对比
bash# 对比不同 DNS 服务器的解析结果 dig @8.8.8.8 www.example.com dig @1.1.1.1 www.example.com dig @223.5.5.5 www.example.com
2. 在线检测工具
- DNSChecker.org
- WhatsMyDNS.net
- Google Admin Toolbox
3. 监控和告警
- 监控域名解析结果变化
- 设置 DNS 记录变更告警
- 定期检查域名 WHOIS 信息
总结
| 防护措施 | 防护对象 | 实施难度 | 推荐程度 |
|---|---|---|---|
| DNSSEC | DNS 欺骗 | 中等 | ⭐⭐⭐⭐ |
| DoH/DoT | 中间人攻击 | 简单 | ⭐⭐⭐⭐⭐ |
| 可信 DNS | 各类攻击 | 简单 | ⭐⭐⭐⭐⭐ |
| 定期检查 | 本地劫持 | 简单 | ⭐⭐⭐⭐ |
| HSTS | 协议降级 | 简单 | ⭐⭐⭐⭐ |