Shadowsocks是如何被检测和封锁的

在中国,Shadowsocks 是最流行的翻墙软件之一。从2019年5月起,大量的中国网民反馈他们的Shadowsocks服务器被封锁了。这篇报告是我们对中国的防火长城(GFW)是如何检测和封锁Shadowsocks及其衍生翻墙软件的初步调查结果。通过网络测量实验,我们发现GFW会被动的监视网络流量从而识别出疑似Shadowsocks的网络流量;然后对对应的Shadowsocks服务器进行主动探测已验证其怀疑的正确与否。Shadowsocks的封锁程度可能受人为因素在政治敏感时期的控制。我们提出一种规避方法,即改变网络数据包在Shadowsocks握手阶段的大小。这种方法被证明可以在现阶段有效减少主动探测。我们会继续与开发者合作让Shadowsocks及其衍生工具变得更加难以封锁。

主要发现

  • 防火长城(GFW)已经启用主动探测的手段来识别Shadowsocks服务器。GFW采用被动监测与主动探测相结合的方式:其首先监测网络连接找出疑似Shadowsocks的连接,然后再把自己伪装成一个客户端,尝试对疑似Shadowsocks的服务器进行连接,从而验证自己的猜测。我们知道GFW可以对多种翻墙工具进行主动探测,现在Shadowsocks也成了其中一员。
  • 主动探测系统可以发送多种不同类型的探测。其中一些探测是基于对之前合法客户端建立的连接的重放;而另一些探测则似乎与之前的合法连接并不相关。
  • 如同之前的研究发现,主动探测来自大量不同的源IP地址。这使得基于源IP来过滤GFW探测包不太可行。亦如之前的研究发现,网络层面的侧通道显示这些来自数以千计的IP地址的主动探测并非完全相互独立,而是源于GFW的集中控制。
  • 很少量的(大于13个)合法连接即足以触发对于Shadowsocks服务器的主动探测。只要合法客户端还在使用服务器,主动探测就会持续下去。GFW通常在合法连接到达服务器后的数秒内发送第一个主动探测。
  • 一旦GFW主动识别出Shadowsocks服务器,GFW可能会丢弃所有发送自服务器IP地址,或服务器Shadowsocks端口的数据包。但GFW也可能不立即采取封锁措施。Shadowsocks的封锁程度可能受人为因素在政治敏感时期的控制。
  • GFW的被动监测模块至少会根据网络数据包的长度来怀疑可疑流量。改变数据包的长度,比如所在服务端安装brdgrd,即可通过干扰被动监测模块对Shadowsocks流量的识别,进而显著减少主动探测的数量。

我们怎么知道的?

我们在境外搭建了自己的Shadowsocks服务器并从中国用客户端连接它们,与此同时,在服务器和客户端两端抓包进行分析。所有的实验都是在2019年7月5号到2019年11月11号之间进行的。其中的绝大部分实验都是在2019年9月16日开始的一次大规模封锁后进行的。
在绝大部分实验中,我们使用了shadowsocks-libev v3.3.1作为客户端和服务端,因为它是一个被积极维护且具有代表性的Shadowsocks实现。我们相信我们所发现的这些弱点在其他Shadowsocks及其衍生工具,如Outline VPN,中同样存在。
若非明确指出,我们未对任何实验中的客户端及服务器的网络功能进行修改,比如更改防火墙的设置。Shadowsocks可以使用不同的加密设置,我们对Stream ciphersAEAD ciphers都进行了测试。

主动探测的一些细节

Shadowsocks是一项加密通讯协议,其数据包的内容被设计得(应)不包含任何固定特征。其两种加密模式都基于一个主密码,两种模式分别为:Stream(不推荐使用) 和 AEAD (推荐)。这两种加密模式虽都要求客户端事先知道主密码;但是Stream加密模式的服务器仅能对客户端进行较弱的验证。除非使用额外的技术手段,两种模式都不能防御对之前发送过的验证数据包的重放攻击。

主动探测的类型及审查者意图

我们目前观察到五种不同的主动探测荷载。
基于重放的探测:
  1. 重放某一合法连接中第一个携带数据的数据包中的荷载。
  2. 重放某一合法连接中第一个携带数据的数据包中的荷载,但更改第0字节。
  3. 重放某一合法连接中第一个携带数据的数据包中的荷载,但更改第0–7和第62–63字节。
看似随机的探测(并非基于我们所观察到的合法连接):
  1. 荷载长度为7到50字节,占所有看似随机的主动探测的70%。
  2. 荷载长度为221字节,占所有看似随机的主动探测的30%。
CDF: Payload Lengths of PSH/ACKs Received by
           Outline Server
我们怀疑GFW的主动探测系统根据服务器对这几种不同类型的主动探测的反馈来判定其是否为Shadowsocks服务器。
Shadowsocks-libev有一个重放过滤器; 但是大多数的Shadowsocks实现则没有。重放过滤器可以防御一模一样的重放(类型1),如果载荷的最初几字节被改变了(类型2和3)那么过滤器就无法防御了。过滤器本身也不够阻止主动探测模块去比较服务器对多种探测的反应。

多少次合法连接就能触发主动探测

对主动探测的触发似乎需要达到一定的阀值。比如在一项实验中,仅仅13次连接就足以引起GFW的怀疑并触发主动探测。初步结果显示,使用了AEAD的Shadowsocks,可能需要稍微多一点点的连接才会触发主动探测。

合法连接与主动探测的关系

我们让客服端每5分钟对Shadowsocks服务器进行16次连接。虽然我们的服务器触发了大量的主动探测,但不知为何,其并未被GFW封锁。
Number of SYN Received Across Time
上图显示在客户端与服务器有通讯的时间里,服务器会收到主动探测。当合法客户端与服务器的通讯停止下来后,大部分的主动探测也停了。值得指出的是,每小时中主动探测的数量并非固定值,与合法客服端的连接数目比也并非1:1。

主动探测的延迟性

GFW的主动探测系统可以将合法连接的载荷保存下来,然后延迟一段时间再发起一个新的连接进行重放。下图显示了合法连接与重放攻击之间的延时关系。由于一个合法的载荷可能被多次重放(某一次实验中观察到的最大值为47次),我们呈现两组关系:桔黄色的线代表基于一个合法载荷的第一次重放;蓝色的线代表所有基于重放的探测(不限定为第一次)。
结果显示多于90%的重放攻击发生在合法连接发送后的一小时之内。观察到的最短的延迟仅有0.4秒,而最长延迟竟有大约400小时。
CDF: Delay of Replay-based Probes

主动探测的源

我们在目前所有实验中总计观察到3,5477次主动探测。它们来自1,0547个不同的IP地址,IP地址均属于中国。
源自治系统。主动探测来源占比最多的两个自治系统 AS 4837 (CHINA169-BACKBONE CNCGROUP China169 Backbone,CN) 和 AS 4134 (CHINANET-BACKBONE No.31,Jin-rong Street,CN),分别为中国联通和中国电信的主干网。这一结果与之前对重放攻击的研究一致。
ASN of unique probing IPs throughout all
           experiments
中心化结构。尽管这些主动探测来源于上千个不同的IP地址,有迹象显示它们的行为均受到一小撮进程的集中管控。下图显示了每个主动探测的SYN包所携带的TCP timestamp值。TCP timestamp是一个32位的计数器,其以固定的速度进行增长。其不是一个绝对值,而是一个取决于TCP实现和系统上次重启时间的相对值。下图显示这些来源于上千个独立的IP地址的主动探测,共享着很少量的TCP timestamp序列。在这次实验中,至少观察到9个不同的物理系统或进程,而绝大多数主动探测似乎来源于同一进程。我们说“至少”和“似乎”是因为如果两个或以上的独立进程的截距非常相近,那么我们可能把它们误认为一个进程。序列的斜率显示timestamp的增长速度为250HZ。
TCP TSval of SYN Segments from Probers

