VPN隧道中的DNS泄露风险


VPN 隧道中的 DNS 泄露风险

TL;DR

Web 服务器通过构造 DNS 记录,从而获取客户端所使用的 DNS 服务器地址。

如何检测自己的 DNS 是否泄露

PoC: DNS Leak Test

如果 DNS Servers 条目中没有出现自己的 ISP DNS 的话,基本可以放心了。

如果出现了多个服务器,基本是服务提供商的负载均衡手段,可以忽略。

中国 ISP 服务器

如果很不幸,列表中出现了你所在省份、运营商、学校的 DNS。那就开香槟喽非常遗憾了。证明服务器有可能通过某些手段得知你的大致属地。

泄露利用基本原理

抓包并观察打开 DNS Leak Test 后的网络请求,发现之后异步请求了一批格式形如 https://***********.4.browserleaks.org/get 的地址。其中*处为一个随机字符串,看来获取客户端 DNS 的 trick 基本 就在这。

Google DNS 记录

{
  "Status": 0 /* NOERROR */,
  "TC": false,
  "RD": true,
  "RA": true,
  "AD": false,
  "CD": false,
  "Question": [
    {
      "name": "vp97h3wjo2tvwaiv.4.browserleaks.org.",
      "type": 2 /* NS */
    }
  ],
  "Authority": [
    {
      "name": "4.browserleaks.org.",
      "type": 6 /* SOA */,
      "TTL": 1800,
      "data": "4.browserleaks.org. noc.browserleaks.org. 2017042745 7200 3600 1209600 3600"
    }
  ],
  "Comment": "Response from 165.22.41.103."
}

Local dig 记录

[sfc9982@dev ~]$ dig vp97h3wjo2tvwaiv.4.browserleaks.org +trace

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> vp97h3wjo2tvwaiv.4.browserleaks.org +trace
;; global options: +cmd
.                       65227   IN      NS      m.root-servers.net.
.                       65227   IN      NS      b.root-servers.net.
.                       65227   IN      NS      j.root-servers.net.
.                       65227   IN      NS      k.root-servers.net.
.                       65227   IN      NS      a.root-servers.net.
.                       65227   IN      NS      i.root-servers.net.
.                       65227   IN      NS      l.root-servers.net.
.                       65227   IN      NS      f.root-servers.net.
.                       65227   IN      NS      h.root-servers.net.
.                       65227   IN      NS      c.root-servers.net.
.                       65227   IN      NS      d.root-servers.net.
.                       65227   IN      NS      e.root-servers.net.
.                       65227   IN      NS      g.root-servers.net.
.                       151199  IN      RRSIG   NS 8 0 518400 20221015170000 20221002160000 18733 . 
;; Received 1097 bytes from ############ in 1 ms

org.                    172800  IN      NS      a0.org.afilias-nst.info.
org.                    172800  IN      NS      a2.org.afilias-nst.info.
org.                    172800  IN      NS      b0.org.afilias-nst.org.
org.                    172800  IN      NS      b2.org.afilias-nst.org.
org.                    172800  IN      NS      c0.org.afilias-nst.info.
org.                    172800  IN      NS      d0.org.afilias-nst.org.
org.                    86400   IN      DS      26974 8 2 4FEDE294C53F438A158C41D39489CD78A86BEB0D8A0AEAFF14745C0D 16E1DE32
org.                    86400   IN      RRSIG   DS 8 1 86400 20221016050000 20221003040000 18733 . OWW+5hUtp/RJHdlmhpLYp/HJu0wHBc5Dej7e1hfVR7ExyHEB8J+TQ0jB bMpeFDSXWGdcrBZKBJti2baczEbAyX5a4VOfBTzZuvjJaac3n1Yrywt/ APosXX7aaoghMK3GjyYhNzXp8L2XArSzwhQSvIL23yV4hay2pylN2+Vs msbktFoFwbh/tDsfxLwwb2WyQsefCsdFbjq8A2iNXpKRdUOFfxyvrk0W tU5YXkIv9ugfaSns2nhxtdlc5i1BlYigHEGn3dfkGu0SxzPCd2iAhPOT OLcwnPoIGGy9j/2ygA5lO6cwCl1+QZsl0OcT4RmBzFlAqztayQpEhhbq E+WsqQ==
;; Received 801 bytes from 192.58.128.30#53(j.root-servers.net) in 20 ms

