西厢计划 编辑
西厢计划提供了一组工具,使用户能够绕过和规避中华人民共和国防火长城的DNS污染,TCP重置攻击等手段,直接访问目被封锁的网站。其命名是为了向中国古典文学史上“翻墙”的先驱者张生致敬。西厢计划由于各种原因而于2010年暂停更新,最后发布的一个版本目前已由于防火长城的更新而无法使用,但在当时的测试中已可以直接访问YouTube。
计划与设想
编辑西厢计划与其他的翻墙工具不同,它并不是代理服务或VPN,而是从技术层面避开防火长城的封锁手段,如TCP 连接重置、DNS劫持、IP封锁和URL关键字过滤。西厢计划含有三种特性:
- TCP连接混淆:在每次连接中,通过对防火长城的入侵检测系统进行注入,与正常的连接混淆,使得防火长城无法正确解析连接和检测关键词,从而避开关键字过滤。
- 反DNS劫持:通过匹配防火长城伪包的指纹并将其过滤,从而使一般的DNS解析也能获得正确的结果,但需要使用未受污染的DNS,例如Google Public DNS。
- 单向隧道:利用防火长城仅仅对出站的数据包进行过滤的特性,将发出的数据包透过不受过滤的服务器中转,而收到的数据包可直接穿过防火长城到达客户端。这种情况下,由于防火长城无法获取请求URL,关键词过滤也将失效。当时的测试中,以这种方法观看经由HTTP协议传输的在线视频时,中转服务器仅耗费极小的流量。
技术原理
编辑西厢计划采取了T. Ptacek等在1998年的论文[1]中提出避开入侵检测的注入方法,即发出特制报文,使得这些报文对对方没有效果,但是让入侵检测系统错误地分析协议,从而让其错误地认为连接被提前终止了。由于防火长城的TCP栈非常简陋,因此可利用此特性,对所有遵守RFC的目标主机都采取特定措施,让防火长城无法正确解析TCP连接,从而避开关键词监测。
局限
编辑西厢计划的连接混淆功能对于基于IP地址的封锁和其他无状态的封锁不能生效,因为它需要通过注入攻击改变防火长城的连接状态,如果封锁与连接状态无关便无法进行连接混淆。另外,连接混淆的实现假设连接双方遵守RFC。有一些目标主机或者防火墙不遵守RFC,可能导致正常不含关键词的连接被对方终止或者忽略,这可以经由使用ipset把作用范围限制在需要的地址段而避免。
西厢计划目前依赖Linux内核的Netfilter功能,因此要求用户平台是Linux,其他平台的移植项目功能均有所缺失。Windows平台上曾有一个基于WinPcap的编译版本实现了连接混淆的部分,但已不再维护。
由于防火长城的伪包指纹经常变动,因此用户需要不断更新才能正常使用反DNS劫持。
后续
编辑西厢计划后来发展出第二季与第三季两个项目。第二季实现了单向隧道,而第三季则是对西厢计划的后续开发,但两者都是独立的项目。
在ACM IMC 2017会议上,加利福尼亚大学河滨分校的研究人员发表了论文《Your State is Not Mine: A Closer Look at Evading Stateful Internet Censorship》(PDF)[2],论文中提到防火长城在检测到特殊报文时会进入“重同步”状态,显然是当时应对西厢计划的策略。他们提出了绕过防火长城的新策略,新策略的平均成功率在90%以上,最高达到98%。
参见
编辑参考资料
编辑- ^ Thomas H. Ptacek, Tomothy N. Newsham. Insertion, Evasion, and Denial of Service: Eluding Network Intrusion Detection (PDF). 1998 [2021-04-14]. (原始内容存档 (PDF)于2018-01-07) (美国英语).
- ^ Wang, Zhongjie. Your State is Not Mine: A Closer Look at Evading Stateful Internet Censorship (PDF). 2017 [2021-04-14]. doi:10.1145/3131365.3131374. (原始内容存档 (PDF)于2018-06-20) (美国英语).
外部链接
编辑- 西厢计划 Wiki
- 自由亚洲电台. "西厢计划":中国破网技术新突破(组图). 2010-03-11 [2010-03-18]. (原始内容存档于2020-07-01).
- 西厢计划 在 Google Code 的主页, 在GitHub上的备份 (页面存档备份,存于互联网档案馆)
- 西厢计划第二季 在 Google Code 的主页
- 西厢计划第三季 在 Google Code 的主页,在 GitHub 的主页 (页面存档备份,存于互联网档案馆)
- 西厢计划原理小解 (页面存档备份,存于互联网档案馆)