menu Thinking Null
域名 DNSSEC 配置
2021-02-06   信息安全   暂无评论   2030 次阅读

[TOC]

关于 DNSSEC

DNSSEC 全称 Domain Name System Security Extensions,即 DNS安全扩展,是由Internet工程任务组 (IETF)提供的一系列DNS安全认证的机制(可参考RFC2535)。

它是对DNS提供给DNS客户端(解析器)的DNS数据来源进行认证,并验证不存在性和校验数据完整性验证,但不提供或机密性和可用性。来源:域名系统安全扩展 - 维基百科

一些基础的相关介绍

  1. 什么是DNSSEC?DNSSEC的概念及作用
  2. 如何验证DNS服务器是否支持DNSSEC?

通俗点讲, DNSSEC 的主要作用就是防止 DNS劫持,从而保证 DNS安全。

但在这个保证安全的过程中,DNSSEC 的 RR 和 RRSIG 的传输过程都是未加密的(即:不提供机密性),我们通过一些嗅探工具可以读取 RRSIG记录 以及由 DS记录 建立的信任链。

今天我们就来聊聊 DNSSEC 信任链的那些事。

DNSSEC 相关的资源记录

以国际知名的博客AWSL Blog为例。

awsl.blog 域名配置了 DNSSEC 签名,以下是使用支持 DNSSEC 的 DNS服务器 1.1.1.1 查询 A记录 的解析结果:

dig awsl.blog +dnssec @1.1.1.1
;; QUESTION SECTION:
;awsl.blog.            IN    A
;; ANSWER SECTION:
awsl.blog.        300    IN    A    104.21.31.232
awsl.blog.        300    IN    A    172.67.180.189
awsl.blog.        300    IN    RRSIG    A 13 2 300 20210207155851 20210205135851 34505 awsl.blog. LViVaczzjt5QsASYOH//Yo3X8ImXQ4bGWRELCiq1+E9oEaH+iV6WUqhT kq5+AiAIrl3qQQ1/hQQEWpU5OA78XA==

RRSIG:

RRSIG 资源记录值很长,乍一看是一堆乱码,咱们还是对照格式来看:

A - 记录类型

13 - 算法类型 (参考附录「算法类型列表」)

2 - 标签 (泛解析中原先 RRSIG 记录的名称)

300 - 原 TTL 大小

20210207155851 - 签名失效时间

20210205135851 - 签名签署时间

34505 - Key 标签 (一个简短的数值,用来迅速判断应该用那个 DNSKEY 记录来验证)

awsl.blog. - 签名名称 (用于验证该签名的 DNSKEY 名称)

......== - 加密签名


DNSKEY 和 DS (Delegation Signer)记录也都看下。

dig awsl.blog +dnssec @1.1.1.1 DNSKey

;; QUESTION SECTION:
;awsl.blog.            IN    DNSKEY

;; ANSWER SECTION:
awsl.blog.        536    IN    DNSKEY    256 3 13 oJMRESz5E4gYzS/q6XDrvU1qMPYIjCWzJaOau8XNEZeqCYKD5ar0IRd8 KqXXFJkqmVfRvMGPmM1x8fGAa2XhSA==
awsl.blog.        536    IN    DNSKEY    257 3 13 mdsswUyr3DPW132mOi8V9xESWE8jTo0dxCjjnopKl+GqJxpVXckHAeF+ KkxLbxILfDLUT0rAK9iUzy1L53eKGQ==
awsl.blog.        536    IN    RRSIG    DNSKEY 13 2 3600 20210305234217 20210104234217 2371 awsl.blog. W7N5606xAKtPNjVZvXqhKuGTTS3j02SJZ7zY0Yk/2JAQo2Do8MQHEhpJ tgbIOo/sci/BO4Hjip9ASY/1gtEatw==

DNSKEY:

256 - 标识符 (Zone Key (DNSSEC密钥集) 以及 Secure Entry Point (KSK和简单密钥集))

3 - 协议 (固定值3 向下兼容)

13 - 算法类型 (参考附录「算法类型列表」)

“…最后的…” - 公钥内容


dig awsl.blog +dnssec @1.1.1.1 DS

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 1232
;; QUESTION SECTION:
;awsl.blog.            IN    DS

;; ANSWER SECTION:
awsl.blog.        3600    IN    DS    2371 13 2 7E282E377408DD6817CE980E6A8E1C7EABAA9B2C48EE75FB12ED422D A5F1DDD5
awsl.blog.        3600    IN    RRSIG    DS 8 2 3600 20210222160328 20210123222351 40719 blog. 0/nArHn/lJOs2QYl9tHt7l0gJQFMsGCzd8Qkb0hG4LuzSeltAKrEFWOA KTHFz/8wJ7FNZcOXsnVkc9qVZxeRljYf7JScsXtTb/+L+fcuvkk7bXqp gwoalYNYKQeGEbI5lHjSvRGD0m/L0AnYQ40phTg+5ppx3gTG2+PwxJex l/I=

