跨過GFW重置TCP連接通向自由網路的可行途徑
原文「對TCP連接被重置解決方案的探究――跨過GFW通向自由網路的可行途徑」轉自IGFW。
TCP 三次握手:TCP 連接是通過三次握手進行初始化的。三次握手的目的是同步連接雙方的序列號和確認號並交換 TCP 窗口大小信息。以下步驟概述了通常情況下客戶端計算機聯繫伺服器計算機的過程:
1. 客戶端向伺服器發送一個SYN置位的TCP報文,其中包含連接的初始序列號x和一個窗口大小(表示客戶端上用來存儲從伺服器發送來的傳入段的緩衝區的大小)。
2. 伺服器收到客戶端發送過來的SYN報文後,向客戶端發送一個SYN和ACK都置位的TCP報文,其中包含它選擇的初始序列號y、對客戶端的序列號的確認x+1和一個窗口大小(表示伺服器上用來存儲從客戶端發送來的傳入段的緩衝區的大小)。
3. .客戶端接收到伺服器端返回的SYN+ACK報文後,向伺服器端返回一個確認號y+1和序號x+1的ACK報文,一個標準的TCP連接完成。
TCP 使用類似的握手過程來結束連接。這可確保兩個主機均能完成傳輸並確保所有的數據均得以接收。
中國的網路環境很複雜,同時中國也是對網際網路高度控制的國家之一,當然僅限於大陸。而控制中國網民自由上網的網路海關正是大名鼎鼎的 GFW(Great Fire Wall,長城防火牆),GFW的工作原理就是重置TCP連接,那麼在此就不得不提一下TCP協議三次握手的簡單原理。
根據TCP協議的規定,用戶和伺服器建立連接需要三次握手:第一次握手用戶向伺服器發送SYN數據包發出請求(SYN, x:0),第二次握手伺服器向用戶發送SYN/ACK數據包發出回應(SYN/ACK, y:x+1),第三次握手用戶向伺服器發送ACK數據包發出確認(ACK, x+1:y+1),至此一個TCP連接建立成功。其中x為用戶向伺服器發送的序列號,y為伺服器向用戶發送的序列號。
現在我們來談談GFW的工作原理。GFW負責監控全國的TCP連接,當發現敏感詞時就會介入,將伺服器發回的SYN/ACK包改成SYN/ACK, Y:0,這代表TCP連接被重置,用戶便主動放棄了連接,提示連接失敗。可以看出,其實GFW就是在欺騙用戶,讓用戶誤認為伺服器拒絕連接,而主動放棄繼 續與伺服器連接。
因為GFW是工作在TCP協議層上,這看似堅不可破,可我們不應忽略的是,檢測全國TCP連接可不是一個簡單的工作,即便是上千台的分散式計算機也 未必有能力逐個TCP連接監控,那麼GFW是如何做到的呢?很簡單,GFW只在連接發起時監測第一個TCP連接,這樣就可大大提高GWF的工作性能。但就 是這樣一個提供性能的方法卻給GFW留下了一個致命的漏洞,我今天探討的方案也正是建立在這個漏洞基礎上。
首先我們正常發送SYN數據包到伺服器進行第一次握手,之後伺服器發回SYN/ACK到用戶進行第二次握手,接下來,用戶繼續發送第一次握手時的 SYN數據包,此時GFW根據TCP協議規則認為本次TCP連接結束,停止了對本次TCP連接用戶的監視,而伺服器知道TCP連接尚未建立怎麼會結束,所 以忽略了這個數據包而不受影響。但我們至此只完成了工作的一半,因為GFW是雙向監視的,伺服器依然被GFW監控,如果伺服器能發回一個連接重置的數據 包,GFW也會停止對伺服器的監視。雖說來容易,可伺服器並不收用戶控制,如何才能讓伺服器隨用戶的意願發送連接重置數據包呢?根據TCP協議規則,如果 用戶發回的數據包有錯誤,伺服器就會發回連接重置數據包,前文提到,第三次握手時用戶發送的ACK數據包應該是ACK: x+1:y+1,可如果用戶發送的是ACK: x+1:y,那麼伺服器自然會發生連接重置數據包。當GFW收到這個包時,認為伺服器也重置了此連接也就不再監視伺服器了。但這個連接重置包被用戶接收後 不能主動放棄連接,這樣就需要用戶忽略這個重置數據包,不過用戶這邊我們說了算,怎麼搞都行。至此,GFW不再監視本次TCP的用戶和伺服器,雙方可以自 由通信。
下面我再總結下這個TCP連接的過程:
用戶-[SYN, x:0]->GFW-[SYN, x:0]->伺服器{第一次握手}
用戶<-[SYN/ACK, y:x+1]-GFW<-[SYN/ACK, y:x+1]-伺服器{第二次握手}
用戶-[RST, x:0]->GFW[認為用戶TCP連接結束]-[RST, x:0]->伺服器{忽略}
用戶-[ACK, x+1:y]->GFW[停止監視用戶]-[ACK, x+1:y]->伺服器{判斷是壞包}
用戶{忽略}<-[RST, y:0]-GFW[認為伺服器重置連接]<-[RST, y:0]-伺服器{重置連接}
用戶-[ACK, x+1:y+1]->GFW[停止監視伺服器]-[ACK, x+1,y+1]->伺服器{第三次握手}
這樣,一個三次握手的過程被我們改成了六次握手,成功騙過了GFW,好戲正式開始了。
下面再來談談GFW的一些事吧。GFW並不是我們想像中的那麼強大,相反它漏洞百出,非常脆弱。因為GFW是基於分散式的,所以修補漏洞十分困難, 如果GFW更改監視規則而監視所有TCP數據包則會使性能大大降低。另外GFW會記錄下訪問過敏感信息的ip一段時間,使該ip無法繼續與相應伺服器連 接,那麼這個記錄ip的緩存區就一定有上限,自然就有溢出的可能,如果大量ip訪問敏感信息,GFW就會因為這個緩存區溢出而無法檢視其他的TCP。沒 錯,這個其實就是DDoS,2010年1月3日前後的「解封」也聽說是與北京GFW被DDoS有關。聽說GFW有學生參與,而這些築牆的哈工大和北郵的同 學們能力不一,導致GFW模組質量參差不齊,這也是GFW存在漏洞的重要因素之一。
但最終技術無罪,只是技術被政治所利用才是最大的悲哀。其實不止是中國,美國用來做網路深度檢測的CNCI,預算300億美元,是GWF的多少倍。區別只在於中國的執事者做事太笨拙而又沒有底線,導致普通人也能看出破綻。
最後,對這個方案的探索體現了人們對技術的熱衷,而對翻牆的研究則體現了人們對事實與自由的追求。而不論是從對技術熱衷的角度還是從對事實與自由追求的角度,我都很願意成為他們中的一員。
原文標題:跨過GFW重置TCP連接通向自由網路的可行途徑 - 美博園
美博園文章均為「原創 - 首發」,請尊重辛勞撰寫,轉載請以上面完整鏈接註明來源!
軟體著作權歸原作者!個別轉載文,本站會註明為轉載。
網 友 留 言
2條評論 in “跨過GFW重置TCP連接通向自由網路的可行途徑”這裡是你留言評論的地方
nice post. thanks.
朋友也是這方面的專家了,歡迎來到美博園。情況基本上是你說的那樣,只是很抱歉目前朋友還不想公開加密方式,正如你所知道的,一旦公布了可能很快就會被破解,這次只是設計了簡單網頁進行廣泛測試,不久再推出正式網站,PP優點是簡便,如能推廣何不是廣大網民之福。