墙中之墙:中国地区性审查的兴起

墙中之墙:中国地区性审查的兴起

https://gfw.report/publications/sp25/zh/

河南防火墙是否采用残余审查? 残余审查是审查者经常使用的一种手段,即在检测并打断两台主机之间的通讯后,在一定时间内(通常是 90 秒或 180 秒)继续封锁这两个主机(源IP、目的IP、目的端口 - 三元组)之间的所有后续连接。这种现象已被多项研究 GFW 的先前工作记录在案 [6, 8, 67]。我们发现河南防火墙不执行任何残余审查。在河南防火墙进行任何重置注入后,我们仍然能够使用相同的三元组建立连接。

注入行为指纹分析。 延续前人对 GFW 不断演变的注入行为进行指纹分析的工作 [7 §2.1, 65 §3.1, 68, 69, 70 §7.1.6],我们对 GFW 和河南防火墙注入的 TCP RST 数据包进行了指纹分析。利用第4.5节中收集的 RST 数据包,我们分析了它们的数据包特征,例如 IP 标识符(IP ID)、IP 生存时间(IP TTL)、TCP 标志、TCP 载荷和载荷长度。

表4:河南防火墙与三种类型的 GFW TCP RST 注入器的注入行为和数据包指纹比较。所有注入均由基于 TLS SNI 的审查触发。显示的 IP TTL 是观测值;它们的初始值应该更高。'C' 和 'S' 分别指客户端和服务器。

GFW (I) GFW (II) GFW (III) 河南防火墙 观测到的 IP TTL 55–118 39–238 248 58 IP ID 0000 00A3 – FE5F 9916 – 9933 0001 IP 标志 (DF) 0 1 0 0 TCP 载荷长度 0 字节 0 字节 0 字节 10 字节 TCP 载荷 - - - 0102 03 04 05 06 07 08 09 00 TCP 标志 RST RST+ACK RST+ACK RST+ACK 数据包数量 x1 x3 x1 x1 目标主机 C&S C&S C&S C 残余审查持续时间 180 秒 180 秒 180 秒 -

表4 比较了河南防火墙与 GFW 三种类型(I、II、III)的重置数据包注入行为。虽然 GFW 的注入机制同时针对客户端(C)和服务器(S),但河南防火墙仅向客户端注入重置数据包。

检查防火墙 RST 数据包的 IP 和 TCP 标志,我们观察到河南防火墙发送单个 RST+ACK 数据包,且 IP DF(不分片)标志未设置。在 GFW 注入器中,类型 I 发送单个不带 ACK 的 RST 数据包,且 IP DF 标志未设置;类型 II 发送三个相同的 RST+ACK 数据包,且 IP DF 标志已设置;类型 III 发送单个 RST+ACK 数据包,且 IP DF 标志未设置。

三种 GFW 注入器注入的 TCP RST 数据包的观测到的 IP TTL 值呈现一定的范围:类型 I 为 55–118,类型 II 为 39–238,类型 III 为固定的 248。我们观察到河南防火墙注入的 RST+ACK 数据包具有固定的 IP TTL 值 58。需注意,这些是客户端观测到的 IP TTL 值;审查设备设置的初始 TTL 值会更高,随后会因审查设备到客户端的网络跳数而减少。

关于 IP ID 值,我们观察到类型 I GFW 注入一个 IP ID 固定为 0x0000 的 RST 数据包,类型 II GFW 注入三个 IP ID 值范围从 0x00A3 到 0xFE5F(163–65119)的 RST+ACK 数据包,类型 III GFW 注入 IP ID 值范围从 0x9916 到 0x9933(39190–39219)的 RST+ACK 数据包。另一方面,河南防火墙的 TCP RST 数据包具有固定的 IP ID 值 0x0001。

河南防火墙 RST 数据包最独特的指纹是其 10 字节的 TCP 载荷模式 0102 03 04 05 06 07 08 09 00 ,这在任何 GFW 注入器中都未发现。虽然 RFC 9293 规定 “TCP 实现应允许接收到的 RST 段包含数据(SHLD-2)”[71 §3.5.3],但在现实世界中看到带有载荷的 RST 数据包仍然非常罕见。在第6节中,我们介绍了一种利用这种独特指纹来绕过河南防火墙的翻墙技术。

为了找出河南防火墙设备在网络中的位置,我们测量审查设备距离我们河南客户端的网络延迟和 TTL 跳数距离。

首先,我们从位于河南省郑州的测量点独立地向位于广州和旧金山的水槽服务器发送 ClientHello 数据包,并测量了我们的客户端从发送 ClientHello 到接收到 RST包之间的时间差。我们利用了 Tranco 列表中的前一百万个域名,每天进行四次实验,并捕获收到的 RST 数据包。

图6 显示了发送 ClientHello 消息与接收到河南审查设备和 GFW 发出的第一个 TCP RST 数据包之间时间差的累积分布。该分析基于 2023 年 10 月 2 日至 12 月 8 日期间从河南收到的 36,480 个 RST 数据包和从 GFW 收集的 16,649 个 RST 数据包。虽然 GFW 可以为一个被封锁的连接注入超过三个 RST 数据包,但我们只用收到第一个 RST 数据包的时间来计算,因为它是那个导致连接被打断的数据包。该图清楚地显示了延迟的差异:时间差表明河南审查设备距离客户端更近,而 GFW 则位于国家网关。具体而言,GFW 的时间差范围从 11.52 毫秒到 445.38 毫秒(平均值为 17.98 毫秒),而河南设备的时间差范围从 2.30 毫秒到 30.49 毫秒(平均值为 2.82 毫秒)。这一证据有力表明,河南的地区性审查是独立于GFW部署的,并且更接近我们的测量点,这意味着这些审查设备位于河南省境内。

图6:发送包含被禁止域名的 TLS ClientHello 数据包与接收到审查设备发出的第一个伪造 TCP RST 数据包之间时间差的累积分布。

接着,为了确定审查发生的确切网络跳数,我们使用了基于 traceroute 的 TTL 操纵探测方法。具体来说,我们发送包含已知被审查域名的 TLS ClientHello 数据包,逐渐增加探测包的 IP TTL 值,直到观察到注入的 RST 数据包。触发 RST 的探测的 TTL 反映了到审查设备的跳数。这种方法类似于先前工作(如 CenTrace [72])中使用的方法。

表5:基于TTL操纵的探测实验结果显示河南的中间设备比 GFW 更靠近我们的客户端两跳。我们从河南郑州向美国旧金山的水槽服务器发送 TLS ClientHello 探测,在不同的跳数触发了两个不同的中间设备。

跳数距离 ASN

ISP

河南 5 4837

中国联通河南省分公司网络

GFW 7 4837

骨干网 - 中国联通

表5 显示了我们在郑州进行的、目标是美国水槽服务器的测量结果。我们使用 011.com 来触发地区性审查(河南),并使用 youtube.com 来触发国家级审查(GFW)。我们的发现表明,河南的中间设备位于第 5 跳(中国联通省级网络),而 GFW 出现在更深的第 7 跳(中国联通骨干网)。这些结果证实了两个审查实体都作为中间设备运行,其中河南设备距离客户端更近。

我们持续监测并分析了被河南防火墙和 GFW 封锁的网站。我们还推断了其采用的封锁规则。

实验设置。 由于很难在河南获取高带宽机器,我们将测量分为两部分。首先,我们每天测试 Tranco 列表 5YZ7N 中排名前一百万的网站。其次,我们每周测试2.27 亿个域名,它们是从互联网名称与数字地址分配机构(ICANN)的集中区域数据服务(CZDS)提供的超过 1,000 个顶级域名(TLD)的域文件中提取的 [73]。

对于 Tranco 前一百万域名的每日测试,我们通过向我们控制的位于中国的服务器发送相应的连接,来测试基于 TLS SNI 和 HTTP Host 的封锁。对于每个域名,针对基于 TLS SNI 的审查,我们每天发送四个连接;针对基于 HTTP Host 的审查,我们每天发送两个连接。在一天之中,如果某一测试中被测域名收到了 TCP RST 响应,我们就将该域名标记为在该协议下被封锁。

由于带宽限制,对于每周测试的 2.27 亿个域名,我们为每个域名向我们的服务器发送一个 TLS 连接,如果请求收到 TCP RST,则将该域名标记为被封锁。

实验时间线。 表1 总结了具体的实验时间线和测量点使用情况。需要特别指出的是,我们在 2024 年 3 月 5 日至 10 月 7 日期间未能运行监测实验。此外,我们在广州的 VPS 出现的意外中断,也导致了一些较小的数据缺口。这些缺口在图7中也有所体现。由于我们使用相同的机器来测量河南防火墙和 GFW,广州水槽服务器的中断同时影响了我们对两个防火墙的测量。因此,我们将这些小的测量缺口(总计额外 25 天)从分析中移除。

图7:河南防火墙和 GFW 封锁的域名数量随时间变化关系。我们在 2023 年 11 月 5 日至 2025 年 3 月 31 日期间,使用 Tranco 前一百万域名列表 ID 5YZ7N 进行了测试,其中 2024 年 3 月 5 日至 10 月 7 日没能测试。

河南防火墙对基于 HTTP Host 和基于 TLS SNI 的审查使用相同的封锁列表。 先前的工作表明,GFW 对不同的协议使用不同的域名封锁列表[2 §4.1][9 §5.2]。相比之下,我们发现河南防火墙对基于 HTTP Host 和基于 TLS SNI 的审查使用同一个封锁列表。具体来说,我们比较了在同一天(2024 年 11 月 14 日)被河南基于 HTTP Host 和 TLS SNI 的审查封锁的域名列表。两种协议封锁的域名数量相近:基于 HTTP Host 的审查封锁了 24,795 个域名,而基于 TLS SNI 的审查封锁了 24,974 个域名。这两个列表之间微小的 1% 差异可归因于测量误差:我们对两个名单中存在差异的域名进行了重复检测以减少假阴性,并发现列表之间的差异消失了。

比较封锁列表大小随时间的变化。 我们监控了河南防火墙和 GFW 封锁列表随时间的变化。图7 显示了各个时刻河南防火墙和 GFW 封锁的域名总数。在 2025 年 3 月 4 日之前,河南防火墙的封锁列表一直远大于 GFW 的封锁列表。

河南防火墙频繁添加和删除通用二级域名封锁规则(例如 *.com.au、*.net.br、*.gov.co),导致被封锁域名数量发生剧烈变化。例如,图7 显示,在 2023 年 11 月 10 日至 12 月 8 日期间,河南防火墙封锁的域名数量持续大幅下降。这一下降主要是由于至少 112 条通用二级域名封锁规则被移除。特别是,在2023 年 11 月 22 日移除 *.com.au 这一条封锁规则,就解封了超过五千个域名。

我们观察到河南防火墙使用的封锁列表也针对与其他国家相关的州或市政府网站。例如,美国的大多数州政府网站,如 texas.gov、seattle.gov、alabama.gov、nc.gov 都在河南被封锁,但未被 GFW 封锁。与 GFW 封锁列表中出现的 83 个 *.gov* 域名相比,我们发现河南防火墙封锁了 1,002 个 *.gov* 域名,这表明其倾向于封锁任何展示来自世界各地的治理数据或新闻内容。事实上,如表6所示,我们注意到河南防火墙比 GFW 更倾向于针对国家代码顶级域名(ccTLD)。其中一些封锁范围很广:2024 年,河南在 1月19日,和2月1日至2月2日封锁了我们测试的所有 5,334 个 *.com.au 域名,在 2 月 15 日至 3 月 4 日封锁了所有 2,075 个 *.co.za 域名,在 2 月 8 日至 3 月 4 日封锁了所有 1,547 个 *.org.uk 域名。这些可能是过度封锁的实际例子,即防火墙包含过于宽泛的规则。我们不清楚河南防火墙为何会重复封锁和解封这些国家代码二级域名。

表6:GFW 和河南防火墙在三个月内审查的前十大顶级域名(TLD)。河南防火墙封锁的国家代码顶级域名(ccTLD)多于 GFW。

GFW

河南

TLD 封锁列表 % TLD 封锁列表 % .com 45.8% .com 37.4% .org 6.1% .au 11.4% .net 5.6% .za 4.6% .jp 2.4% .net 4.5% .cc 2.1% .uk 4.1% .de 1.7% .org 4.0% .xyz 1.7% .in 2.9% .in 1.7% .jp 2.4% .tw 1.5% .tw 1.1% .io 1.3% .de 1.0%

河南防火墙的封锁列表比 GFW 更不稳定。 如图8所示,河南防火墙的封锁列表比 GFW 的封锁列表更不稳定。75% 被封锁的域名被河南防火墙审查的时间少于 51 天,而超过 50% 曾被 GFW 审查的域名在整个测量期间(256 天)都被封锁。与河南防火墙封锁的域名(平均:35.7 天;中位数:21 天)相比,被 GFW 封锁的域名审查持续时间更长(平均:173.8 天;中位数:256 天)。

图8:2023 年 11 月 5 日至 2025 年 3 月 31 日期间(其中 2024 年 3 月 5 日至 10 月 7 日没有测量),所有曾被 GFW 和河南防火墙审查的域名的被封锁时长累积分布。与 GFW 相比,河南防火墙的封锁策略更不稳定,更大比例的域名被封锁的时间较短。

如上所述,河南防火墙这种不稳定的封锁策略也主要是由于频繁添加和删除通用二级域名封锁规则所致。例如,图7 显示,在 2024 年 1 月 11 日至 1 月 12 日以及 2 月 1 日至 2 月 3 日期间,河南防火墙封锁的域名数量出现了两次峰值。这主要是由于添加和删除了 *.com.au 封锁规则。值得注意的是,即使在 *.com.au 规则被移除后,例如在 2024 年 1 月 12 日和 2 月 3 日,河南防火墙仍然分别封锁了 44 个和 26 个以 .com.au 结尾的域名。这一观察结果表明,封锁规则的粒度可以比二级域名更细。

两个防火墙是否针对相似的网站? 图9 显示了在我们九个月的测量期间,GFW 和河南地区性审查设备在 Tranco 前一百万域名中封锁的域名的累积分布。

图9:GFW 和河南防火墙在 Tranco 前一百万列表 5YZ7N 中封锁的域名的累积分布。数据收集于 2023 年 11 月 5 日至 2025 年 3 月 31 日,其中 2024 年 3 月 5 日至 10 月 7 日没有测量。

对于 GFW,如果一个域名在我们的测量期间至少被封锁过一次,我们就将其归类为被封锁。由于河南防火墙封锁列表的不稳定性,我们将域名分为三类:曾被封锁的域名、被封锁时间少于 21 天的域名以及被封锁时间少于 51 天的域名。我们根据对两个防火墙平均封锁持续时间的观察(如 图8 所示)选择了这些阈值。

在测量期间,我们累计观察到 25,441 个域名被 GFW 审查,而有 175,925 个域名至少被河南防火墙封锁过。在被河南防火墙审查的域名中,我们的分析确定了 104,100 个域名的封锁期少于 21 天,而 163,083 个域名的封锁持续时间短于 51 天。

通过观察累积分布和域名排名,我们发现最流行的域名更有可能同时被 GFW 和河南防火墙封锁。河南防火墙在封锁域名方面,就其流行度而言,表现得更为同质化,而 GFW 的封锁列表则呈现出更异构的分布。从图中可以看出,虽然 GFW 防火墙针对更流行的网站,但河南防火墙更均匀地针对网站。然而,两个封锁列表的大小显示出两个防火墙之间的鲜明对比。

两个封锁列表之间的重叠。 为了了解两个封锁列表的大小和重叠情况,我们进行了一项长期实验,在 2023 年 12 月 26 日至 2025 年 3 月 31 日期间,每周测试 2.27 亿个域名。图10 显示了 GFW 和河南防火墙累积的封锁列表。在实验期间,河南防火墙封锁了 4,196,532 个域名——是 GFW 曾封锁的 741,542 个域名的五倍多。有 479,247 个域名同时被两个防火墙封锁。两个封锁列表之间的 Jaccard 指数约为 0.0885,表明它们的相似度低于 9%,因此在覆盖范围上很大程度上是独立的,但又互为补充。



Read Next page

Report Page