近日,云解析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的帮助文档