DNS是什么?DNS 原理、DNS 污染与 DNS 劫持详解

DNS是什么?DNS 原理、DNS 污染与 DNS 劫持详解

一、DNS 基本原理

1.1 什么是 DNS

DNS(Domain Name System,域名系统)是互联网的核心基础设施之一,它将人类可读的域名(如 freenode.osbooting.com)转换为机器可识别的 IP 地址(如 93.184.216.34)。没有 DNS,我们只能通过记忆复杂的数字 IP 地址来访问网站。

1.2 DNS 层级结构

DNS 采用分层分布式数据库结构,从上到下分为:

1
2
3
4
5
6
7
根域名服务器 (.)

顶级域名服务器 (TLD) - 如 .com, .org, .cn

权威域名服务器 - 负责具体域名的解析

本地 DNS 服务器 - ISP 提供的递归解析器

1.3 DNS 查询过程

当用户访问一个网站时,DNS 查询过程如下:

sequenceDiagram
    participant Client as 客户端
    participant LocalDNS as 本地DNS
    participant Root as 根服务器
    participant TLD as TLD服务器
    participant Auth as 权威DNS

    Client->>LocalDNS: 查询 freenode.osbooting.com
    LocalDNS->>LocalDNS: 检查缓存
    alt 缓存命中
        LocalDNS-->>Client: 返回IP地址
    else 缓存未命中
        LocalDNS->>Root: 查询 .com 的 TLD 服务器
        Root-->>LocalDNS: 返回 .com TLD 服务器地址
        LocalDNS->>TLD: 查询 osbooting.com 的权威服务器
        TLD-->>LocalDNS: 返回权威DNS服务器地址
        LocalDNS->>Auth: 查询 freenode.osbooting.com
        Auth-->>LocalDNS: 返回IP地址
        LocalDNS->>LocalDNS: 缓存结果
        LocalDNS-->>Client: 返回IP地址
    end

1.4 DNS 记录类型

记录类型用途示例
A将域名映射到 IPv4 地址freenode.osbooting.com → 93.184.216.34
AAAA将域名映射到 IPv6 地址freenode.osbooting.com → 2606:2800:220:1:248:1893:25c8:1946
CNAME域名别名freenode.osbooting.com → osbooting.com
MX邮件服务器osbooting.com → mail.osbooting.com
TXT文本记录(常用于 SPF、DKIM)osbooting.com → "v=spf1 include:_spf.google.com ~all"
NS指定该域名的权威 DNS 服务器osbooting.com → ns1.osbooting.com

二、DNS 污染

2.1 什么是 DNS 污染

DNS 污染(DNS Poisoning),又称 DNS 投毒,是指通过篡改 DNS 响应,将用户访问的域名解析到错误的 IP 地址。这种攻击通常发生在 DNS 查询过程中,攻击者伪造 DNS 响应包,使其先于真实响应到达客户端。

2.2 DNS 污染的原理

graph TD
    A[用户发起DNS查询] --> B[攻击者监听网络]
    B --> C{攻击者检测到查询}
    C -->|是| D[伪造DNS响应包]
    D --> E[伪造响应先于真实响应到达]
    E --> F[客户端接受伪造响应]
    F --> G[用户被重定向到恶意网站]
    C -->|否| H[正常DNS解析流程]

2.3 DNS 污染的常见场景

  1. 网络审查:某些国家或地区通过 DNS 污染屏蔽特定网站
  2. 恶意广告:将用户重定向到广告页面
  3. 钓鱼攻击:将银行、支付网站重定向到伪造页面
  4. 恶意软件分发:将软件更新域名解析到恶意服务器

2.4 DNS 污染的检测方法

1
2
3
4
5
6
7
8
9
# 使用 nslookup 检测
nslookup freenode.osbooting.com

# 使用 dig 检测(更详细)
dig freenode.osbooting.com +trace

# 使用多个 DNS 服务器对比
nslookup freenode.osbooting.com 8.8.8.8
nslookup freenode.osbooting.com 1.1.1.1

如果不同 DNS 服务器返回的 IP 地址不一致,可能存在 DNS 污染。


三、DNS 劫持

3.1 什么是 DNS 劫持

DNS 劫持(DNS Hijacking)是指攻击者通过控制用户的 DNS 解析过程,将域名解析到攻击者指定的 IP 地址。与 DNS 污染不同,DNS 劫持通常涉及对 DNS 服务器或用户设备的直接控制。

3.2 DNS 劫持的类型

3.2.1 本地 DNS 劫持

攻击者通过恶意软件修改用户设备上的 DNS 设置:

flowchart LR
    A[恶意软件感染] --> B[修改网络适配器DNS设置]
    B --> C[修改 hosts 文件]
    C --> D[修改路由器 DNS 设置]
    D --> E[所有 DNS 查询被劫持]

3.2.2 路由器 DNS 劫持

攻击者利用路由器漏洞或弱密码修改路由器的 DNS 设置:

