ichuan.net

自信打不死的心态活到老

【译】中国的 DNS 缓存污染(DNS cache poisoning)

本文翻译自:http://viewdns.info/research/dns-cache-poisoning-in-the-peoples-republic-of-china/

中国文学审查的历史长河延续到今天的表现形式就是互联网审查。在公元前 213 年,秦始皇为了防止人们将他与历代君主作比较而把几乎所有书籍都烧毁。两千年后,随着中国共产党的壮大,中国的审查制度又一次得到提升。

自从 1949 年掌权以来,中国共产党已经强制把数不尽的电影、书籍、报纸和电视节目销毁或者关闭。在与自己负面信息的长久作战中,中国推出了自己的一套审查方案,那就是公安部建造的“金盾工程”。这项工程旨在部署所谓的“中国防火长城”(Great Firewall of China,简称:GFW),它可被中国共产党用来控制中国国内的互联网使用。

为了达到审查目标,这个系统使用了几种不同的技术,最普遍的就是 DNS 缓存污染(DNS cache poisoning)。本文将介绍什么是 DNS 缓存污染以及它是如何被 GFW 实施的。

DNS 基础

首先,简单说下 DNS 是如何工作的。当你在浏览器里输入一个域名时,你的电脑需要确定这个域名对应的 IP 地址,以便知道从哪里取网页。

当要确定 IP 地址时,系统首先会去查该信息是否在一个本地 DNS 缓存里,不在的话会向你机器配置的 DNS 服务器去取 IP 信息。这些 DNS 服务器会进行一系列查询,首先去查根域名服务器,其次去查域名后缀(例如 .com)的父域名服务器,最后去查该域名的权威域名服务器。

一旦域名服务器从权威域名服务器那里取到了 IP 地址,大部分情况下它会在把结果返回给你的电脑之前先把它缓存起来(以便下次查询不用再去权威域名服务器去查),你可以使用这个工具看看返回的是什么数据。

下面是一个域名查询示例:

  1. 你在你浏览器里输入 google.com
  2. 你的电脑在缓存里找不到这个域名对应的 IP 地址,因此会去机器配置的 DNS 服务器(可能是你的 ISP 提供的)查询 google.com 的 IP 地址
  3. DNS 服务器查询根域名服务器,然后请求被重定向至 .com 顶级域名的服务器,最后被重定向至 Google 的域名服务器
  4. Google 的域名服务器返回该域名对应的 IP 地址(例如:74.125.237.80)
  5. 其余的 DNS 服务器将缓存该结果,并把它返回给你的电脑
  6. 你的电脑然后会去连接查询到的 IP 地址(例如:74.125.237.80)并且请求 google.com 的网页

什么是 DNS 缓存污染

DNS 缓存污染指的是从权威域名服务器返回的 IP 地址在传递给最终用户的过程中被篡改了。由于查询结果要返回给最终用户需要经过很多系统,有很多地方都是可以篡改结果内容的,例如一台在你 ISP 范围内被动了手脚的路由器,一个通道中透明的 DNS 服务器,甚至可能是最终用户电脑上的病毒或木马。

还是上面的例子,加入 DNS 污染以后的情况是:

  1. 你在你浏览器里输入 google.com
  2. 你的电脑在缓存里找不到这个域名对应的 IP 地址,因此会去机器配置的 DNS 服务器(可能是你的 ISP 提供的)查询 google.com 的 IP 地址
  3. DNS 服务器查询根域名服务器,然后请求被重定向至 .com 顶级域名的服务器,最后被重定向至 Google 的域名服务器
  4. Google 的域名服务器返回该域名对应的 IP 地址(例如:74.125.237.80)
  5. 其余的 DNS 服务器将缓存该结果,并且尝试把它返回给你的电脑
  6. 这个结果要传送到你的电脑需要经过很多系统,例如路由器、服务器。本例中,其中一台服务器被配置成会“污染”任何匹配 google.com 的结果,因此由它传递回来的结果会是另一个 IP 地址(例如:123.123.123.123)
  7. 你的电脑然后会去连接查询到的 IP 地址(123.123.123.123)并且请求 google.com 的网页。因为该地址和域名对不上,可能会出现两种情况:一是该地址没有返回任何内容,二是载入的会是另一个站点的内容。

