# 简介

DNS 是一个简单的请求 - 响应协议,是将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS 使用 TCP 和 UDP 协议的 53 端口。

# 请求响应

# DNS 记录

  • A

    • 返回域名对应的 IPv4 地址
  • AAAA

  • NS

    • 域名服务器

    • 返回该域名由哪台域名服务器解析

  • PTR

    • 反向记录
    • 从 IP 地址到域名的记录
  • MX

    • 电子邮件交换记录
    • 记录邮件域名对应的 IP 地址

# 响应码

  • NOERROR
No error condition
  • FORMERR
Format error - The name server was unable to interpret the query
  • SERVFAIL
Server failure - The name server was unable to process this query due to a problem with the name server
  • NXDOMAIN
this code signifies that the domain name referenced in the query does not exist
  • NOTIMP
Not Implemented - The name server does not support the requested kind of query
  • REFUSED
Refused - The name server refuses to perform the specified operation for policy reasons
  • NODATA
A pseudo RCODE which indicates that the name is valid, for the given class, but [there] are no records of the given type A NODATA response has to be inferred from the answer.

# 域名系统工作原理

# 解析过程

DNS 解析过程是递归查询的,具体过程如下:

  • 用户要访问域名 www.example.com 时,先查看本机 hosts 是否有记录或者本机是否有 DNS 缓存,如果有,直接返回结果,否则向递归服务器查询该域名的 IP 地址
  • 递归缓存为空时,首先向根服务器查询 com 顶级域的 IP 地址
  • 根服务器告知递归服务器 com 顶级域名服务器的 IP 地址
  • 递归向 com 顶级域名服务器查询负责 example.com 的权威服务器的 IP
  • com 顶级域名服务器返回相应的 IP 地址
  • 递归向 example.com 的权威服务器查询 www.example.com 的地址记录
  • 权威服务器告知 www.example.com 的地址记录
  • 递归服务器将查询结果返回客户端

# 域传送

DNS 服务器可以分为主服务器、备份服务器和缓存服务器。域传送是指备份服务器从主服务器拷贝数据,并使用得到的数据更新自身数据库。域传送是在主备服务器之间同步数据库的机制。

# 服务器类型

# 根服务器

根服务器是 DNS 的核心,负责互联网顶级域名的解析,用于维护域的权威信息,并将 DNS 查询引导到相应的域名服务器。

根服务器在域名树中代表最顶级的 . 域, 一般省略。

13 台 IPv4 根服务器的域名标号为 a 到 m,即 a.root-servers.orgm.root-servers.org,所有服务器存储的数据相同,仅包含 ICANN 批准的 TLD 域名权威信息。

# 权威服务器

权威服务器上存储域名 Zone 文件,维护域内域名的权威信息,递归服务器可以从权威服务器获得 DNS 查询的资源记录。

权威服务器需要在所承载的域名所属的 TLD 管理局注册,同一个权威服务器可以承载不同 TLD 域名,同一个域也可以有多个权威服务器。

# 递归服务器

递归服务器负责接收用户的查询请求,进行递归查询并响应用户查询请求。在初始时递归服务器仅有记录了根域名的 Hint 文件。

# 加密方案

作为主流的防御方案,DNS 加密有五种方案,分别是 DNS-over-TLS (DoT)、DNS-over-DTLS、DNS-over-HTTPS (DoH)、DNS-over-QUIC 以及 DNSCrypt。

# DoT

DoT 方案在 2016 年发表于 RFC7858,使用 853 端口。主要思想是 Client 和 Server 通过 TCP 协议建立 TLS 会话后再进行 DNS 传输,Client 通过 SSL 证书验证服务器身份。

# DNS-over-DTLS

DNS-over-DTLS 和 DoT 类似,区别在于使用 UDP 协议而不是 TCP 协议。

# DoH

DoH 方案在发表 RFC8484,使用 https://dns.example.com/dns-query{?dns} 来查询服务器的 IP,复用 https 的 443 端口,流量特征比较小。DoH 会对 DNS 服务器进行加密认证,不提供 fallback 选项。目前 Cloudflare、Google 等服务商对 DoH 提供了支持。

# DNS-over-QUIC

DNS-over-QUIC 安全特性和 DoT 类似,但是性能更高,目前没有合适的软件实现。

# DNSCrypt

DNSCrypt 使用 X25519-XSalsa20Poly1305 而非标准的 TLS,且 DNSCrypt 的 Client 需要额外的软件,Server 需要的专门的证书。

# DNS 利用

# DGA

DGA(Domain Generate Algorithm,域名生成算法)是一种利用随机字符来生成 C&C 域名,从而逃避域名黑名单检测的技术手段,常见于 botnet 中。一般来说,一个 DGA 域名的存活时间约在 1-7 天左右。

通信时,客户端和服务端都运行同一套 DGA 算法,生成相同的备选域名列表,当需要发动攻击的时候,选择其中少量进行注册,便可以建立通信,并且可以对注册的域名应用速变 IP 技术,快速变换 IP,从而域名和 IP 都可以进行快速变化。

DGA 域名有多种生成方式,根据种子类型可以分为确定性和不确定性的生成。不确定性的种子可能会选用当天的一些即时数据,如汇率信息等。

# DNS 隧道

DNS 隧道工具将进入隧道的其他协议流量封装到 DNS 协议内,在隧道上传输。这些数据包出隧道时进行解封装,还原数据。

# RDAP

RDAP (Registration Data Access Protocol) 协议是 Whois 协议的后继,和 Whois 协议类似,RDAP 协议提供了域名、自治系统、IP 地址的信息查询。

# 相关漏洞

# DNS 劫持

