用伪造应答赢得竞速
攻击者
与真实响应抢先
伪造的应答
率先到达
解析器缓存
共用该缓存的所有人都被投毒
DNS 欺骗与缓存投毒:实用概览
DNS 在设计之初,没有任何办法验证一个响应是否真的来自它所声称的域名服务器。这个缺口使欺骗成为可能:处于能够拦截 DNS 查询或抢先应答位置的攻击者,可以发回一个伪造的响应,把受害者指向由攻击者选定的地址,常被用来把流量重定向到冒充合法网站的恶意服务器。
缓存投毒:同样的思路,规模更大
缓存投毒沿用同样的伪造响应思路,但攻击目标是共享的解析器,而不是单个受害者。如果攻击者能把伪造的应答塞进某个被广泛使用的递归解析器的缓存,那么该解析器此后的每一位用户,在应答过期之前得到的都是被污染的应答。这样一次成功的伪造,就变成了针对所有共用该解析器的人的攻击,而无需逐个拦截他们各自的查询。
现代 DNS 如何防御
| 防御措施 | 防范的对象 | 是否普遍部署? |
|---|---|---|
| 源端口和查询 ID 随机化 | 在真实应答到达之前猜中伪造的响应 | 是,自 2008 年起成为标准 |
| DNSSEC | 冒充权威服务器的伪造响应 | 否,在互联网上仅部分采用 |
| DNS-over-HTTPS / DNS-over-TLS | 对查询本身的链路中间人拦截 | 在增长,但并非各处的默认设置 |
这些防御措施都没有被普遍部署,尤其是 DNSSEC,在构成互联网的各个域名中仍然只有部分采用。即便没有启用 DNSSEC,使用运营良好、注重安全的公共解析器,并在遇到意料之外或可疑的解析结果时,用第二个独立的解析器再核对一次,仍然是合理的实用预防措施。
改变人们重视程度的那个漏洞
缓存投毒在 2008 年不再只是理论上的担忧。那一年,安全研究员 Dan Kaminsky 披露了一个影响当时几乎所有 DNS 解析器的根本性缺陷:攻击者需要猜测的事务 ID 与源端口的取值空间太小,在高速连接下几秒钟就能暴力破解,使攻击者能够为整个域名而不只是某一条记录投毒解析器的缓存。这次披露促成了一次异常协调的同步补丁发布,涵盖所有主要的 DNS 软件厂商,源端口随机化几乎在一夜之间成为标准,上表所列的各项防御措施之所以呈现现在的形态,这也是很大的原因。
为什么修复已过去二十年,DNSSEC 的普及仍然滞后
DNSSEC 解决底层信任问题的方式远比单靠端口随机化彻底,它提供的是密码学证明,而不只是一场更难猜的猜谜游戏。它推广缓慢,更多是因为运维复杂,而非对其价值存疑:正确地为区域签名、按计划轮换密钥而不破坏验证,并让从根到具体域名的整条信任链保持完整,要做对比添加一条未签名的 A 记录难得多。这一过程中只要出现一处失误,就会触发本系列文章其他篇目所讲的那种 SERVFAIL 故障,这本身就让没有专职 DNS 人员的小型域名运营者望而却步。“理论上已解决”与“实际上处处部署”之间的差距,在安全基础设施中十分常见,DNSSEC 就是一个典型的例子。
需要查看某个域名的公网 DNS 地址?使用 Domain IP Lookup 工具。
相关阅读
公网与私有地址空间
公网 IP
192.0.2.10
全球唯一,可从任何地方路由
私有地址段
无法在公共互联网上路由
为什么私有 IP 地址段绝不应该公开解析
10.0.0.0/8、192.168.0.0/16 及其相邻地址段的存在,正是为了让它们永远不是全球唯一的,本文说明这对 DNS 为什么重要。
SSRF 会让服务器沦为不知情的代理
攻击者
构造请求 URL
存在漏洞的服务器
被 SSRF 诱骗而发起请求
169.254.169.254
元数据端点
凭据
返回给攻击者
云元数据端点:隐蔽的攻击面
一个看似不可路由的 IP 地址,就能让云实例读取凭证和配置信息,因此它也是 SSRF 攻击中最常见的目标之一。本文解释其原理与防御思路。
同一个地址,四种写法
SSRF 攻击详解:DNS 如何被利用
服务端请求伪造往往只始于一个域名:您的服务器被诱骗去解析并请求它。本文说明 DNS 在其中扮演的角色以及真正有效的防御。