DNS 缓存污染还可能返回正规的(有争议)内容,例如 ISP 的一个域名搜索页面。如果你曾经输错了域名而进入了 ISP 的标准错误界面,没错,那就是 DNS 缓存污染。

中国的 DNS 缓存污染

由公安部运营的 GFW 有能力基于关键词操作进出整个国家的 DNS 响应包。这是有可能的,因为中国共产党操纵着中国国内所有的国际级别的路由器。一旦一个 DNS 响应包被某个关键词匹配到,用户收到的将是被修改后的 DNS 结果。

让我们来看看一个被中国屏蔽了的域名——facebook.com。如果我们在美国境内查询下这个域名,返回的将是一下结果:

facebook.com    3600    IN  A   69.63.189.11
facebook.com    3600    IN  A   69.63.189.16
facebook.com    3600    IN  A   69.63.181.12

如果我们在中国境内查询下这个域名,会看到返回的是其他 IP 地址:

Beijing             159.106.121.75
Shenzen             78.16.49.15
Inner Mongolia      159.106.121.75
Heilongjiang Province   78.16.49.15
Yunnan Province     159.106.121.75

每次查询的结果都不一样。

我们可以验证 DNS 污染是基于关键词匹配的。首先,我们在美国用 dig 查询下 facebook.com.notarealdomain 域名的 IP 地址。正确的返回结果里状态字段是 NXDOMAIN,表示这个域名不存在。见下图:

enter image description here

如果我们在中国境内执行相同查询,得到的是下图:

enter image description here

注意看,我们收到的不是 NXDOMAIN 响应,而是一个包含被污染 IP 的“正确”(NOERROR)结果。

多次执行这个查询,我们可以得到一些 IP 地址,这些都是被污染的结果。下面是其中一些 IP 的地理位置及拥有者:

IP Address      Location    Owner
8.7.198.45      United States   ARIN
37.61.54.158    Europe      European Regional Registry
46.82.174.68    Germany     Deutsche Telecom
78.16.49.15     Ireland     Esat Telecommunications Limited
93.46.8.89      Italy       Fastweb
159.106.121.75  United States   DoD Network Information Center
203.98.7.65     New Zealand Telstra Clear

有意思的是,上面这些 IP 地址没有一个在中国政府的控制之下。为什么 GFW 使用的 IP 地址都不属于中国政府呢?为什么有个 IP 居然是美国国防部信息中心的?

另外一个有意思的现象是,如果你在 IP 反向查询工具里输入这些 IP,比如 8.7.198.45,得到的是下面的结果:

0513js.com  2011-09-08
0514y.com   2011-09-08
119xxx.com  2011-07-12
1688888sf.com   2011-09-08
175175.com  2011-09-08
41xxx.com   2011-09-07
48888sf.com 2011-09-07
567888sf.com    2011-07-12
61xxx.com   2011-05-20
776488.com  2011-09-10
86888sf.com 2011-09-07
91888sf.com 2011-09-07

很明显,一个被 GFW 屏蔽的关键词就是 xxx.com。任何包含这个关键词的域名都会被自动 DNS 污染。有意思的是,xxx.net 居然不是一个关键词。

被屏蔽的关键词有:

  • twitter.com
  • xxx.com
  • 888sf.com
  • pk999.com

在中国国内访问含以上任何关键词的域名都会被 DNS 污染。第一个关键词可以理解,Twitter N年前就被中国屏蔽了,但最后两个关键词令人费解。

感谢中国防火墙测试工具、IP 反向查询工具和 DNS 查询工具,我们得以对 GFW 的工作原理有个细致的了解。

译后记

GFW 有一项直接封禁 IP 的策略,DNS 污染返回的诡异 IP 就是被封禁过的,所以会造成 Twitter 等域名无法用浏览器打开(连接超时),给人以该网站无法连接(当掉)的假象。

Comments