Total Pageviews

Tuesday, 5 February 2019

安全经验汇总

★“朝廷想抓俺而不可得”正说明了——俺的防御措施基本靠谱


  熟悉俺博客的读者都晓得——本人已经抹黑党国很多年了(从第一篇政治博文到今天,已超过“9.5年”,四舍五入就算十年吧)。
  俺记得很多年以前,有人在博客评论区对俺说(以下是大意):
你小子能在网上得瑟,是因为网监部门还没注意到你;等到哪天网警开始盯上你,你就等死吧。
  那时候,很多事情都还没有发生,俺缺少反驳的素材。如今可以理直气壮地反驳了——朝廷的有关部门早就盯上俺了;遗憾的是:他们拿俺一点办法也没有。
  想看证据的话,请围观前几天的那篇《开博十周年大事记》。俺摘录其中几个要点:
1. 早在2011年的“中国茉莉花革命”期间,俺就连发多篇具有“煽颠”性质的博文(注:那几篇显然能评上“煽动颠覆国家政权”的大罪)
2. 到了2016年,朝廷向 Github 发出【政府删除令】,企图干掉俺维护的《太子党关系网络》项目(注:Github 有骨气,此项目至今屹立不倒)
3. 针对俺 Gmail 邮箱的两次【国家级入侵】(注:分别出现在2011和2017)
4. 2017年针对俺博客评论区的大规模刷屏(注:Blogspot 评论系统有“验证码机制”,想达到那种刷屏速度,需要好多五毛一起刷)
  上述这种种的迹象早已说明——俺是朝廷有关部门的眼中钉。

  花了这么多口水,就是想说明一点——俺的防御措施还是基本靠谱滴!
  换句话说,俺的防御措施不敢说完美(完美是不可能滴),但至少【没有】明显的漏洞。否则的话(如果有明显漏洞),俺要么被跨省,要么帐号被攻陷,又怎么能在将近十年的时间里“肆意抹黑朝廷,恶毒攻击党和国家领导人”?



