勒索病毒来袭,如何做一个病毒卷土重来时代的幸存者?
2017-05-17 17:22

勒索病毒来袭,如何做一个病毒卷土重来时代的幸存者?

本文来自微信公众号:歪理邪说(wxieshuo),原文标题《做一个病毒卷土重来时代的幸存者》作者霍炬,虎嗅转载。


出门了10天,没怎么看新闻。回家之后发现这几天出了好多大事,和我们最直接相关的应该是wannaCry病毒爆发事件。现在它已经不算热点了,于是我得以避开人们最惊讶的时刻,可以更冷静的思考一下这件事的产生以及影响,更重要的是,我们应该如何做避免这种事情发生。


很多文章里面说用Mac会更安全,这是严重的误导,这种态度将来会把Mac用户害的更惨。2015年有过XcodeGhost(我写过文章:墙、感染、信任和欺骗,但是被删掉了。在我的后台回复“感染”,可以看到那篇文章。 )


影响了iOS,2014年两次严重漏洞,心脏滴血和Shellshock,Mac都没跑掉,而windows倒是影响不大。(关于心脏滴血,我也写过文章 到底谁才是真正的隐形战友—开源软件和OpenSSL的真实故事 


就算用比特币勒索的病毒,Mac也曾经出现过,叫做KeRanger。比起这些,wannaCry的病毒影响确实更大,传播性更强,但主要问题不在于什么系统更好一点,而是应该弄清楚发生了什么,以及如何应对。


为什么病毒又重新成为一个问题?


我相信很多人看到这个事件的新闻,都会问这个问题。为什么病毒又重新成为问题了?很多年前,使用计算机总是要担心病毒破坏文件,让系统无法系统甚至破坏硬件。但是这些年,似乎没什么病毒作怪了。这是为什么?


病毒的存在始终依赖于系统和软件的漏洞,是这些年软件质量提高了,没什么漏洞供病毒使用了吗?我认为最直接的原因应该是黑产行业的兴起,从而使直接破坏文件,影响用户使用的病毒行为不再有价值。很多年前,人们会使用漏洞制作病毒,这种行为更多是为了恶作剧或者在地下世界出名,以及满足自己的兴趣,而不是为了获得实际利益。黑产行业形成之后,每一个漏洞都是有价格的,发现漏洞之后更好的选择是卖掉它们。


收购漏洞的组织身份多样,从地下组织到企业甚至政府机构都有,但是他们的共同点是,不希望利用漏洞影响用户正常使用计算机,尽管他们有不同的使用这些漏洞的方式。比如地下组织可能会利用漏洞植入木马,获得用户数据再去卖掉获利,企业会用于提供付费咨询和修补解决方案,政府组织,比如这次的漏洞持有者NSA,会把它当作武器储备。但是如果引起大规模用户难以使用,造成巨大的影响,这个珍贵的漏洞就废了--现在我们看到的就是,wannaCry造成了巨大的经济损失,但是其制作者实际受益并没那么大。这个漏洞也迅速引起重视,它失效了。


所以最近这些年一直没有大规模病毒爆发事件,木马、流氓软件成了计算机上的主要威胁,无论木马还是流氓软件,目的都是尽量久的存在在这台计算机上,不要暴露,不要影响用户使用,这样才能避免被清除,获得更有价值数据,它们顶多占用点系统资源或者改下浏览器首页获得点流量,但不愿意破坏用户文件或者系统。




直到最近这几年,开始有小规模的基于比特币勒索的病毒出现,去年Mac上出现过KeRanger,也是锁硬盘勒索比特币,2014年windows上出现过CryptoLocker,这些案例证明了通过比特币,可以安全的从被害个人手里直接获得利益,并且被难以追踪到。再加上NAS的漏洞库被泄漏出来,终于有了这一次的wannaCry。在这以后,大规模的勒索病毒会不会出现很难说,但各种小规模的病毒肯定会比过去多。病毒+虚拟加密货币的模式会重新回到人们视野中,成为一个常见威胁。


Mac比Windows更安全吗?


当然不是。所有系统都有漏洞,更简单点说,代码中出现漏洞只是一个概率问题。无论什么公司,代码到了一定数量,就一定会出现严重漏洞,这是不可避免的。对于很多非技术行业的人会觉得这不可思议,但这就是现实,以目前人类的能力,无论投入多大成本,仍然做不到消除bug。也许未来人工智能发展的足够强大,能提供更好的自动代码审查工具,避免出现致命bug。但就算到那个时候,也会有大量历史积累的代码中存在的问题难以解决。


比较单独对应版本的OS X和Windows,OS X应该是更不安全的系统。无论是safari、iTunes还是系统本身,以及内置的普通用户不怎么接触的开源软件,漏洞数量和危险程度,比起Windows只高不低。且不说苹果一直不怎么上心的OS X,就说苹果的命根子iOS,每个版本都是发布不久就被越狱,而越狱行为本身就是通过系统漏洞完成的提升权限和破解过程。连iOS都始终有这样的漏洞,OS X怎么可能安全呢?


更糟糕的是苹果补漏洞的速度远比不上开源社区,这意味着一个苹果用户,如果没有自己编译代码修开源软件bug的能力,就没办法及时获得安全补丁,至少会落后于Linux主流发行版本好几天。在这段时间内,用户会面临巨大风险。无论是Linux用户还是单纯使用商业软件的Windows用户,面对的状况都还好一些。


我从cvedetails抓了OS X和 windows 10的漏洞统计做对比。注意因为统计方式的问题,OS X被算作一个产品,Windows不同版本算不同产品,这样分类不合理,但只对比 OS X的2015-2017大致可以参考,OS X的问题还是更严重一些的。cvedetails的数据很完整,但是分类和统计做的太糟糕了,它的Top 50排行也因为这个原因导致意义不大




那么为什么没有OS X用户出现大规模被病毒骚扰的事件?


之前说过,从漏洞到病毒或者木马,都和利益直接相关。OS X用户占1%左右的份额,实在不值得骚扰,更不值得费劲勒索。而windows XP这种古老系统仍然在无数个人、企业甚至系统中使用,显然是更好的获利渠道。从这个角度说,OS X用户更不应该过于乐观,等到有人相信了“苹果用户付费能力更好”,那时候就算1%也会有人试图通过勒索获利,如果最终这个观点真的被证实了,苹果用户付赎金更爽快,那之后就是无穷无尽的灾难。


除此之外,功能越多,就代表其中存在漏洞的可能性越大。一台断网,放在法拉第笼里面的计算机,别管用什么系统,都挺安全的,《疑犯追踪》里面就有这么一段剧情。除了某些特殊用途,这样的计算机虽然安全,对正常用户完全没意义。


Windows系统提供了更多功能,出现漏洞的机会也就更大。除了系统本身,运行于其上的软件更是造成安全问题的来源。比如这次的问题,是来自文件共享的早期协议samba 1,这是很多办公环境内网不得不有的功能,因为还有大量早期开发的软件建立其上,一直没有升级。这些用户也就没法升级到不兼容这种旧协议的新系统,最后成了被攻击的目标。


OS X缺乏足够办公辅助应用,功能是不完全的,软件和服务少,漏洞也就少。主要使用OS X办公的团队通常依赖互联网服务完全办公流程,那些依赖自己提供的内网服务的企业,就只能使用Windows了,这也是没选择的事。


所以,与其迷信什么系统更安全,不如理解漏洞是不可避免的,这样才能做好预防措施。实际上,严重漏洞还不仅仅出现在软件厂商中,5月1日,Intel发了一个更新,修补了一个在其芯片上7年之久的严重漏洞,通过这个漏洞,可以绕过操作系统直接控制计算机。连cpu都有问题,纠结哪个系统更安全就更没意义了。另外,这也不是Intel cpu第一次出漏洞,前几年也出过好几次了。AMD cpu用户也不用高兴太早,AMD一样出过好几次类似问题。


所以,使用什么操作系统只是一种个人偏好,无论使用什么系统,都应该做到这些:


  • 使用最新的软件 

  • 及时更新系统 

  • 为自己制订一个恰当的使用策略 

  • 备份


前两个不用多说,最新的操作系统都能比较好的解决这个问题。Windows 10不惜得罪用户也要强制更新系统,虽然弄出来很多让人哭笑不得的奇葩案例,但是这种强制更新是必要的,它可以有效降低用户遭受严重伤害。微软吃了这么多年亏,终于狠下心来做了这件事。系统维护对于安全性相当重要,就算是公认安全的OpenBSD系统,如果常年没人维护,一样不堪一击。


前面说过,很多企业有大量老旧软件没法更新,只能停留在旧的系统上。这种情况就需要制订合适的使用策略。比如限制使用这些旧系统的人数,凡是不依赖旧软件的用户,应该尽量升级到新系统。必须使用的,如果有可能的话,应该把这些软件隔离在虚拟机系统里面,在虚拟机内部使用旧版操作系统,外部仍然可以升级到最新系统。应用这些策略,就会让旧软件和旧系统带来的威胁降低很多。顺便说一句,Windows 10自带的Hyper-V虚拟机系统已经相当完善,性能也很好,完全可以做日常应用,大多数Windows用户没理由不升级到Windows 10了。


结合虚拟机应用,可以制订一些简单的使用策略来提高安全性,比如某些软件永远运行在单独的虚拟机里面等等。另外,对于所有非官方商店下载的应用都要验证签名,这些都是很好的习惯,可以躲过大部分常见灾难。这里也需要注意,虚拟机并不是完全可靠,前面说的Intel和AMD历史上都出现过的bug之一就是虚拟机系统下的权限提升漏洞,何况有“虚拟机逃逸”攻击,即让虚拟机内的程序越过虚拟机,获得到主机上允许的权限。没有绝对安全的方案,但合理规划使用虚拟机,还是比不使用好很多的。


最值得投入的是备份。有名言曰:“冗余不做,日子甭过; 备份不做,十恶不赦!” 可惜这句话主要在系统管理员和工程师人群中流传,普通用户理解不了备份的重要。


大部分用户是没有备份习惯的,这次的病毒事件也说明了这一点,别说个人用户没有,很多企业用户也没有。就算不考虑病毒造成的伤害,平时人为的误操作或者硬件故障,一样会导致资料损失。一个可靠的备份方案可以解决所有问题,怎么强调其重要性也不过分。在这方面,无论OS X和Windows都提供了一些基本工具。


OS X提供的Time Machine,它的优点缺点都很明显。优点是简单易用,这也是大部分苹果出的软件的优势。缺点,是不够可靠,也达不到工业级需求。无论是老旧的HFS+系统限制,还是苹果的封闭造成无线备份必须使用专有硬件(当然有其他解决方案,但是配置麻烦),以及无法进行多副本的异地备份等,这些缺点都让Time Machine只能成为勉强可用的备份方式。


Windows提供了好几个方案,针对系统本身的系统还原,针对文件的shadow copy和File History,其中File History类似Time Machine。优点缺点也差不多。

如果想要一个更好的解决方案,开源的bacula是一个好选择,它是跨平台的,无论OS X还是Windows都可以用,功能也足够完善。


除了选择软件,更重要的是把自己的文件做好规划,划分重要程度。其实每个人真正来自自己创造,不可恢复的文件总量不会太大,这些文件才是最重要的,一旦失去就无法再获得,应该列为最高优先级。操作系统本身虽然恢复和配置起来比较麻烦,但并不是无法获得的,优先级反而低的多。Time Machine把系统和文件混在一起备份,浪费时间和空间,也限制了备份方式的多样性,算不得好方案。


我自己使用的备份方案比较复杂,虽然可以满足我所有需求,但是它本身也是需要维护的,使用成本不低。具体方案我附在文末,供有兴趣爱折腾的同学参考。


从软件更新到备份,无论是个人还是企业,这里面都隐含了一项必备的成本,即维护成本。


在过去的几十年里面,计算机变得越来越易用,功能也越来越强大。但是表面上的界面友好,掩盖了它实质上的复杂性,计算机本身的灵活性导致它不可能成为电视那样打开即用的家电,而是需要维护的高复杂性产品。


如何维护它,又成了一项必须投入时间学习的技能,这种技能往往被忽略,它成了一种隐含成本。而且随着智能家电越来越多,电视也不是打开就用这么简单,它也涉及到了升级,划分网络管理等问题…对于一个家庭,越来越多智能设备被连入家庭网络里面,所有设备和网络都需要维护,维护成本反而越来越高了。


大多数家庭买一个新设备,或者大多数企业开发一个新软件的时候,通常只考虑到它的功能和方便性,很少考虑维护成本。运维这个隐形成本始终在积累,早晚有一天会爆发,并且造成巨大的伤害。这次病毒事件只是这种观念长期积累的必然结果,它一定不是最后一次。


最后两个希望:


  • 希望所有人都学习使用git,并且基于git的思路来设计工作流。git不仅是版本控制系统,更是分布式协作思想的实践,基于分布式协作,可以设计各种复杂的工作流程,满足各种需求。这在技术领域已经进行了多年实践,效果非常好。这么好的工具绝不应该只限于技术领域,所有行业都值得使用它。分布式协作意味着参与协作的人都有一份完全副本,连同服务器,天生产生了多个备份。


  • 希望有综合提供维护和备份方案的服务商出现。对于个人和家庭来说,几乎不可能做到人人都弄清楚这些复杂问题。最终还是要依靠收费服务来解决问题,就像汽车一样,并不是人人都知道汽车工作原理,但至少知道定期送去专业机构做维护。


我的备份方案如下:


  • 备份主机是一台安装了FreeBSD系统的NAS ,用ZFS把硬盘组成raid-Z做为存储系统。


  • 在各计算机和NAS上安装syncthing(https://syncthing.net),设置需要备份的文件目录和NAS同步,这样就把全家各台机器,包括虚拟机内部需要备份的文件都放到了NAS的存储上。syncthing本身支持比较简单的文件版本,但是我没使用这一特性,主要使用它的同步功能。文件版本通过ZFS的snapshot功能实现。


  • 开源版本的ZFS没有原生加密功能,而对于备份系统,加密是必须的。所以我在FreeBSD上使用PEFS做为加密方案,缺点是加密之后会使得ZFS压缩功能几乎失效,不过无所谓,硬盘空间并不值钱,何况前面说过,规划好需要备份的重要文件本身也不会太大。


  • 使用ZFS快照并且做远程同步,我所知道的最好工具是 zrep (http://www.bolthole.com/solaris/zrep/)。在我的系统上,使用zrep,每10分钟对已加密文件系统做一次快照,并把快照同步到异地节点。同步节点同样需要使用FreeBSD和ZFS。


  • 我设置了两个快照同步节点,一个较快的节点位于附近城市,一个较慢的节点位于另外一片大陆。 我实际使用案例中,这两个节点分别位于蒙特利尔和北京。 加上我自己家里的NAS,三个节点可以保证在人为灾难(硬件损坏,火灾)和自然灾害(地震,水灾)等影响下仍然至少存活一个备份,是比较可靠的方案。


  • 最后需要提醒的是,用作备份的ZFS系统,只应该使用BSD/Solaris,其他系统上ZFS的移植可靠性没那么高。


前面提到的 Git 的思路和工具使用方式,专门学前沿技术的硅谷学习平台 Udacity 上就有免费课程,链接我放在“阅读原文”里。凡是涉及多名内容贡献者的项目,或是需要有效版本控制的东西,用 Git 的思路去处理都是非常重要和有益的。这也是为什么 Github 几乎是所有程序员都会用到的平台。另外,Udacity上面还有很多有意思的课程,可以搜索一下找自己有兴趣的内容来学。


本内容为作者独立观点,不代表虎嗅立场。未经允许不得转载,授权事宜请联系hezuo@huxiu.com
如对本稿件有异议或投诉,请联系tougao@huxiu.com
正在改变与想要改变世界的人,都在 虎嗅APP
赞赏
关闭赞赏 开启赞赏

支持一下   修改

确定