DNS
域名系统 Domain Name System(DNS) 是 Internet 的电话簿。人类通过域名在线访问信息,例如 nytimes.com 或 espn.com。Web 浏览器通过Internet 协议 (IP)地址进行交互。DNS 将域名转换为IP 地址,因此浏览器可以加载 Internet 资源。
每台连接到 Internet 的设备都有一个唯一的 IP 地址,其他机器使用该地址来查找该设备。DNS 服务器无需人类记忆 IP 地址,例如 192.168.1.1(在 IPv4 中),或更复杂的较新的字母数字 IP 地址,例如 2400:cb00:2048:1::c629:d7a2(在 IPv6 中)。
域层次结构Domain Hierarchy
DNS 层次结构,也称为域名空间,是一种倒置的树形结构。DNS 层次结构树在结构顶部有一个称为根域的域——用“.”表示。正如我们上面提到的。根域下面是顶级域,将 DNS 层次结构划分为包含二级域、子域和主机的段。
因此,DNS 层次结构由以下五个级别组成:
根级域
DNS 根级别是DNS 层次结构树中的最高级别,因为它是解析域名的第一步。根DNS 服务器是根区域的 DNS。它通过为适当的 TLD(顶级域)提供权威名称服务器列表来处理根区域中的记录请求并回答其他请求。这些是为 DNS 根区域提供服务的权威名称服务器。这些服务器包含顶级域的全局列表。根区域包含以下内容:
组织层次结构——例如 .com、.net、.org、.edu。
地理层次结构- 例如 .ca、.uk、.fr、.pe。
目前,指定了13 个根名称服务器,其逻辑名称格式为“ letter.root-servers.net ”,其中字母的范围从“A”到“M”,分别代表Verisign、马里兰大学、NASA和互联网名称与数字地址分配机构 (ICANN)。
顶级域名 (TLD)
DNS 层次结构中的下一个级别是顶级域Top-Level Domains(TLD)。有超过 1000 个 TLD,涵盖从“.abb “到”.zw ”并且还在增长。正如我们所见,TLD 分为两个子类别:组织层次结构和地理层次结构。
组织层次结构分为商业企业(“ .com ”)、政府实体(“ .gov ”)、教育机构(“ .edu ”)和非营利组织(“.org”)等领域。
同时,地理层次结构表示托管域的国家/地区。示例包括加拿大的“ .ca ”、英国的“ .uk ”、澳大利亚的“ .au ”,甚至南极洲的“ .aq ”。
想要迎合当地客户的组织可以选择同时使用组织和地理层次结构的 TLD。例如:“ .com.et ”代表埃塞俄比亚企业,“. org.al ”代表阿尔巴尼亚组织,“ . gov.it ”代表意大利政府
二级域名 (SLD)
如果域包含在顶级域中,则该域是二级域。二级域是一个标签——通常是与网站或拥有它的企业相关的名称——紧邻顶级域的左侧,并用点分隔。
在域名系统 (DNS) 层次结构中,二级域(SLD 或 2LD)是直接位于顶级域 (TLD) 之下的域。例如,在“ ivanlee.com ”中, “ ivanlee ”是“ .com ”TLD的二级域。
子域
一个子域——有时也称为“三级域”。– 与根域相关,左侧表示为二级域。在 URL “ regina.ivanlee.com ”中,子域地址将是“ regina ”。
主机
在层次结构中,解析过程从根级 DNS、顶级 DNS 开始,一直向下到二级 DNS,然后通过任意数量的子域,直到我们得到我们想要解析的实际主机名IP地址。
域层次结构描述了域命名空间的组织方式,但不描述域名系统的组织方式.
DNS Zone
DNS分为许多不同的区域。这些区域区分 DNS 命名空间中的不同管理区域。DNS 区域是由特定组织或管理员管理的 DNS 命名空间的一部分。DNS 区域是一个管理空间,允许对 DNS 组件(例如权威名称服务器)进行更精细的控制。域名空间是一个层次树,顶部是 DNS 根域。DNS 区域从树中的域开始,也可以向下扩展到子域,以便一个实体可以管理多个子域。
一个常见的错误是将 DNS 区域与域名或单个DNS 服务器相关联。事实上,一个 DNS 区域可以包含多个子域,并且多个区域可以存在于同一台服务器上。DNS 区域不一定在物理上彼此分离,区域严格用于委派控制。
域名系统是根据区域组织的。每个区域通过授权(服务器)管理自己的 DNS 信息。
区域和域
usa.example.com
是一个域,然后它又分出了三个子域分别是“chicago,boston,nyc”,同时也创建了两个区域。
域和子域都是概念上的划分,区域是实际物理意义上的划分,也就是根据权限域名服务器划分。
总之,一个域中的子域不一定和域是同一个权限域名服务器,因此也不一定是同一个区。
你如果有足够的权限域名服务器,大可一个每个子域都配一个权限域名服务器,都当作一个区。
权威名称服务器
当递归解析器从TLD名称服务器收到响应时,该响应会将解析器定向到权威名称服务器。DNS 查询的目标是最终向权威 DNS 服务器询问答案
权威的名称服务器通常是解析器在IP地址过程中的最后一步。权威名称服务器包含特定于它所服务的域名的信息(例如google.com),并且可以为递归解析器提供在DNS A记录中找到的服务器的IP地址,或者该域名具有CNAME记录(别名)它将为递归解析器提供一个别名域名,这时递归解析器将必须执行一个全新的DNS查找,以从权威名称服务器获取记录(通常是一个包含IP地址的A记录)。
每个 DNS 区域至少有一个发布有关区域信息的权威名称服务器。
o 通常,一台主服务器和一台辅助服务器
o 例如,example.com 区域有两个权威域名服务器:a.iana-servers.net 和 b.iana-servers.net。
权威域名服务器不限于一个区域,它可以维护多个区域的记录。
DNS根服务器
树的根被称为 ROOT 区域,互联网号码分配机构 (IANA) 负责维护该区域。
根服务器或 DNS 根服务器是负责 DNS 以及整个 Internet 功能的名称服务器。它们是任何域名名称解析的第一步,这意味着它们将域名转换为 IP 地址。
域名到 IP 地址的映射使用 DNS 区域以分层顺序进行。根服务器为层次结构顶部的根区域提供服务,并且它们发布根区域文件。根区是顶级域的全局列表,它包含通用顶级域(.com、.net、.org)、国家代码顶级域(.no、.se、.uk)和国际化顶级域名,即以国家/地区本地字符编写的 ccTLD。根区来自互联网号码分配机构 (IANA),它是互联网名称与数字地址分配机构 (ICANN) 的一部分。
根区域使用DNSSEC进行签名,并发送给根服务器运营商以发布到他们的根服务器。反过来,根区域文件包含所有 TLD 的权威服务器的资源记录。因此,他们可以通过两种方式工作:
- 直接回答对根区域中这些资源记录的查询,或
- 将查询提交给请求的 TLD 的适当名称服务器
虽然在第二种情况下,它们不直接参与名称解析,但根服务器位于整个 Internet 基础架构的根中。没有它们,我们今天所知道和使用的大多数在线世界都将无法访问。
如何工作
根服务器的工作方式归结为名称解析的过程:
- 当您在 Web 浏览器中键入www.securitytrails.com时,它将首先转到您配置的 ISP DNS 服务器或其他DNS 服务器。有时,该 DNS 服务器可能会将有关域的信息存储在缓存中,如果是这种情况,它会简单地响应该信息并为您提供该网站。
- 但是,如果没有存储该信息,DNS 服务器将向根服务器发送查询。根服务器不会有关于www.securitytrails.com的特定 IP 地址的信息,但它会知道服务于该 TLD(.com) 的名称服务器在哪里。
- 根服务器将返回 TLD 服务器列表,因此提供商或配置的服务器可以再次发送查询,这次是发送到 TLD 服务器。
- 然后,TLD 服务器将返回存储所需域的权威名称服务器。
- 这是发出请求的服务器向托管相关域区域的权威服务器发送查询的时候。
- 一旦请求到达权威服务器,它将使用www.securitytrails.com的 IP 地址响应请求服务器
- 当请求服务器获得此信息时,它将缓存它以供将来的请求使用,并将答案返回给您的解析器,解析器会将其发送到您的网络浏览器并允许您访问所需的网站。
有多少个跟服务器
在研究这个问题的答案时,我们经常会看到数字 13 弹出。那么,你可能会问,为什么只有 13 个根服务器?
这是因为原始 DNS 基础设施的限制,它仅使用包含 32 个字节的IPv4。IP地址需要放入单个数据包中,当时限制为 512 字节。因此,每个 IPv4 地址都是 32 位,其中 13 个达到 416 字节,剩下的 96 字节用于协议信息。
以前,13 个 IP 地址中的每一个都只有一个服务器,而今天我们为每个 IP 地址都有一个服务器集群——创建了一个由全球数百台使用任播路由的服务器组成的网络。这有助于平衡它们的去中心化并确保可靠性,即使其中一个根服务器由于例如 DDoS 攻击或任何其他类型的 DNS 攻击而变得不可用。
然而,随着 IPv6 的出现不受数据包大小限制的限制,几乎可以肯定我们将来会看到更多的 DNS 根服务器弹出。
根服务器列表:
主机名 | IP 地址 IPv4 / IPv6 | 组织 |
---|---|---|
a.root-servers.net | 198.41.0.4、2001:503:ba3e::2:30 | 威瑞信公司 |
b.root-servers.net | 199.9.14.201、2001:500:200::b | 南加州大学 (ISI) |
c.root-servers.net | 192.33.4.12、2001:500:2::c | 有说服力的通信 |
d.root-servers.net | 199.7.91.13、2001:500:2d::d | 马里兰大学 |
e.root-servers.net | 192.203.230.10、2001:500:a8::e | 美国国家航空航天局 |
f.root-servers.net | 192.5.5.241、2001:500:2f::f | 互联网系统联盟公司 |
g.root-servers.net | 192.112.36.4、2001:500:12::d0d | 美国国防部 (NIC) |
h.root-servers.net | 198.97.190.53, 2001:500:1::53 | 美国陆军(研究实验室) |
i.root-servers.net | 192.36.148.17, 2001:7fe::53 | 网点 |
j.root-servers.net | 192.58.128.30、2001:503:c27::2:30 | 威瑞信公司 |
k.root-servers.net | 193.0.14.129, 2001:7fd::1 | 成熟的NCC |
l.root-servers.net | 199.7.83.42、2001:500:9f::42 | 互联网名称与数字地址分配机构 |
m.root-servers.net | 202.12.27.33, 2001:dc3::35 | 宽项目 |
顶级域区域
从这些根服务器中,我们可以获得有关顶级域 (TLD) 的区域的信息,即 TLD 区域。
每个 TLD 区域都有多个权威域名服务器,必须在根服务器上注册。所以查询根服务器的时候,虽然自己不知道答案,但知道名字属于哪个TLD
当 TLD 名称服务器在 TLD 内注册时,它需要向 TLD 区域提供(至少两个)名称服务器。当一个 TLD 域名服务器收到一个查询时,即使它不能提供最终的答案,相应区域的权威域名服务器也知道
DNS查询流程
(1)查看浏览器缓存
当用户通过浏览器访问某域名时,浏览器首先会在自己的缓存中查找是否有该域名对应的 IP 地址(若曾经访问过该域名且没有清空缓存便存在)。
(2)查看系统缓存
当浏览器缓存中无域名对应 IP 则会自动检查用户计算机系统 Hosts 文件 DNS 缓存是否有该域名对应 IP。
(3)查看路由器缓存
当浏览器及系统缓存中均无域名对应 IP 则进入路由器缓存中检查,以上三步均为客服端的 DNS 缓存。
(4)查看ISP DNS 缓存
当在用户客服端查找不到域名对应 IP 地址,则将进入 ISP DNS 缓存中进行查询。比如你用的是电信的网络,则会进入电信的 DNS 缓存服务器中进行查找。
(5)询问根域名服务器
当以上均未完成,则进入根服务器进行查询。全球仅有 13 台根域名服务器,1 个主根域名服务器,其余 12 为辅根域名服务器。根域名收到请求后会查看区域文件记录,若无则将其管辖范围内顶级域名(如.com、.cn等)服务器 IP 告诉本地 DNS 服务器。
(6)询问顶级域名服务器
顶级域名服务器收到请求后查看区域文件记录,若无记录则将其管辖范围内权威域名服务器的 IP 地址告诉本地 DNS 服务器。
(7)询问权威域名(主域名)服务器
权威域名服务器接受到请求后查询自己的缓存,如果没有则进入下一级域名服务器进行查找,并重复该步骤直至找到正确记录。
(8)保存结果至缓存
本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时将该结果反馈给客户端,客户端通过这个 IP 地址即可访问目标Web服务器。至此,DNS递归查询的整个过程结束。
DNS系统承担着将域名解析成IP地址的重要作用,是计算机之间实现访问互联的关键和基础。因此,DNS解析的安全对于维持网络稳定运行至关重要。企业相关管理者和运营者一定要做好域名及域名解析的安全防护工作,定期进行数据扫描分析,启用全方位DNS风险监测,实时关注DNS运行状态,同时做好妥善的应急备份准备,一旦发现问题,出现故障,第一时间响应解决,才能将DNS故障风险及其带来的损失降至最低点。
本地DNS文件
在 Linux 中,DNS 解析器依赖于两个文件
/etc/hosts:
存储一些主机名的 IP 地址。 在机器联系本地 DNS 服务器之前,它首先查看这个文件。
如果一台机器在hosts文件中找不到IP地址,它会查询它的本地DNS服务器,但它需要知道本地DNS的IP地址。
/etc/resolv.conf
向机器的 DNS 解析器提供有关本地 DNS 服务器 IP 地址的信息。 DHCP提供的本地DNS服务器的IP地址也存放在这里
模拟本地服务器
1. ask ROOT
DNS 响应中有 4 种类型的部分:
o Question section:向名称服务器描述问题
o Answer section:回答问题的记录
o Authority section:指向权威名称服务器的记录
o Additional section:与查询相关的记录由于根服务器不知道答案,所以没有答案部分。
2-3: Ask .net & example.net servers
DNS缓存
当本地 DNS 服务器从其他 DNS 服务器获取信息时,它会缓存该信息。
• 缓存中的每条信息都有一个生存时间值,因此它最终会超时并从缓存中删除
DNS攻击
- Denial-of-Service Attack拒绝服务攻击:
当本地 DNS 服务器和权威域名服务器不响应 DNS 查询时,机器无法检索 IP 地址,这实质上会切断通信
- DNS-spoofing attack DNS欺骗攻击:
向受害者提供一个虚假的 IP 地址,诱骗他们与一台与他们的意图不同的机器进行通信。 (重点
)
- 对受感染机器的攻击
- 本地DNS缓存中毒
- 远程DNS缓存中毒
- 来自恶意 DNS 服务器的攻击
对受感染的机器的攻击
如果攻击者获得了机器上的 root 权限,他可以:修改/etc/resolv.conf:使用恶意DNS服务器作为本机本地DNS服务器,控制整个DNS进程。修改 /etc/hosts:向文件中添加新记录,提供某些选定域的 IP 地址。 例如,攻击者修改 www.bank32.com 的 IP 地址并将其指向攻击者的机器
本地DNS缓存病毒
在嗅探来自用户计算机或本地 DNS 服务器的查询后伪造 DNS 回复。 只要他们在实际回复之前到达,他们就会被接受
远程DNS缓存病毒
挑战之一:对于与本地 DNS 服务器不在同一网络上的远程攻击者,欺骗回复要困难得多,因为他们需要猜测查询数据包使用的两个随机数:
- 源端口号(16 位随机数)
- 交易 ID(16 位随机数)
缓存效果:如果一次尝试失败,实际回复会被本地DNS服务器缓存; 攻击者需要等待缓存超时以进行下一次尝试
欺骗性 DNS 回复包的格式:
击败缓存效应的卡明斯基攻击:
每次询问不同的查询,所以缓存答案并不重要,本地DNS服务器每次都会发出一个新的查询
欺骗性 DNS 回复负载的格式:
来自恶意 DNS 服务器的攻击
当用户访问一个网站时,例如,attacker32.com,DNS 查询最终会到达attacker32.com 的权威域名服务器。 攻击者是这个域名服务器,而受害者是本地 DNS 服务器
除了在响应的答案部分提供 IP 地址外,(恶意)DNS 服务器还在权限和附加部分提供信息
攻击者可以使用这些部分来提供欺骗信息。如果欺骗信息被客户端(本地 DNS 服务器)接受,DNS 缓存将被这些虚假 IP 地址毒害。
四部分虚假信息的生成
-
Fake Data in the Additional Section
攻击者通过告诉客户端一些流行域名的 IP 地址来给客户端一个“好处”。(example.net == attacker32.com)
它们将被丢弃:超出区域。 如果不丢弃它们将导致安全问题
-
Fake Data in the Authority Section
攻击者放置了两条 NS 记录,都表明 ns.attacker32.com 是他们的权威域名服务器。
-
Fake Data in Both Authority and Additional
这是不允许的(超出区域)。本地 DNS 服务器将自行获取该主机名的 IP 地址。 [缓存数据但不信任它]
DNS保护
防御 DNS 缓存中毒攻击
DNSSEC 旨在通过帮助保护用户免于重定向到欺诈性网站和非预期地址来加强对 Internet 的信任。通过这种方式,可以防止诸如缓存中毒、域名移植和中间人攻击等恶意活动。
DNSSEC 使用加密签名对 IP 地址的解析进行身份验证,以确保 DNS 服务器提供的答案有效且真实。如果您的域名正确启用了 DNSSEC,则可以确保访问者连接到与特定域名对应的实际网站。
最初目的是通过验证嵌入在数据中的数字签名来保护 Internet 客户端免受伪造 DNS 数据的侵害。
当访问者在浏览器中输入域名时,解析器会验证数字签名。
如果数据中的数字签名与存储在主 DNS 服务器中的数字签名匹配,则允许数据访问发出请求的客户端计算机。
DNSSEC 数字签名可确保您与您打算访问的站点或 Internet 位置进行通信。
DNSSEC 使用公钥和数字签名系统来验证数据。它只是将新记录与现有记录一起添加到 DNS。这些新的记录类型,例如 RRSIG 和 DNSKEY,可以通过与 A、CNAME 和 MX 等常见记录相同的方式进行检索。
这些新记录用于使用称为公钥加密的方法对域进行数字“签名”。
签名的名称服务器对每个区域都有一个公钥和私钥。当有人提出请求时,它会发送使用其私钥签名的信息;然后接收者用公钥将其解锁。如果第三方
请注意,DNSSEC 不提供数据机密性,因为它不包括加密算法。它仅携带验证 DNS 数据是否真实可用所需的密钥。
此外,DNSSEC 不能防御 DDoS 攻击
DNSSEC 中的信任链
DNSSEC(域名系统安全扩展)信任链是在每个 DNS 查找节点上经过验证的电子签名或握手。换句话说,它是一个由域名的数字签名验证的查找链,通过所有查找节点来保护请求。这确保没有流氓或非法玩家可以进入查找路径并将查找重定向到虚假站点。
- RRSIG:包含记录集的数字签名。
- DNSKEY:使用 DNSSEC 记录中的公钥验证签名。
- 公钥的单向散列必须由发送者的父区域使用 DS 提供
使用TLS/SSL
使用 DNS 协议获取域名(www.example.net)的 IP 地址后,计算机会要求 IP 地址的所有者(服务器)证明它确实是 www.example.net
服务器必须出示由受信任实体签名的公钥证书,并证明它知道与 www.example.net 关联的相应私钥(即,它是证书的所有者)
HTTPS 建立在 TLS/SSL 之上。 它击败了 DNS 缓存中毒攻击。
DNSSEC vs TLS/SSL
- DNSSEC 和 TLS/SSL 都基于公钥技术,但它们的信任链不同。
- DNSSEC 使用 DNS 区域层次结构提供信任链,因此父区域中的名称服务器为子区域中的名称服务器提供担保。
- TLS/SSL 依赖于公钥基础设施,其中包含为其他计算机提供担保的证书颁发机构