★本文的目标读者


  开博这么多年来,有一个感慨——(在墙内)很多具备政治素质的人,缺乏信息安全的技能;所以他们无法利用互联网与党国斗争。
  虽说墙外已经有很多民运网站,也有很多民运人士开设了社交网络(SNS)帐号。但他们毕竟生活在墙外。天朝的民主化进程,不可能光依靠海外人士,关键还是需要靠咱们这些生活在天朝的民众。所以今天这篇,首先是为了帮助那些【有志于从事反党活动的网民】。
  其次,是为了帮助那些捍卫互联网上【言论自由】的人。俺曾经写过一篇《“对抗专制、捍卫自由”的 N 种技术力量》,谈到这方面的问题。

  当然啦,所有的技术都是【双刃剑】——都可能被滥用。某些在网络上干坏事的家伙,也会从本文中受益。关于这点,俺也很无奈 :(
  但是,俺不会因为技术存在被滥用的可能性,就停止对技术的传播和普及。



★本文与“之前写的信息安全教程”的关系


  开博这么多年来,俺已经写了很多信息安全相关的【扫盲教程】(参见这篇末尾的:和本文相关的帖子)。今天要聊的很多内容,之前的教程都已经有了。那么,为啥俺还要写这篇捏?
  因为之前写的那些,都只是针对某个具体的方面或某个具体的软件。而本文就是为了——把所有这些【串起来】,以方便那些在“信息安全领域”刚刚入门的同学。
  为了避免老读者说俺“炒冷饭”,本文包含了一些过去没聊过的内容。另外,最后一章还附上几个实际案例,作为【反面教材】。



★两个【核心原则】


  假如你想要效仿俺——长期利用互联网进行反党活动。如下两个原则需要时刻牢记。


原则1:确保你的身份隐匿
原则2:确保你的帐号安全


不见图 请翻墙

  下面的讨论,都是围绕这2条来展开。
  关于“身份的隐匿”,俺补充说一下:即便你的肉身位于【墙外】,确保身份隐匿依然是必要滴!



★如何选择网络平台?


◇首先,【绝对不要】使用【国内】的网络服务


  (此处所说的“国内”,指的是:伟光正具备【司法管辖权】的范围,含香港/澳门,不含台湾)
  如果你想要在网络上进行敏感的政治活动,这个原则一定要牢记。因为用国内的网络服务进行反党活动,会大大增加你暴露的风险。
  以俺自己来举例:
  刚开博的时候(2009年初),俺同时也注册了 CSDN 的帐号,并在 CSDN 上架设了一个镜像博客(详情参见《开博十周年大事记》)等到后来,俺越来越放肆地抹黑党国,那个 CSDN 帐号也就用得越来越少了。
  虽然俺全程使用 TOR 访问 CSDN(也就是说,CSDN 的服务器无法知道俺的公网 IP)。但是它还是会知道俺的在线活动时间。请注意:“时间线”也会构成某种信息量。关于这方面的详细介绍,请看《如何隐藏你的踪迹,避免跨省追捕》系列教程的第9篇:
如何隐藏你的踪迹,避免跨省追捕[9]:从【时间角度】谈谈社会工程学的防范
  除了“在线时间信息”。考虑到如今很多网站都重度依赖 JavaScript 脚本(禁用 JS 脚本,网站就没法用)。所以,你如果用了墙内的网络服务,其网站上的 JS 脚本【有可能】收集到你本机的一些系统信息。

  如果说“时间信息”和“系统信息”还不足以吓唬你,俺再提一个事情:当你使用墙内的网络服务,你所有的【用户行为】都有可能被有关部门收集和监控。
  啥是“用户行为”捏?假如你用的是聊天服务(IM),你的用户行为就是——“你写过和看过的全部内容”;假如你使用的是邮件服务(Email),你的用户行为就是——“你发送和接收的所有邮件”。
  请注意:“用户行为”所包含的信息量实在太大了。只要你一不小心,在其中涉及到与你真实身份相关的信息,这个信息就有可能成为日后追溯你身份的线索。(不信的话,请看本文末尾的其中一个反面案例)

◇为啥【不要】注册“独立域名”?


  俺已经不止一次被问到:为啥博客没有用“独立域名”?老实说,俺一直觉得:只要博客内容足够好,有没有独立域名其实无所谓。
  另外,如果从“信息安全”的角度来讲,独立域名还会增加额外的风险。
  因为域名是稀缺资源,凡是要注册独立域名,自然涉及到【购买】(也就是【付费】)的问题。不管你是支付现金还是比特币,都会暴露“与你身份相关的信息量”。(通俗地说:增加了身份暴露的风险)

◇为啥【不要】搭建“自己的 Server”?


  (注:本小节说的 Server 是广义滴,包括“物理主机、VPS”)

  1. 考虑到【付费】的风险
  (跟“域名”的情况类似)一旦你要搭建自己的 Server,也要涉及到【付费】的环节。如上一节所说,“付费的环节”会增加身份暴露的风险。

  2. 考虑到【安全加固】的专业性
  一般来说,用来提供网络服务的 server 通常会安装 Linux;还有极少数装 Server 版 Windows 或某种 UNIX(BSD 是 UNIX 的一种)。不管你的 Server 用哪种操作系统,都需要进行【安全加固】。
  本来,“安全加固”已经是个很专业的领域,懂行的人就相对较少。然后,你还要考虑到——本文讨论的是“反党活动”。也就是说,你的安全加固,【不仅仅】是防“普通骇客”,还要防【御用骇客】。显然,“御用骇客”要比“普通骇客”牛逼得多。不妨稍微透露一下:由于工作关系,俺曾经跟御用骇客打过交道,知道他们的份量。(更多的细节,俺不便多说)
  除非你自己是一个非常资深的信息安全从业人员,并且你对“服务器安全加固”这个细分领域非常熟悉,并且你对 Server 所用的操作系统的安全特点非常熟悉。请扪心自问一下:上述这3条,你都能达到吗?
  达不到的话,还是死了这条心——不要自己去装 server。

  3. 考虑到【时间和精力】
  还有一个原因,也顺便说说——自己维护 server,需要消耗【很多】时间和精力。
  请注意:“安全加固”并【不】是一劳永逸滴,而是个【动态过程】。如果你自己维护 server,需要时刻关注各种安全新闻,掌握你使用的操作系统和软件是否曝光新的安全漏洞,了解最新出现的入侵手法,诸如此类。一旦出现安全漏洞,你需要第一时间进行升级/维护。另外,你还要定期进行安全检查/安全审计......
  凡此种种,都非常消耗时间与精力!

◇是否用【暗网】?


  这个问题分两种情况:
1. 如果需要你自己搭建服务器,那么答案是“否定”滴。(原因参见前一个小节)
2. 如果无需你自己搭建服务器,由靠谱的第三方提供服务器,那么答案是“肯定”滴。

  说到“暗网”,补充说一点:
  很多人过度迷信“暗网”的能耐。俺要提醒一下:“暗网”只是帮你完成【网络层面】的隐匿性。要想彻底地隐身,你要在【多个层面】进行防范。(其它层面的防范,下面章节会聊到)

◇【国外】商业公司之间的权衡


  简单说几个参考点:
  1. 公司的口碑
  不要用那些口碑差(历史上有污点)的平台。这个道理很显然,就不举例了。

  2. 在华业务的规模
  如果某个商业公司在天朝有庞大的商业利益,那么,一旦有关部门找这家公司索取用户私密信息,这家公司为了顾及在华商业利益,就【有可能】屈服于朝廷。
  说到这里,已经猜到有同学会反驳俺——既然这样,为啥还用“微软网盘”分享电子书?
  (对这类反驳,请看下一条的解答)

  3. 网络服务的种类
  不同类型的网络服务,对安全性的要求也不同。
  比如说,俺会使用微软的网盘,但俺肯定【不】考虑微软的邮箱。
  为啥捏?
  因为俺的网盘本来就是用来进行【公开分享】,对保密性没啥要求。而电子邮箱对保密性的要求(相比“网盘”)要高得多。
  所以在选择电子邮箱方面,Google 的 Gmail 显然比微软的 Hotmail/Outlook 更好(Google “在华业务”相比其“全球业务”,可忽略不计)
  同样的道理也适用于 Github。虽然 Github 已经被微软收购了,但俺无所谓。因为俺的 Github 帐号也是用来进行【公开分享】滴。又没啥私密性的东西。最坏情况下,也就是帐号被封掉。真有那么一天,俺再转移战场继续战斗嘛。



★如何注册【隔离的】虚拟身份?


◇选择一个【全然不同】的网名


  你要选择一个【完全不同】的网名。这个网名与你之前使用过的【任何一个】网名都【不】能有相似之处。
  说到这儿,顺便分享一下俺起网名的经验。
  老读者应该知道:俺刚开博的时候,只是想写点编程方面的博文,算是某种经验分享。当时想过用“喜欢软件开发的极客”,但这个名称太长;改成“喜欢编程的极客”,还是太长;后来又改了几次,才想到如今这个“编程随想”。这个名称比较短,而且还能搭配罗丹那个“思考者的雕像”。
  俺的经验是:
  网名太长就不好记(从传播学角度而言是不利滴),太短又容易跟其它名称混淆(导致“识别度”降低),所以要找一个长度较短同时还具有一定识别度的名称。

◇注册时,【不要】填写真实的个人信息


  比如说,注册电子邮箱时,会让你填写生日,你可不要写真实的哦,瞎掰一个就行啦。
  至于像【手机号】、【身份证号】之类的,更加【不】能据实填写。
  (注:“短信验证”的问题,下面会聊到,别急)

◇注册的【全过程】都要走【匿名网络】


  “注册帐号”是这个敏感虚拟身份的【起点】。如果注册的过程中暴露了身份信息,那么今后再怎么隐匿都【没用】啦!
  所以,你要确保——注册的全过程都通过【匿名网络】来进行。这样才可以【彻底避免】“公网 IP 暴露”的风险。换句话说,即使在你注册的过程中,网站服务器记录了你的“访问者 IP”,这个 IP 也【不是】你真实的公网 IP。

◇啥是【匿名网络】?


  “匿名网络”,洋文叫做“anonymity network”。顾名思义,是用来帮助你实现【匿名化】的手段之一。通过匿名网络进行各种操作(比如在网上发布言论),可以让【网络层面】的【逆向追溯】变得极端困难。
  注:很多人把“匿名网络”与“暗网”混为一谈,其实这是两个不同维度的概念。之所以会有这种混淆,是因为几个知名的工具(Tor、I2P)既是“暗网”,也是“匿名网络”。

◇为啥“只用翻墙代理”还【不够】可靠?


  因为翻墙工具的设计初衷是为了“突破 GFW”,而【不是】为了“匿名化”。
  如果你非常在意“匿名化”(比如:想在网上发表敏感的政治言论),那么你就必须使用专门的【匿名网络】。

◇如何使用“匿名网络”?


  名气最大的匿名网络有两个,分别是 Tor 和 I2P。俺个人推荐 Tor,但如果你想用 I2P,俺也不反对。
  关于这两款,俺都写了教程(如下)。

Tor 的教程:
“如何翻墙”系列:扫盲 Tor Browser 7.5——关于 meek 插件的配置、优化、原理》(这篇讲“Tor Browser 套件”的使用,比较傻瓜化,支持各种桌面系统)
扫盲 Arm——Tor 的界面前端(替代已死亡的 Vidalia)》(这篇讲 Linux 下如何使用“裸 Tor”,技术门槛比上一篇高)
“如何翻墙”系列:关于 Tor 的常见问题解答》(这篇是 FAQ)

I2P 的教程:
“如何翻墙”系列:简单扫盲 I2P 的使用》(这篇是 I2P 入门教程)

◇如何解决【短信验证】的问题?


  先声明一下:
  由于俺开博比较早(2009年初),那时候移动互联网尚未普及,很多网络帐号【无需】绑定手机。于是就便宜了俺这种懒汉——省去了很多麻烦。
  如今,越来越多的帐号需要绑定手机(注册帐号时,需要【短信验证】)。这时候,你【千万不要】用真实手机进行绑定操作!!!
  很多同学要问了:那咋整啊?大致有两种【通用】的招数可以搞定(如下):

  招数1:虚拟号码
  你上网搜索一下:虚拟号码 短信验证,应该能找到很多【免费】的“虚拟号码服务”。这种服务可以用来帮你接收验证短信。
  用这个招数的时候,有一点请注意——使用“虚拟号码服务”的【全过程】,也要基于【匿名网络】哦!

  招数2:【不记名】的手机卡
  如今天朝的手机卡,全都已经【实名制】了。要找这种【不记名】的手机卡,需要去【境外】。据说香港就有。(至于还有哪些地方可以买到,欢迎列位看官补充)
  当然啦,你没必要为了搞个手机卡专程跑一趟;可以利用某次境外旅游的时候,顺便买一个。
  用这个招数的时候,有几点请注意:
1. 在使用“不记名手机卡”的过程中,要确保你的手机本身是【纯洁】滴(可以考虑去搞一个“功能机/非智能机”来干这事儿)
2. 通过【境外】的手机网络接收“验证短信”。
3. 一旦接收完验证短信,这张“不记名手卡”就拔下来,【别】再用了。
4. 注册的操作过程应该在【PC 端】进行。
5. 不光是注册过程,以后也【不要】在任何手机上操作“你注册的敏感帐号”(手机的危险性,后续章节还会单独谈)



★【硬件】层面的防范


◇总是启用“开机密码”和“硬盘锁”


  一些比较大牌的笔记本电脑,都有这两项功能。当你入手了一台笔记本电脑,首先把这两项开启。
  启用了这两项之后,每次你开机(冷启动),都需要先输入两个密码,分别是“开机密码”和“硬盘密码”。可能某些同学会嫌麻烦,俺要强调一下:想提升安全就不要怕麻烦
  当然啦,这两个玩意儿的【可靠性】到底有多高,是很难讲滴——不同品牌的笔记本电脑,差别很大。但“开启”总归比“不开启”要好。
  另外,正是因为笔记本自带的硬盘锁不一定靠得住,所以你需要在操作系统级别进行【全盘加密】(下面的章节会聊到这个)。

◇把一些多余且危险的 BIOS 选项禁掉


  考虑到不同年代、不同品牌的笔记本,BIOS 选项差异较大。俺在这里只举几个例子。大伙儿要举一反三。
  比如说:对于英特尔(Intel)架构,要把 ME(Management Engine)禁掉——这玩意儿有安全风险。另,AMD 架构也有类似的玩意儿,叫 PSP(Platform Security Processor),也要禁掉。(注:有些 BIOS 无法禁用 ME 或 PSP)
  比如说:当你装好系统之后,应该到 BIOS 的启动配置界面中,把其它的启动项都禁掉,只保留“硬盘启动”这一项。
  比如说:“网络唤醒”的功能就没啥必要,而且有风险。
  ......
  (还有很多,就不逐一列举了。再次提醒大伙儿:举一反三)



★【操作系统】层面的防范


◇如何选择操作系统?


  如果你用的操作系统,其本身就有很多安全问题,那当然不行。所以第一步是:选择某种靠谱的操作系统。

  1. 【不要】使用预装的操作系统
  俺【从不】使用笔记本内置的操作系统。俺的习惯是——只使用自己亲手装出来的系统。
  为啥捏?因为你无法判断预装的系统是否【纯洁】,如果操作系统本身有安全隐患,后面聊的所有安全加固措施都是白搭!
  可能有些同学认为俺故意耸人听闻,建议这些同学去搜一下前几年的新闻。
  随手举个例子——2015年,联想 PC 因【预装】流氓软件,在美国遭遇集体诉讼,赔了好多银子。

  2. 强烈建议【不】用 Windows
  这个已经是老生常谈,具体就不展开了,参见下面这篇:
吐槽一下 Windows 的安全漏洞——严重性超乎想象

  3. Linux 比 Mac OS 更好
  说到这个话题,很多读者以为俺担心 Mac OS 是【闭源】。其实这只是一个方面。甚至都【不是】最主要的方面。
  俺重点想说的是——【攻击面的确定性】。Linux 的特点是——【发行版非常多】。不同的发行版,内置软件的种类和版本不同,内核(kernel)的版本不同,内核的编译参数不同......而且 Linux 还支持多种 CPU 芯片,既有 x86 系列(Intel/AMD),也有【非】x86 系列(比如 ARM)。
  一言以蔽之——Linux 由于发行版之间【巨大的差异】,会导致攻击面【非常不确定】。因此,在不了解你系统配置的情况下,入侵者的难度会急剧变大。
  再来看苹果的桌面系统。因为 Mac OS【没有】“发行版”这个概念。或者换种说法,Mac OS 只有一个发行版(就是苹果官方维护的那个)。所以跟 Linux 一对比,Mac OS 的系统环境就显得非常确定了。
  另外,还有很多其它因素导致了——Linux 比 Mac OS 更有利于安全加固。具体请看下面这篇:
为什么桌面系统装 Linux 可以做到更好的安全性(相比 Windows & macOS 而言)

  4. 如何选 Linux 发行版?
  Linux 的发行版,大概有上百种之多。经常会让新手困惑。
  如果你是 Linux 的新手,先看《扫盲 Linux:如何选择发行版》,了解一些基本概念。
  “如何选择 Linux 发行版”这个问题,【没有】放之四海皆准的标准答案。不同的场景,不同的使用者,自然会有不同的择。以本文这个话题,俺的建议是:【保守型】、【社区维护】、【口碑好】
  你在符合这几个条件的发行版中,挑个你觉得最顺手的。

  5. 善于折腾的同学,也可以考虑 BSD 社区
  BSD 社区比较有影响力的发行版包括如下几个:
  FreeBSD
  这是 BSD 社区最知名的一款,也是该社区最多人用滴。
  OpenBSD
  这款是以【安全性】著称滴。它的社区采用了很多机制(代码审计、最小化权限、最小化安装 ...)来提升系统的安全性。
  而且 OpenBSD 社区非常强调【默认安装的安全性】。也就是说,默认装好,不作任何配置,其安全性就已经足够好。根据历史记录,从1997年到俺写本文之时(2019年初),OpenBSD 在默认安装下只曝光了2个【远程】漏洞(时间分别在2002年、2007年)。这种水平,其它操作系统望尘莫及。
  值得一提的是:有很多知名的软件(比如:OpenSSH、tmux、LibreSSL、PacketFilter)就源于 OpenBSD 社区。
  NetBSD
  这款是以【可移植性】著称滴。号称支持的硬件平台超过任何一款 Linux 发行版。
  (不过捏,这个优势对个人用户而言,意义不大)

  小结
  综上所述,用 Linux 或 BSD。本文后续的讨论,也在这两者基础上展开。

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


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

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

  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. 示意图
  为了便于理解,用表格画个简单的示意图:

用来存放不那么敏感的数据存放高度敏感的数据 
TrueCrypt / VeraCrypt
普通逻辑分区(正常格式化)空闲逻辑分区(先不格式化)
LVM
dm-crypt(LUKS)
物理分区物理分区
物理硬盘

  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. 当你要长时间离开自己的电脑——要么关机,要么关闭/卸载(umount)敏感加密盘

  (注:如果你不太熟悉 TrueCrypt 或 VeraCrypt,对本小节提到的很多名词会纳闷。请参考如下两篇教程)
TrueCrypt 使用经验
扫盲 VeraCrypt——跨平台的 TrueCrypt 替代品



★【网络】层面的防范


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


  无论是 Linux 还是 BSD 都内置了操作系统级的防火墙(Linux 社区有:iptables 和 nftables;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”联网。

  详细的“原理说明”和“配置教程”,参见如下两篇:
如何隐藏你的踪迹,避免跨省追捕[6]:用虚拟机隐匿公网 IP(原理介绍)
如何隐藏你的踪迹,避免跨省追捕[7]:用虚拟机隐匿公网 IP(配置图解)

◇避免用无线网络(比如: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个帐号背后是同一个人。
  更详细的说明,参见下面这篇博文的【公网地址】导致的关联性这个章节。
如何隐藏你的踪迹,避免跨省追捕[10]:从【身份隔离】谈谈社会工程学的防范

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


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



★【Web】层面的防范


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


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

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


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

  如果你不太了解 Firefox 的版本体系,未必明白上述这几个是啥意思。请参考如下博文:
基于安全性考虑,如何选择及切换 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)


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

◇关于【个人信息】


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

◇关于【时间信息】


  关于这个维度的讨论,之前已经专门写过一篇博文(如下)。
如何隐藏你的踪迹,避免跨省追捕[9]:从【时间角度】谈谈社会工程学的防范
  正是因为这方面的考虑,所以俺要让自己的“上线时间”尽量【随机化】,不能有固定的模式。

◇关于【行文风格】


  每个人的遣词造句都有其独特之处,这种独特性就像是语言层面的“指纹”。
  举个例子:
  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 流量被包裹在前置代理的加密流量之内).


from https://program-think.blogspot.com/2019/01/Security-Guide-for-Political-Activists.html

No comments:

Post a Comment