两个有趣的DNS 安全问题研究
字数 2345 2025-08-18 11:35:59

DNS安全研究深度解析:漏洞原理与防御措施

一、DNS基础概念

1.1 DNS定义与功能

域名系统(Domain Name System, DNS)是互联网的核心基础设施服务,默认使用53端口,主要功能是实现域名与IP地址的双向映射。DNS数据库采用分布式架构,服务器遍布全球各地。

1.2 通信协议特性

  • 默认使用UDP协议进行通信
  • 当DNS请求超过512字节时自动切换为TCP协议
  • UDP协议的选择基于效率考虑,TCP用于大数据量传输

1.3 域名层次结构

DNS采用分层架构,从高到低分为:

  1. 根域(Root Domain):用单个点(.)表示,通常省略
  2. 顶级域(Top Level Domain, TLD):如.com、.net等
  3. 二级域(Second Level Domain, SLD):如baidu.com中的"baidu"
  4. 子域(Subdomain):如www.baidu.com中的"www"

根域名服务器特点

  • 全球有13个根域名服务器地址
  • 实际服务器数量超过1000台
  • 采用任播(Anycast)技术实现负载均衡

1.4 常见资源记录类型

记录类型 全称 功能描述
NS Name Server 指定负责解析域名或子域名的DNS服务器
MX Mail Exchanger 指定接收邮件的服务器
A Address 域名对应的IPv4地址记录
AAAA - 域名对应的IPv6地址记录
CNAME Canonical Name 域名别名,映射到另一个域名

1.5 DNS解析过程详解

  1. 本地解析阶段

    • 检查主机Host文件(静态解析,优先级最高)
    • 查询本地DNS缓存
  2. 递归解析阶段

    • 本地DNS服务器查询
    • 若缓存中有非权威映射关系则使用
  3. 迭代查询阶段

    • 本地DNS向根域服务器查询
    • 根域返回对应TLD服务器地址
    • 本地DNS向TLD服务器查询
    • TLD返回SLD服务器地址
    • 本地DNS向SLD服务器查询获取最终解析结果

术语说明

  • 递归解析器(Resolver):即本地DNS服务器
  • 权威域名服务器(Authoritative Name Server):包括根域、TLD、SLD等服务器

二、DNS劫持漏洞分析

2.1 漏洞原理与攻击场景

核心问题:废弃DNS记录导致的劫持风险

漏洞成因

  • DNS记录指向的资源已被释放
  • 解析记录仍然存在且可被第三方获取
  • 影响记录类型:A、CNAME、MX、NS等

僵尸激活攻击(Zombie Awakening)
攻击条件

  1. 域名使用第三方DNS托管服务
  2. 托管服务商未严格验证域名归属

攻击流程

  1. 攻击者在第三方DNS服务添加目标域名(example.com)
  2. 配置恶意解析记录(NS和A记录)
  3. 发起大量NS解析请求触发缓存机制
  4. 利用DNS服务器随机选择NS记录的特性
  5. 有概率使废弃记录"复活"并返回攻击者控制的IP

2.2 漏洞验证方法

  1. 准备两个第三方DNS托管账户
  2. 在第一个账户添加正常解析记录并验证
  3. 删除第一个账户中的域名配置
  4. 在第二个账户添加相同域名但指向恶意IP
  5. 使用dig命令测试解析结果
    dig @dns-server example.com
    
  6. 观察是否有时返回恶意IP

2.3 防御措施

  • 域名管理员:及时清理不再使用的DNS记录
  • DNS服务商:实施严格的域名归属验证机制
  • 系统设计:避免使用可能被废弃的第三方DNS服务

三、DNS拒绝服务攻击(NXNSAttack)

3.1 攻击原理

核心机制:利用DNS对NS记录的完全解析特性实现流量放大

攻击特点

  1. 双向攻击:同时影响递归解析器和目标DNS服务器
  2. 放大效应:每个NS记录会触发IPv4和IPv6两次查询
  3. 低成本:攻击者只需控制少量域名即可发起大规模攻击

攻击流程

  1. 攻击者注册大量廉价域名并配置NS记录
  2. 这些NS记录指向受害者DNS服务器
  3. 发起对攻击者域名的DNS查询
  4. 权威服务器返回大量NS记录
  5. 递归解析器对每个NS记录发起完整解析
  6. 导致受害者服务器收到海量查询请求

3.2 漏洞修复方案

  • 限制NS记录解析数量:设置上限K值
  • 优化递归解析逻辑:避免不必要的完整解析
  • 实施流量监控:检测异常查询模式

四、DNSSEC安全扩展

4.1 基本原理

DNSSEC(Domain Name System Security Extensions)通过数字签名机制增强DNS安全性:

  1. 密钥体系

    • 每个DNS区域拥有公私钥对
    • 私钥用于数据签名
    • 公钥公开发布供验证使用
  2. 验证过程

    • 递归解析器获取DNS数据及签名
    • 使用区域公钥验证签名有效性
    • 验证通过则返回数据,否则丢弃

4.2 核心功能

  1. 数据来源验证

    • 确认数据确实来自声称的权威区域
  2. 数据完整性保护

    • 确保数据在传输过程中未被篡改

4.3 实施建议

  • 选择支持DNSSEC的域名注册商
  • 正确配置DNS区域的密钥对
  • 定期轮换密钥以提高安全性

五、研究参考文献

  1. 《Zombie Awakening: Stealthy Hijacking of Active Domains through DNS Hosting Referral》(CCS 2020)
  2. 《NXNSAttack: Recursive DNS Inefficiencies and Vulnerabilities》(USENIX 2020)

