DoH协议和ECH如何起到保护隐私的作用

随着互联网的普及,越来越多的人也接入到了互联网的世界。然而,隐私问题也成为了关注的焦点,人们开始关注自己的隐私是否会被泄露。因此,DoH协议和ECH被引入到了互联网中,以保护用户的隐私。


DNS 是如何暴露用户隐私的?

DNS,又叫域名系统。是互联网的一项基础服务设施。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。

传统的DNS协议在设计之初并未考虑加密,其查询和响应默认通过UDP端口53以明文形式进行传输。这意味着,在查询域名时,网络服务提供商(ISP)、同一Wi-Fi下的其他人,以及路径上的任何节点,都能轻松看到您查询的域名和获得的IP地址。

同时由于缺乏加密和认证机制,攻击者可以在传输过程中拦截并修改DNS响应,将您导向恶意网站,这被称为“DNS劫持”或“缓存投毒”。

一个本应该正常打开的网页

此时我们通过nslookup来查询该网站域名的解析记录会发现本该指向Cloudflare节点IP的域名,实际指向了一个未知的IP。

不难看出,中间人将我们期望获得的解析记录篡改成了无法正常建立连接的服务器IP地址,导致出现了一开始我们访问网站显示响应时间过长的错误页。此时可得出结论,我们正遭受到DNS劫持攻击。


DNS劫持

DNS劫持是什么?

DNS劫持,是一种破坏域名系统查询解析的行为,在域名解析过程中,攻击者或中间方篡改DNS查询结果,把原本要访问的正常网站,指向到一个错误甚至恶意的 IP 地址。


为什么DNS会被劫持?

从1983年起源到至今,目前常见的DNS查询通常基于UDP协议53端口进行,以明文方式传输请求与响应。由于缺乏传输加密与身份验证机制,DNS 查询过程容易受到监听与篡改。即使是基于TCP协议下的域名查询,也无法避免被劫持。

我们甚至可以使用网络抓包分析工具来获取到完全明文传输的查询结果,中间人完全可以随意查看与篡改其解析结果。

因此,DoH(DNS over HTTPS)于2018年发布,这是为DNS查询传输而提出的另一种标准。

同时它通过HTTPS协议,并在TCP协议443端口上传输DNS查询数据,这更利于这类网络流量隐于其他HTTPS流量中。


如何避免DNS劫持?

目前大多数主流浏览器与操作系统都已支持使用DoH,在此我们以浏览器为例。

在设置前可以看到“安全的DNS”并未检测到。


现在打开浏览器的设置,搜索DoH,我们就可以看到DoH的设置了。


完成设置后,我们再检测一次。


现在可以看到我们的“安全的DNS”已经成功生效了。


此时我们再访问一下刚刚无法打开的特定网站。

可以看到现在已经从访问响应超时变成了连接已重置,代表现在我们的DNS查询请求是没有遭到监听与篡改的,但仍然无法正常访问网站,这也就代表了仍有中间人在干扰我们与网站的通讯,但并不是通过DNS污染的方式进行干扰。


填补加密装甲中的最后缝隙

此时我们回看一下上面的图片中,图片中显示的“安全SNI”一直处于未生效状态,因此监听网络的任何人仍然能看到通过TLS方式连接到的确切网站。

这显然只达到了防篡改,但还没有充分达到避免被监听的作用。

原因很简单,网站的服务器在相同的IP地址和TCP端口号上是可以呈现多个证书,在我们访问网站,握手过程开始时客户端告诉它正在连接的服务器要连接的主机名称,以返回对应主机名称的证书。

但由于SNI(服务器名称指示)也同样是未加密的明文信息,中间人可以识别出任何人访问的网站域名,进行监听或干扰。


而Encrypted Client Hello(简称ECH)针对的就是TLS协议中的这个弱点。

如果使用ECH,ECH会将整个Client Hello消息加密,只有你要访问的网站可以解密。这保证了信息全程私密。

那么问题来了,为什么要提到ECH呢?

因为ECH是要依靠DoH才能工作的,这是ECH获取加密密钥的方式。所以ECH让DoH进一步发挥了作用。

目前,从 Firefox 119 版本开始,ECH 默认启用。Chromium 117 版本也默认启用了 ECH。如果在DoH与ECH已启用的情况下安全SNI仍不能正常工作,则可能需要排查电脑上是否有其他软件在干扰DoH工作(笔者发现在开启卡巴斯基的情况下,安全SNI无法正常工作)。

在开启ECH后,我们再进行一次检测。

可以看到全部通过检测后,再访问原本无法访问的网页,已经能够正常访问了。

Tips:由于ECH目前并未被广泛部署,大部分站点仍然不支持ECH。