西廂計劃

一组用于突破中华人民共和国防火长城审查手段的工具

西廂計劃提供了一組工具,使用戶能夠繞過和規避中華人民共和國防火長城的DNS污染,TCP連接重置[broken anchor]等手段,直接訪問目被封鎖的網站。其命名是為了向中國古典文學史上「翻牆」的先驅者張生致敬。西廂計劃由於各種原因而於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%。

外部連結

參見

參考資料

  1. ^ 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) (美國英語). 
  2. ^ 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) (美國英語).