Geneva是一款人工智能工具及自由軟件,能利用審查器中的漏洞規避互聯網審查[1]。2019年11月,Geneva由馬里蘭大學的 Kevin Bock 等人和伯克利大學的蕭強在2019 ACM SIGSAC計算機和通信安全大會 (CCS 』19[2])上發佈這款軟件。Geneva與其他突破網絡審查的方案不同,無需依賴比如 Tor、VPN等等位於審查國境外的支援,而僅僅運作於連接的一端(服務端或客戶端)[3][1]。其名稱來自 Genetic Evasion (遺傳學規避)的縮寫[4][5]。
![]() |
算法
Geneva 運行在客戶端或服務端,並接管作業系統的流量,在報文發出或接收前按照「策略」修改報文。由於深度包檢測系統作為中間盒,對特定封包的處理和目標主機有所不同,通過發送特製報文,其維持的TCP狀態可以和真正的TCP狀態「脫同步」(desync),從而使審查中間盒檢測不到真的TCP狀態,規避審查。
其以「策略DNA」命名修改方法。Geneva 的策略由一組 (tigger, 行为树)
構成。匹配到相應 trigger 的封包(比如所有設置有ACK flag的TCP包)會用相應的行為樹修改。Geneva 可以進化 trigger、行為樹的結構和特定 action 本身[2]。
下面是 trigger、action 和行為樹的結構。
Trigger 包含封包頭部的特定信息,當匹配時封包修改就會執行。
Trigger 由以下語法構成:
[PROTOCOL:FIELD:VALUE]
比如[TCP:flags:R]
會匹配所有帶有 RST flag 設置的 TCP 包。Geneva 需要精確的匹配,比如[TCP:flags:RA]
不會匹配到僅設置了 RST flag 的 TCP 包。
封包級的行為分為 4 類[2]:
duplicate(A1, A2)
生成副本,然後向原來的包執行 A1 行為組,然後向副本執行 A2 行為組。
fragment{protocol:offset:inOrder}(A1, A2)
在特定 offset 分片(IP 協議)或者分段(TCP 協議),然後向第一個碎片執行A1行為組,向第二個碎片執行A2行為組。可選地,按順序(inOrder)發送它們。
tamper{protocol:field:mode[:newValue]}(A1)
修改封包的特定 field 的特定值,然後向其執行A1行為樹。tamper 修改後會重新計算 checksum 或者 length,除非指令本來就要修改它們。
注意,如果設定的 field 在原包中本來就不存在,Geneva 會加入它們。tamper 有兩種模式:replace 和 corrupt 。
replace:newValue
將特定 field 的值設定為 newValue 。 corrupt
將特定 field 的值設定為相同 bitsize 的隨機值(每次行為都生成新的隨機值)。
drop
丟棄封包。
Geneva 的 actions 以二叉樹形式呈現:duplicate
和 fragment
都有 2 個子樹;tamper
有一個:drop
沒有子樹。每個匹配的封包從根部開始按照順序執行修改。[2]
一組 (trigger, action tree) 稱為森林,策略中可以混合許多森林。
Geneva 可以修改入站和出站的封包。因此某策略由兩個部分組成:分別包括 trigger 和 action tree 的兩個森林。總體來說表示是這樣: outbound-forest \/ inbound-forest
[TCP:flags:S]-
duplicate(
tamper{TCP:flags:replace:SA}(
send),
send)-| \/
[TCP:flags:R]-drop-|
此策略有一個出站樹和一個入站樹。第一個(出站)先生成 SYN 包的兩個副本,然後將第一個副本的 TCP flag 替換為 SYN/ACK,第二個拷貝不變,然後發送。在入站樹,RST包會引發 action tree,將其丟棄。
Geneva 通過進化(evolution)發現新策略,在許多世代(generation)中完成。每一世代都包含許多個體(individual)(即策略,包含入站和出站行為樹的森林),進化通常包括三步:[2]
- 變異(mutation)和交叉(crossover)
- 適應度(fitness)分析
- 對個體的選擇(selection)
duplicate
變異改換子樹的順序 (i.e., duplicate(A1, A2) → duplicate(A2, A1)).
fragment
變異改變協議(IP分片或TCP分段)、碎片的順序或者 fragmentation index。
tamper
變異取決於其模式:replace
模式變異可以改變「修改為」的值,corrupt
模式的變異可以改變它填充的 field。每個模式可以互相變異為另一種。
drop
不支持變異。
和變異不同,它只隨機擾亂單個的策略或者行為樹。交叉是在兩個個體之間的生育(breeding)過程,從種群池中隨機選取2個體,然後發生以下之一。[2]
- 行為森林(action forest)中的所有樹隨機交換(swap)
- 每個森林中的一個隨機的樹互相交配(mate)
交配指,每個樹隨機選取一個行為,兩個行為所在的子樹互相交換。如果每個某個方向的行為森林僅有一個樹,則使用第二個機制。
實用
研究人員在介紹的 Geneva 的論文中聲稱其可以在中華人民共和國、印度和哈薩克斯坦的互聯網審查環境下工作[2]。
- Geneva 的另一次使用是為規避中華人民共和國的互聯網審查器—防火長城對加密伺服器名稱指示(ESNI)的封鎖[6],後者也是一種突破網絡審查的方案,其可以規避防火長城的深度包檢測[6]。2020年8月,研究人員在48小時的時間裏,從客戶端和伺服器端對Geneva進行了訓練。總共發現了6種策略來打敗對ESNI的封鎖機制。其中有4個可以在伺服器端使用,所有6個都可以在客戶端使用。[7]