DNS隐私安全问题总结

2022-02-12 ⏳2.7分钟(1.1千字) 🕸️

我在DNS简介中提到DNS系统有严重的安全和个人隐私问题。今天就具体总结一下有哪些问题。如果你对DNS系统还不了解,请先阅读我前面的介绍文章。

第一类问题就是上网行为监控。

因为DNS使用明文UDP协议通信,所以用户所有的DNS查询请求和响应结果都能被监控。换句话说,你在什么时候访问了什么域名的网站,都可以记录在案,成为分析你上网行为的重要依据。

如果你是家用宽带,那一般都会使用运营商(电信/联通/移动)的递解析服务器。按照相关部门的要求,你的查询记录一定会被保存一段时间,甚至是永久保存。如果你是在公司,一般公司也都会记录员工的上网行为。

监控问题非常难以处理。目前主流的办法是使用 DNS over TLS (RFC7858 和 DNS over HTTPS (RFC8484),还有正在标准化过程中的 DNS over QUIC 等技术对代理服务器到递归服务器这一段通信进行加密,然后对递归服务器到权威服务器这段通信做匿名化处理。可这种方案也受到管制,比如我国就不允许私自搭建递归服务器供他人使用。就算是可以提供服务,监管方通常也会用户实名使用并记录相关的日志。

国外有不少 DoT/DoH 服务提供商,最著名的可能就是 Cloudflare 的 1.1.1.1 了,但国内基本无法使用。

哪怕是自己私人搭建了DoT/DoH服务,也无法解决另一类更为卑鄙的问题,那就是DNS劫持。

所谓劫持就是监控用户的DNS请求,如果发现符合某种特征就自动返回伪造的DNS响应。因为UDP协议没有状态,用户收到伪造的DNS结果就会信以为真。这种劫持又分成两类。第一类用于封锁网站,也就是返回一些无法访问的IP地址,从而阻止用户正常访问。这种行为也叫DNS污染。另一类用于欺骗用户,也就是返回一些精心设计的IP地址,用户打开的其实是一个伪造的网站。劫持者通过这种方式可以收集用户的密码、银行卡等信息,从而达到不可告人的目的。

随着HTTPS的普及,上述第二类劫持基本上行不通了。因为虽然可以伪造DNS响应,但伪造不了HTTPS证书,浏览器会自动校验证书是否有效,从而保护用户不受侵害。所以,当你访问非HTTPS网站的时候,浏览器都会提示不安全,就是这个道理。但上述第一类劫持目前还大行其道,很多个人网站一不小心就被封杀,苦不堪言。

为了解决DNS劫持问题,人们设计了 Domain Name System Security Extensions (DNSSEC)。这是一套签名认证系统。通过DNSSEC,权威服务器可以为DNS响应结果加上签名。用户收到解析结果之后可以验证签名是否有效。劫持者虽然可以伪造DNS响应,却伪造不了签名,从而解决劫持问题。然而,DNSSEC在推广上并不顺利,DNSSEC本身只解决了验证问题,并不提供加密功能,所以大家的部署积极性并不高。好在基本上所有的顶级域名都已经部署了DNSSEC,剩下的就看客户端的部署了。

DNS隐私的终极解决方案就是 DNS over QUIC + DNSSEC,而且要使用 QUIC 对全链路通信加密。到那个时候就再也不能劫持DNS记录了。期待这一到的到来。

参考内容: