中国封锁了所有语言版本的维基百科

中国封锁了所有语言版本的维基百科iyouport.org, Open Culture Foundation (OCF), Sukhbir Singh (Open Web Fellow, Mozilla Foundation), Arturo Filastò (OONI), Maria Xynou (OONI)

2019-05-04Translation(s):English: China is now blocking all language editions of Wikipedia中国最近开始封锁所有语言版本的维基百科。 以前,封锁仅限于维基百科的中文版(zh.wikipedia.org),但现在已经扩展到了所有语言*.wikipedia.org的版本。

我们将在本文分享OONI对于中国封锁维基百科的网络测量数据。 我们发现所有wikipedia.org的子域名在中国都被通过DNS注入和SNI过滤的方式封锁了。

DNS注入通过使用OONI Probe,自2015年以来,我们已经在中国的多个地区对维基百科域名进行了测试。大多数测试数据都是从中国电信(AS4134)收集的。

OONI的Web连通性测试(在OONI Probe应用程序中提供)旨在测量基于TCP/IP,HTTP和DNS的对网站的封锁。 通过此测试收集的网络测量数据显示,在以前,除了中文版之外的大多数维基百科语言版本以前都可在中国访问,中文版据报道自2015年5月19日以来一直被封锁。

OONI数据显示中国电信(AS4134)至少从2016年11月10日开始封锁zh.wikipedia.org(之前的OONI测试表明2015年3月zh.wikipedia.org是可访问的)。

下图基于OONI数据,说明在2019年4月,多种语言版本的维基百科在中国被封锁。

我们可以在**这里**获得对用于生成上图的OONI测量的分析。

OONI测量结果表明,许多维基百科域名之前都可以访问,但从2019年4月25日开始收集的所有测量数据都显示了所有维基百科子域名的相同DNS异常。 前几个月发生的少数DNS异常是误报,而2019年4月以来的DNS异常显示维基百科域名被通过DNS注入封锁。 大多数测量数据来自中国电信(AS4134)。

由于从中国收集的OONI测量结果表明封锁是通过DNS注入进行的,我们还可以进一步从中国以外测量基于DNS的封锁。 为此,我们从外国进行了OONI Probe DNS注入测试,指向中国的IP地址。

此测试依赖于中国防火墙将“注入”受限域名的DNS请求这一事实,即使该请求来自国外并且指向的IP地址其实并不提供DNS解析服务。 因此,期望是,如果DNS查询超时,就说明没有封锁,但如果我们看到响应,那么就说明响应被审查注入了。

OONI Probe DNS注入测试速度非常快。 它能让我们在不到一分钟的时间内扫描2,000多个维基百科域名,并确定哪些域名被封锁。

通过分析OONI Probe DNS注入测试的结果,我们发现封锁针对的是wikipedia.org的任何子域名/语言版本(如*.wikipedia.org, zh.wikipedia.org, en.wikipedia.org等。)——包括wikipedia.org——但不影响zh.wikinews.org之外的任何其他维基媒体(Wikimedia)资源。

封锁针对wikipedia.org的子域名而不管它们是否存在(例如,甚至donotexist.wikipedia.org都被封锁了!)。 被注入DNS响应中返回的IP地址似乎也是随机的(先前分析防火墙返回的IP地址分布的工作的例子包括“中国的DNS长城”和“全面了解防火墙DNS审查的图景”)。

SNI过滤为了检查是否可以通过仅加密DNS流量来对维基百科域名的封锁阻止,我们尝试在Firefox中启用DNS over HTTPS。

为此, 我们运行:

curl -H 'accept: application/dns-json' https://cloudflare-dns.com/dns-query?name=www.wikipedia.org&type=A

我们能够通过DNS over HTTPS成功解析www.wikipedia.org域名

这些测试也可以通过在Firefox中启用DNS over HTTPS来验证。

但是,封锁仍然存在。

从中国只能直接访问IP地址,表明可能存在SNI过滤。

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

$ curl -v --connect-to ::www.kernel.org: https://www.wikipedia.org

* Rebuilt URL to: https://www.wikipedia.org/