攻击方式描述
默认密码攻击使用路由器默认密码登录
固件漏洞利用利用路由器固件漏洞获取控制权
DNS 重绑定通过恶意网页修改路由器 DNS

3.2.3 中间人攻击

攻击者在用户与 DNS 服务器之间拦截并篡改 DNS 请求:

sequenceDiagram
    participant Client as 客户端
    participant Attacker as 攻击者
    participant DNS as DNS服务器

    Client->>Attacker: DNS 查询请求
    Attacker->>Attacker: 篡改查询或响应
    Attacker->>DNS: 转发查询(可选)
    DNS-->>Attacker: 真实响应
    Attacker-->>Client: 伪造响应

3.2.4 ISP DNS 劫持

某些互联网服务提供商(ISP)会劫持 DNS 查询,将不存在的域名解析到广告页面或搜索页面。

3.3 DNS 劫持的危害

  1. 隐私泄露:攻击者可以记录用户访问的所有网站
  2. 钓鱼攻击:将用户重定向到伪造的登录页面
  3. 恶意软件传播:将软件更新域名解析到恶意服务器
  4. 广告注入:在用户访问的网页中注入广告
  5. 流量劫持:将用户流量引导到攻击者控制的服务器

四、DNS 污染与 DNS 劫持的区别

特征DNS 污染DNS 劫持
攻击方式伪造 DNS 响应包控制 DNS 服务器或设备
攻击位置网络传输层设备或服务器层
持续性临时性(依赖网络环境)持续性(直到被修复)
检测难度较难(需要对比多个 DNS)较易(检查 DNS 设置)
常见场景网络审查、中间人攻击恶意软件、路由器攻击

五、防范措施

5.1 使用安全的 DNS 服务器

DNS 服务提供商特点
8.8.8.8 / 8.8.4.4Google全球分布,速度快
1.1.1.1 / 1.0.0.1Cloudflare注重隐私,支持 DoH/DoT
223.5.5.5 / 223.6.6.6阿里云国内访问快
119.29.29.29腾讯 DNSPod国内访问快

5.2 使用 DNS over HTTPS (DoH) 或 DNS over TLS (DoT)

graph LR
    A[客户端] -->|加密的 DNS 查询| B[DoH/DoT 服务器]
    B -->|加密的 DNS 响应| A
    B -->|正常查询| C[权威 DNS]
    C -->|正常响应| B
    style A fill:#e1f5ff
    style B fill:#fff4e1
    style C fill:#e1ffe1

DoH/DoT 的优势:

  • 加密 DNS 查询,防止中间人攻击
  • 防止 ISP 监控和篡改
  • 绕过某些 DNS 污染

5.3 检查和修复 DNS 设置

Windows 系统:

1
2
3
4
5
6
# 查看当前 DNS 设置
ipconfig /all

# 修改 DNS 设置
netsh interface ip set dns "以太网" static 8.8.8.8
netsh interface ip add dns "以太网" 8.8.4.4 index=2

macOS/Linux 系统:

1
2
3
4
5
# 查看当前 DNS 设置
cat /etc/resolv.conf

# 修改 DNS 设置(需要 root 权限)
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf

5.4 检查 hosts 文件

1
2
3
4
5
# Windows
type C:\Windows\System32\drivers\etc\hosts

# Linux/macOS
cat /etc/hosts

如果 hosts 文件中有可疑的域名映射,应该删除或注释掉。

5.5 保护路由器安全

  1. 修改默认管理员密码
  2. 定期更新路由器固件
  3. 关闭远程管理功能
  4. 启用 WPA3 加密
  5. 定期检查 DNS 设置

5.6 使用 DNSSEC

DNSSEC(DNS Security Extensions)为 DNS 提供数据来源验证和数据完整性保护:

graph TD
    A[权威 DNS] -->|签名 DNS 记录| B[添加 DNSSEC 签名]
    B --> C[DNS 查询请求]
    C --> D[返回签名记录]
    D --> E[客户端验证签名]
    E -->|验证成功| F[接受 DNS 响应]
    E -->|验证失败| G[拒绝 DNS 响应]

5.7 使用 VPN 或代理

VPN 可以加密所有网络流量,包括 DNS 查询,有效防止 DNS 污染和劫持。


六、总结

DNS 是互联网的基础设施,但其设计之初并未充分考虑安全性,导致 DNS 污染和 DNS 劫持成为常见的安全威胁。

关键要点:

  1. DNS 污染通过伪造响应包实现,通常发生在网络传输层
  2. DNS 劫持通过控制 DNS 服务器或设备实现,危害更持久
  3. 防范措施包括使用安全 DNS、启用 DoH/DoT、保护路由器等
  4. 定期检查 DNS 设置和 hosts 文件是必要的维护习惯

随着 DoH、DoT 和 DNSSEC 等技术的普及,DNS 安全性正在逐步提高,但用户仍需保持警惕,采取适当的防护措施。