近日, 云解析 DNS 正式发布 DNSSEC(Domain Name System Security Extensions)功能. DNSSEC 功能的发布, 意味着云解析 DNS 在保护网站访问安全的方面, 又前进了一大步. 那到底什么是 DNSSEC, 这项技术的给我们带来了什么好处呢. 接下来我们一一道来.
DNS 的工作原理
在讲 DNSSEC 这个功能之前, 让我们先来看看 DNS 的工作原理. 我们每个用户, 在进行网页浏览的时候, 都会输入域名, 来打开相应的网页, 比如要打开淘宝, 我们在浏览器中输入 www.taobao.com, 浏览器就会将淘宝的页面呈到我们的眼前. 当电脑在访问某一个页面的时候, 是需要指定 IP 地址才能进行访问, 那么输入域名后, 到页面展示中间, 发生了一些什么事情呢? 首先会去本地 DNS 服务器去查询, 是否存在 www.taobao.com 这个域名的解析记录, 如果能查到, 那么就直接将结果返回给用户了. 可是如果没有查到怎么办, 就需要本地 DNS 进行递归的流程, 依次去根服务器,.com 服务器, taobao.com 服务器, www.taobao.com 服务器上查询, 最终获得 www.taobao.com 的 IP 地址, 从而浏览器可以展示出淘宝页面.
DNS 并非无懈可击
(1)递归链路有被劫持的风险
通过工作原理中的例子我们可以看出, 在进行一次递归查询的时候, 需要对链路上每一个权威服务器进行请求, 接收到应答后再去下一个权威服务器进行查询. 有攻击者利用了其中的漏洞: 当本地 DNS 去请求某一个权威 DNS 服务器的时候, 中间的请求很容易就被攻击者冒充或伪造, 返回给本地 DNS 一个错误的解析结果. 而由于没有验证手段, 此时本地 DNS 就会拿到错误的解析结果去进行后续的解析, 从而网站被重定向到可能有潜在危险的恶意网站.
(2)Local DNS 有被投毒的风险
递归解析器可以从权威服务器中接收到 DNS 数据, 并将其进行缓存, 当有后续请求时, 可以使用缓存数据进行应答, 从而加速解析流程. 当缓存数据被攻击者模拟权威 DNS 响应而被递归解析器接收后, 缓存中的数据就会变为攻击者的数据. 那么后续再进行解析的时候, 就都是具有危险性的解析结果了. 比如此地址指向了一个钓鱼网站, 用户就会在在不知情的情况下丢失了用户密码, 给用户和企业带来损失.
如何来确定解析结果是真正权威的结果呢? DNSSEC 技术顺势而生, 有效保障了解析结果的正确性.
什么是 DNSSEC?
(1)DNSSEC 的介绍
DNS 安全扩展是 Internet 工程任务组 (IETF) 提供的一系列 DNS 安全认证的机制. 它是 DNS 提供给 DNS 客户端的 DNS 数据来源进行认证, 保证 Local DNS(resolver)和权威之间的数据不被篡改(中间人攻击). 当解析数据被篡改后, 开启 DNSSEC 功能的域名, 会对获取到的解析数据上的签名进行验签, 在验签的过程中, 如果失败, 则说明获取的解析数据是异常的, 则不会使用此解析结果, 从而保证用户拿到的解析结果一定是真实可信的.
(2)国内 DNSSEC 的使用情况
DNSSEC 的提议在 2009 年 12 月 1 日宣布, 目前正在逐渐普及起来. 根据亚太网络信息中心 (APNIC) 提供的数据显示, 全球 DNSSEC 验证目前为 24.12%. 如下图白框内所示, 在我国目前只有 1.03% 的域名使用了 DNSSEC 功能, 如今阿里云云解析 DNS 已支持了 DNSSEC 功能, 可以为广大用户提供更加稳定的域名解析服务.
图 1. 我国 DNSSEC 占比图
(3)DNSSEC 的原理介绍
DNSSEC 的记录类型
• RRSIG(Resource Record Signature): RRset 的加密签名
• DNSKEY(DNS Public Key): 公钥, 包含 KSK(Key Signing Key)和 ZSK(Zone Signing Key)公钥两种
• DS(Delegation Signer): KSK 公钥的摘要
• NSEC/NSEC3(Next Secure): 用来证明否定应答(no name error, no data error, etc.)
• CDNSKEY 和 CDS: 子 zone 用来自动更新在父 zone 中的 DS 记录
一个域名, 多个相同类型的资源记录的集合成为资源记录集 (RRset) ,RRset 是 DNS 传输的基本单元. 我们先了解下 RRset(esource Record Set) 的原理.
RRSET 介绍
- 即相同 owner,type,class 的若干 RR 的集合. 如图所示: 当有一个域名 (example.taobao.com.) 下有 3 个 A 记录, 那么这 3 个 A 记录都将绑定到单个 A RRset 中.
图 2. RRset 介绍
知道了 rrset 之后, 接下来我们来看下签名的工作原理.
ZSK(Zone Signing Key)介绍
ZSK 私钥签名 RRset 生成 RRSIG, 公钥以 DNSKEY RRset 的形式发布
仅权威服务器 RRset 签名生成 RRSIG
RRSIG 的 TTL 和 RRSET 的 TTL 相同
DNS 解析时, 查询 RRset 时, 会同时获取 RRSIG, 以及 DNSKEY, 利用 ZSK 的公钥验证签名
如果权威 DNS 是可信的, 那么验证过程到这里就可以结束了. 可是如果 ZSK 是伪造的, 那该如何处理呢? 这就需要有一种方法来对 ZSK 进行验证
图 3. A 记录签名流程
图 4. A 记录签名的验签流程
KSK(Key Signing Key)介绍
KSK 用于验证 ZSK
KSK 私钥签名 DNSKEY RRset(包含 ZSK 和 KSK 的公钥)生成 DNSKEY RRSIG
本 zone 的信任可以建立, 但 KSK 自己签名验证自己, 不可信, 所以需要建立信任链打通本 zone 和父 zone 之间的信任
图 5. DNSKEY 的签名流程
DS(Delegation Signer)介绍
子 zone KSK 公钥的哈希, 提交到父 zone 上, 子 zone 提交 DS 记录后, 则意味着子 zone 的 DNSSEC 已经准备就绪
递归 DNS 在迭代查询过程中, 权威 DNS 在返回 NS 记录的同时会返回 DS 记录
递归查到 KSK 公钥后进行哈希, 和父 zone 里的 DS 记录进行比较, 如果能匹配成功, 则证明 KSK 没有被篡改
图 6. DS 记录的工作原理
解决众多 DNSSEC 技术难题, 只为保护你的域名安全
DNSSEC 目前是一个更加安全可靠的 DNS 解决方案, 可以保证用户的解析不被劫持和投毒所影响, 使得解析更准确.
这种安全可靠的背后, 又有哪些技术挑战需要去克服呢?
(1) 计算量 & 存储量
DNSSEC 的拥有两种签名模式: a. 在线签名; b. 离线签名
在线签名, 可以实时的返回最新的签名结果, 不需要将签名结果存储在权威 DNS 上, 节省了存储空间, 可因为其需要进行实时计算, 对 CPU 的性能带来了很大的考验.
离线签名, 可以返回稳定的签名结果, 签名结果存储在权威 DNS 上, 节约了计算消耗的时间以及 CPU 的使用, 但对磁盘空间有不小的负担.
云解析 DNS 在技术上, 利用本身的高容量, 高性能的优势, 解决了 DNSSEC 功能所带来的计算和存储的压力, 保证了用户域名的解析稳定
(2) 签名算法的选择
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
- 13 ECDSA Curve P-256 with SHA-256
- 14 ECDSA Curve P-384 with SHA-384
- 252 Indirect
- 253 Private DNS
- 254 Private OID
ECDSA 与类似的 RSA 签名相比, 生成 ECDSA 签名的计算成本要低 10 倍, 对于云解析 DNS 现在每天有海量的 DNS 解析请求, 我们解决了高性能的签名计算难题, 使得 DNSSEC 在技术上拥有了可行性.
使用 ECDSA 实现 128 位签名需要一个 256 位密钥, 而类似的 RSA 密钥则需要 3072 位.
综合多种因素, 云解析 DNS 采用的是算法 13: ECDSA Curve P-256 with SHA-256, 这种算法签名得到的结果安全性高, 并且字符长度适中, 在兼顾了安全性的同时, 也降低了传输时数据的大小.
(3) 密钥安全性的保障
DNSSEC 拥有两种密钥, 一种是 ZSK, 一种是 KSK.
其中 ZSK 是用于对域名的解析记录 (例如 A 记录, CNAME 记录等) 进行签名使用的.
而 KSK 是用于对域名的 DNSKEY 记录进行签名的.
众所周知的 Root KSK Ceremonies, 就是 ICANN 为了保证根密钥的安全性, 定期轮转 ZSK 的仪式.
在密钥安全性方面, 云解析 DNS 下了非常大的功夫. 为了保证这两种密钥的安全性, 云解析使用了全托管的密码机, 将密钥托管在密码机中, 密钥运算也是在密码机内部进行, 从而保证任何人无法看到密钥明文. 同时云解析 DNS 也会定期对密钥进行轮转, 通过减少每个密钥加密的数据量, 再次提高了密钥的安全性.
DNSSEC 通过使用公钥加密来为授权区域数据进行数字签名, 给用户的域名带来稳定的保障, 避免解析记录被人篡改和投毒. 阿里云云解析 DNS 已支持 DNSSEC, 全力为您的域名保驾护航.
附:
阿里云 DNSSEC 的帮助文档
来源: https://yq.aliyun.com/articles/745133