本教学文档全面涵盖了DNS安全研究的核心内容,包括基础概念、两种主要攻击方式(劫持和拒绝服务)的原理与防御,以及DNSSEC安全扩展机制。关键点均已详细说明,可作为DNS安全领域的权威参考资料。

DNS安全研究深度解析:漏洞原理与防御措施 一、DNS基础概念 1.1 DNS定义与功能 域名系统(Domain Name System, DNS)是互联网的核心基础设施服务,默认使用53端口,主要功能是实现域名与IP地址的双向映射。DNS数据库采用分布式架构,服务器遍布全球各地。 1.2 通信协议特性 默认使用UDP协议进行通信 当DNS请求超过512字节时自动切换为TCP协议 UDP协议的选择基于效率考虑,TCP用于大数据量传输 1.3 域名层次结构 DNS采用分层架构,从高到低分为: 根域(Root Domain):用单个点(.)表示,通常省略 顶级域(Top Level Domain, TLD):如.com、.net等 二级域(Second Level Domain, SLD):如baidu.com中的"baidu" 子域(Subdomain):如www.baidu.com中的"www" 根域名服务器特点 : 全球有13个根域名服务器地址 实际服务器数量超过1000台 采用任播(Anycast)技术实现负载均衡 1.4 常见资源记录类型 | 记录类型 | 全称 | 功能描述 | |---------|------|---------| | NS | Name Server | 指定负责解析域名或子域名的DNS服务器 | | MX | Mail Exchanger | 指定接收邮件的服务器 | | A | Address | 域名对应的IPv4地址记录 | | AAAA | - | 域名对应的IPv6地址记录 | | CNAME | Canonical Name | 域名别名,映射到另一个域名 | 1.5 DNS解析过程详解 本地解析阶段 : 检查主机Host文件(静态解析,优先级最高) 查询本地DNS缓存 递归解析阶段 : 本地DNS服务器查询 若缓存中有非权威映射关系则使用 迭代查询阶段 : 本地DNS向根域服务器查询 根域返回对应TLD服务器地址 本地DNS向TLD服务器查询 TLD返回SLD服务器地址 本地DNS向SLD服务器查询获取最终解析结果 术语说明 : 递归解析器(Resolver):即本地DNS服务器 权威域名服务器(Authoritative Name Server):包括根域、TLD、SLD等服务器 二、DNS劫持漏洞分析 2.1 漏洞原理与攻击场景 核心问题 :废弃DNS记录导致的劫持风险 漏洞成因 : DNS记录指向的资源已被释放 解析记录仍然存在且可被第三方获取 影响记录类型:A、CNAME、MX、NS等 僵尸激活攻击(Zombie Awakening) : 攻击条件 : 域名使用第三方DNS托管服务 托管服务商未严格验证域名归属 攻击流程 : 攻击者在第三方DNS服务添加目标域名(example.com) 配置恶意解析记录(NS和A记录) 发起大量NS解析请求触发缓存机制 利用DNS服务器随机选择NS记录的特性 有概率使废弃记录"复活"并返回攻击者控制的IP 2.2 漏洞验证方法 准备两个第三方DNS托管账户 在第一个账户添加正常解析记录并验证 删除第一个账户中的域名配置 在第二个账户添加相同域名但指向恶意IP 使用dig命令测试解析结果 观察是否有时返回恶意IP 2.3 防御措施 域名管理员 :及时清理不再使用的DNS记录 DNS服务商 :实施严格的域名归属验证机制 系统设计 :避免使用可能被废弃的第三方DNS服务 三、DNS拒绝服务攻击(NXNSAttack) 3.1 攻击原理 核心机制 :利用DNS对NS记录的完全解析特性实现流量放大 攻击特点 : 双向攻击:同时影响递归解析器和目标DNS服务器 放大效应:每个NS记录会触发IPv4和IPv6两次查询 低成本:攻击者只需控制少量域名即可发起大规模攻击 攻击流程 : 攻击者注册大量廉价域名并配置NS记录 这些NS记录指向受害者DNS服务器 发起对攻击者域名的DNS查询 权威服务器返回大量NS记录 递归解析器对每个NS记录发起完整解析 导致受害者服务器收到海量查询请求 3.2 漏洞修复方案 限制NS记录解析数量:设置上限K值 优化递归解析逻辑:避免不必要的完整解析 实施流量监控:检测异常查询模式 四、DNSSEC安全扩展 4.1 基本原理 DNSSEC(Domain Name System Security Extensions)通过数字签名机制增强DNS安全性: 密钥体系 : 每个DNS区域拥有公私钥对 私钥用于数据签名 公钥公开发布供验证使用 验证过程 : 递归解析器获取DNS数据及签名 使用区域公钥验证签名有效性 验证通过则返回数据,否则丢弃 4.2 核心功能 数据来源验证 : 确认数据确实来自声称的权威区域 数据完整性保护 : 确保数据在传输过程中未被篡改 4.3 实施建议 选择支持DNSSEC的域名注册商 正确配置DNS区域的密钥对 定期轮换密钥以提高安全性 五、研究参考文献 《Zombie Awakening: Stealthy Hijacking of Active Domains through DNS Hosting Referral》(CCS 2020) 《NXNSAttack: Recursive DNS Inefficiencies and Vulnerabilities》(USENIX 2020) 本教学文档全面涵盖了DNS安全研究的核心内容,包括基础概念、两种主要攻击方式(劫持和拒绝服务)的原理与防御,以及DNSSEC安全扩展机制。关键点均已详细说明,可作为DNS安全领域的权威参考资料。