最近一周,来自网络的Wannacry Ransomware君在世界各地同时上演了一部绑匪大片,台词华丽,演技出色,当仁不让地新晋世界第一网红。全球各国除了默默忙于两弹一星足不出户的朝鲜外,无不为之动容。一时间,包括WannaCry在内的各种病毒的各种传闻也火爆网络,我们并不准备跟风刷屏,只是打算本着实事求是的精神,科学的探讨一下如何与它们和睦相处、谈笑风生。
“想哭”病毒的前世今生
框架和模块是码农们除了日本爱情动作片主角外最津津乐道的话题,基于成熟框架和模块可以大幅提升开发效率,提高代码质量,简单的说就是站在巨人的肩膀上可以下班更早,加班更少。WannaCry也是基于网络攻击框架二次开发的结果,它利用了NSA的前辈们留下的非物质文化遗产:永恒之蓝(ETERNALBLUE)模块,针对Windows SMB服务的实现漏洞植入恶意代码,再结合自己的创新:加密用户文件和显示勒索声明,一代网红勒索病毒由此诞生。从病毒本身的设计流程来看,似乎并不需要高深的编码技巧或深厚的理论根基,然而这也恰恰是这一事件中最值得我们警惕的地方:NSA泄漏的攻击模块远不止永恒之蓝一种,借助已有攻击框架进行二次开发的难度又如此之低,所以,可以预期,一大波未知的病毒正在来袭的路上。
是不是细思极恐?所谓“知彼知己,百战不殆”,要想不die,先要充分了解对手,所以接下来我们进一步了解一下什么是病毒?病毒是如何以危险方式危害公共安全的?又是怎样进入我们的系统的?
病毒是什么,其实是老生常谈了,经常关注医疗卫生领域的朋友都知道:
病毒是一段基因与蛋白质构成,自身不能实现新陈代谢,通过适当的途径侵入宿主体内,通过宿主细胞的代谢系统实现复制传播。
跑题了?好吧,不要在意这些细节,我们改几个字就能用了:
病毒由一段可执行代码与数据构成,自身不能在裸机上运行,通过适当的途径侵入宿主操作系统,通过宿主系统中的存储和网络实现复制传播。
Wirth教授教导我们,算法+数据结构=程序,
病毒=代码+数据=算法+数据结构=程序
没错,病毒就是一类特殊的计算机程序,广义上称为恶意软件。通常它们怀着对人类的深深的恶意来到世上,行为各不相同,有的在你的屏幕上画个圈圈诅咒你,有的会窃取你设备中的隐私照片,还有的会眨眼间转走你银行卡上的购房首付款......显然,它们的目标还是很一致的:危害人类设备,破坏世界和平。
又扯远了,我们接着来看病毒是如何入侵操作系统的。病毒的入侵无外乎两个途径:主动和被动。所谓主动是针对目标系统尝试发起扫描和攻击,一般是远程发起,当发现了自己能吃定的漏洞之后,就通过各种阴险手段(其实技术实现上大多还是很优雅的)攫取系统权限,进而将恶意代码注入宿主系统中伺机作恶,对此没什么概念的小伙伴可以自行脑补一下《异形》中的人类被寄生的过程。
病毒入侵的另一种方式,我们称之为被动方式。这种方式并不需要系统存在漏洞或缺陷,需要的是用户的经验、常识或智商存在缺陷。它们通过各种伪装诱骗用户去打开或运行自己,包括形形色色让你心动的邮件、链接、不明来源的安装程序等等,一旦获得机会运行,它们会悄无声息的在你的系统中安营扎寨、留下多道后门,然后为所欲为,这类病毒又被形象地称为(特洛伊)木马。
如何应对各种病毒威胁
了解了病毒的来龙去脉之后,我们就可以讨论如何应对各种病毒层出不穷的威胁了。
对于大多数用户,良好的使用习惯是第一位的。堡垒往往从内部被攻克,再安全的操作系统,再强大的安全机制,都难以阻止用户的自我毁灭的脚步。良好的使用习惯中最重要的,是安全更新,安全更新,安全更新!为什么呢?这要先谈一下操作系统漏洞的由来。
漏洞实际是软件缺陷的一种,也就是俗称的bug,是由于软件开发人员的疏忽而导致程序没有按照预期的方式运行。软件缺陷多种多样,有些很呆,有些很萌,也并不都会对系统安全构成威胁。在软件正式发布前,研发人员和测试人员经过漫长而艰苦卓绝的互相伤害,通常最终会达成妥协,通过共同消灭软件缺陷的方式来解决双方的争端。然而总会一些生性狡猾、城府极深的漏网之鱼,潜伏在革命队伍中,混入千家万户。当它们中的一些被黑客们发现、策反,并借助自己在系统内部的有利位置,披着合法软件的外衣,做出送人头、坑队友的恶劣行径时,就成为软件系统的公敌:漏洞。
软件漏洞通常分为代码实现漏洞和逻辑设计漏洞。代码实现漏洞通常是开发人员代码编写方式的缺陷而产生的漏洞,常见的包括缓冲区溢出、格式化字符串、内存越界访问、资源释放重用等;另一类则是逻辑设计漏洞,它在架构或流程设计上就存在的固有缺陷,较为常见的例如安全机制可旁路,导致密码检查、权限验证等机制被轻易绕过。而越庞大越复杂的系统中越容易产生这两类漏洞。操作系统就是这样一类极其庞大而复杂的软件系统。
虽然操作系统漏洞常常难以完全避免,然而某个漏洞一旦被发现,开发厂商都会在第一时间发布安全更新对问题进行修复。以这次勒索病毒为例,针对被利用的SMB服务漏洞,事实上早在一个月前微软就公布了漏洞警告和补丁,提供了安全更新,那些开启自动更新及时修复了漏洞的用户,他们可以用省下的三个比特币吃着火锅唱着歌,完全不用担心麻匪。
所以请划重点:操作系统安全更新非常重要,不论个人用户、企业用户还是系统管理员,不论服务器,桌面还是移动终端,不论Windows,Linux还是MacOS,都应该尽可能及时地从操作系统厂商处获取安全更新。
其次,杀毒软件也可以起到一定的安全增强的作用,多数杀毒软件可以借助病毒库对已有病毒的特征进行分析比对,一旦发现用户即将运行的程序中含有病毒或恶意程序,会及时提醒用户,甚至自动清除。因此,杀毒软件可以在很大程度上防御已知的、以被动方式入侵系统的病毒。
那么,积极地安全更新、安装杀毒软件就可以解决所有病毒威胁了么?很不幸,事实并非如此。安全更新和杀毒软件之于病毒威胁正如强身健体之于疾病隐患,可以大幅降低几率,却难以完全避免。为什么?这要从零日(0-day)漏洞说起。
转载请注明出处。