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 和行为树的结构。
策略DNA
trigger
Trigger 包含封包头部的特定信息,当匹配时封包修改就会执行。
Trigger 由以下语法构成:
比如[TCP:flags:R]
会匹配所有带有 RST flag 设置的 TCP 包。Geneva 需要精确的匹配,比如[TCP:flags:RA]
不会匹配到仅设置了 RST flag 的 TCP 包。
action
封包级的行为分为 4 类[2]:
生成副本,然后向原来的包执行 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 的随机值(每次行为都生成新的随机值)。
丢弃封包。
行为树
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。每个模式可以互相变异为另一种。
交叉
和变异不同,它只随机扰乱单个的策略或者行为树。交叉是在两个个体之间的生育(breeding)过程,从种群池中随机选取2个体,然后发生以下之一。[2]
- 行为森林(action forest)中的所有树随机交换(swap)
交配指,每个树随机选取一个行为,两个行为所在的子树互相交换。如果每个某个方向的行为森林仅有一个树,则使用第二个机制。
实用
研究人员在介绍的 Geneva 的论文中声称其可以在中华人民共和国、印度和哈萨克斯坦的互联网审查环境下工作[2]。
- Geneva 的另一次使用是为规避中华人民共和国的互联网审查器—防火长城对加密服务器名称指示(ESNI)的封锁[6],后者也是一种突破网络审查的方案,其可以规避防火长城的深度包检测[6]。2020年8月,研究人员在48小时的时间里,从客户端和服务器端对Geneva进行了训练。总共发现了6种策略来打败对ESNI的封锁机制。其中有4个可以在服务器端使用,所有6个都可以在客户端使用。[7]
- 在2020年8月末,研究人员也对伊朗的协议过滤器使用了 Geneva ,该国在2020年初部署了协议过滤器,只允许 DNS、HTTP 和 HTTPS 协议,审查任何使用其它协议的连接。 Geneva 在两小时内就发现了三种能挫败协议过滤器的方法[8][9]。
- 2021年8月,研究人员调查防火长城的TCP重置攻击行为时发现其认为存在第二个备用的审查中间件,她们使用 Geneva 规避所有“主”注入器,从而成功测量和研究了“备”注入器。[10][11]用于互联网审查的中间件通常会注入TCP重置包(如防火长城)或屏蔽通知页面(参见韩国网络审查),同年年8月末,在 Geneva 的帮助下,研究人员发现了利用此类中间件的注入行为发起反射放大攻击的方法[12][13]。
参见
参考文献
引用
来源
|
---|
背景 | |
---|
原理 | |
---|
連線软件 | |
---|
匿名代理 | |
---|
相关团体 | |
---|
相關人物 | |
---|
删除线:原开发者停止维护。
|