如何规避针对Shadowsocks的封锁?

GFW对于Shadowsocks的检测需要两步:
  1. 第一步,被动监测并识别疑似Shadowsocks的连接。
  2. 第二步,主动探测疑似Shadowsocks的服务器。
因此,为避免封锁,我们可以(1)设法避免被监测模块怀疑到,或者(2)让服务器以不被怀疑的方式回应主动探测。我们将展示如何通过安装改变数据包大小的软件来达到目标(1)。
Brdgrd是一款可以被安装在Shadowsocks服务器上,从而导致Shadowsocks客服端发送较小的数据包的软件。它设计之初衷是用来干扰GFW识别Tor节点,因为它迫使GFW在检测之前首先对TCP流进行复杂的重组。但这里我们利用它可以改变从客户端到服务器的数据包大小的功能。改变数据包的大小可以干扰流量识别环节,从而在极大程度上缓解主动探测。
Effectiveness of brdgrd on Server
上图显示了一个受到主动探测的Shadowsocks服务器,在开启brdgrd后的数小时内不再收到主动探测。而当我们关闭brdgrd,主动探测立刻继续。我们第二次开启brdgrd,主动探测在之后的40小时里完全停止,但之后又有些许主动探测。
另一组实验显示,在第一次运行Shadowoscks之初就启用brdgrd也许更加的有效。
Brdgrd的原理是将TCP Window Size改写为一个小得罕见的值。因此,审查者可能可以检测出brdgrd被使用了。因此,尽管brdgrd可以在现阶段有效的减少主动探测,其不能被看作是一个一劳永逸的解决方案。

尚未解决的问题

尽管我们已经清楚GFW会主动探测Shadowsocks服务器,我们仍不清楚主动探测与Shadowsocks服务器被封之间的关系。我们有33组Shadowsocks服务器分布于世界各地。尽管它们中的大多数都遭受到了大量的主动探测,但是仅有3台服务器被封锁。更有趣的是,其中一台被封锁的服务器只被使用了很短的一段时间,因此受到的主动探测数量应该比很多未被封锁的服务器要少得多。
我们提出3种假设试图解释这一有趣的现象:
  • Shadowsocks服务器的封锁是由人为的因素控制的。也就是说,GFW也许维护了一份在不同程度上被怀疑为Shadowsocks服务器的清单,然后根据人工因素来决定对服务器进行封锁还是解封。这一假设可以解释为什么更多的服务器是在政治敏感时期被封锁的。
  • 另一个假设是GFW的主动探测对于一些我们实验采用的Shadowsocks实现无效。确实,我们被封锁的那3台服务器都是使用了与其他实验中的Shadowsocks不同的实现。如果GFW是根据某些Shadowsocks服务器实现对主动探测的特有反应来识别判断的话,那么这一假设更有可能为真。
  • 第三个假设是对于Shadowsocks的封锁在地理上存在着不一致性。我们被封锁的那3台服务器所在的数据中心不同于其他大多数实验,使用的客服端也是位于一般的居民网络,而非数据中心。如果GFW更注意属于某些数据中心的IP地址,抑或更注意来自一般居民网络的客户端连接,那么这一假设更有可能为真。

致谢

我们想在此感谢以下人员对此主题的讨论和研究:
  • Shadowsocks-libev 的开发者们
  • OutlineVPN 的开发者们
  • Eric Wustrow以及其他多名来自科罗拉多大学博尔德分校的研究人员

联系我们

这篇报告首发于GFW Report。我们还在net4people和ntc.party同步更新了这篇报告。
我们鼓励您公开或私下地分享与报告中的发现和假设相关的问题、评论或证据。我们私下的联系方式可见GFW Report的页脚。

品葱|GFW发展趋势之辩:加高/完全封锁

今年的翻墙形势极其恶化,在我之前的文章中就概述了几次大封锁以及封锁的策略。再加之近期政府计算机设备完全国产化,再建根域名服务器镜像,GitHub要在中国建立子公司等新闻,各方都强烈关注中国以GFW为代表的网络审查,对于突破审查的关键—翻墙技术的前景也展开了热烈的讨论。
在此本人邀请葱友来谈谈自己的观点:一步到位完全封锁/继续加高,GFW将去向何方?
一.正方观点:彻底封锁
1.明确概念:文中的彻底封锁指在不物理切断国际出口的情况下,使用IP白名单等方式阻断一切非经过备案的不以贸易,学术为目的的个人翻墙行为。(别说卫星路由器,境外电话卡之类的,成本太大,一般人承受不起,基本相当于完全封锁)。
2.依据:
(1)稳定压倒一切,在不受监管的国际互联网中,存在大量诸如品葱的诋毁中国特色社会主义制度,向中国输出不稳定因素,甚至煽动颜色革命的繁华信息源,为了保证国家的政治安全,朝廷的长治久安,现阶段对这些负面内容进行屏蔽势在必行。这是维护国家主权,匪的领导的正当的必要的举措。完成这项事业就能再大提升维稳能力,做到网路姓党。
(2)完全封网对经济造成的冲击一定会存在,但是中美贸易战不也一样会导致经济形势恶化吗?知其不可而为之,萨格尔王和他领导的核心确实称得上是特异人士了,效法和美国进行别样的贸易大战而不惜代价的手法,封锁国际互联网也并非不可能。
(3)国内在长期互联网封锁和审查的环境下已经存在代用品,比如对标Quora的知乎,对标谷歌的百度,对标reddit的贴吧…大部分网民对于墙外软件的认识是模糊的,对于言论自由环境的需求并不迫切。完全封锁国际互联网引发的社会问题和舆情在可控范围内。
(4)依靠白名单完全封锁相比开发更先进的识别,探测,阻断措施的要求更低,能降低成本。
(5)…等葱友来补充
二.反方观点:继续加高而不封锁
1.明确概念:继续加高指通过使用先端技术完善识别,探测,阻断的性能,但不实行白名单,继续使用黑名单或半白名单,理论上不完全阻断未经报备的不以贸易,学术为目的的个人翻墙行为。
2.依据:
(1)以经济发展为中心。如此的封锁势必会造成经济形势的进一步恶化,包括国内经济(对科研,IT,自媒体等造成巨大打击)和国际贸易(外企撤资,对外贸易受到重大打击,国际技术制裁,全面脱钩等)
(2)如此封锁对大量行业和经济造成的打击超出了承受范围,甚至会严重的损害既得利益者的利益,既得利益者集团不会坐视不管。如果包子一尊的地位没有那么稳定,可能封网难以有效执行。毕竟既得利益团体现阶段的社会能量还是比一般网民大得多的。
(3)完全封锁会把社会矛盾和经济问题进一步推向不可控的高峰,动摇现在匪执政合法性的主要来源:经济发展。因此朝廷只能恨得牙痒痒,却投鼠忌器。
(4)…等葱友补充
三.一些个人看法:
(1)正方与反方其实是在保守或激进假设下开始推演的,正方关注政治安全,假设维稳能力和包子一尊地位牢固。反方关注经济问题,假设维稳力量已接近过载,包子一尊地位并不牢固。
(2)现阶段是GFW在国内维持着墙与梯的平衡,如果打破这个平衡会怎么样,无人得知,尽管包子现在已经在肆无忌惮的动摇平衡了。
(3)无论如何,GFW总是违反历史规律的东西,是必然消灭的。无论其现在怎么盘踞在互联网上,看似坚不可摧。引用西厢计划团队的一句话:“他们用着纳税人的钱,只是为了不让纳税人接触到真实的世界”。反贼们,翻墙的人们,所有向往言论自由环境的公民们,请记住,面对审查与封锁,不要感到无力,因为你的背后是历史的进程。
——————
回复:
@Maliuna:基本上持完全封锁观点。但是对于完全封锁的上马时机应该是非常态化或者到某个特殊阶段不得已为之,类似于近期的伊朗因人民上街断网。目前的白名单实施条件无论是硬件还是舆论上都不成熟,但结合最近在贵州准备设立根服务器的新闻来看,相信是在为建设国家大局域网做准备。
@niubility:我认为中国互联网的未来发展趋势是彻底封锁,消灭互联网。整个国家的方向不就是朝鲜化、文革化嘛。大势所趋,历史的车轮还碾不断小小的海底光缆?伟大中国已经四个自信,是时候与人类文明脱钩了。在不远的美好未来,大局域网里,别想什么美国网站了。用数字隐写技术传递消息,都是要犬决的。
@权威的取景器:今年确实有加高的趋势,不过鉴于新疆最后也开放了应该长期断网还是影响太大,而且中国实在太依赖外贸。只允许外贸和学术这个太难了,很多服务对应的ip都是动态的。根域名服务器对断网没有太大的影响,翻墙的流量本来就不会经过国内的域名解析。
@塞尔达哥哥:我的观点相反,我认为会逐步放松最后打开,依照目前的大外宣,再发展下去,很可能墙外墙内的中文世界一个样,再加上墙内一遍遍的洗脑,让墙内人对墙外有很强的免疫力。而这么做需要有极强的财力支持,依照目前的经济状况,这个大工程的进度可能放缓。如果匪真的打算将来加高/封锁防火墙,不会花那么多财力精力在墙外宣传和雇佣墙外五毛上。就算将来彻底封锁,依然会留有一道门,供官方五毛们出去。

