西厢计划提供了一组工具,使用户能够繞過和规避中华人民共和国防火长城的DNS污染,TCP重置攻击等手段,直接访问目被封鎖的網站。其命名是为了向中国古典文学史上“翻墙”的先驱者张生致敬。西厢计划由於各種原因而於2010年暫停更新,最後發佈的一個版本目前已由於防火长城的更新而無法使用,但在當時的测试中已可以直接訪問YouTube。
計劃與設想
西廂計劃與其他的翻牆工具不同,它並不是代理服務或VPN,而是從技術層面避開防火长城的封鎖手段,如TCP 连接重置、DNS劫持、IP封锁和URL关键字过滤。西厢计划含有三种特性:
*TCP连接混淆:在每次连接中,通过对防火长城的入侵检测系统进行注入,與正常的连接混淆,使得防火长城无法正确解析连接和检测关键词,从而避開關鍵字過濾。
*反DNS劫持:通过匹配防火长城伪包的指纹并将其过滤,從而使一般的DNS解析也能获得正确的结果,但需要使用未受污染的DNS,例如Google Public DNS。
*單向隧道:利用防火長城僅僅對出站的數據包進行過濾的特性,将發出的数据包透過不受過濾的服务器中转,而收到的数据包可直接穿过防火長城到达客户端。這種情況下,由於防火長城无法獲取請求URL,关键词过滤也將失效。當時的測試中,以這種方法觀看經由HTTP協議傳輸的在线视频時,中转服务器仅耗费极小的流量。
技術原理
西厢计划采取了T. Ptacek等在1998年的论文中提出避開入侵检测的注入方法,即发出特制报文,使得这些报文对对方没有效果,但是让入侵检测系统错误地分析协议,从而让其错误地认为连接被提前终止了。由于防火长城的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),论文中提到防火长城在检测到特殊报文时会进入「重同步」状态,显然是当时应对西厢计划的策略。他们提出了绕过防火长城的新策略,新策略的平均成功率在90%以上,最高达到98%。
参见
- Geneva
- GoodbyeDPI
參考資料
外部链接
- [https://web.archive.org/web/20120806111246/http://code.google.com/p/scholarzhang/wiki/README 西廂計劃 Wiki]
*
- 西厢计划 [https://web.archive.org/web/20120905051511/http://code.google.com/p/scholarzhang/ 在 Google Code 的主页], [https://github.com/liruqi/scholarzhang 在GitHub上的备份]
- 西廂計劃第二季 [https://web.archive.org/web/20130731052302/http://code.google.com/p/west-chamber-season-2/ 在 Google Code 的主頁]
- 西廂計劃第三季 [https://web.archive.org/web/20130727100537/https://code.google.com/p/west-chamber-season-3/ 在 Google Code 的主頁],[https://github.com/liruqi/west-chamber-season-3/ 在 GitHub 的主頁]
- [https://blog.youxu.info/2010/03/14/west-chamber/ 西厢计划原理小解]
评论 (0)