两个有趣的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采用分层架构,从高到低分为:
- 根域(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命令测试解析结果
dig @dns-server example.com - 观察是否有时返回恶意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安全领域的权威参考资料。