SHADOWSOCKS和OPENVPN有什么区别?


原贴地址:https://fanqiang.network/18213.html

虽然他们可以执行类似的事情,但OpenVPN和Shadowsocks是完全不同的。
OpenVPN是一个VPN服务器。Shadowsocks是一个代理。
代理可以(可选地使用加密)请求另一台计算机为您获取信息。通常,中间系统实际上正在对分组进行一些处理。这限制了可以在其上运行的程序。
VPN加密点之间发送的数据包 – 在VPN的情况下,除了剥离加密和转发原始数据包之外,VPN服务器会修改数据包。(* VPN服务器可以另外部署NAT,其将重写分组的源或目标地址)。VPN更灵活。 需要构建应用程序以与SOCKS一起使用。
政府通常(但并不总是)更容易检测和阻止VPN服务器,因为它们通常会使用自己的协议来使其更具通用性。 应用程序无需修改即可与VPN配合使用。 此外,VPN的性质使得即使在网络浏览时也可以检测到长会话 – 而代理服务器将像网页一样打开和关闭连接。
因此,使用它的答案取决于您使用它的目的。如果在使用一组有限的协议/程序时“在雷达下飞行”更有价值,请使用SOCKS。如果需要更高的协议灵活性或对底层传送机制的更多控制,请使用OpenVPN。
另一种思考方式是VPN在实际实际网络的一部分上覆盖(接近)操作系统级别的“虚拟网络”,而代理创建应用程序以加密方式相互通信而不进行虚拟化底层网络。
今年夏天,中国当局加深了对虚拟专用网络(VPN)的打击工作,这些工具帮助大陆内部的互联网用户访问开放的,未经审查的网络。虽然不是一揽子禁令,但新的限制措施正在将服务从合法的灰色区域转移到黑色区域。仅在7月份,一款流行的中国制造VPN突然 停止运营,苹果从其面向中国的应用程序商店中删除了数十个VPN应用程序,一些国际酒店停止提供 VPN服务作为其内部无线网络的一部分。
然而,在最新推动之前,政府正在瞄准VPN使用。自从习近平总统于2012年上任以来,在中国启动VPN一直是一个令人头痛的问题 – 速度缓慢,连接频繁失效。特别是在重大政治事件发生之前(比如今年即将举行的10月份的党代表大会),联系立即下降,甚至根本没有形成,这种情况并不少见。
为了应对这些困难,中国精通技术的程序员一直依赖另一种鲜为人知的工具来访问开放的互联网。它被称为Shadowsocks,它是一个开源代理,专为跳跃中国的防火墙而设计。虽然政府已经努力遏制其蔓延,但仍有可能难以抑制。
Shadowsocks与VPN有何不同?
要了解Shadowsocks如何运作,我们将不得不进入网络杂草。Shadowsocks基于一种称为代理的技术。在防火墙的早期阶段,代理在中国变得非常流行 – 在它真正“伟大”之前。在这种设置中,在连接到更广泛的互联网之前,首先连接到除您自己以外的计算机。另一台计算机称为“代理服务器”。当您使用代理时,所有流量都首先通过代理服务器路由,代理服务器可以位于任何位置。因此,即使您在中国,您在澳大利亚的代理服务器也可以自由连接到Google,Facebook等。
但是长城防火墙已经变得更加强大。如今,即使您在澳大利亚拥有代理服务器,Great Firewall也可以识别并阻止该服务器不喜欢的流量。它仍然知道你正在请求来自谷歌的数据包 – 你只是使用了一些奇怪的路线。这就是Shadowsocks的用武之地。它使用名为SOCKS5的开源互联网协议在本地计算机上的Shadowsocks客户端和代理服务器上运行的客户端之间创建加密连接。
这与VPN有什么不同?VPN也可以通过重新路由和加密数据来工作。但大多数在中国使用它们的人都使用少数大型服务提供商之一。这使政府很容易识别这些提供商,然后阻止他们的流量。而VPN通常依赖于一些流行的互联网协议之一,它告诉计算机如何通过网络互相交谈。中国的审查机构已经能够使用机器学习来找到使用这些协议识别来自VPN的流量的“指纹”。这些策略在Shadowsocks上效果不佳,因为它是一个不太集中的系统。
“每个人都可以将它配置为看起来像自己的东西。这样每个人都没有使用相同的协议。“
每个Shadowsocks用户都创建自己的代理连接,因此每个用户看起来与外部有点不同。因此,对于防火墙而言,识别此流量更加困难 – 也就是说,通过Shadowsocks,防火墙很难将前往无害音乐视频或财经新闻文章的流量与流向Google或某些流量的流量区分开来其他网站在中国被封锁。
总部位于香港的隐私权倡导者Leo Weese将VPN比作专业的货运代理商,Shadowsocks将一个包装运送给朋友,然后将该商品重新发送给真正的预定收件人,然后再将其放回邮件中。前一种方法作为企业更有利可图,但当局更容易检测和关闭。后者是临时的,但更谨慎。
更重要的是,精通技术的Shadowsocks用户经常自定义他们的设置,这使得Great Firewall更难以批发他们。
“人们使用VPN来建立公司间链接,建立一个安全的网络。它不是为规避审查而设计的,“香港的隐私权倡导者拉里·萨利布拉说。有了Shadowsocks,他补充道,“每个人都可以将它配置为看起来像他们自己的东西。这样每个人都没有使用相同的协议。“
打电话给所有程序员
如果你是一个luddite,你可能很难设置Shadowsocks。使用它的一种常用方法是租用位于中国境外并能够运行Shadowsocks的虚拟专用服务器(VPS)。然后,用户必须使用计算机的终端登录服务器,然后输入Shadowsocks代码。接下来,使用Shadowsocks客户端应用程序(有许多,包括免费和付费),用户输入服务器位置和密码并访问服务器。之后,他们可以自由浏览互联网。
Shadowsocks通常很难设置,因为它起源于for-coders,by-coders工具。该软件首次通过Github在2012年上市,当时使用假名“Clowwindy”的开发人员将其上传到代码库。其他中国开发商以及Twitter上的口碑传播,Twitter长期以来一直是反防火墙中国程序员的中心。在Shadowsocks周围形成的社区。一些世界上最大的中国和国际科技公司的员工在空闲时间共同维护软件的代码。开发人员已经构建了第三方应用程序来运行它,每个应用程序都在宣传各种自定义功能
“Shadowsocks是一项伟大的发明……直到现在,仍然没有证据表明它可以被防火墙识别出来并被其阻止。”
其中一位开发人员是Potatso背后的创建者,Potatso是适用于iOS的Shadowsocks客户端。他在苏州工作并在一家美国软件公司工作,他对谷歌和Github(后者被间歇性地阻止)的防火墙感到沮丧,这两者都依赖于代码工作。他在夜晚和周末建立 了Potatso,因为其他Shadowsocks客户感到沮丧,并最终将其放入应用程序商店。
“Shadowsocks是一项伟大的发明,”他说,要求保持匿名。“到目前为止,仍然没有证据表明它可以通过防火墙识别并停止。”
不是地下,不在地上
很难知道有多少人使用Shadowsocks。另一个iOS客户端Potatso和Surge的开发人员分别告诉Quartz他们的付费应用程序已经收集了足够的下载量,以便在其他工作之上获得丰厚的业余爱好。但两者都无法估计核心Shadowsocks软件的受欢迎程度。
你可能还喜欢
A person receiving an eye exam in a dark room.
科学家们可能已经找到了一种更好的方法来发现痴呆症的早期迹象:我们的眼睛
2019年7月11日石英
然而,轶事表明该软件至少已经达到了一些不是专业开发人员的中国人。一位Shadowsocks用户Quartz说,他依靠它来观看Vimeo和YouTube上的视频。这两个网站都在中国被封锁,但他经常访问一家制作公司。
另一位Shadowsocks用户,25岁的Steffie Chao告诉Quartz她四年前开始使用该软件。在准备出国留学期间,她使用VPN访问YouTube并观看大学讲座。当她的VPN停止工作时,她在一个中文互联网论坛上寻找替代方案并发现了Shadowsocks。她使用她在课堂上学到的一些基本编码技巧在计算机上运行它。
至少,Shadowsocks足够广泛,中国当局意识到它的存在。政府已经试图削减它的翅膀。2015年,在庆祝二战70周年的中国游行期间,Clowwindy 在Github上发布了一条消息,宣布他已经被警方访问过,并且不得不停止在Shadowsocks工作。当Apple从其面向中国的应用程序商店中删除了数十个防火墙跳转应用程序时,它不仅仅针对VPN – 几个Shadowsocks应用程序也被删除了,包括Potatso。
然而Shadowsocks将继续存在。这部分是因为代码是开源的,这意味着任何人都可以维护,更改它,并以不同的形式发布它(源代码保留在Github上,它比以前更难找到)。
Shadowsocks能给我们中国互联网上的自由希望吗?是的,不是。
一方面,任何Shadowsocks应用程序都不可能像VyperVPN或AnchorFree那样广泛使用品牌VPN。据隐私权倡导者Weese称,与VPN相比,Shadowsocks的基础技术很难在业务上“扩展”。这意味着即使Shadowsocks可能是跳过防火墙的更好工具,VPN在接触消费者时也会占据优势。
并不是说有一个有进取心的中国程序员有很多动力来构建和推广一个“主流”,易于使用的Shadowsocks应用程序。毕竟,如果它在中国得到足够的普及,当局可能会注意到,并且可能会产生严重后果 (中文链接) – 或者更多政府努力找出如何检测和阻止用户。
Shadowsocks可能不是一劳永逸地击败长城防火墙的“完美武器”。但它可能潜伏在黑暗中一段时间 。

为啥朝廷总抓不到俺——十年反党活动的安全经验汇总(下)


强烈建议使用【虚拟机】来强化安全

刚才提到的“操作系统防范”,主要是针对你的【物理系统】(也称作“Host OS”)。接下来要谈的是——你【一定要】在 Host OS 之上,用【虚拟化软件】来搭建若干个“虚拟系统”(也称为“Guest OS”或“VM”)。这种玩法可以大大提升你防御入侵的能力;在某些特定情况下,还可以避免你暴露公网 IP(本文末尾的某个反面案例会提及这点)

1. 虚拟化软件的选择
如果你对技术方面【不太懂】,优先考虑的虚拟化软件是 VirtualBox(VBox)或 VMware。这两款的知名最大,用的人也最多;你如果碰到问题,比较容易找到相关的文档/教程。
俺当年写的《扫盲操作系统虚拟机》系列教程,主要是也是拿这两款来举例。
至于那些善于折腾的同学,当然还可以考虑别的软件,比如:KVM、Xen、QEMU......
因为虚拟化软件的很多功能是相通滴。所以捏,如果你用了别的虚拟化软件,依然可以参考俺上述的系列教程,然后自己举一反三。

2. Guest OS 的选择
关于“Guest OS 的选择”,可以参考“Host OS 的选择”。不过俺要提醒一下:Guest OS 最好与 Host OS【有所差别】。
为啥捏?因为要规避【单点故障】的风险。关于这个话题,可以参考如下博文:
《聊聊【单点故障】——关于“德国空难”和“李光耀”的随想》

3. 设定“安全基线”,并做到【定期回退快照】
关于这个话题,请看俺那个“虚拟机系列教程”的第7篇:
《扫盲操作系统虚拟机[7]:如何用“快照”辅助安全加固、强化隐私保护?》

4. 虚拟系统的【颗粒度】
最起码你得有【两个】Guest OS(VM),一个用于你的日常身份,另一个用于你的敏感虚拟身份。这种做法的“颗粒度”【最大】,也是安全性【最差】滴。
【更好的做法】是——把你敏感的虚拟身份操作的 N 个网络帐号拆分到 N 个 VM 里。以俺为例:有一个 VM 是专门用于“编程随想的 BT Sync”(Resilio Sync);有一个是专门用于“编程随想的 OneDrive”(微软网盘);有一个是专门用于“编程随想的 Twitter” ......另外,还有若干个虚拟机用于俺的真实身份。所以,俺的笔记本电脑里有很多虚拟机。
拆分的颗粒度变小之后,即使某个 Guest OS(VM)被入侵,最坏也只是损失一个帐号。
说到“颗粒度”,还有一个需要讨论的问题是:翻墙软件应该装在哪个虚拟机?关于这个问题,在下面讨论【网络】的章节中再细聊。

5. 如何防止【虚拟机穿透】?
在这个小节的最后,俺来聊一下“虚拟机穿透”这事儿。所谓的“穿透”就是指:入侵者先攻占 Guest OS,然后利用“虚拟化软件”本身的漏洞进行“穿透”,渗透到 Host OS 中。
这么干,从技术上讲是可行滴,而且也有安全研究人员演示过这个招数。但这个招数的实现难度非常非常大(需要【同时】具备很多条件,才能做成),一般人其实不用担心这个风险。不过俺在本文开头也说了,本教程是要应付【御用骇客】滴。所以,这种情况的概率虽然小,还是值得考虑滴。
那么,如何防范捏?比较好也比较彻底的做法是【物理隔离】。比如说:在多台【物理主机】上配置不同网络帐号的操作环境。即使某个物理主机被入侵了,其它物理主机上的网络帐号【不】受影响。
最近这些年,笔记本电脑都已经白菜价了。所以,多买几台笔记本电脑来进行物理隔离,钞票的压力应该不大吧?
刚才只是介绍了“物理隔离”的其中一种玩法。其它几种玩法请参见《如何防止黑客入侵》系列教程的第8篇:
《如何防止黑客入侵[8]:物理隔离的几种玩法》

◇确保 Host OS【极简】

使用了“虚拟化软件”之后,你应该把【所有的】日常操作都放到 VM 中进行。普通身份的操作放到“普通 VM”,敏感身份的操作放到“敏感 VM”。
于是捏,你的 Host OS 几乎就不需要啥软件了(除了虚拟化软件和系统自带的软件)。
通过把 Host OS 简化到极致,也就把 Host OS 的攻击面降低到最小。你始终要记住:Host OS 非常重要!!!Host OS 如果沦陷,运行在它之上的所有 Guest OS 也将沦陷。


★【应用软件】层面的防范

◇选择软件的几个原则

1. 【不要】使用国产软件
这其中的道理就类似于——不要使用国内的网络服务。
如果你由于某些原因不得不用某个国产软件(比如说:QQ、迅雷......),应该把这个国产软件单独隔离在某个虚拟机(Guest OS)中,【千万不要】装到 Host OS 中,也【不要】安装到那些用于敏感身份的虚拟机。

2. 安装的软件【越少越好】
安装的软件越多,你所暴露出的【攻击面】就越大。
因为每个软件都无法做到尽善尽美,每个都有可能存在潜在的(未曝光的)漏洞。

3. 尽量使用【成熟度比较高】的软件
举个【反例】来说事儿。在浏览器方面 IE 就是个典型的反例。最近这20年,IE 曝光的【高危】安全漏洞(远程执行类、提权类)那真是一坨又一坨,简直惨不忍睹。像 IE 这么烂的浏览器,如果你用它去上网,简直找死。

4. 优先选择【开源】的软件
商业公司必定【逐利】,所以商业公司有作恶(耍流氓)的动机和动力。比如说,用户数据可以转化为利润(变现),所以商业软件(尤其是用户量很大的那些),总是喜欢收集用户隐私。
相比之下,开源社区【没有】盈利的压力。所以,开源软件耍流氓的情况,不敢说完全没有,但肯定远远少于商业软件。

5. 优先选择【发行版官方仓库】所含的软件包
如果你使用 Linux 或 BSD,优先使用发行版官方维护的软件包。
比如说,两个软件,功能差不多,其中一个包含在官方软件仓库中,另一个没有。通常情况下,应该选那个软件仓库已有的。
“官方仓库”相当于某种程度的【背书/担保】。口碑越好的发行版,其官方仓库中的软件,可信度越高。

6. (在安全方面)版本【并非】越新越好
很多同学有个【误区】,以为版本越新越好。其实不然!(至少在安全方面,这点并【不】成立)
关于这方面的讨论,可以参见下面这篇博文。虽然这篇博文讨论的是 Firefox,但道理是相通滴!
《基于安全性考虑,如何选择及切换 Firefox 版本?》
另外,前面谈“如何选 Linux 发行版”,俺强调用【保守型】的发行版。道理也在于此。

◇磁盘加密工具的使用

(磁盘加密软件很重要,俺单列一个小节来讨论)
【把你的硬盘加密】——这是对付警方【取证软件】的重要法宝。另一个好处是,万一你的笔记本不小心失窃了,窃贼也无法看到硬盘的内容。
由于磁盘加密软件依赖于具体的操作系统,下面俺以【Linux】来说事儿。用 BSD 的同学请依样画葫芦。

1. 用 dm-crypt(LUKS)全盘加密
装 Linux 系统时,/boot 通常会单独分一个区。/boot 的加密会比较麻烦。不太熟悉 Linux 的同学,可以把 /boot【之外】的其它分区都用 LUKS 加密。如果你想把 /boot 也加密,可以到网上搜相关的教程。
(注:因为 /boot 分区通常很小(几十 MB),而且【不】存放个人数据,该分区的保密性要求并不高)
然后你可以在已经用 LUKS 加密的分区上,用 LVM(Logical Volume Manager)创建一系列逻辑分区(也叫“逻辑卷”)。请注意:规划逻辑分区时,要特意留几个空闲的(未用的)。
关于 LUKS(也叫“dm-crypt”)的教程,请阅读如下教程:
《扫盲 dm-crypt——多功能 Linux 磁盘加密工具(兼容 TrueCrypt & VeraCrypt)》

2. 用 TrueCrypt / VeraCrypt 在空闲的逻辑分区创建【敏感加密盘】
先再次唠叨一下:虽然 TrueCrypt(以下简称 TC)这个开源项目已死,但其替代品 VeraCrypt(以下简称 VC)完全兼容 TC 的功能和加密盘格式。所以,这两个软件大体上可以通用滴。
在前一个步骤,俺提到:预留几个空闲的逻辑分区。到了这一步,你选择某个空闲的逻辑分区,用 TC/VC 在这个分区上创建加密盘,用来存放【特别敏感】的数据(跟你的敏感虚拟身份相关的数据)。为了叙述方便,该加密盘称之为“敏感加密盘”。
TC/VC 的加密盘【格式】有一个优点,是传统加密盘所不具备滴。那就是 TC/VC 的加密盘【没有】特定的文件头,也【没有】任何其它特征。换句话说,给你一段看似随机的数据,你【完全无法】通过数据本身来判断其是否 TC/VC 的加密盘数据。
这个优点很重要。因为某个未格式化的分区,其数据看上去是随机的;把这个分区做成 TC/VC 的加密盘之后,数据依然看上去像是随机的。这样就【不易】引起怀疑;即便引起了怀疑,你也可以抵赖,一口咬定该分区就是闲置未用滴。
3. 示意图



4. 【敏感加密盘】的配置原则
由于这个加密盘特别重要,建议使用如下措施来强化其安全性:
4.1. 认证因子要包含【key file】
也就是说,要么只用“key file”,要么是“密码 + key file”。一旦你的认证因子中包含了“key file”,暴力破解就变得【不可行】。
“key file”是啥玩意儿捏?通俗地说就是:用某个【内容随机生成】的文件作为加密盘的“钥匙”(其效果类似“密码”)。但是“key file”比“密码”更优秀之处在于——由于 key file 的内容是【随机】生成滴,你自己也不知道其内容(而且你也不可能把它的内容背下来)。因此,一旦你【彻底】销毁了这个 key file 之后,连你自己也【不可能】再打开加密盘。所以,“key file”机制不但可以对付【暴力破解】,还可以用来对付警方的【酷刑逼供】。
请注意:“key file”要用【二进制】文件,文件至少64字节或更大(以确保【熵值足够大】)。TC/VC 自身都提供了“生成 key file”的功能,以确保生成的“key file”是【高度随机】滴。
4.2. 【多重】加密
TC/VC 支持多重加密,每一重都使用不同的加密算法。
4.3. 设置【隐藏卷】
“隐藏卷”也叫“内层卷”。有了它,你就可以享受“Plausible Deniability”带来的好处啦 :)

5. 【敏感加密盘】的使用原则
由于这个加密盘实在太重要了,俺建议遵循如下使用原则:
5.1. 只有当你需要操作那些敏感身份的帐号,才开启/挂载(mount)敏感加密盘
5.2. 当你要【长时间】离开自己的电脑——应该【关机】(shutdown);而【不要】“休眠”(hibernation)或“待机”(suspend,stand by)

(注:如果你不太熟悉 TrueCrypt 或 VeraCrypt,对本小节提到的很多名词会纳闷。请参考如下两篇教程)
在本文发出后没几天,俺又写了一篇,专门补充【磁盘加密】相关的细节,尤其是——[b]如何对付警方[/b]。


★【网络】层面的防范

◇设置 OS 自带的防火墙(Host OS 和 Guest OS 都要设)

