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


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

刚才提到的“操作系统防范”,主要是针对你的【物理系统】(也称作“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 流量被包裹在前置代理的加密流量之内)。

没有评论: