初窥万花筒,浅析Lantern背后的Kaleidoscope设计

近日一款叫做Lantern的P2P网络封锁突破工具进入了中国用户的视线,以其“通过信任圈子”传播服务信息的特色作为主要卖点,对抗见洞插针(probing)的防火墙系统。若要明白这款服务高调挑战防火墙背后的理由,还得先从它的核心技术Kaleidoscope说起。

Kaleidoscope简介

Kaleidoscope是一个P2P中继系统,主要用途是让被封锁网络域内的用户能访问到被封锁的内容。换而言之,Kaleidoscope的主要目的就是突破网络内容封锁,而非匿名或传输安全性。后者分别是Tor与VPN的主要特性。

在应用需求上的转换使得Kaleidoscope的设计理念也与Tor和VPN大相径庭。作者意识到这个系统最迫切需要解决的问题是来自网络封锁组织的“主动入侵”(伪装成普通用户与伪装成友好中继),因此采取了“有限度服务发现”的策略,以确保在高入侵率与低可用中继数量的情况下,依旧保持较高的网络服务质量。

aleidoscope系统的假设

Kaleidoscope的设计遵循“最大化可用性”的理念,即便它不得不牺牲一定的匿名性。用怪叔叔能理解的话说就是——Kaleidoscope会尽可能帮助你看到页面,但如果页面上是违法的儿童色情,它不会像Tor一样保护你不被抓进去捡肥皂。

所以Kaleidoscope的第一个假设就是——大部分被封锁的内容都不是因为非法而被封锁的,而是因为它和敏感信息很像(例如恰好在同一网址或服务器上),而被误杀。这意味着该系统假设“看这些信息大概是合法的”(灰色地带),如果观看敏感信息在这个国家属于明确的违法行为,则用户需要额外使用匿名与加密工具来保护自己的人身安全。

与此同时,为了对抗来自网络封锁方的检测与入侵,Kaleidoscope需要非封锁域内有足够的中继出口,否则网络封锁方可能使用流量检测发现并封堵这些中继。但中继出口毕竟是可遇不可求的东西(就像没被封的Tor Bridge一样),因此Kaleidoscope尝试利用现实中的人际关系与有限服务发现技术来平衡“发现”与“隐蔽”的跷跷板。

Kaleidoscope的第二个假设是——网络内的有足够多的可信中继,无论是否为出口。这非常重要,因为在这个系统里,入侵者需要获得相当的占比才能取得流量检测上的优势(以有效封锁中继出口)。简单而言,假如安全入侵率为1%,则在1000人的网络里入侵者需要拥有10个伪装节点,而在10万人的网络里它需要1000个节点。这也解释了为什么Lantern作为一个分布式网络,比Tor更擅长利用、更依赖与人多势众的力量以达到自我保护的目的。

有趣的是,Kaleidoscope的最后一个假设,是最贴近GFW属性的中国特色。作者认识到网络封锁方掌控着网络架构的最终控制权。也就是说,假如封锁方来狠的,直接拔网线,禁止加密链接或使用白名单,则任何基于这些网络架构的工具都将失败。

因此Kaleidoscope系统假设与网络封锁方周旋的上策不是和它对扛加密与匿名技术,而是如何将自己与普通流量混淆起来,增加封锁方的经济成本——让封锁方不得不冒增大误封概率的险,并增加封锁需要的人力与硬件成本。这个系统促使封锁方权衡入侵网络的价值与成本,期望达到“知难而退、网开一面”的效果。

Kaleidoscope的基本实现

说了这么多假设,我们再来简单聊聊Kaleidoscope的实际方式。

Kaleidoscope系统针对以下几种不利的网络情景设计——

网络封锁方控制着整个封锁域的网络架构。
网络封锁方使用基于IP表,DNS与DPI的干扰技术。
网络封锁方使用流量分析,积极寻找主要的中继出口。
网络封锁方会伪装成普通用户与友好中继,发掘隐藏中继与监控网络数据。

这意味着Kaleidoscope系统必须满足以下条件——

必须是分布式,否则中枢会被封锁。
必须使用点对点加密,否则链接会因为DPI被重置。
必须使用混淆通信包,否则包本身容易被指纹检测发现。
必须使用远程DNS解析,因为本地的DNS查询结果不可靠。
必须允许多点传递,否则中继出口很容易通过流量分析发现。
必须限制节点发现,否则完整网络很容易被封锁方用大量伪装的用户发掘。
必须合理分配流量,否则封锁方可能伪装成友好中继(甚至中继出口),捕获大量网络信息。

值得一提,所谓“限制节点发现”并不是什么特别神奇的算法。Kaleidoscope系统明确指出,当封锁方入侵网络时,总有一部分中继会被封掉——这时不能允许受影响的用户获得新中继,因为假如这些用户能获得新中继,入侵节点也能,这样整个网络很快就会被入侵节点遍历。

事实上不论用户的机器是否能访问被封锁资源,Kaleidoscope系统只要求他们与现实朋友建立可信链接,此外的事情都由系统通过节点发现与多点传递算法解决。

Kaleidoscope节点剩下的工作是通过中继传播自己,这里的传播包含不少艺术——包括控制一个节点能知道与能自我宣传的数量、允许的最大节点转跳上限等等。主要用于防止入侵者设立虚假的节点关系来套取网络信息与流量(例如设置一个伪装的中继出口,再将设立许多中继传播这个出口到可信网络里)。Kaleidoscope系统的论文花了很大段文字解释选择每个参数的理由与最优数值估计,这里就不逐一详述了。

在具体实现上,Kaleidoscope通过UDP传播自己的信息,数据则通过SSL/TLS完成。Lantern客户端使用了证书固定(certificate pinning),避免证书替换导致的中间人攻击;同时确保SSL符合“正向加密”(PFS)要求,避免大规模的数据保存与延迟破解。

Kaleidoscope的测试结果

论文里的测试使用了两套方案,一是利用现有社交网络的人际关系圈的数据作为原型进行评估,二是作者们寻找几十位朋友参与项目测试。光说数字恐怕会让各位睡着,这里大概总结下结果好了——

在社交网络(可信链接)的测试上,Kaleidoscope系统对可信链接数量较多的网络支持更好。Facebook和LiveJournal就比Flickr要更能面对“高入侵率与低可用中继”的环境。
只要还有30%的中继在线,即便入侵者占据了2%的网络节点,出口只占整个网络的0.5%,Kaleidoscope依旧确保用户在3次节点传递以内访问到被封锁的内容(假设网络流量足够)。10%的用户可以直接连上中继出口,而50%的用户可以通过一次转跳连上中继出口。
在实际应用中,作者们发现,除了使用Kaleidoscope系统翻越本国防火墙,还有不少人用它绕过服务器IP限制。

小结

Kaleidoscope(万花筒)作为一个新的分布式中继系统,在“有限度服务发现”与“确保服务高可用性”上有很好的设计理念——这是Tor乃至VPN都没有的特性,完全符合中国特色的上网环境。

但我们也能预测到Kaleidoscope(以及实现它的Lantern)接下来可能遇到的问题。例如说它们一再强调的“信任链接”假设是否能保持下去,还是会被用户的懒惰与知识匮乏所破坏?以及Kaleidoscope系统里需要用到的动态DNS(需要兼容动态IP,否则网络的拓扑变动太大)会带来什么后遗症?这些都是未知之数。

无论如何,我们还是欢迎新一代工具诞生,希望它们战斗下去。


后注

如果你为防火墙服务,又不懂英文,或着懒得读英文,无意中来到这里——请允许我鼓励你考虑下自己生命的价值。在我看来,你比活在监狱中的贪官奸商更让人恶心。他们好歹接受了贿赂拉动了经济。而你,则是在用纳税人的钱,阻碍一个国家的经济与科技发展。 这不是爱国,这是叛国。


Published: December 03 2013

comments powered by Disqus