深度包检测
编辑
主条目:深度包检测
深度包检测(Deep packet inspection, DPI)是一種於應用層對網路上傳遞的資料進行偵測與處理的技術,被廣泛用於入侵檢測、流量分析(英语:Traffic analysis)及數據挖掘。就字面意思考慮,所謂「深度」是相對於普通的報文檢測而言的——相較普通的報文检测,DPI可對報文内容和协议特征进行检测。
DPI是防火长城檢測關鍵詞及嗅探加密流量的基础,借助硬件設施、適宜的檢測模型和模式匹配算法,它能夠精確且快速地從實時網絡環境中判別出目标流量,並作出審查者所期望的應對措施[30]。
被认为在防火长城部署了的深度包检测包括:
DNS协议。防火长城检测所有经过骨干网国际出口路由的位于TCP与UDP的53端口上的域名查询请求,等待和处于域名黑名單中的相匹配的。
HTTP协议。防火长城检测包含用户访问的网站的域名的HTTP头中的Host字段[31]和发送和回复全文[32][33],但对回复的检测在2008年末终止[34]。
Tor协议。防火长城无法提取出任何加密前的原始内容,但可以分辨出疑似流量。一般之后以主动探测确认之[35]。
SMTP协议。防火长城不仅可以检测邮件的发送人(MAIL FROM)和收件人(RCPT TO),还可以检测邮件全文内容中的关键字,fqrouter作者将这称为“深包中的深包检测”[36]。
TLS协议。早期TLS版本中,服务器握手响应,包括证书,是未被加密的,防火长城可以嗅探它而得知访问站点,自TLS版本1.3开始,ServerHello之后的握手信息,包括站点证书,也会被加密后传输,一般可以认为能防止对证书信息的检测[37][38];另外,SNI是TLS的一个扩展协议,该协议下,客户端在握手过程开始时告诉服务器其连接的域名,以便运作多个HTTPS网站的服务器选择并提供对应证书。而该扩展也未被加密[21]。基于UDP传输的QUIC的握手也使用TLS版本1.3,受上文所述的明文SNI影响[39];不过截至2025年4月 (2025-04)[update],GFW在QUIC的域名封锁列表和一般TLS并不一致[39][需要較佳来源]。
DNS污染
编辑
主条目:域名服务器缓存污染
等待到深度包检测章节中的“和处于域名黑名单中的相匹配”的域名后,防火长城會向查询者注入虚假DNS回复,比真的更早到达[40][32][41][42]。由于通常的域名查询没有任何认证机制,而且域名查詢通常基于的UDP協議是无连接不可靠的协议,查询者无法验证返回结果的正确性[42],客户端接受其伪造回复,并尝试连接其中的IP,结果往往是超时[32],或者出现无效TLS证书之警告。而其对TCP协议的查询则使用TCP重置攻击来阻止获得任何正确结果[43][25]。
防火长城向查询zh.wikipedia.org的DNS请求注入伪造回复
此种行为自2002年开始[19]以来有相当明确的特征。
伪造回复所包含的IP地址或者是保留地址、或者是固定中国境外IP集合中的一个[40],这些地址通常已经被屏蔽[19][42][44]。
伪造回复包有固定类型。一型的TTL值和IPID固定[44][45][46],每次注入出现1个[44];二型的TTL值周期性增加、IPID递减[44][45][46],每次注入出现3个[44]。两种类型都没有设置“不分片”(Don't fragment)选项[44][45][46]。另外,2020年的研究指出有另一种新的IPID和TTL值都随机,带有“不分片”选项的回复存在[46]。
这种注入是双向的,不仅是在中国境内查询境外DNS时、境外的DNS查询途经中国时也会出现,这导致许多国外递归DNS服务器的缓存被污染[47]。
根据2014年的研究,防火长城的一个计算集群有360个节点,每个节点的平均处理速度是每秒2800个DNS包[48][45]。
对于加密DNS,如DoT和DoH,防火长城使用基于IP端口和基于SNI的封锁[49]。最早的封锁针对Cloudflare提供的加密DNS服务,其一个IP地址1.1.1.1和域名cloudflare-dns.com在2020年末被发现封锁[49]。
污染事件
编辑
2010年3月,一名智利域名注册商的技术人员称,当用户向的“I”根網域名稱伺服器的查询facebook.com、youtube.com和twitter.com等域名时,返回的是虚假的IP地址,没有转到VeriSign公司运行的.com[50][51][52]。调查表明,由于错误的路由信息,用户的对此根服务器的域名查询被定向到一个中国的节点,“I”根服务器运营商Netnod(英语:Netnod)为解决问题,撤回了中国服务器的路由通告,并声称自己的服务器本身不包含任何错误路由,安全专家亦认为这次事件与Netnod无关,而是中国政府修改某处网络时造成的[53][54]。4月,一家中国ISP的错误路由通告再次扩大了DNS污染对全世界的影响[55]。6月,匿名研究发现109个国家的三成递归DNS解析器受到防火长城污染[47],中国周边地区如俄罗斯、东南亚最受影响[47][56]。Slashdot网友认为,中国的DNS污染是互联网的真正威胁[56]。
2014年1月21日下午三点半,中国互联网域名解析异常,大量网站被错误解析到IP地址65.49.2.178,這個IP位於美国加利福尼亚州费利蒙市Hurricane Electric公司,被动态网公司租用于翻墙软件连接节点[57][58]。动态网公司和研究人员认为这是因为防火长城的工作人员操作失误[59][60][61],另一些人认为,不能排除真正的黑客借这一IP地址作为跳板发动攻击的可能[62]。
2015年1月2日,污染方式有所改变,防火长城不再注入固定、被封锁IP地址,而是境外真实网站的、可访问的地址[63],这导致了境外服务器遭受来自中国的DDoS攻击,部分网站因此屏蔽中国IP[64]。该年4月,CNCERT发表声明称,劫持是境外攻击所致[8]。
TCP重置攻击
编辑
主条目:TCP重置攻击和状态防火墙
重置(reset)是传输控制协议(TCP)的一种消息,例如服务器端在没有客户端请求的端口或者其它连接信息不符时,系统的TCP协议栈就会给客户端回复一个重置通知消息,该功能本来用于应对例如服务器意外重启等情况,而防火长城阻止TCP连接的技术实际上就是比连接双方更快地发送连接重置消息,使连接双方以为对方终止了连接[65]。
Chromium的「连接被重置」錯誤訊息。当碰触到GFW設定的关键词后(如使用Google等境外搜索引擎),會出现這種畫面[32]。
防火长城检测到服务器名称指示(SNI)包含zh.wikipedia.org即注入伪造的TCP重置(reset)包(cURL)
GFW发送的重置封包由Wireshark捕获
当GFW看到自客户端发送的第一个SYN包以启动TCP三次握手时,其开始跟踪该TCP连接的状态。HTTP、SMTP、HTTPS等许多应用协议都基于TCP。GFW在该TCP控制块(TCP control block)内进行上文所述之检测[25][66],遇到预期关键字后,其会注入带有一个RST选项的“一型”和多个带有RST/ACK选项的“二型”数据包,这被认为是来自两种同时部署的审查设备[25][67]。一型IPID为0,具有随机的窗口尺寸(英语:TCP tuning#Window_size),没有设置“不分片”选项;二型则有周期性增加的TTL值和窗口尺寸,并且设置了“不分片”[68][25]。
外部视频链接 Observations in mainland China (Chinese),YouTube Observations in mainland China (English),YouTube
有时防火长城在检测到违禁关键字并注入一次重置后,会在固定时长内对具有相同三元组(客户端IP、服务器IP、服务器端口)的连接不区分关键字违禁与否地持续注入[65][32][25],或者丢弃符合该三元组的数据包[66],这被称为残余审查(Residual censorship)[22][69]。前谷歌高级副总裁艾伦·尤斯塔斯(英语:Alan Eustace)曾发布视频演示此种封锁策略[70]。
IP封锁
编辑
主条目:IP封锁
防火长城主要采用路由扩散技术封锁特定IP地址,也就是通过将需要拦截的IP地址配置为空路由、黑洞设备或特别配置的自治系统上,在这些黑洞服务器上可以什么也不做,或者对这些报文进行分析和统计,获取更多的信息,甚至可以做出虚假回应[71][72]。正常的情况下,静态路由是由管理员根据网络拓扑或是基于其它目的而给出的一条路由,所以这条路由是正确的情况下,可以引导路由器把报文转发到正确的目的地。而防火长城的路由扩散技术中使用的静态路由是一条有意配置错误的路由,其目的是为了把本来是发往某个IP地址的报文引导到一个“黑洞服务器”上,而不是把它们转发到正确目的地。通过动态路由协议的路由重分发功能,这些错误的路由信息可以发布到整个网络[73]。
参见:BGP劫持
“
在大规模自治域的出入口路由器上新接入一个起控管作用的子网或者AS域,将要受控的网络地址配置在这个子网或者AS域内的路由器中,这样利用动态路由协议的网络拓扑自动识别特性,在出入口路由器上将生成受控网络地址的路由信息,将自治域内部网络对这些受控网络地址的访问转入到这个控管子网或者AS域的网络中,从而实现对受控网络地址的流量控制 。
”
——《一种基于路由扩散的大规模网络控管方法》[74]
对于由使用虚拟主机服务提供商提供的多域名、单(同)IP的主机托管服务的网站,如果封禁它的IP地址,就会造成“过度封锁”(Overblocking):所有使用该提供商服务的、其他使用相同IP地址的网站也被封锁,就算是「内容健康、政治无关」的网站,也不能幸免。其中的内容可能并无不當之處,但也不能在中国大陆正常访问[65][75]。所以基于路由封锁的方法现在主要用于针对自主拥有大量连续地址段的特定自治系统,例如Facebook,Google,Telegram,Twitter等;对于内容分发网络(CDN)的地址段可能不会采用这种地址封锁的方法,以避免过度封锁[76]。
对翻墙软件的反制
编辑
参见:VPN屏蔽
因为有防火长城的存在,大量境外网站无法在中国大陆境内正常访问,于是大陆网民开始逐步使用各类翻墙软件突破防火长城的封锁。针对网上各类突破防火长城的翻墙软件,防火长城也在技术上做了应对措施以减弱翻墙软件的穿透能力。通常的做法是利用上文介绍的各种封锁技术以各种途径打击翻墙软件,最大限度限制翻墙软件的穿透和传播。
2015年1月,部分国外VPN服务在中国大陆无法正常使用,包括L2TP/IPSec和PPTP协议。[77]
防火长城在2016年就能利用TLS的旁路泄露观察数据包特征识别TLS代理,研究人员利用随机填充修改请求和握手中间发送的数据包大小,则可以正常浏览被审查的HTTP和HTTPS网站,关闭随机填充丢包问题则会立即再现[78][79]。
自2021年11月初以来,防火长城部署了一种类似白名单的检测方法:应用规则来豁免那些不太可能是完全加密的流量;然后它阻止其余未被豁免的流量。由于翻墙软件的流量多是完全加密的,这种方法十分有效,仅会误伤大约0.6%的非翻墙互联网流量[69]。
主动探测
编辑
主动探测示意图:橙色区域为“墙内”。
自2011年10月以来[80],防火长城通过主动探测(Active probing)[81]识别翻墙服务器,并随后将其封锁。其主要针对以下目标。
任何加密连接,包括SSH和Tor,并不针对特定协议。这是最早出现的探测。每当中国用户尝试加密连接,防火长城发送“垃圾二进制(garbage binary)探针”[82][83],一系列伪随机数据,在建立加密连接前先访问目标计算机,其目的在于在用户建立加密连接前嗅探出他们所使用的反审查工具[80][84][83],任何从中国访问境外HTTPS 443端口的连接都会在几乎实时的情况下被刺探[82][83]。
Tor。2011年10月起,防火长城的深度包检测设备已能识别Tor指纹[82][85]。当中国的Tor客户端试图与境外Tor网桥建立连接,防火长城会在每15分钟周期(如15分钟后,30分钟后)内发送探针会尝试与Tor进行SSL协商和重协商,但目的不是建立Tor连接[80],每次探测持续3分钟[85][35]。这种探测还会在春节等假期期间停止[85][35]。而2015年的研究指出,防火长城已经可以实时主动探测Tor网桥,而不是每15分钟执行一次[86]。被探测的网桥类型包括obfs2和obfs3等[87][86]。
SoftEther VPN。2015年9月发现[86][88]。起初使用固定的IP,如210.72.128.200,被屏蔽之后使用亚马逊EC2等云服务发起探测,模仿SoftEther的客户端握手去识别有效的SoftEther的IP[89]。
AppSpot。2015年9月发现,目的是为了识别并封锁可用的Google的IP[89],干扰使用该服务翻墙的GoAgent[86][88]。探测请求有相似的Host头和固定的用户代理[89]。
Shadowsocks。可能是从2019年5月开始的[90][91]。
其他
编辑
针对TCP和UDP连接的封锁
编辑
2011年3月,防火长城曾经对Google部分服务器的IP地址实施自动封锁(按时间段)某些端口,按时段对www.google.com(用户登录所有Google服务时需此域名加密验证)和mail.google.com的几十个IP地址的443端口实施自动封锁,具体是每10或15分钟可以连通,接着断开,10或15分钟后再连通,再断开,如此循环,使中国大陆用户和Google主机之间的连接出现间歇性中断,使其各项加密服务出现问题。[92]Google指责中国这样的封锁手法,因为Gmail并非被完全阻断,营造出Google服务“不稳定”的假象,表面看上去好像问题出自Google本身。[93]
2014年5月27日起,Gmail网页版的80和443端口被封鎖。2014年12月26日起,Gmail客戶端所用的IMAP/SMTP/POP3端口也被封鎖。[94]
防火长城也会通过限制QoS优先级的方式干扰向境外的UDP连接,如网站使用HTTP/3(QUIC)协议时。[95]
间歇性封锁国际出口
编辑
参见:国家局域网
2011年5月,中国大陆境内很多互联网公司以及高校、学院、科研单位的对外网络连接都出现问题,包括中国科学院。当时有分析指断网可能是因为防火长城已经具有了探测和分析大量加密流量并对用户IP地址执行封锁的能力,而各大机构的出口被封也在其中。具体表现为:当用户使用了破网(翻墙)软件后,其所在的公共网络IP地址会被临时封锁,所有的国际网站都无法访问,包括MSN、iTunes Store等,而访问国内网站却正常,但如果使用境外的DNS解析域名则将会由于DNS服务器被封锁导致无法解析任何域名,国内网站也会无法打开[96]。自由亚洲电台引述业内人士分析指,此举是中国当局在测试逐步切断大部分人访问国际网站的措施,以试探用户反应并最终达到推行网络「白名单」制,也就是凡没有在名单上的企业或团体其网络域名将不能解析,一般用户也无法访问[97]。而中共党机关报《人民日报》旗下的《环球时报》英文版则引述方滨兴指,一些ISP必须为自己的用户支付国际流量费用,因此这些公司「有动机」去阻碍用户访问国外网站。一位不愿留名的工信部官员说,用户碰到这些情况应先检查自己和网站的技术问题。[98][99]
中间人攻击
编辑
2013年1月26日,有中国大陆的用户在访问GitHub时发现证书无效,经检查发现,其的证书变为了一自签署的X.509证书,生成时间为2013年1月25日,有效期一年,故有人推测GitHub疑似遭到了中间人攻击。 GreatFire和研究人员认为攻击是由中国政府策划的[100]。
自2014年8月28日起,原先可以通过IPv6直连Google的中国教育网(CERNET)内试图通过HTTPS连接*.google.com.*等网页时,可能收到TLS证书错误的提示,其中以连接www.google.com.hk几乎是每次连接均收到攻击,而其它连接例如ipv6.google.com和accounts.google.com也有受到攻击的报告,但攻击发生的機率相对较低。伪造的TLS证书显示其为google.com,颁发机构即为其本身,与真正的证书不同,顯示谷歌在中国教育网上受到中间人攻击。
2015年1月17日,Outlook遭到了中間人攻擊[101][102]。19日,GreatFire撰文稱懷疑此攻擊是由網信辦發起的[103];22日,網信辦對此文作出了回應,稱「Greatfire.org是境外反华组织创办的反华网站」,「这一无端臆测,纯属境外反华势力的造谣和污蔑」[104]。
对电子邮件通讯的拦截
编辑
参见:电子邮件
正常情况下,邮件服务器之间传输邮件或者数据不会进行加密,故防火长城能轻易过滤进出境内外的大部分邮件,当发现关键字后会通过伪造RST封包阻断连接。而因为这通常都发生在数据传输中间,所以会干扰到内容[36]。也有網友根據防火长城會過濾進出境郵件的特性,尋找到防火长城部署的位置[105]。
2007年7月,大量使用中国国内邮件服务商的用户与国外通信出现了退信、丢信等普遍现象[106]。表现为[107]:
中国国内邮箱给国外域发信收到退信,退信提示Remote host said: 551 User not local; please try
中国国内邮箱用户给国外域发信,对方收到邮件时内容均为aaazzzaaazzzaaazzzaaazzzaaazzz
国外域给中国国内邮箱发信时收到退信,退信提示Remote host said: 551 User not local; please try
国外域给中国国内邮箱发信后,中国国内邮箱用户收到的邮件内容均为aaazzzaaazzzaaazzzaaazzzaaazzz
对此,新浪的解释是「近期互联网国际线路出口不稳定」;而万网客户服务中心的解释是「近期国内互联网国际出口存在未知的技术问题」[108]。而网民普遍认为这与防火长城有关[106]。
2014年12月26日,有很多中国大陆网民反映说一度无法通过客户端登录到Gmail。在此之前,国内一些用户可以通过IMAP、SMTP和POP3接收、下载邮件;据路透社报道谷歌旗下的Gmail业务已经被当局封锁。[109]12月30日,Gmail的邮件服务器已在中国大陆境内恢复部分功能。[110][111]但Gmail网页版至今仍被屏蔽。