browserleaks.org.       3600    IN      NS      jim.ns.cloudflare.com.
browserleaks.org.       3600    IN      NS      olga.ns.cloudflare.com.
gdtpongmpok61u9lvnipqor8lra9l4t0.org. 3600 IN NSEC3 1 1 0 332539EE7F95C32A GDTREA8KMJ2RNEQEN4M2OGJ26KFSUKJ7 NS SOA RRSIG DNSKEY NSEC3PARAM
gdtpongmpok61u9lvnipqor8lra9l4t0.org. 3600 IN RRSIG NSEC3 8 2 3600 20221024110145 20221003100145 29166 org. Eaiddx4+Bs1pQMMErGOSwNDd2GEujB9pDFk3HZNknU6qmMHR6YFZg23S Y8CXjHS5LB7mHaZMT5pzljoYWK1SgoFDiIQnCupU6US/b5ffqHGmVJJ1 vISQSHyuuesNByHElm8xI5kiUoRzAUihu89eWvkQWr8SErsl0s1aHQMG ugc=
g1pp7qved73244ihlfhn2ia1du4lmeji.org. 3600 IN NSEC3 1 1 0 332539EE7F95C32A G1PRVFB035RKNAATP3F56FTGJBA791F4 NS DS RRSIG
g1pp7qved73244ihlfhn2ia1du4lmeji.org. 3600 IN RRSIG NSEC3 8 2 3600 20221022152911 20221001142911 29166 org. p12dxH6my1FVtA9aKbGn+p7eDAyu4wQpAeU41GzIeZV4WA8Olp99QFIk gUk/gkkkIMuca/z8YobKBlHWbh8oLJgjK//zZyIWswCpUCsgkA3vtc7M x3E0XOI135QucbO2ITzaLRqsQWkNvhEzvmnob4c6npJPCg3dU9Edbpvv N64=
;; Received 635 bytes from 199.249.120.1#53(b2.org.afilias-nst.org) in 210 ms

4.browserleaks.org.     86400   IN      NS      ns1.browserleaks.org.
4.browserleaks.org.     86400   IN      NS      ns2.browserleaks.org.
;; Received 188 bytes from 2a06:98c1:50::ac40:2089#53(olga.ns.cloudflare.com) in 59 ms

vp97h3wjo2tvwaiv.4.browserleaks.org. 60 IN A    165.22.41.103
4.browserleaks.org.     3600    IN      NS      ns1.browserleaks.org.4.browserleaks.org.
4.browserleaks.org.     3600    IN      NS      ns2.browserleaks.org.4.browserleaks.org.
;; Received 257 bytes from 165.22.41.103#53(ns2.browserleaks.org) in 240 ms

注意

4.browserleaks.org.     3600    IN      NS      ns1.browserleaks.org.4.browserleaks.org.
4.browserleaks.org.     3600    IN      NS      ns2.browserleaks.org.4.browserleaks.org.

这两行NS记录,即所有 4.browserleaks.org. 的子域名由 DNS 权威服务器 ns1.browserleaks.org.4.browserleaks.org. 负责解析。这里很明显 ns1.browserleaks.org.4.browserleaks.org. 就负责记录请求过来的 DNS 服务器 IP,并通过之前随机生成子域名区分进行 DNS 泄露检测的客户端。并将结果回报给 Web 前端。

PoC

(To be continued)

泄露途径

Windows DNS 查询机制

默认情况下,其实配置了路由跃点数/距离,Windows 依然会尝试尝试每个 Adapter 下的缺省 DNS 地址,如果你使用的是 VPN 隧道的话,那么很有可能会导致泄露

解决方案

设置注册表:

Key: HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\DNSClient
Value:  DisableSmartNameResolution
Data:  1

Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
Value: DisableParallelAandAAAA
Data:  1

IPv4 / IPv6 双栈

这个问题较难解决,OS 和 Browser 对此的策略均有不同。

Chrome 中需关闭 Async DNS resolver

如何预防

  1. 确保所有流量经过代理隧道
  2. 使用 DoH, DoT, DNSCrypt, YogaDNS 等安全解决方案
  3. 浏览器中关闭 WebRTC 等风险功能

工具

  • https://yogadns.com/docs/dns-leak/
  • https://browserleaks.com/dns
  • https://bgp.tools/
  • https://github.com/mellow-io/mellow/issues/88
  • https://dnsleak.com/

文章作者: sfc9982
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 sfc9982 !
  目录