* Connecting to hostname: www.kernel.org

* Trying 147.75.46.191...

* TCP_NODELAY set

* Trying 2604:1380:4080:c00::1...

* TCP_NODELAY set

* Immediate connect fail for 2604:1380:4080:c00::1: 网络不可达

* Connected to www.wikipedia.org (147.75.46.191) port 443 (#0)

* ALPN, offering h2

* ALPN, offering http/1.1

* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH

* successfully set certificate verify locations:

* CAfile: /etc/ssl/certs/ca-certificates.crt

CApath: /etc/ssl/certs

* TLSv1.2 (OUT), TLS header, Certificate Status (22):

* TLSv1.2 (OUT), TLS handshake, Client hello (1):

* Unknown SSL protocol error in connection to www.wikipedia.org:443

* Curl_http_done: called premature == 1

* stopped the pause stream!

* Closing connection 0

curl: (35) Unknown SSL protocol error in connection to www.wikipedia.org:443

上面的curl测试连接到www.kernel.org(IP 147.75.46.191),但尝试使用www.wikipedia.org的SNI进行TLS握手。 正如我们从上面的输出中看到的,TLS handshake, Client hello一发出,连接就中断了。

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

$ curl -v --resolve 'www.wikipedia.org:443:91.198.174.192' --connect-to ::www.wikipedia.org: https://www.kernel.org

* Added www.wikipedia.org:443:91.198.174.192 to DNS cache

* Rebuilt URL to: https://www.kernel.org/

* Connecting to hostname: www.wikipedia.org

* Hostname www.wikipedia.org was found in DNS cache

* Trying 91.198.174.192...

* TCP_NODELAY set

* Connected to www.kernel.org (91.198.174.192) port 443 (#0)

* ALPN, offering h2

* ALPN, offering http/1.1

* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH

* successfully set certificate verify locations:

* CAfile: /etc/ssl/certs/ca-certificates.crt

CApath: /etc/ssl/certs

* TLSv1.2 (OUT), TLS header, Certificate Status (22):

* TLSv1.2 (OUT), TLS handshake, Client hello (1):

* TLSv1.2 (IN), TLS handshake, Server hello (2):

* TLSv1.2 (IN), TLS handshake, Certificate (11):

* TLSv1.2 (IN), TLS handshake, Server key exchange (12):

* TLSv1.2 (IN), TLS handshake, Server finished (14):

* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):

* TLSv1.2 (OUT), TLS change cipher, Client hello (1):

* TLSv1.2 (OUT), TLS handshake, Finished (20):

* TLSv1.2 (IN), TLS change cipher, Client hello (1):

* TLSv1.2 (IN), TLS handshake, Finished (20):

* SSL connection using TLSv1.2 / ECDHE-ECDSA-AES256-GCM-SHA384

* ALPN, server accepted to use h2

* Server certificate:

* subject: C=US; ST=California; L=San Francisco; O=Wikimedia Foundation, Inc.; CN=*.wikipedia.org

* start date: Nov 8 21:21:04 2018 GMT

* expire date: Nov 22 07:59:59 2019 GMT

* subjectAltName does not match www.kernel.org

* SSL: no alternative certificate subject name matches target host name 'www.kernel.org'

* Curl_http_done: called premature == 1

* stopped the pause stream!

* Closing connection 0

* TLSv1.2 (OUT), TLS alert, Client hello (1):

curl: (51) SSL: no alternative certificate subject name matches target host name 'www.kernel.org'

基于这些测试,我们得出结论,中国电信确实通过DNS注入和SNI过滤来封锁维基百科的所有语言版本。

与在埃及实施的审查相似,也许这可以被视为网络封锁的“纵深防御”策略。 通过实施基于DNS和SNI的过滤,中国电信创建了多层审查制度,使翻墙更加困难。

使用加密的DNS解析(例如DNS over HTTPS)以及加密的SNI(ESNI)可能可以用作翻墙策略。 Wikipedia.org目前不支持ESNI,但是已经但有关于启用它的讨论。

[an error occurred while processing the directive]