DNSSEC 验证并认证区域数据,目的是确保任何 DNS 结果都是真实的。
即使 DNS 解析器验证权威名称服务器已发送未被篡改的正确数据,我们如何防止 DNS 解析器向 DNS 客户端发送被篡改的 DNS 响应?
如果 DNS 解析器不支持 DNSSEC,它是否仍可以将 DNS 查询发送到已为其区域启用 DNSSEC 的权威名称服务器?
谢谢
答案1
DNSSEC 有用吗?
在您开始描述您想要捍卫的内容之前,无法回答这个问题(无论您在该句子中用什么词代替“DNSSEC”)。
当您有了您想要防御的风险/弱点/威胁列表时,您就可以找出存在的解决方案并确定每个解决方案的有用程度。
DNSSEC
可以解决某些类型的 DNS 问题,但并非解决所有问题。它不仅带来了新问题(例如,签名和密钥的持续维护),还带来了新功能(NXDOMAIN
如果 DNSSEC 正确验证,则积极缓存以下所有内容)。
即使 DNS 解析器验证权威名称服务器已发送未被篡改的正确数据 - 我们如何防止 DNS 解析器向 DNS 客户端发送被篡改的 DNS 响应?
这与今天没有什么不同:如果您使用任何公共 DNS 解析器(8.8.8.8
、1.1.1.1
,9.9.9.9
仅举几例),您当然完全面临它向您发送垃圾数据的风险。这是一种权衡。 DoH/DoT 在这里没有解决任何问题,因为它只会保护您和此解析器之间的内容传输,而不是内容本身。只要您正在查询的域名受 DNSSEC 保护,哪些内容就会受到 DNSSEC 的“保护”(这是您在问题中忘记的一个部分,这实际上使 DNSSEC 变得困难:域名所有者必须启用它和DNS 解析器必须使用新的签名并进行验证;如果这两个变量方程式中有一个部分不存在,DNSSEC 就没有用,因为它根本无法工作)
因此,问题更多地围绕着:使用哪个递归名称服务器,以及它应该在哪里运行。当然,为了获得最大程度的控制,您希望解析器在您的机器上运行。它仍然可以使用外部资源和 DNS 解析器,但最终的 DNSSEC 验证应该在您的名称服务器上进行,而不是其他服务器。当然,这比仅仅依靠任何其他为您“免费”完成所有 DNSSEC 工作的资源要复杂得多。
如果 DNS 解析器不支持 DNSSEC,它是否仍可以将 DNS 查询发送到为其区域设置了 DNSSEC 的权威名称服务器?
是的。想要获取 DNSSEC 数据的解析器必须在其请求中切换“DO”标志。
来自dig
文档:
+[no]dnssec
This option requests that DNSSEC records be sent by setting the DNSSEC OK (DO) bit in the OPT record in the additional section of the query.
你可以通过以下方式看到:
$ dig +dnssec example.com
; <<>> DiG 9.16.18 <<>> +dnssec example.com
;; global options: +cmd
;; Sending:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40492
;; flags: rd ad; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
^^
或者来自 RFC 4035 的§3.2.1:
3.2.1. DO 位
安全感知递归名称服务器的解析器端在发送请求时必须设置 DO 位,无论名称服务器端收到的发起请求中的 DO 位状态如何。如果发起查询中的 DO 位未设置,则名称服务器端必须从响应中删除任何身份验证 DNSSEC RR,但不得删除发起查询明确请求的任何 DNSSEC RR 类型。
如果 DNS 客户端(递归解析器)执行此操作并且被查询的权威名称服务器启用了 DNSSEC(因此区域中的RRSIG
/ NSEC
/记录类型),则解析器将获取这些记录,然后可以执行 DNSSEC 验证。NSEC3
当您(不是解析器的 DNS 存根/客户端)查询递归解析器时,您可以选择使用标志CD
,定义如下:
+[no]cdflag
This option sets [or does not set] the CD (checking disabled) bit in the query. This requests the server to not perform DNSSEC validation of responses.
(注意可能出现的双重否定)。
如果客户端不使用CD
,则 DNSSEC 验证不会被禁用,因此它将被启用,并且删除服务器将提供最终答案(如果为记录启用了 DNSSEC 并且验证成功)或NXDOMAIN
如果 DNSSEC 验证失败则回复。AD
如果是这种情况,将设置标志以表示所有记录都已验证为安全(如果查询来自递归名称服务器,则该标志不能存在于权威名称服务器中,因为您需要来自 IANA 根的完整 DNSSEC 链来验证任何给定的记录)
答案2
- 理想情况下,您可以在客户端上进行本地验证(目前并不常见,但并非闻所未闻),或者依靠安全的网络路径来弥合从客户端到受信任的验证解析器的差距。
这种安全的网络路径可能意味着 DNS-over-TLS、DNS-over-HTTPS、DNSCrypt 或某种程度上的本地网络(信任级别较低,但对于部分攻击场景仍然有用)。 - 是的