什么是 DNSSEC?它是如何工作的?
域名系统安全扩展 (DNSSEC) 是添加到 DNS 记录中的加密签名,用于保护通过互联网协议 (IP) 网络传输的数据。DNSSEC 的存在是因为设计 DNS 的架构师没有提供任何协议安全保护措施。这给了攻击者伪造记录和将用户引向欺诈网站的可乘之机。在这种背景下,DNSSEC 协议应运而生,旨在提升 DNS 响应的真实性和完整性。
DNSSEC 通过向现有 DNS 记录添加加密签名来建立安全的 DNS。签名与常见的记录类型(例如 AAAA 和 MX)一起存储在 DNS 名称服务器中。然后,通过检查与请求的 DNS 记录对应的签名,可以验证该记录是否直接来自其权威名称服务器。这意味着该记录在其数字传输过程中从未中毒或以其他方式被篡改,从而防止引入虚假记录。
推动签名验证
根据具体情况,DNSSEC 将添加以下其中一种 DNS 记录类型来推动签名验证:
资源记录签名 (RRSIG): 包含记录集的加密 DNSSEC 签名
DNSKEY: 包含公共签名密钥
DS: 包含 DNSKEY 记录的哈希值
NSEC 和 NSEC3: 提供指向区域中以下记录名称的链接,并列出可用于记录名称的记录类型
CDNSKEY 和 CDS: 将请求的 DS 状态从子区域传送到父区域,并请求更新父区域中的 DS 记录
我应该在我的域上启用 DNSSEC 吗?
DNSSEC 有助于保护您的域免遭缓存中毒和答案伪造。这对您的域而言是重要补充,因为当今的数字环境要求网站所有者的架构受到端到端保护,而成功的 DNS 攻击会极大地损害品牌声誉。DNS 解析发生在用户与网站应用程序交互之前。如果 DNS 被攻击者截获,则希望访问网站的用户可能会与以欺骗用户为目标的假网站(而非预期网站)进行交互。该协议的高性能缓存架构使其难以快速更正中毒的记录。
因此,即使网站配备强大的防火墙,如果网站的 DNS 架构没有通过使用 DNSSEC 得到充分保护,终端用户的数据和技术也将面临风险。
将 DNS 记录分组到 RRSet
将 DNSSEC 与您的域集成始于按名称和记录类型将 DNS 记录分组到资源记录集 (RRSet) 中。DNS 本身分为多个 DNS 区域。区域是由 DNS 所有者的整个组织或网络管理员监督的整个 DNS 命名空间的一部分。该区域允许深入维护 DNS 组件,例如权威名称服务器。
每个区域都由一对称为区域签名密钥 (ZSK) 的公钥和私钥进行签名。由此产生的签名将作为 RRSIG 记录,在区域文件本身中发布。例如,如果主机名“www.dsnsecexample.com”包括 A 和 AAAA 记录,则区域文件将为每个 IP 版本公布一个相应的 RRSIG 记录。
通过将 DNS 区域彼此隔离,相邻区域受到保护,以免一整个区域被攻击者感染。
资源记录签名
RRSIG 记录包含 RRSet 的数字 DNSSEC 签名。这些数字签名用于对已签名 RRSet 中的任何数据进行身份验证。解析器可以使用 DNSKEY 记录中存储的公钥来验证签名。
这些记录类型和拥有域名的 RRSet 存储在已签名的 DNS 区域中。当域名服务器使用 ZSK 对的私钥来对给定区域内的 RRSet 进行签名时,RRSIG 记录用于存储每个 RRSet 的数字签名。因此,已签名区域包含每个 RRSet 的 RRSIG 记录。
RRSIG 记录包含以下组件:
涵盖的类型: RRSIG 涵盖的 DNS 记录类型
算法: 生成最终签名的加密算法
标签计数: 原始 RRSIG 记录名称中的标签数量(用于验证通配符)
原始 TTL: 涵盖的记录集的 TTL 值
签名过期: 签名过期的时间
签名开始: 签名最初创建的时间
密钥标签: 一个数值,用于标识用来验证此 RRSIG 签名的 DNSKEY 记录
签名者的名称: 用于验证此签名的 DNSKEY 记录的名称
签名: 用于验证传输的加密签名
区域签名密钥
ZSK 是用于对已传输数据进行身份验证的密钥。ZSK 是与密钥签名密钥 (KSK) 相同的 RRSet 的一个特性,具有相应的私钥来对此 DNSKEY RRSet 进行签名。每个区域都有一对 ZSK,已启用 DNSSEC 的区域将公布公共 ZSK 作为 DNSKEY 记录,以便解析器可以对 RRSIG 值进行身份验证。
DNSSEC 验证不区分 ZSK 和其他 DNSSEC 身份验证密钥,因此可以使用一个密钥作为密钥签名密钥和 ZSK。成功的验证表明 DNS 记录在传输过程中没有被伪造或篡改,因为只有区域管理员可以访问私有 ZSK。
ZSK 对应于用于对区域进行签名的私钥,并且通常与对此 RRSet 进行签名的私钥对应的签名公钥属于同一 RRSet 的一部分。
密钥签名密钥
KSK 是一种计算成本更高的密钥对,用于进一步改善 DNSKEY 记录的安全状况。之所以引入 KSK,是为了减轻区域管理员的管理负担。KSK 对应于一个私钥,用于对给定区域的其他身份验证密钥进行签名。通常,与 KSK 相应的私钥将对 ZSK 进行签名,ZSK 本身具有相应的私钥,用于对 DNS 区域中找到的其他数据进行签名。解析器将使用公布公共 KSK 的相关明文 DNSKEY 记录来对该数字签名进行身份验证。
KSK 及其相应的委派签名者记录只会定期更新,而 ZSK 则更新更频繁。因此,从安全性和操作的角度来看,理想的架构是使用一个单独的、更持久的 KSK 对经常轮换的 ZSK 进行自签名。此实施将更多地保护 DNS 区域免受潜在威胁的侵扰,同时也将尽可能减少持续的 DNSSEC 维护量。
委派签名者记录
DNSSEC 建立了委派签名者 (DS) 记录,以创建具有公共 DNS 解析器的“信任链”模型。在这类情况下,攻击者理论上可以欺骗 DNS 响应并返回伪造的 DNSKEY 记录,从而损害区域的完整性。DS 记录在父区域中发布公共 KSK 的指纹。
在验证过程中,解析器将确保父区域的 DS 记录与子区域的相应 DNSKEY 记录相匹配,以验证子区域密钥对的合法性。此信任链一直维持到根区域,其中包括大多数递归解析器中内置的信任锚点。
NSEC 和 NSEC3
下一个安全 (NSEC) 记录可用于确定名称是否位于给定区域内。之所以引入该记录,是为了解决区域中不存在记录的情况,通常称为“存在否定”身份验证问题。攻击者可以通过伪造网站主机名的 NXDOMAIN 响应来利用此漏洞并使网站变得不可用。
NXDOMAIN 通过包含一个 NSEC 记录来解决此缺陷,该记录可指明在收到对一个不存在的名称执行的查询时该区域中确实存在的下一个规范记录,以及出现在该名称下的记录类型。
例如,如果对“example.com”区域进行排序,并且“beta.example.com”是第一条记录,对“alpha.example.com”的查询将产生一个 NXDOMAIN 响应和一个 NSEC 记录,指向“beta.example.com”。像任何其他记录一样,NSEC 记录将由 ZSK 签名,并具有一个相应的 RRSIG。因此,一个 NXDOMAIN 响应要确认有效,需要一个经过身份验证的 RRSIG NSEC 记录。
NSEC3 旨在解决 NSEC 记录被用来列出区域中所有有效记录的问题。NSEC3 的行为与 NSEC 相同,区别在于,区域中的下一个安全名称经过哈希处理,而不是以明文显示。这有助于保护信息并防止区域遍历。
DNSSEC 操作模式
静态区域的离线签名
DNSSEC 操作模式有很多种,每种模式都有自己独特的方法来对 DNS 区域中的数据进行签名。在这些模式中,较为常见的一种是静态区域的离线签名,这种模式可以为签名系统提供强大的保护,使其免受外部威胁的侵扰。此操作模式会保留在当前未连接到网络的计算机上找到的任何私钥,并且在 DNS 区域中的信息不经常更改的情况下有效。
集中式在线签名
集中式在线签名是另一种周期性 DNSSEC 操作模式。对于管理员在访问受限的专用 DNS 中对数据进行签名的情况,集中式在线签名支持快速更改 DNS 数据并将其发布到区域。与静态区域的离线签名一样,在集中式在线签名中,单个或复制的中央签名者执行所有数据签名。然后,新签名的数据流向权威 DNS 服务器。
实时签名
实时对数据进行签名是一种 DNSSEC 操作模式,该模式支持权威 DNS 服务器根据需要对数据进行签名。这种方法的问题在于,可能会导致密钥位于各种不同的计算机上,而每台计算机都可以直接访问互联网,从而为攻击者提供了更多从外部访问命名空间的途径。密钥分发(即发送者选择一个密钥值然后将其安全地发送给接收者)也因为实时签名而变得更加复杂,并且可能增加每个节点的非必要计算需求。
纳入 DNSSEC 的风险
虽然 DNSSEC 是一种极为有用的提高网络安全性的方法,但它可能会在无意中引入严重漏洞。DNSSEC 会增加遭受分布式拒绝服务 (DDoS) 攻击的风险并扩大其影响,即服务器、服务或网络同时被来自多个设备的流量扰乱。DNSSEC 增加了 DNS 查询响应的数量,因为该技术需要额外的字段和加密信息来正确验证记录。这意味着与没有采用 DNSSEC 的情况相比,大批量的响应会让攻击者对区域的攻击量大大提高。
需要三方握手
由于传输控制协议 (TCP) 是一种面向连接的协议,因此速度较慢并且需要 三方握手。因此,DNS(以及 DNSSEC)依赖于用户数据报协议 (UDP),这是一种速度更快但风险更大的协议,它既不需要打开、维护或终止连接,也不能保证将已签名数据传送到其目的地。UDP 仅以校验和的形式提供基本的错误检查功能,并且由于不需要握手,因此传输的数据很容易被攻击者截获。
UDP 欺骗是指攻击者制作一个有效的 UDP 请求数据包,该数据包将目标的 IP 地址列为 UDP 源 IP 地址。然后,攻击者可以将仿冒源 IP 发送到某个中间服务器,该中间服务器将发送其所有的 UDP 响应数据包,从而生成远大于请求数据包的响应。此响应足以提升发送到目标 IP 地址的攻击流量级别。
这些情况还增加了 DNS 查询的长度,从而加剧了攻击的严重性。这些攻击的严重性加剧程度可以表示为响应大小与请求大小的比率。例如,如果攻击者向 DNS 服务器发送一个 64 字节的请求,他们可以生成超过 3,400 字节的恶意流量,并将其定向到选定的受害者。
了解根签名仪式
DNS 根签名仪式是一个严格的程序,用于在未来几个月中对根 DNS 区域的公钥信息进行签名。此过程可确保将一群共谋者破坏根签名密钥的可能性降到百万分之一以下。此过程发生在保护根 KSK 的两个位置之一。此过程中使用的私有签名密钥是解锁受 DNSSEC 保护的互联网的密钥。
解决无父根 DNS 区域问题
该仪式解决了无父根 DNS 区域问题,这意味着某个父区域无法监督该区域的完整性。需要少数几个参与者,包括仪式管理员、内部见证人、凭据安全控制员、硬件安全控制员和三名加密员。除了加密员是来自互联网社区的志愿者之外,每个成员都是互联网名称与数字地址分配机构 (ICANN) 的工作人员。
打开凭据保险箱
有两个保险箱:凭据保险箱和硬件保险箱。必须同时打开二者才能获取根密钥。凭据保险箱控制员可以打开凭据保险箱,内含保管箱,每个保管箱都需要仪式管理员和加密员持有的两把钥匙才能打开。保管箱内有打开硬件安全模块所需的操作员卡和安全权限卡,该安全模块存放于硬件保险箱中。这些卡存放在用安全防揭透明袋包裹的塑料盒中,这些袋子留存在凭据保险箱中。
打开硬件保险箱
随后,硬件保险箱控制员进入保险箱室并打开内有硬件安全模块的硬件保险箱。硬件保险箱还有一台没有电池或硬盘的笔记本电脑,专门用于向安全模块发送命令。这台笔记本电脑将用于在仪式中签署根 DNS 密钥,仪式的每一个环节都会被精心记录并直播到互联网上,以供后人使用。
加密员操作流程
仪式开始后,加密员必须将他们的操作员卡交给仪式管理员,仪式管理员从 DVD 启动笔记本电脑并初始化记录仪式日志的 USB。然后,该管理员使用三张操作员卡激活安全模块,再通过以太网电缆将其连接到笔记本电脑。密钥签名请求会加载到笔记本电脑中,并会计算密钥签名请求的 PGP 哈希值,然后对其进行验证以确保与提供的哈希值相同。此时,仪式管理员使用私有 KSK 签署密钥签名请求,这将创建一个数字签名集合:RRSIG 记录。
立即实施 DNSSEC 以加强域安全
只需成功对您的域实施一次 DNS 攻击,即可永久影响您的数字生态系统的完整性和品牌的整体声誉。DNSSEC 加密签名强化了 DNS 解析过程,可保护您的域免受网络威胁(如缓存中毒和答案伪造)的侵扰。最终,这将为贵企业和终端用户的数据和技术提供端到端安全性。
了解 Akamai 的各种 DNS 解决方案
Akamai 不断扩展我们的平台,以便为域所有者提供一系列卓越的 DNS 服务:
可实现域稳定性和抵御能力的 Edge DNS 服务
可对您的数据中心、云部署和 CDN 进行负载均衡的 Global Traffic Management
可大规模扩展您的应用程序的 Application Load Balancing (ALB) Cloudlet
可确保您网络中的每台设备都检查 DNS 安全工具并使您的 DNS 解析器成为安全工具的 Secure Internet Access Enterprise
加入 Akamai 社区, 访问一系列 DNS 资源
您是 DevOps 专业人员吗?请访问我们的 开发人员社区
需要更多帮助? 立即联系我们。
原文于 2021 年 3 月 19 日发布;于 2022 年 6 月更新。