中国现在屏蔽了维基百科的所有语言版本

2020-08-30 08:04:15

中国最近开始屏蔽维基百科的所有语言版本。此前,屏蔽仅限于维基百科(zh.wikipedia.org)的中文版本,但现在已扩大到包括所有*.wikipedia.org语言版本。

在这篇文章中,我们分享了OONI网络在中国屏蔽维基百科的测量数据。我们发现,通过DNS注入和SNI过滤的方式,wikipedia.org的所有子域名在中国都被屏蔽了。

自2015年以来,通过使用Ooni探针,维基百科域名从中国当地的多个有利位置进行了测试。大部分测量数据来自中国电信(AS4134)。

OONI的网络连接测试(在OONI Probe应用程序中提供)旨在测量网站的TCP/IP、HTTP和DNS拦截情况。通过这项测试收集的网络测量数据显示,除了中文版,据报道,自2015年5月19日以来,维基百科的大多数语言版本在中国都可以访问,据报道,中文版自2015年5月19日以来一直被屏蔽。

OONI数据显示,中国电信(AS4134)至少从2016年11月10日就开始屏蔽zh.wikipedia.org(此前OONI测量显示,2015年3月,通过该网络即可访问zh.wikipedia.org)。

以下图表基于OONI数据,显示截至2019年4月,维基百科的多个语言版本在中国被屏蔽。

**来源:**中国屏蔽维基百科域名,开放网络干扰观测(OONI)数据:中国,https://api.ooni.io/files/by_country/CN。

OONI测量显示,其中许多维基百科域名以前是可以访问的,但从2019年4月25日起收集的所有测量结果显示,所有维基百科子域都出现了相同的DNS异常。前几个月发生的为数不多的DNS异常都是误报,而2019年4月以后的DNS异常表明,维基百科域名是通过DNS注入的方式被屏蔽的。大部分测量数据来自中国电信(AS4134)。

由于从中国收集的OONI测量表明通过DNS注入的方式进行拦截,我们也可以进一步测量来自中国以外的基于DNS的拦截。为此,我们从国外的一个有利位置运行OONI Probe DNS注入测试,指向中国的一个IP地址。

此测试依赖于这样一个事实,即中国防火墙将为受限制的域“注入”DNS请求,即使请求来自国外并且指向不运行DNS解析器的IP地址也是如此。因此,我们的预期是,如果DNS查询超时,则不会发生阻塞,但如果我们看到响应,则该响应将由审查者注入。

OONI探针DNS注入测试非常快。它允许我们在不到一分钟的时间里扫描2000多个维基百科域名,并确定哪些域名被屏蔽。

通过分析Ooni Probe DNS注入测试的结果,我们能够理解该限制似乎是针对wikipedia.org的任何子域/语言版本(即*.wikipedia.org、zh.wikipedia.org、en.wikipedia.org等)-包括wikipedia.org-但不会影响zh.wikinews.org以外的任何其他维基媒体资源。

屏蔽的目标似乎是wikipedia.org子域,不管它们是否实际存在(例如,甚至不存在。wikipedia.org被屏蔽了!)。注入的DNS响应中返回的IP地址似乎也是相当随机的(之前分析长城返回的IP地址分布的工作示例包括“中国的DNS长城”和“全面了解长城的DNS审查”)。

为了检查是否可以仅通过加密DNS流量来规避对维基百科域名的屏蔽,我们尝试在Firefox中启用基于HTTPS的DNS。

我们只能从中国访问裸IP地址,这表明SNI过滤可能已经到位。

为了进一步验证基于SNI过滤进行过滤的理论,我们运行了以下cURL测试(我们在委内瑞拉运行了类似的测试以确认相同的假设):