无论是 Linux 还是 BSD 都内置了操作系统级的防火墙(Linux 社区有:iptablesnftables;BSD 社区有:PFNPFIPFW
你应该养成一个好习惯,一装好系统就开启防火墙。
设置防火墙要遵循【最小权限原则】(凡是不需要的,都是禁止的)。
比如说,你要配置一台个人用的 PC,并且【不】需要远程访问。那就应该把防火墙设置为“禁止对外监听端口”。
(同样的原则也适用于 Guest OS 自带防火墙的配置)

◇Guest OS 的网卡模式

前面提到了:要使用【虚拟化软件】来强化安全性。所以,你还需要对 Guest OS 设置“虚拟网卡模式”。
俺的建议是:
1.
网关 VM【别用】bridge 模式,应该用 NAT 模式(NAT 可以起到类似防火墙的效果)
2.
(在极少数情况下)如果你需要【跨物理主机】共享“网关 VM”的翻墙流量,想让网关 VM 对其它物理主机暴露监听端口,可以在 NAT 模式下添加端口映射(洋文叫“port forwarding”)。如果俺没记错的话,VBox 和 VMware 都支持 NAT 模式下的端口映射。
3.
“操作上网帐号的 VM”用 host-only 模式(VBox 下还可以考虑 internal 模式,比 host-only 更严格)
通过这种方式,【彻底隔绝】该 VM 中的【任何软件】的网络直连,强迫他们都经过“网关 VM”联网。

详细的“原理说明”和“配置教程”,参见如下两篇:

◇避免用无线网络(比如:wifi)

为啥要避免用无线捏?一言以蔽之,(相比物理网线)无线网络会显著增加你的攻击面。
比如说:那些安全防范等级较高的公司或机构,其【核心网络】肯定是物理布线,而不会走 wifi 之类的无线网络。

◇设置家用路由器(如果有的话)

哪怕是比较普通的家用路由器,也提供了一些基本的安全设置(比如:防火墙、MAC 地址绑定......)
你应该把这些设置都用起来,还是刚才提到的老话——配置时参照【最小权限原则】。
另外,如果你采用了前面提到的【物理隔离】方案,那么你就会有 N 台物理主机。这种情况下,你要在家用路由器上进行一些配置,使得这 N 台物理主机相互【不可见】。

◇操作敏感帐号,要【全程走】匿名网络(Tor 或 I2P)

(关于这点,前面聊“注册帐号”时已经提过。为了加深你的印象,俺再次唠叨)

◇Tor 或 I2P 要加【前置代理】

前面俺已经聊过了:Tor 和 I2P 是两个最有影响力的匿名网络。因为俺个人推荐 Tor,所以下面拿 Tor 来说事儿。想用 I2P 的同学,请依样画葫芦。
Tor 从许多年以前,Tor 在天朝就无法独立联网了。因为 GFW 把 Tor 视作心腹大患,封杀了所有的 Tor 中继(Relay)。
所以在墙内想用 Tor,需要让 Tor 借助某个前置代理(这个前置代理,通常是某个【可用】的翻墙软件)。后来 Tor 官方推出的 Tor Browser 内置了一个 meek 插件,可以辅助 Tor 在墙内联网。这个 meek 插件也可以视作某种前置代理。
本来,让 Tor 走前置代理是为了突破 GFW 对 Tor 的封锁。但这么干产生了若干【额外的好处】——让你的网络传输更加健壮。啥意思捏?下面俺解释一下。

好处1——ISP 【无法】知道你在用 Tor
无论你在家上网还是在公司上网,最终你的网络流量都要经过 ISP。也就是说,ISP 完全有可能监控你的流量。
当你采用“Tor over 前置翻墙软件”,ISP 监控你的流量,看到的是“前置翻墙软件”的流量。由于翻墙软件的流量都是【加密】滴,所以 ISP 无法解密,也就无法知道你在用 Tor。
在全球的网络用户中,Tor 用户的比例依然很低;在天朝,这个比例会更低(墙内网民对隐私还是不够重视)。由于 Tor 是设计用来【隐匿网络踪迹】滴。如果让 ISP 看到你在用 Tor,终归不是啥好事儿。
所以,即便你在墙外上网,此时 Tor 可以独立联网,你还是要给 Tor 配一个【加密的】前置代理。

好处2——双保险
当你采用“Tor over 前置翻墙软件”,你的“真实上网流量”的外面其实包裹了【两层】,第一层是 Tor,第二层是“前置翻墙软件”。由于包裹了两层,类似于某种【双保险】。
换句话说,如果有人要在网络层面截获你的“真实上网流量”,必须先破解最外层(前置翻墙软件的加密),然后再破解次外层(Tor 的加密),才能看到你的真实上网流量。由于 Tor 本身是【强加密】,而翻墙软件的加密也不会太弱。所以,同时破解这俩层加密的可能性,小到可以忽略不计。

◇【不同】身份的帐号,要使用【不同】(各自独立)的匿名网络环境

假设你让“真实身份”的帐号和“敏感身份”的帐号使用同一个 Tor/I2P 环境,有可能导致这两个帐号在【同一时间】使用了【相同出口节点】。
如果这种情况长时间持续出现,就会使得这2个帐号产生某种【相关性】,从而让人怀疑这2个帐号背后是同一个人。
更详细的说明,参见下面这篇博文中“【公网地址】导致的关联性”这个章节。

◇“翻墙软件”与“你的网络帐号”【隔离】

刚才提到了:用某些翻墙工具作 Tor 的【前置代理】。那么,这些翻墙软件要放在何处捏?
俺的建议是——把翻墙软件放到【另一个】虚拟机,以进一步降低网络帐号的风险。为啥捏?因为你无法知道:翻墙软件本身是否会耍流氓。
在下面的这篇博文中,俺详细介绍了几种部署方式。其中包括“Tor 的【前置】部署”和“Tor 的【后置】部署”。
对于本文的目标读者,如果你通过浏览器(Web 方式)操作网络帐号,此时你的上网软件(浏览器)是可信滴,而翻墙工具不一定可信。所以你应该采用“Tor 的【后置】部署”。


★【Web】层面的防范

◇如何选择浏览器?——俺推荐 Firefox

说到“选浏览器”这个话题,其实也就是在 Chrome/Chromium 或 Firefox 这两家二选一。因为前面说了,你上网的系统应该是 Linux 或 BSD。像 IE、Edge 之流,就甭考虑啦。
俺个人的建议是——Firefox
俺知道读者中有很多 Google 的粉丝,也有很多 Chrome/Chromium 的粉丝。对俺倾向 Firefox 会感到不理解。建议这些同学看如下博文的分析:

◇如何选择 Firefox 的【版本】?

关于 Firefox 版本的问题,列几个要点:
1. 【千万别用】中国版
2. 一定要用国际版中的 ESR(长期支持版本),别用 Release 版,【更不能】用 Beta 或 Nightly 版。
3. 在某个【恰当的时间点】切换 ESR,【不要】一发布新的 ESR 就切换。

如果你不太了解 Firefox 的版本体系,未必明白上述这几个是啥意思。请参考如下博文:

◇关于 Firefox 的【插件和扩展】

先说一下,“插件”(plugin)和“扩展”(extension)是两种不同的东西。在“这篇博文”中,有一个小节专门谈:“插件和扩展的区别”。
对于操作重要帐号的浏览器——第三方“插件”一个都【不装】;第三方“扩展”要【尽量少】,最多只装几个安全相关的,而且要选那种口碑足够好的。

◇如何【加固】Firefox?

对于不太懂技术的同学,建议直接用【Tor Browser】套件。这个套件是 Tor 社区在 Firefox 的 ESR 版本基础上,又进一步强化了安全性。而且还绑定了 Tor。
至于那些喜欢折腾的同学,可以自己用 user.js 对 Firefox 进行很多的定制。主要原则就是——把 Firefox 的【攻击面】降到尽可能小。
(注:本来想写一篇“加固 Firefox”的教程,考虑到这个话题太小众,一直没动手写)

◇操作敏感帐号,确保【全程】HTTPS

要做到这点,有个前提——敏感帐号对应的网站要提供【全站 HTTPS】。
考虑到如今 HTTPS 已经很普及啦。知名的网络服务,基本都支持【全站点 HTTPS】。有些网络服务做得更贴心——即使你用【明文】的 HTTP 协议访问,它也会把你重定向到【加密】的 HTTPS。
有些同学会问:万一碰到某个网络服务,不支持 HTTPS,咋办?
俺的建议是:如果某个网站到现在(2019)都还【没】实现“全站 HTTPS”,那这个网站也够烂的,不用也罢。
为啥要强调【全程 HTTPS】捏?
前面提到了“全程走匿名网络”,但是匿名网络中的节点都是由世界各地的志愿者维护的,不排除其中会有恶意节点(蜜罐节点)。如果你访问网站的流量是加密的 HTTPS 流量,即使是恶意节点,也【无法】看到你的上网内容(网页、图片、视频、等),更加不可能去篡改。

◇确保浏览器【专用】

为了说明【专用】是啥意思,举个例子。
博客的读者都知道:俺有个推特帐号,是专门用来发布“博文更新的通知”。
在俺的电脑上,有一个专门的 VM 用来操作此推特帐号(刚才聊虚拟机“颗粒度”的时候,已经提到这点)。这个 VM 里面的 Firefox,除了访问 Twitter 的网页,【绝对不】访问其它任何网站。
确保浏览器【专用】,可以预防大部分的 Web 攻击。


★【社会工程学】层面的防范

对于技术高手而言,“社会工程学”的防范【最难】。因为“社会工程学”探讨的是【非】技术领域的话题。
这方面的防范,靠的不是你的技术,而是你的【心理素质】。比如说:是否足够理性,是否足够细心,是否足够耐心,是否足够冷静 ......
(注:如果你之前没听说过“社会工程学”这个概念,可以先看下面的系列博文)

◇关于【偷窥】

(俺特意把这个放在第一条,因为谈到社会工程,很多人只想到对网上其他人的防范,而忽略了【身边人】)
当你操作敏感的虚拟身份时,要确保【不】被周围的人看到。如果是在公共场合(包括公司里),还需要警惕周边的摄像头。
再次拿自个儿举例:
俺有时候会在【上班时间】回复读者评论,那是因为俺作为公司的高管,有独立办公室 :)
如果俺是在开会或者与别人讨论问题,肯定不会运行“编程随想”相关的 VM(甚至连存放这些 VM 的【敏感加密盘】都不开启)。