DNS 劫持有多种方式,比较早期的攻击方式是通过攻击域名解析服务器,或是伪造 DNS 响应的方法,来将域名解析到恶意的 IP 地址。

随着互联网应用的不断发展,出现了基于废弃记录的劫持方式。这种方式发生的场景是次级域名的解析记录指向第三方资源,而第三方资源被释放后,解析记录并没有取消,在这种场景下,可以对应申请第三方资源,以获取控制解析记录的能力。

# 拒绝服务

DNS 服务通常会开启 UDP 端口,当 DNS 服务器拥有大量二级域 NS 记录时,通过 DNS 的 UDP 反射攻击可以实现高倍的拒绝服务。

# 相关机构

# ICANN

互联网名称与数字地址分配机构 (Internet Corporation for Assigned Names and Numbers, ICANN) 创建于 1998 年 9 月 18 日,职能包括管理域名和 IP 地址的分配等与互联网相关的任务。

# IANA

互联网号码分配局 (Internet Assigned Numbers Authority, IANA) ,是一家互联网地址指派机构,管理国际互联网中使用的 IP 地址、域名和许多其它参数的机构。

# 术语

# mDNS

Multicast DNS (mDNS),多播 DNS,使用 5353 端口,组播地址为 224.0.0.251[FF02::FB] 。在一个没有常规 DNS 服务器的小型网络内可以使用 mDNS 来实现类似 DNS 的编程接口、包格式和操作语义。mDNS 协议的报文与 DNS 的报文结构相同,但有些字段对于 mDNS 来说有新的含义。

启动 mDNS 的主机会在进入局域网后向所有主机组播消息,包含主机名、IP 等信息,其他拥有相应服务的主机也会响应含有主机名和 IP 的信息。

mDNS 的域名是用 .local 和普通域名区分开的。

# FQDN

FQDN (Fully-Qualified Domain Name) 是域名的完全形态,主要是包含零长度的根标签,例如 www.example.com.

# TLD

Top-Level Domain (TLD) 是属于根域的一个域,例如 comjp

TLD 一般可以分为 Country Code Top-Level Domains (ccTLDs) 、Generic Top-Level Domains (gTLDs) 以及其它。

# IDN

Internationalized Domain Names for Applications (IDNA) 是为了处理非 ASCII 字符的情况。

# CNAME

CNAME 即 Canonical name,又称 alias,将域名指向另一个域名。

# TTL

Time To Live,无符号整数,记录 DNS 记录过期的时间,最小是 0,最大是 2147483647 (2^31 - 1)。

# 参考链接

# RFC

  • RFC 920 Domain Requirements
  • RFC 1034 DOMAIN NAMES CONCEPTS AND FACILITIES
  • RFC 1035 DOMAIN NAMES IMPLEMENTATION AND SPECIFICATION
  • RFC 1123 Requirements for Internet Hosts -- Application and Support
  • RFC 2535 Domain Name System Security Extensions
  • RFC 2930 Secret Key Establishment for DNS (TKEY RR)
  • RFC 2931 DNS Request and Transaction Signatures ( SIG(0)s )
  • RFC 3596 Legacy Resolver Compatibility for Delegation Signer (DS)
  • RFC 3755 DNS Extensions to Support IP Version 6
  • RFC 5001 Automated Updates of DNS Security (DNSSEC) Trust Anchors
  • RFC 5936 DNS Zone Transfer Protocol
  • RFC 5966 DNS Transport over TCP - Implementation Requirements
  • RFC 6376 DomainKeys Identified Mail (DKIM) Signatures
  • RFC 6762 Multicast DNS
  • RFC 6891 Extension Mechanisms for DNS (EDNS(0))
  • RFC 6895 DNS IANA Considerations
  • RFC 7766 DNS Transport over TCP - Implementation Requirements
  • RFC 7858 Specification for DNS over Transport Layer Security (TLS)
  • RFC 7871 Client Subnet in DNS Queries
  • RFC 8082 NXDOMAIN
  • RFC 8482 Providing Minimal-Sized Responses to DNS Queries That Have QTYPE=ANY
  • RFC 8484 DNS Queries over HTTPS (DoH)
  • RFC 8490 DNS Stateful Operations
  • RFC 8499 DNS Terminology

# Whois 相关

  • RFC 812 NICNAME/WHOIS
  • RFC 954 NICNAME/WHOIS
  • RFC 2167 Referral Whois (RWhois) Protocol V1.5
  • RFC 3912 WHOIS Protocol Specification
  • RFC 7485 Inventory and Analysis of WHOIS Registration Objects

# RDAP 相关

  • RFC7480 HTTP Usage in the Registration Data Access Protocol (RDAP)
  • RFC7481 Security Services for the Registration Data Access Protocol (RDAP)
  • RFC7484 Finding the Authoritative Registration Data (RDAP) Service
  • RFC8056 Registration Data Access Protocol (RDAP) Object Tagging
  • RFC9082 Registration Data Access Protocol (RDAP) Query Format
  • RFC9083 JSON Responses for the Registration Data Access Protocol (RDAP)

# 相关标准

  • Registration Data Access Protocol (RDAP)

# 工具

  • Unbound
  • bind9

# 研究文章

  • DGA 域名的今生前世:缘起、检测、与发展
  • DNSSEC 原理和分析
  • Plohmann D, Yakdan K, Klatt M, et al. A comprehensive measurement study of domain generating malware[C]//25th {USENIX} Security Symposium ({USENIX} Security 16). 2016: 263-278.
  • An End-to-End Large-Scale Measurement of DNS-over-Encryption: How Far Have We Come?

# 相关 CVE

  • SIGRed – Resolving Your Way into Domain Admin: Exploiting a 17 Year-old Bug in Windows DNS Servers