跳到主要内容

计算机病毒防治的原理和未来发展

· 阅读需 21 分钟

尽管我的专业并不涉及计算机病毒,而且公司的计算机安全措施也相当到位,导致我个人的计算机已经七八年没有中过病毒了。然而,前段时间放假回家时,帮姑姑修理电脑,发现她的电脑被病毒侵扰严重。安装杀毒软件并清理系统后,总共查出二十多个流氓软件和五十多个病毒和木马。这让我意识到,病毒问题依然猖獗,没有杀毒软件的保护,电脑安全是得不到保障的。

这次经历激发了我对病毒的兴趣,于是我花了几天时间,阅读了一些关于病毒与杀毒技术的文章。接下来,我将总结这几年来杀毒技术的发展,并分享我对未来发展的看法。在查阅相关文章时,我看到一位网友将杀毒软件与病毒比作城市中的警察和小偷,我认为这个比喻非常恰当,于是在此引用:

科普版寓言版
电脑中除了我们所需的软件,有时还会混进一些专门搞破坏的程序——计算机病毒。计算机普及后,许多用户并不是计算机专业人士,他们不了解程序运行的原理,也分不清哪些是正常程序,哪些是病毒程序。因此,我们需要使用专门的杀毒软件来清除这些危害系统安全的病毒程序。并不是城里每个人都是好人,有些人专门混进来搞破坏。城堡的主人不一定认识城中每个居民,他根本不清楚哪些是良民,哪些是坏蛋。所以,他决定雇佣一些专职警察来抓捕城中坏人,维护城堡的安全。
杀毒软件识别病毒的经典方式是特征码识别,通过病毒文件特有的一些属性、内容等找到它。比如,文件名就是一个特征,某些病毒的文件名是固定的,一看到这个文件,就知道它是病毒。作为警察,最简单的找到坏蛋的方法是:拿到一份公安部颁发的通缉令,上面列有所有已知坏蛋的姓名。警察检查城中每一个居民,如果他出现在通缉令名单中,就将其逮捕。
病毒可以轻易地更改自己的名字,以避开杀毒软件的检查。所以,大多数杀毒软件不用文件名做特征值,比文件名更不容易改变的是病毒程序中关键的一段代码。比如,病毒专用于搞破坏的那段代码,正常程序不应该有这种代码。而且,这段代码相对稳定,不论病毒其它部分怎么改动,它要完成使命,就必须保留这段代码。然而,名字是最容易改的,坏人造个假身份证非常简单。所以,优秀警察在抓坏蛋时,不是根据名字来判断。他们的通缉令上列出的是小偷的一些外观特征。比如,某小偷手持作案工具"螺丝刀",正常人不会时刻拿着螺丝刀。于是,警察把凡是手里拿着螺丝刀的居民都当作小偷抓起来。
病毒为了进一步躲避杀毒软件,需要隐藏自己的特征码。常用的方式是把自己关键代码部分进行加密,不运行时,杀毒软件检测不到相应特征码。病毒运行后,再把其破坏性代码解码并运行。如果病毒只采用一种加密方式,加密后的代码很快就会成为杀毒软件追查的新特征码。所以狡猾的病毒会采用随机加密方式,衍生出无数变种。小偷也不笨,他们会改变特征来对付警察。平时不犯案时,把螺丝刀揣兜里,作案时再掏出来。此外,再时不时换几件外衣,警察就更难认出来了。
对付变种病毒,有些杀毒软件只是简单地把变异后的新特征码添加到病毒特征码库中。这种方法效率较低,有的杀毒软件病毒库虽庞大,杀毒能力却一般。能力更强的杀毒软件可以剥去常见伪装,找出病毒。具有启发式查找能力的杀毒软件还会为病毒创造一个虚拟运行环境,让可疑程序在其中运行,直到病毒露出马脚。对付化妆的小偷,笨警察通过增加罪犯特征信息来稽查,比如在通缉犯特征列表里增加:穿黑大衣,左脸颊有痣的;穿花格上衣,绿短裤,凉拖鞋的;穿白衣服,叼烟,手有疤的,等等。聪明警察则把所有被检查者的衣服脱掉,搜到螺丝刀的就是罪犯。聪明警察还知道引诱罪犯露出原形,比如把保险箱放在某人面前,那人见到保险箱立刻掏出螺丝刀,就是罪犯。
用于盗版的注册机类软件,通常需要挂到别的程序上,或从别的程序进程中读取数据。这些行为跟病毒的行为非常类似,所以注册机程序经常被杀毒软件误认为是病毒。警察有时会抓错人,比如看到掏出螺丝刀的不一定都是小偷,也可能是开锁匠。
早期,杀毒软件的主要工作是查杀磁盘上的病毒。扫描磁盘上每个文件,检查其中是否有与病毒库中特征码相同的代码。若找到,则清除病毒。现在的电脑硬盘容量较大,一个电脑可能包含几百万个文件,扫描所有文件可能耗时数小时,占用大量计算资源。最初,警察稽查坏蛋的方法是挨家挨户搜查。当年城堡规模较小,全搜查一遍花不了多少时间。但现在城市动辄几百万人口,挨家挨户搜查效率极低。
病毒只能通过网络、文件拷贝等方式进入一台计算机,只要在文件进出本机时进行监控,就能杜绝病毒传播。同时,硬盘上的病毒如果不被运行或转移,也不具备破坏性。所以,保证系统安全并不需要检查硬盘上的每个文件,只需监管住主要几个地方即可。 目前,口碑较好的几款杀毒软件,有些以查杀效果见长,有些则以监控效果闻名。如果监控得当,让病毒没有机会进入电脑或运行,是否检查硬盘就无关紧要了。实际上,警察并不需要经常性普查每个人,也能保证城堡安全。他只要守住关键区域,比如在城门、城中心广场等场所检查进出人员;在银行检查资金流动户头等。如果坏蛋老老实实呆在家里,不会对治安产生威胁,只需在他干坏事前抓住他即可。
科普版寓言版
以前,病毒制造者往往只是为了炫耀自己的编程水平,他们通常不会从中获得经济利益。因此,新病毒出现的速度并不快。然而,近年来,病毒产业发现了新的利润增长点:窃取计算机主人信息、资料、密码等并出售。利益驱动下,病毒制造业迅速发展,新病毒的数量每年翻几番。最初,混进城里的坏蛋只是为了搞破坏。这种损人不利己的事只有少数人会做,所以警察的任务并不重。但后来,坏蛋们意识到可以从城中的银行偷钱。于是,各种小偷蜂拥而至。
新病毒数量的激增导致了杀毒软件病毒特征库的膨胀。庞大的特征库占用了大量资源,不仅需要更多的存储空间,还延长了比对过程的计算时间。面对各式各样的小贼——拿丝刀的、拿扳手的、拿锤子的、拿自行车条的,采用传统按通缉令比对的方式,即便是聪明的警察也快要招架不住了。通缉令已经长得令人眼花缭乱。
解决这一问题的办法之一是云存储和云计算,这正是最近一些杀毒软件公司热炒的概念。杀毒公司拥有比客户更强大的计算和存储资源,具备云计算功能的杀毒软件只会把最常见的部分病毒特征码放到被保护的计算机上。一旦发现可疑文件,无法确认是否含有病毒,则将文件交给杀毒公司。公司服务器拥有庞大的病毒特征库,可以对可疑文件进行全面检查,确认是否包含病毒后,再将结果返回给客户端。为减轻警察的负担,公安部决定只把近期破坏性最大的通缉犯列表发给各地警察。警察若发现不在列表中的可疑分子,可以直接交给公安部。公安部有完整的通缉犯名单,并且可以调动更多的警察,以最快速度查明可疑分子的身份。
实际上,病毒还有比特征码更为本质、稳定的特征,那就是行为。病毒千变万化,但其行为特征只有几条,比如自我繁殖和传播、试图取得计算机控制权、试图查看或改变其它可执行文件、试图访问某些数据等。外部特征并不是罪犯最本质的特征。之所以称其为罪犯,是因为他有犯罪行为。
监视病毒特征码必须在病毒被发现并提取特征码之后,才能进行监视。这时,病毒可能已经造成损失。更何况,现在新病毒的增长速度远超杀毒软件公司更新病毒特征库的速度,反应速度只会越来越慢。以外观特征来识别罪犯,必须等到该人被确认为罪犯后,公安部门整理出其外观特征,才能提供给其他警察比对。对于没有案底的犯人来说,警察无法识别。一旦进了通缉令,说明此人已经给社会带来了危害。
监视病毒行为可以彻底解决提取病毒特征码带来的滞后问题。监视病毒行为的软件可以在不知道病毒特征码的情况下,根据软件行为判定其是否为病毒。有没有更有效的制止犯罪的方法?能否在罪犯造成损失前将其制服?答案是肯定的,通过监视犯罪行为可以做到。
监视程序行为的软件早已有之。最简单的方法是控制住系统中所有关键位置,比如某些文件夹、注册表键值等。凡是试图改变这些部位的操作都会被暂时阻拦,然后询问电脑操作者是否允许这些操作。当前,流行的计算机辅助软件都有此功能,安装后会经常弹出提示窗口,询问是否允许某某操作。然而,计算机使用者不一定知道这些操作意味着什么,是否安全,这类监视大多情况下只会增添麻烦,并无实际意义。最初级的监视方式是对城中关键区域进行监控,比如银行、交通要道等。凡是试图进入银行的人都会被拦住,询问主管是否允许其进入。可惜主管并非全知全能,他也不知道进入银行的人是为了正常业务,还是企图抢劫。所以,这种监视方法除了增加主管负担外,并未加强城堡安全。
近年来,一些行为监控软件添加了智能判断功能,可以忽略安全操作,只显示病毒行为。如果用户选择清除病毒,还可以将病毒所作所为复原。这些软件被称为主动防御型防毒软件。好在,最近出现了一批具备智能判断能力的警察。他们不阻拦人们进入银行,而是只在有人行窃时才将其逮捕,并追回赃款。
主动防御型防毒软件与传统的特征码查杀病毒的软件相比,是一项新兴技术,许多方面尚待完善,未必在所有情况下都比传统杀毒软件更好。然而,主动防御型防毒软件可以彻底脱离病毒特征码工作,及时阻隔新病毒,适应当前新病毒数量激增的形势,因此可以肯定地说,它将是未来防杀毒软件的发展方向。实际上,许多传统杀毒软件也已经开始添加主动防御功能。新警察虽然技术水平更高,但缺乏经验,有时表现不如老警察。不过,具有智能识别犯罪行为的警察可以彻底摆脱通缉令,独立工作,并在初次犯罪时就将其拦截。这必然是今后所有警察的培训目标。
科普版寓言版
计算机的发明是为了让人们从简单重复的工作中解脱出来。然而,关于防病毒这一工作,目前仍无法完全由计算机自动完成。尽管现有的优秀杀毒软件可以在没有终端用户参与的情况下独立维护计算机安全,但它们仍需要杀毒软件公司不断进行维护。不论是升级病毒特征库,还是制定新的防病毒行为规则,都离不开专业人员的参与。随着新病毒行为的变化速度加快,杀毒软件编写人员将越来越难以应对。因此,将来有一天,计算机应该能够独立抵御病毒的入侵。考虑一个有机生命体,比如一只小兔子,它不需要外界(例如上帝)的帮助,就能独自抵御疾病。
未来,计算机肯定需要建立一套类似生物体内免疫系统的机制来抵御病毒。免疫系统会持续监视计算机的健康状况,一旦出现异常,如可使用资源减少或磁盘被垃圾文件占据,则将近期新进入的程序视为引起系统异常的罪魁祸首并加以清除。如果清除这些文件后系统恢复健康,则再也不允许这类文件进入系统。当某种病菌第一次进入小兔子的身体时,小兔子可能不会立即对其作出反应。但一旦病菌繁殖起来,小兔子的免疫系统会意识到这是个危险的外来物,进而启动免疫功能将其消灭。小兔子的免疫系统会记住这些病菌,若同一种病菌再次入侵,小兔子的免疫系统会直接将其消灭。
某些病毒一旦发作,可能很难彻底清除。但在电脑被病毒破坏至崩溃之前,至少可以将病毒信息发送给其他电脑。这样,其他电脑可以在病毒发作前识别并清理它。有些病菌非常厉害,单个生命体无法抵御其入侵。然而,生命体组成的物种整体不会被病菌消灭。这是因为个体在病菌进攻下死去,但会将病菌入侵的信息传递给其他个体。人类在这方面尤为典型:某些人染病死去,其他人可以通过研究死者获得抵御该病菌的疫苗,从而保护其他个体抵御疾病。