既然说到“偷窥”,再顺便强调一个常识——输入重要密码记得遮挡键盘(尤其是在公共场合)。比如说:用笔记本的同学,(输密码时)把屏幕合拢到与键盘成30度角。

◇关于【信任】

当你使用敏感的身份与别人沟通(哪怕【私密】的沟通),【永远不要】提及自己的真实身份。
就算你能相信对方,你又如何确保沟通双方的软件环境是可信的?你又如何确保沟通双方的物理环境是严密的?......(这样的反问句,俺可以写一大堆)
基于同样的道理,即使是跟俺邮件沟通,你也【不】可暴露自己的身份信息。

◇关于【即时通讯】(IM)

聊天工具(IM)会暴露出比较多信息量。所以“编程随想”这个身份从未使用 IM 与读者沟通,最多只用邮件。(为了安全起见,俺如今连邮件也用得少了,主要在【博客评论区】与读者沟通)。
如果你确实想用 IM,那就只用【文本】形式,千万【别用】“音频 或 视频”。

另外要提醒一下:【不要】过度迷信“端到端加密”。
某些同学【天真地以为】:采用了“端到端加密”之后,聊天内容就只有两人知道。其实不然!比如说:其中一人的 PC/手机中了木马,聊天内容就有可能外泄。这还只是一种可能性,还有其它很多种可能性。

◇关于【私密沟通】

前一个小节提到:“聊天工具(IM)会暴露出比较多信息量。”现在来解释一下。
先定义一下【私密沟通】的范畴——指的是那些【不】公开的一对一沟通。【至少】包括:两人聊天、非群发的邮件、社交网络的“私信”、等等。
私密沟通的【危险性】在于——这种沟通方式会让你放松警惕(这是心理学层面决定滴)。
对照一下现实生活。当你处在一个【多人】的场合,你说话就会比较谨慎和自律。而在那种一对一私下沟通的场合,你说话的警惕性就会下降。这种情况下,你就更容易暴露出更多个人信息。

◇关于【社交网络】(SNS)

敏感虚拟身份使用的 SNS 帐号,要与你真实身份使用的 SNS 帐号【没有交集】。
比如说:俺的真实身份有一个 Twitter 帐号,但这个 Twitter 帐号肯定不会 follow 编程随想的 Twitter。

◇关于【密码】(password)

有一个大伙儿很容易忽略的盲点,是【密码】。
不同的帐号,密码也【不能】有相似之处。为啥捏?
因为你无法确定网站在存储密码的时候,是否符合安全规范。如果网站对密码的存储不够规范,然后网站的数据库还被入侵了(往往是这种不规范的网站,更容易被入侵),导致用户的【原始密码】曝光。(在剔除掉那些极简的傻瓜密码之后)那些密码【高度相似】的帐号,就有可能被关联起来,从而导致身份暴露。
(注:存储密码,规范的做法是——“用足够【强】的散列算法,并配合【随机】撒盐,然后存储散列值。”虽然只是短短一句话,可惜大部分程序员并不理解其背后的深意)
关于如何构造密码,参见如下教程:

◇关于【个人信息】

不论是写博客还是用 SNS(社交网络)与别人沟通,你所说的话,总是会不经意地暴露出一些个人的身份信息。
比如俺博客聊了这么多信息安全的话题,有些话题还比较“阳春白雪”(只有懂行的人才写得出)。因此,读者就能猜出,俺是在这个圈子里混的——这就是某种“个人信息”。
所以,除非你完全不说话,否则,总会有这样那样的信息流露出来。当你暴露的信息足够多之后,某些“有心人”就会根据这些信息,逐步缩小范围,逐步拼凑出你的完整脸谱。
那么,该咋办捏?
说到这儿,俺要借用《红楼梦》里面的名言——【假作真时真亦假】。也就是说,你要故意暴露【假信息】。通过这些【假信息】来干扰对方的视线。“假信息”关键在【质】而不在“量”。啥意思捏?就是说,“假信息”的数量并不需要太多,但一定要让人信以为真。
由于存在“假信息”的【干扰】,当“有心人”企图根据你暴露的信息来缩小搜索范围,你就有可能【漏网】——漏到包围圈之外 :)

◇关于【时间信息】

关于这个维度的讨论,之前已经专门写过一篇博文(如下)。
正是因为这方面的考虑,所以俺要让自己的“上线时间”尽量【随机化】,不能有固定的模式。

◇关于【行文风格】

