DNS

DNS笔记

Posted by saltyfishyjk on 2024-11-10
Words 1.8k and Reading Time 7 Minutes
Viewed Times

DNS笔记

Part 0 前言

记录文献中学习到的 DNS 相关基础知识。

Part 1 基本概念

DNS 解析参与方

客户端 DNS Client(stub resolver)

发送一个请求到recursive resolver,使其作为代理代为查询。

(递归)解析器 DNS Recursive resolver

也叫递归侧/resolver。

接收从 client 发来的 DNS query,从 Root Nameserver 开始逐级查询。

四种不同模式:

  • 标准模式(recursive-only):递归查询
  • 转发器(forwarder):此时 resolver 作为转发器,将 query 转发给上游 recursive resolver,使其代为查询
  • 条件DNS(condiotional DNS, CDNS):同时有 recursive 和 forwarder 两种模式,各有一个 DNS namespace 子空间,根据特定域名或客户端 IP 等进行选择性转发
    • CDNS without fallback:没有备用选项,上游 resolver 可能不可用
    • CDNS with fallback:当上游 resolver 不可用时,系统使用备用的 resolver 保证请求可以被解析

名称服务器 DNS Nameserver

也叫权威侧/Nameserver/Server。

ROOT

根服务器,返回参考应答(ref-response),这是一种包含进一步的指向信息,而不包含所需的 IP 地址的响应。

TLD

Top-Level Domain,如 .com, .net 等,返回 ref-response

SLD

Second-Level Domain,如 cnn.com 等,(可能)返回权威应答(auth-response),包含最终 IP 地址的权威响应。

资源记录 RR

RR, resource record,定义为五元组:

  • $owner$:(RR)所有者,表明该 RR 属于哪个域名
  • $type$:类型,表明该 RR 的类型,常见的如 A(IPv4地址记录)、MX、CNAME(域名别名)、NS(名称服务器)
  • $Class$:类别,表明 RR 的上下文,IN 表示 Internet 最常见
  • $TTL$:Time to Live,表明 RR 可以在 DNS 缓存中存在的时间,单位为秒
  • $RDATA$:数据,类型取决于 $type$

信任等级

DNS 软件通过 RR 的信任等级来决定是否返回给用户、保存到内存或更新已有数据。

示例

image-20241111164851486

[Usenix Security ‘24]{CAMP}: Compositional Amplification Attacks against {DNS}

NS, CNAME, DNAME, SOA, A, AAAA

NS(Name Server)

NS记录,指定一个域名的权威 DNS 服务器

CNAME(Canonical Name)

别名记录,将一个域名(别名)永久重定向到另一个域名(规范名称)。

一个域名只应该有一个 CNAME[USENIX ‘24 CAMP]。

DNAME(Delegation Name)

委托记录,实现域名的递归重定向,将一个域名的整个子域重定向到另一个域名,如 sub.example.com 有一个 DNAME 记录指向 sub.newdomain.com,则任何 sub.example.com 或其子域(如sub.example.com/path)的查询会重定向到 sub.newdomain.com或相应的子域(如sub.newdomain.com/path)

一个域名只应该有一个 DNAME[USENIX ‘24 CAMP]。

响应

引用响应 Ref-response

Ref-response, referral response,由 NS 向 resolver 返回的包含指示下一步向谁发送 query 的响应。

权威响应 Auth-response

Auth-response, authoritative response, 由 NS 向 resolver 返回的包含最终结果(IP)的响应,解析结束。

bailiwick

in-bailiwick

out-of-bailiwick

Part 2 解析流程

image-20241110220821395

[Usenix Security ‘24]{ResolverFuzz}: Automated Discovery of {DNS} Resolver Vulnerabilities with {Query-Response} Fuzzing

  1. Client 发起一个 Client-query $Q$
  2. Recursive resolver 收到 $Q$,并作为代理,向 ROOT Nameserver 发送 Resolver-query $Q_R$
  3. ROOT Nameserver 收到 $Q_R$,其根区域文件(root zone)中只包含 TLD 权威服务器的地址,因此向 Recursive resolver 返回一个 ref-response $R_R$,包含 TLD 的 NS 记录以及其 IP 地址
  4. Recursive resolver 收到 $R_R$ ,向 TLD 发送一个 $Q_R$
  5. TLD Nameserver 收到 $Q_R$,其 zone file 包含 SLD 的 NS 记录机器 IP 地址,将 $R_R$ 返回
  6. Recursive resolver 收到 $R_R$,向 SLD 发送一个 $Q_R$
  7. SLD Nameserver 收到 $Q_R$,其为被查询域名的权威名称服务器,包含具体的 NS 和 对应的 IP 地址,因此返回的是权威响应 $R_A$
  8. Recursive resolver 收到 $R_A$,包含了域名对应的 IP 地址,递归查询结束,将结果 $R$ 返回给 Client

