Shadowsocks
原作者 | Clowwindy |
---|---|
首次發佈 | python 2012年4月20日[1] |
目前版本 | |
原始碼庫 | |
作業系統 | 類Unix系統 Microsoft Windows Android IOS |
類型 | 通訊協定 自由軟件 突破網絡審查 |
許可協定 |
|
網站 | shadowsocks |
Shadowsocks(簡稱SS)是一種基於Socks5代理方式的加密傳輸協定,也可以指實現這個協定的各種開發包。目前有各種版本使用Python、C、C++、C#、Go語言、Rust等程式語言開發,大部分主要實現(iOS平台的除外)採用Apache許可證、GPL、MIT許可證等多種自由軟件許可協定開放原始碼。Shadowsocks分為伺服器端和用戶端,在使用之前,需要先將伺服器端程式部署到伺服器上面,然後通過用戶端連接並建立本地代理。
在中國大陸,本工具廣泛用於突破防火長城(GFW),以瀏覽被封鎖、封鎖或干擾的內容。2015年8月22日,Shadowsocks原作者Clowwindy稱受到了中國警方的壓力,宣佈停止維護此計劃(計劃)並移除其GitHub個人頁面所儲存的原始碼[6]。
歷史
Shadowsocks最早由V2EX用戶「clowwindy」2012年4月發佈在該討論區[1]。
計劃轉手
2015年8月22日,其作者Clowwindy在GitHub上稱,警察在兩日前要求他停止開發Shadowsocks計劃並刪除其所有代碼。[7]之後,作者停止維護Shadowsocks,其GitHub計劃頁面已被清空。[8][9]消息傳出後,許多中國大陸和外國開發商,以及Shadowsocks用戶,在GitHub中對作者表示了致謝,對已清空原始碼的計劃頁面加星標,因此在當時Shadowsocks反而成為了GitHub上的「熱門計劃(Trending)」。[10]
此事件的插曲是,該起事件本以為是當局主動出擊,但另有消息據稱,原作者曾作出的「透露中國社會現狀」的發言或是對其態度不滿,可能遭到某些翻牆用戶,向中華人民共和國政府檢舉,從而為後來被要求撤下計劃原始碼的事件埋下伏筆,而類似的因個人網絡發言而被同業檢舉的事件在中國大陸也「時有發生」。[11]據網民整理,原作者更斥責自己的工作成果被他人挪用,也出現被許多冒名者修改後的自主版本,拿出更強的產品只為了專賣來替自己賺錢,後來原作主張,他以為那種大家一起不謀私的理想,做好SS社群的共用主義精神,在中國連出現的跡象都沒有。據他原話:
最適合這個民族的其實是一群小白圍着大大轉,大大通過小白的誇獎獲得自我滿足,然後小白的吃喝拉撒都包給大大解決的模式。通過這個計劃我感覺我已經徹底認識到這個民族的前面為什麼會有一堵牆了。沒有牆哪來的大大。所以到處都是什麼附件回帖可見,等級多少用戶組可見,一個討論區一個大大,供小白跪舔,不需要政府造牆,網民也會自發造牆。這尼瑪連做個翻牆軟件都要造牆,真是令人嘆為觀止。這是一個造了幾千年牆的保守的農耕民族,缺乏對別人的基本尊重,不願意分享,喜歡遮遮掩掩,喜歡小圈子抱團,大概這些傳統是改不掉了吧。
他稱多數用戶也是以一種自立態度,誰都可以求,而利用完做到解決問題就直接走人來的,而我維護的過程中,感覺主動幫助項目的同學並不多,匿名提問還不想充分提供資訊。對比下國外的開源互助的社會體制差好遠。他最後表示自己遲早要移民離開中國,在維護這些計劃上,已經越來越艱難無趣,而以後也不會想再做了。
8月25日,另一個用於突破網絡審查的GoAgent計劃也被作者自行刪除。刪除後幾小時之內,GitHub遭到了來自中國大陸的DDoS攻擊。據報這次攻擊與中華人民共和國政府有關,因為中國政府此前曾要求GitHub移除兩個對抗網絡審查的項目但沒有被接受。[12]
2015年8月28日,電子前哨基金會針對Shadowsocks和GoAgent被刪除一事發表評論,對中華人民共和國政府針對用於突破網絡封鎖軟件作者的打擊表示「強烈譴責」。[6]
不過Git倉庫的日誌顯示該項目被移除以前就有大量的復刻副本,不少副本仍然有用戶維護。所以儘管Shadowsocks計劃頁經過此次打擊,也仍陸續恢復了內容,甚至本身並轉交由多人維護成不同版本,各大Linux發行版的軟件倉庫均有各式Shadowsocks的實作的套件仍持續更新可用,目前的Shadowsocks更新基本上來自這些作者執行。
執行原理
Shadowsocks的執行原理與其他代理工具基本相同,使用特定的中轉伺服器完成數據傳輸。例如,用戶無法直接訪問Google,但代理伺服器可以訪問,且用戶可以直接連接代理伺服器,那麼用戶就可以通過特定軟件連接代理伺服器,然後由代理伺服器取得網站內容並回傳給用戶,從而實現代理上網的效果。伺服器和用戶端軟件會要求提供密碼和加密方式,雙方一致後才能成功連接。連接到伺服器後,典型情況下用戶端會在本機構建一個本地Socks5代理(但也有構建成VPN、透明代理等形式)。瀏覽網絡時,用戶端通過這個Socks5(或其他形式)代理收集網絡流量,然後再經混淆加密傳送到伺服器端,以防網絡流量被辨識和攔截,反之亦然。
特點
- Shadowsocks使用自行設計的協定進行加密通訊。[13]加密演算法有AES-GCM、ChaCha20-Poly1305、2022-BLAKE3-AES-GCM等,除建立TCP連接外無需握手,每次請求只轉發一個連接,無需保持「一直連線」的狀態,因此在流動裝置上相對較為省電。
- 所有的流量都經過演算法加密,允許自行選擇加密演算法。
- Shadowsocks通過非同步I/O和事件驅動程式執行,響應速度快。
- 用戶端覆蓋多個主流作業系統和平台,包括Windows、macOS、Android、Linux和iOS系統和路由器(OpenWrt)等[14]。
安全性
Clowwindy稱Shadowsocks的最初只是「自用」,用來「翻牆」[1],而不是提供密碼學意義的安全,所以Shadowsocks自行設計的加密協定對雙方的身份驗證僅限於預共用金鑰,亦無完全前向保密,也未曾有安全專家公開分析或評估協定及其實現。
一個用 Python 寫的 socks 加密代理。加密方法很簡單,不過欺騙 GFW 足夠了。
——clowwindy[1]
Shadowsocks的目標不在於提供完整的通訊安全機制,主要是為了協助上網用戶在嚴苛的網絡環境中突破封鎖,不能替代TLS或者VPN。
AEAD加密方式(AES-GCM、Chacha20-poly1305)在SIP004[15]提案提出並在SIP007提案[16]實現,這些加密方式被認為可以提供密碼學意義的安全(「保密性,完整性,可用性」)[17],之前AES CFB、AES CTR、RC4、Chacha20等沒有認證的加密方式仍在一部分實現中被允許存在[17]。Shadowsocks-windows已經移除了非AEAD加密方式的支援。
Shadowsocks多次被提到協定設計問題,有被主動探測的風險:
- 2015年,ShadowsocksR的原開發者breakwa11提到原協定設計導致無法驗證封包完整性而被主動探測的風險,之後Shadowsocks的後繼開發者madeye引入One Time Auth(OTA)方案試圖解決,但breakwa11指出還是不能避免主動探測風險,最終引入AEAD加密方式並放棄OTA方案。
- 2021年2月28日,GitHub用戶RPRX提出Shadowsocks AEAD加密方式設計存在嚴重漏洞,無法保證通訊內容是可靠的,隨後開發者驗證了本地echo自交思路的可行性。3月1日,RPRX又提出可利用伺服器端防重放機制使Shadowsocks、Vmess等未知流量代理實質性失效,隨後討論區中的一個名為gfw-report的用戶驗證了這一思路的可行性。
外掛程式及流量混淆
2017年9月21日,一篇名為《The Random Forest based Detection of Shadowsock's Traffic》的論文在IEEE發表,該論文介紹了通過隨機森林演算法檢測Shadowsocks流量的方法,並自稱可達到85%的檢測精度[18],雖然該論文的有效性遭到網友質疑。但是使用機器學習來識別網絡流量特徵的做法被認為是可行的,而且還適用於任何網絡代理協定而不僅僅侷限於Shadowsocks。[19]
Shadowsocks在SIP003提案[20]中支援了外掛程式,外掛程式讓Shadowsocks的流量可以通過不同的外掛程式進行混淆加密或其他處理。目前使用較多的外掛程式有v2ray-plugin、simple-obfs等。
實作
目前Shadowsocks有多個實作支援,以自由軟件形式發佈的主要有
- 原始shadowsocks(以Python語言編寫)
- shadowsocks-libev(C語言編寫,目前僅修復BUG)
- openwrt-shadowsocks
- shadowsocks-rust(Rust語言編寫,libev版本停止新功能開發之後的繼任活躍開發版本)
- go-shadowsocks2
- gost[21]
- libQtShadowsocks
- shadowsocks-qt5(用戶端)
- shadowsocks-android(用戶端)
- shadowsocks-windows(用戶端)
- ShadowsocksX-NG (用戶端)
- ShadowsocksR(Shadowsocks的第三方分支版本)
- Outline[22]
- V2Ray[23]
- Brook[24]
- Trojan[25]
- Clash[26]
ShadowsocksR
ShadowsocksR(簡稱SSR)是網名為breakwa11的用戶發起的Shadowsocks分支,在Shadowsocks的基礎上增加了一些資料混淆方式,稱修復了部分安全問題並可以提高QoS優先級。[27]後來貢獻者Librehat也為Shadowsocks補上了一些此類特性,甚至增加了類似Tor的可插拔傳輸層功能。[28]
ShadowsocksR開始時曾有過違反GPL、發放二進制時不發放原始碼的爭議,使得原開發作者不滿。不過後來ShadowsocksR計劃由breakwa11轉為了與Shadowsocks相同的GPL、Apache許可證、MIT許可證等多重自由軟件許可協議。
2017年7月19日,ShadowsocksR作者breakwa11在Telegram頻道ShadowsocksR news裏轉發了深圳市啟用SS協定檢測的訊息並被大量用戶轉發,引發恐慌。7月24日,breakwa11發佈了閉源的SS被動檢測程式,引發爭議[29]。7月27日,breakwa11遭到自稱「ESU.TV」(惡俗TV)的不明身份人士人身攻擊,對方宣稱如果不停止開發並阻止用戶討論此事件將發佈更多包含個人私隱的資料[30],隨後breakwa11表示遭到對方人肉搜尋並公開個人資料的是無關人士,為了防止對方繼續傷害無關人士,breakwa11將刪除GitHub上的所有代碼、解散相關交流群組,停止ShadowsocksR計劃。但計劃已被多人fork,並有人在其基礎上繼續發佈新的版本,例如較為知名的SSRR(ShadowsocksRR)。
參考資料
- ^ 1.0 1.1 1.2 1.3 clowwindy. 发一个自用了一年多的翻墙工具 shadowsocks. 2012-04-20. (原始內容存檔於2014-07-19).
- ^ Release 4.4.1.0.
- ^ Release v5.3.3 · shadowsocks/shadowsocks-android · GitHub.
- ^ Release v1.10.2 · shadowsocks/ShadowsocksX-NG · GitHub.
- ^ Release 1.18.3. 2024年4月21日 [2024年5月5日].
- ^ 6.0 6.1 O'Brien, Danny. Speech that Enables Speech: China Takes Aim at Its Coders. 電子前哨基金會. [2016-05-28]. (原始內容存檔於2016-06-24) (英語).(中文翻譯)
- ^ clowwindy. Adopting iOS 9 network extension points · Issue #124 · shadowsocks/shadowsocks-iOS. GitHub. [2015-08-22]. (原始內容存檔於2015-08-22) (英語).
Two days ago the police came to me and wanted me to stop working on this. Today they asked me to delete all the code from GitHub. I have no choice but to obey.
- ^ clowwindy. remove · shadowsocks/shadowsocks@938bba3. GitHub. 2015-08-22 [2015-08-22]. (原始內容存檔於2015-08-22).
- ^ clowwindy. shadowsocks/shadowsocks. GitHub. 2015-08-22 [2015-08-22]. (原始內容存檔於2015-08-22) (英語).
- ^ percy. 中国开发者被警察要求删除软件. GreatFire. 2015-08-26 [2016-01-16]. (原始內容存檔於2015-10-02) (中文).
- ^ Vergil. 翻墙=犯法?从许东翻墙第一案说起. pao-pao.net. [2016-08-18]. (原始內容存檔於2016-08-08).(中文)
- ^ Catalin Cimpanu. Recent GitHub DDOS Linked to Chinese Government and Two GitHub Projects. Softpedia. 2015-08-29 [2016-01-16]. (原始內容存檔於2016-05-06) (英語).
- ^ Shadowsocks - spec. [2015年12月11日]. (原始內容存檔於2015年12月4日) (英語).
- ^ Shadowsocks - Clients. [2015-09-05]. (原始內容存檔於2015-09-04) (英語).
- ^ Mygod. SIP004 - Support for AEADs implemented by large libraries. 2017-01-12 [2021-06-14]. (原始內容存檔於2020-10-16).
- ^ riobard. SIP007 - Per-session subkey. 3017-02-10 [2021-06-14]. (原始內容存檔於2020-10-16).
- ^ 17.0 17.1 AEAD Ciphers. Shadowsocks.org. [2021-06-14]. (原始內容存檔於2021-02-26).
- ^ Deng, Z.; Liu, Z.; Chen, Z.; Guo, Y. The Random Forest Based Detection of Shadowsock's Traffic. 2017 9th International Conference on Intelligent Human-Machine Systems and Cybernetics (IHMSC). August 2017, 2: 75–78 [2018-02-05]. doi:10.1109/IHMSC.2017.132. (原始內容存檔於2018-02-06).
- ^ VV, 特約撰稿人. 道高一尺,牆高一丈:互聯網封鎖是如何升級的. 端傳媒. [2018-04-07]. (原始內容存檔於2018-06-28) (中文(香港)).
- ^ madeye. SIP003 - A simplified plugin design for shadowsocks. GitHub. 2017-01-04 [2021-06-14]. (原始內容存檔於2020-10-03).
- ^ Shadowsocks / GOST v2. [2022-12-02]. (原始內容存檔於2022-12-02).
- ^ Outline - Making it safer to break the news. getoutline.org. [2018-04-06]. (原始內容存檔於2018-03-30) (英語).
- ^ Shadowsocks · Project V 官方网站. v2ray.com. [2020-06-11]. (原始內容存檔於2020-06-11).
- ^ txthinking/brook. GitHub. [2018-06-05]. (原始內容存檔於2018-06-17) (英語).
- ^ trojan. trojan-gfw. trojan. [2021-02-15]. (原始內容存檔於2021-05-30).
- ^ Fndroid, Clash for Windows, 2022-11-17 [2022-11-17], (原始內容存檔於2023-01-14)
- ^ ShadowsocksR. breakwa11.github.io. [2017-03-24]. (原始內容存檔於2017-02-07).
- ^ Shadowsocks Plugin Spec. shadowsocks.org. [2017-03-24]. (原始內容存檔於2017-03-25) (英語).
- ^ breakwa11. SS被动检测1.0版 #868. GitHub. [2017-06-24]. (原始內容存檔於2017-07-25).
- ^ CK、吳晶、瑞哲. 国内网络青年开发翻墙软件遭“人肉”威胁. Radio Free Asia. 2018-01-25 [2019-03-31]. (原始內容存檔於2019-03-31).