$cURL-v--CONNECT-TO::www.kernel.org:https://www.wikipedia.org*重建的URL为:https://www.wikipedia.org/*正在连接到主机名:www.kernel.org*正在尝试147.75.46.191...*tcp_NODELAY SET*正在尝试2604:1380:4080:c00::1...*tcp_NODELAY Set*立即连接失败2604:1380:4080:c00::1:网络不可达*连接到www.wikipedia.org。(147.75.46.191)端口443(#0)*ALPN,提供H2*alpn,提供HTTP/1.1*密码选择:ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH*成功设置证书验证位置:**Cafile:/etc/ssl/certs/ca-certificates.crt:CApath:/etc/ssl/certs*TLSv1.2(OUT),TLS头,证书状态(22):*TLSv1.2(OUT),TLS握手,Client hello(1):*与www.wikipedia.org连接出现未知SSL协议错误:443*curl_http_one:CACKED PROPEARED==1*停止暂停流!*关闭连接0curl:(35)与www.wikipedia.org连接出现未知SSL协议错误:443。

上面的cURL测试正在连接到www.kernel.org(IP 147.75.46.191),但试图使用www.wikipedia.org的SNI进行TLS握手。正如我们从上面的输出中看到的,一旦TLS握手、客户端hello被发送,连接就会中止。

相反,如下所示,如果我们在与www.wikipedia.org进行TLS握手时尝试使用www.kernel.org的SNI(我们使用--Resolve选项跳过DNS解析),则请求成功,我们能够完成TLS握手。

$cURL-v--解析';www.wikipedia.org:443:91.198.174.192';--CONNECT-TO::www.wikipedia.org:https://www.kernel.org*将www.wikipedia.org:443:91.198.174.192添加到DNS cache*重建的URL为:https://www.kernel.org/*连接到主机名:www.wikipedia.org*Hostname www.wikipedia.org在DNS cache中找到*正在尝试91.198.174.192...*TCP_NODELAY SET*连接到www.kernel.org(91.198.174.192)端口443(#0)*alpn。提供HTTP/1.1*密码选择:ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH*成功设置证书验证位置:**Cafile:/etc/ssl/certs/ca-certificates.crt证书路径:/etc/ssl/certs*TLSv1.2(OUT),TLSv1.2(OUT),证书状态(22):*TLSv1.2(OUT),TLS握手,客户端hello(1):*TLSv1.2(IN),TLS握手,服务器hello(2):*TLSv1.2(IN。证书(11):*TLSv1.2(IN),TLS握手,服务器密钥交换(12):*TLSv1.2(IN),TLS握手,服务器完成(14):*TLSv1.2(Out),TLS握手,客户端密钥交换(16):*TLSv1.2(Out),TLS更改密码,客户端hello(1):*TLSv1.2(Out),TLS握手,完成(20):*TLSv1.2(Out)。完成(20):*SSL连接使用TLSv1.2/ECDHE-ECDSA-AES256-GCM-SHA384*ALPN,服务器接受使用H2*服务器证书:**主题:C=US;ST=加利福尼亚;L=旧金山;O=Wikimedia Foundation,Inc.;CN=*.wikipedia.org*开始日期:11月8日21:21:04 2018 GMT*过期日期:11月22日07:59:59 2019 GMT*SubjectAltName与www.kernel.org*SSL不匹配:没有其他证书主题名与目标主机名匹配';www.kernel.org';*curl_http_one:调用过早==1*停止暂停流!*正在关闭连接0*TLSv1.2(Out),TLS警报,客户端hello(1):curl:(51)SSL:没有与目标主机名匹配的备用证书主题名';www.kernel.org';

根据这些测试,我们能够得出结论,中国电信实际上确实通过DNS注入和SNI过滤的方式屏蔽了维基百科的所有语言版本。

类似于埃及实行的审查制度,或许这可以被视为网络过滤的一种“纵深防御”策略。通过同时实施基于DNS和SNI的过滤,中国电信创造了多层审查,使规避变得更加困难。

将加密的DNS解析器(如HTTPS上的DNS)与加密的SNI(ESNI)一起使用可能会成为一种规避策略。*Wikipedia.org目前不支持ESNI,但已经有关于启用它的讨论。