DS:

2371 - Key 标签 (一个简短的数值,用来迅速判断应该用那个 DNSKEY 记录来验证)

13 - 算法类型 (参考附录「算法类型列表」)

2 - 摘要类型 (创建摘要值的加密散列算法)(参考附录「摘要类型列表」)

“…最后的…” - 摘要:引用的 DNSKEY记录 的加密哈希值。

DS记录 建立的 DNSSEC 信任链

DS,是 Delegation Signer 的缩写,即“委派签名者”,用于构建到子 zone 的身份验证链。

对于 awsl.blog 来说,其 DS记录值 是上一级 .blog 的私钥对其 DNSKEY 进行加密后得到的。

而如果 awsl.blog 存在独立的子域时,又将利用其私钥对其子 zone 的 DNSKEY 执行加密从而生成子域的 DS记录值 。

下图是用 DNSViz 查询到的 awsl.blog 的信任链:
awsl.blog-2021-02-06-15_11_01-UTC.svg
awsl.blog-2021-02-06-15_11_01-UTC.png

图中展示的三个框,从上至下依次代表域名.blog.awsl.blog.,每个框中间的内容分别对应这三个 zone 的 DNSKey 和 DS 的传递关系。

可以通过点击http://dnsviz.net/d/awsl.blog/dnssec/ 查看更多细节。

DNSSEC 的现状及问题

无法保证私密性

DNSSEC 并没有改变 DNS 基于 UDP 的通讯方式,数据流也都是明文传输,他所做的只是加上了一个数字签名,而中间人依然可以看到你请求了什么、结果是什么

挟持发生时不能告诉用户真正的记录

当用户的 DNS 被挟持的时候,用户通过检查 DNSSEC 签名,可以知道自己得到的并不是真正的解析结果,而是得到了一个被伪造的地址。 但是,用户并不知道真正的解析结果是什么。(就不给你真实地址了,你能拿我怎么着?)

支持 DNSSEC 的递归服务器并不多

就目前国内而言,例如 114.114.114.114 以及 223.5.5.5 都不支持

而国外的话,谷歌在 2013 年 5 月 6 号宣布其公共 DNS 服务器 8.8.8.8 以及 8.8.4.4 支持 DNSSEC。

主流浏览器并没有原生对 DNSSEC 的支持

Chrome

早在 14.0.794.0 的时候,Chrome 默认就启用了 DNSSEC 的检查,当时是这样子的
而后来,因为缺少使用因此该功能被删除

Update: this has been removed from Chrome due to lack of use.

详情请看:DNSSEC authenticated HTTPS in Chrome (16 Jun 2011)")

Firefox

目前同样没有原生支持,和 Chrome 需要安装拓展才可以使用。

有兴趣的话可以看这里的讨论:Bug 672600 - Use DNSSEC/DANE chain stapled into TLS handshake in certificate chain validation

更多
Against DNSSEC - Quarrelsome
Verisign - DNSSEC

DNSCrypt-Proxy

之前写过一篇文章https://awsl.blog/ubuntu/dnscrypt-proxy 。配合 DoH / DoT 一起使用,DNSSEC才能更好地发挥出它的用处。

附录

算法类型列表

  • 1: RSA/MD5
  • 2: Diffie-Hellman
  • 3: DSA/SHA-1
  • 4: Elliptic Curve
  • 5: RSA/SHA-1
  • 6: DSA-NSEC3-SHA1
  • 7: RSASHA1-NSEC3-SHA1
  • 8: RSA/SHA-256
  • 10: RSA/SHA-512
  • 12: RSA/SHA-512
  • 13: ECDSA Curve P-256 with SHA-256
  • 14: ECDSA Curve P-384 with SHA-384
  • 252: Indirect
  • 253: Private DNS
  • 254: Private OID

摘要类型列表

  • 1: SHA-1
  • 2: SHA-256
  • 3: GOST R 34.11-94
  • 4: SHA-384
文章原作者
Ephen
https://ephen.me/2016/dnssec-dnsviz/
imlonghao
https://imlonghao.com/41.html
(有大量删改)

本篇文章采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 许可协议进行许可。

转载或引用本文时请遵守许可协议,注明出处。

发表评论
暂无评论
textsms
account_circle
email
link