每个人的遣词造句都有其独特之处,这种独特性就像是语言层面的“指纹”。
举个例子:
J.K. Rowling 曾经用化名出了一本推理小说《布谷鸟的呼唤》(The Cuckoo's Calling)。某公司通过专门的软件对文字风格进行分析,发现此书与《哈利·波特》的行文风格高度一致,从而曝光了作者的真实身份。
所以,如果你的“虚拟身份”与“真实身份”都在互联网上留下【足够多】文字,别人【有可能】从“文字风格”发现两者的相关性。文字越多,被发现的可能性越大。(注:据热心读者反馈,可用专门的软件批量修改文章的文字风格。这种软件俺没用过,感兴趣的同学可以尝试一下)
俺比较幸运之处在于——本博客是俺第一个博客。在2009年之前,俺一直是网上的【潜水者】(从来不冒泡)。另外,俺在公司里也不会写长篇大论的文档。所以,在“行文风格”方面,俺的风险会比较低。

考虑到俺博客有不少程序员读者,顺便提醒【源代码风格】的“指纹”。其原理是类似滴。
前些年,俺大幅度改造博客的评论区界面,加了很多定制的 JS 脚本,当时就有热心读者提醒俺这个风险。今天顺便也解释一下。
作为一个老程序员,俺在公司里写了很多代码,但都是 C/C++、Java、Python(从俺写的编程博文,也能猜出这点)。而且俺在公司里写的都是【后端代码】(服务器端)。而博客评论区的改造属于【前端 JS】。因为前端与后端的差异太大,且编程语言也不同。因此,俺在这方面的风险也很小。

◇(其它)

社会工程学涉及的方方面面太多,肯定有些是俺漏了说的。欢迎列位看官到博客评论区继续补充。


★对【手机】的防范

关于“手机”的话题比较特殊,因为手机同时涉及前面提到几个层次,所以俺单列一章来讨论。

◇手机的风险

关于手机的隐私风险,这些年来,俺已经重复唠叨很多次啦。今天再来一次。
当你想用手机操作你的网络帐号,这已经隐含了一个前提——此手机必然是【智能机】。“智能机”的安全风险【至少】包括如下:

1. 【硬件探测器】太丰富,能收集的信息太多
手机包含的硬件探测器太多,至少包括:摄像头、麦克风、GPS、陀螺仪 ......
在这种情况下,如果手机中的某个软件(app)是恶意的,并且获得了足够的权限,那么这个 app 就可以监控你日常生活的方方面面。
比如说:通过“GPS 定位”或“基站定位”可以了解你日常活动范围,可以知道你用哪种交通工具(根据移动速度)......

2. 两大手机操作系统(Android & iOS)都不是【完全开源】滴
iOS 是闭源,这个众所周知了。
很多人【误以为】Android 是开源,其实它只有【一部分】是开源滴。如果要说得再详细一点,那就是——
Android 系统包括两部分:AOSP(Android Open Source Project)和 GMS(Google Mobile Services)。其中的 GMS【不】开源。
而且自从 Android 占据市场主导地位之后,Google 逐渐把 AOSP 中的模块转移到 GMS 中(注:Google 这么干,再次体现出商业公司的德性)。

3. 固件是【闭源】滴
请注意:固件处在操作系统的【下层】。固件如果不可信,比操作系统还麻烦。

4. 手机上无法实现【操作系统虚拟机】
到目前为止,手机上还无法实现“操作系统虚拟机”,也就是类似于 VMware 或 VirtualBox 之类的玩意儿。
而“操作系统虚拟机”是非常重要的安全防御手段(前面章节已经聊过)。

5. 手机上的【全盘加密】不够严密
虽然如今的 Android 和 iOS 都已经有了“全盘加密”,但它们机制和功能,对俺这类高危人士而言是【远远不够】滴。
为了长话短说,简单举个例子——
至今还没听说有哪个手机系统的全盘加密支持【key file】,但成熟的桌面加密软件(TrueCrypt/VeraCrypt)都有这个功能。
前面俺说过了——“key file”这种机制可以用来对付警方的【酷刑逼供】——只要你在被捕前销毁“key file”,之后连你自己都打不开加密盘(【酷刑】又有啥用捏?)而手机缺乏这个机制,也就意味着如果你被捕,警方(尤其是天朝警方)总是可以想办法迫使你解锁手机。
不光缺少“key file”功能,手机的磁盘加密还缺少其它很多重要的功能,比如“Plausible Deniability”,比如“自定义加密算法组合”,比如“自定义密钥迭代次数”......而这些功能对提高“加密盘的抗破解能力”,是非常重要滴!

6. 常用的手机软件(App),大部分都是来自商业公司
在《如何保护隐私》系列教程的第一篇,俺就特地强调了“商业公司”与“非盈利组织”的差异。很多人应该听说过“流量变现”,同样的道理,用户数据也可以变现。作为商业公司,“收集用户数据”自然成为他们的一大癖好。

7. 用户群很大的那几个 App,都很流氓
这个道理,俺也聊过多次了。像“微信/支付宝/百度/京东”这些 App,装机量都是以【亿】计。这么大的安装量,朝廷的有关部门,难道会不动心吗?假如有关部门找到这几家公司的老板,要他们稍微配合一下,在 app 里面玩点猫腻,像“菊花疼、马淫、李阉红、刘强奸”这些老板,他们有胆量拒绝朝廷提的要求吗?答案显然是【否定】滴!
因此,国内装机量特别大的 app,不耍流氓几乎不可能!
还有一个比较讽刺的是——所有这些公司(不管是老板还是公关部门),都会信誓旦旦地说:从来不耍流氓。但是大伙儿别忘了——这是在天朝,这是一个“诚信还不如狗屎”的国度。诸如此类的诅咒发誓,你当笑话听听就行啦,切莫当真。

◇结论

由于手机存在如此多的风险点。所以——
1. 要【完全禁止】手机参与操作敏感的网络身份
2. 如果某个网络服务只提供手机 App,而不提供“Web 界面”或“桌面客户端”,那么你就应该【弃用】这个网络服务
3. 你在操作敏感的网络身份时,最好把手机放到别处(别忘了手机上的流氓软件有可能偷偷对你进行拍照/摄像哦)


★对几个【反面案例】的分析

为了进一步加深大伙儿的印象,俺给大伙儿准备了几个反面教材。

◇案例1:Freedom Hosting 网页挂马事件

Freedom Hosting 是暗网上提供托管服务的平台(在暗网的圈子里小有名气)。其站长被 FBI 抓了之后,FBI 接管了网站服务器,然后在页面中嵌入了某个恶意脚本。这个恶意脚本可以利用 Firefox 17.0 ESR 版本的某个漏洞。
当年的 Tor Browser 用的就是这个 ESR 版本的 Firefox。因此,当某个 Tor Browser 用户访问了这个挂马的页面,该脚本就会利用 Firefox 17.0 的安全漏洞,然后【绕过代理】,直接向某个 FBI 控制的服务器发送 HTTP 请求。
由于是【绕过代理】进行直连,所以 FBI 只要检查该服务器收到的 HTTP 请求,就可以知道这些中招的 Tor Browser 用户的【真实】公网 IP。

有些同学以为俺说这个案例,是想谈“修补漏洞”。可惜不是!因为任何浏览器都【不可能】保证零漏洞,所以光靠修补浏览器漏洞来对付这类威胁,不够保险。
更保险的做法是【系统级网络隔离】。如果上述这些 Tor 用户看过俺的教程,懂得用【虚拟机隔离】来隐匿公网 IP,那 FBI 的招数就失灵了——因为在隔离的虚拟机中,恶意脚本【对外直连】的 HTTP 请求会【失败】(发不出去)。
所以,这个案例的教训是——你要杜绝所有【不经代理】的网络直连行为。为了做到这点,要把所有敏感的上网行为都要隔离在【虚拟机】中,以确保【所有】流量都经过你设定的“网关 VM”。

◇案例2:顶级黑客 Jeremy Hammond 被捕

此人是大名鼎鼎的 LulzSec 骨干成员,网名 yohoho。从其辉煌战绩可以看出,他显然是技术高手。而且他也一向谨慎,LulzSec 的其他成员并不知道他的真身。
后来,LulzSec 的某个成员(网名 Sabu)被 FBI 逮捕,并转为卧底。所以 FBI 拿到了 yohoho 与 Sabu 之间的所有聊天记录。
在与 Sabu 聊天时,yohoho 无意间提到自己参加了对“共和党全国代表大会”的抗议示威,并被警方拘留。这个信息量已经足够高,足以把范围缩到很小。警方开始怀疑 Hammond,并监控他家的网络流量。观察多日后发现:他家 Tor 流量出现的时间段,与 yohoho 上线的时间点高度吻合。
于是 FBI 申请了“强行搜查令”,破门而入......

此案例的第1个教训是——不要暴露【信息量太高】的真实个人信息。
此案例的第2个教训是——Tor 前面再放个【加密】前置代理(这招俺唠叨了很多年啦)。如果 Hammond 遵守这个原则。那么,FBI 监控他家的流量,就无法判断他是否在使用 Tor(因为 Tor 流量被包裹在前置代理的加密流量之内)。