Part 3 胶水记录 Glue Record

胶水记录是 DNS zone 中的一种 A 记录,在 RFC 1034 中记录。

Part 4 攻击

反射攻击 Reflective attack

攻击者伪造目标 IP 地址,发送信息请求,使得服务器响应请求并将答复发送给目标 IP 地址。

放大攻击 Amplification attack

利用脆弱服务对攻击者发送的请求做出大量回复,引起比原始请求大得多的响应。

Part 5 权威侧垂直结构

image-20241113205257618

[Usenix Security ‘24]Rethinking the Security Threats of Stale DNS Glue Records

域名空间 Domain name space 是树状结构,其中的每个节点 node 或叶子 leaf 都和一个资源集相关联,比其高的区域 zone 是父区域 parent zone,比其低的区域是子区域 child zone。

  • 最顶层:根区域 root zone .
  • Top-Level Domains:TLD,如 .com.net
  • Second-Level Domains:SLD,如exam.comfoo.com

一个 DNS zone 只包含其子域的信息。如图所示,对于请求②,根返回一个 ref-response③,告知 resolver 关于 .com 的权威 nameserver 的信息;对于请求④,.com nameserver 返回一个 ref-response⑤,告知关于 exam.com 的权威 nameserver 的信息;对于请求⑥,exam.com nameserver 最终返回了 exam.com 的资源记录。

Part 6 域名授权(委托) Domain delegation

域名管理者通过配置委托 NS 记录和胶水记录(如需)来将其域名委托给特定的服务器。根据 NS 记录和域名的关系,共有三种授权类型:in-domain, sibling-domain 和 out-domain。

[Usenix Security ‘24]Rethinking the Security Threats of Stale DNS Glue Records

域内委托 in-domain

NS 记录配置了包含在被委托域名内的 nameserver,这种情况下胶水记录是必需的

image-20241116213748947

图中 test.com 的 NS 记录是 ns1.test.com,在 test.com 中,需要胶水记录打破循环。

兄弟域委托 sibling-domain

NS 记录没有配置在被委托域名下,但是在另一个同一父域委派的区域中,胶水记录不是必需的

image-20241116213857202

图中 test.com 的 NS 记录是 ns1.foo.com,不在 test.com 中,而是在 foo.com 中,而 foo.com 的父域是 .com,和 test.com 是同一父域。尽管这种情况下胶水记录不是必需的,resolver 返回的 ref-response 一般也包含该记录。

域外委托 out-domain

NS 记录配置的 nameserver 跨越了 TLD,胶水记录不是必需的

image-20241116214842279

图中 test.com 的 NS 记录是 ns1.test.net,其 TLD 是 .net,和 test.com 的 TLD .com 不是一个。对于这种情况,resolver 返回的 ref-response 不应该包含胶水记录,应该重新对 ns1.test.net 发起主动解析。

Part 7 DNS 机制

超时重传 timeout

DNS 经典依赖的协议是 UDP,这是一种无状态的协议,即本身缺少送达承诺或者重传机制。DNS 为了提高可用性采取了 timeout 机制,确保 DNS 解析功能。

image-20241117111203774

[S&P ‘24]DNSBomb: A New Practical-and-Powerful Pulsing DoS Attack Exploiting DNS Queries-and-Responses

  • 4-a:timeout 机制包括请求和响应两种。

  • 4-b:请求 timeout 会指定一个最长的 resolver 对 DNS server 等待响应的时间,在这之后会认为这个请求超时。当 resolver 向 DNS server 发送一个请求时,会设定一个计时器 timer,BIND 默认为 800ms。当超时后还没有收到响应时,resolver 会使用一个更新的计时器重发请求(可能向不同的 nameserver),或者终止这个请求。

  • 4-c:为了避免无限重试,一般会设置重试次数上限,对 Unbound 是11。当超时且没有得到响应时,resolver 会返回一个 ServFail 错误。

This is copyright.