跳到主要内容

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

· 阅读需 26 分钟

   本来我的专业与计算机病毒没有什么联系,而且公司的计算机安全工作做得不错,我的计算机有七八年没中过毒了,所以我一直没怎么认真留意过计算机病毒。前一阵子放假回家,帮助姑姑去修理电脑,发现她的电脑是被病毒搞坏的。然后帮她安装杀毒软件,清理系统,总共查出了二十多个流氓软件和五十几个病毒、木马。我这才意识到时下病毒还是蛮猖獗的,电脑上没个杀毒软件保护着绝对不行。

   这也勾起了我对病毒的兴趣,于是花了几天时间,阅读了一些有关病毒与杀毒技术的文章。下面总结一下这几年来杀毒技术的发展,以及我对这项技术未来发展的一些想法。在查阅相关文章时,看到一位网友以城市中的警察和小偷来比喻杀毒软件与病毒。我觉得这是个非常恰当的比喻,所以我在这里也借用这个比喻:

<table style="border-collapse:collapse;width:569px;height:944px;text-align:left;margin-left:auto;margin-right:auto;" border="0"><colgroup><col style="width:284px;"><col style="width:284px;"></colgroup><tbody valign="top"><tr><td style="border:.5pt solid black;"><p><font size="3"><span style="font-size:10pt;">科普版</span></font></p></td><td style="border-color:black black black 0;border-style:solid solid solid none;border-width:.5pt .5pt .5pt medium;"><p><font size="3"><span style="font-size:10pt;">寓言版</span></font></p></td></tr><tr><td style="border-color:0 black black;border-style:none solid solid;border-width:medium .5pt .5pt;"><p><font size="3"><span style="font-size:10pt;">电脑里除了我们所需的那些软件之外,有时还会混进一些专门搞破坏的软件——计算机病毒。计算机普及之后,使用计算机的人往往不是计算机专业人士,他们并不了解程序运行的原理也分不清楚哪些是正常的程序,哪些是病毒程序。所以,我们需要使用专门的杀毒软件来清除危害系统安全的病毒程序。</span></font></p></td><td style="border-color:0 black black 0;border-style:none solid solid none;border-width:medium .5pt .5pt medium;"><p><font size="3"><span style="font-size:10pt;">并不是城里每个人都是好人,有些人是专门混进来搞破坏的,城堡的主人不见得认识城中每个居民,他根本不清楚哪些是良民,哪些是坏蛋。于是,城堡的主人决定雇佣一些专职的警察来负责抓捕城中坏人,维护城堡的安全。</span></font></p></td></tr><tr><td style="border-color:0 black black;border-style:none solid solid;border-width:medium .5pt .5pt;"><p><font size="3"><span style="font-size:10pt;">杀毒软件识别病毒的经典方式是特征码识别,通过病毒文件特有的一些属性、内容等找到它。比如说,文件名就是一个特征,某些病毒的文件名是固定的,所以一看到这个文件,就知道它是病毒。</span></font></p></td><td style="border-color:0 black black 0;border-style:none solid solid none;border-width:medium .5pt .5pt medium;"><p><font size="3"><span style="font-size:10pt;">作为警察,最简单的找到坏蛋的方法是:拿到一份公安部颁发的通缉令,上面列有所有已知坏蛋的姓名。警察们检查城中每一个居民,如果他出现在通缉令的名单中,就将其逮捕。</span></font></p></td></tr><tr><td style="border-color:0 black black;border-style:none solid solid;border-width:medium .5pt .5pt;"><p><font size="3"><span style="font-size:10pt;">病毒可以轻易地给自己换个名字,以避开杀毒软件的检查。所以,大多数杀毒软件不用文件名做特征值,比文件名更不容易改变的就是病毒程序中比较关键的一段代码。比如病毒专用于搞破坏的那段代码,正常程序是不应该有这种代码的。而且,这段代码相对稳定,不论病毒其它部分怎么改,它要完成它的使命,就必须要有这段代码。</span></font></p></td><td style="border-color:0 black black 0;border-style:none solid solid none;border-width:medium .5pt .5pt medium;"><p><font size="3"><span style="font-size:10pt;">然而,名字是最容易改的了,坏人造个假身份证非常容易。所以,优秀警察在抓坏蛋的时候不是按照他的名字来判断。他们的通缉令上列出的是小偷的一些外观特征。比如,某小偷的特征是手持一把作案工具"螺丝刀",正常人不会时刻拿着一把螺丝刀。于是,警察把凡是手里拿着螺丝刀的居民都当作小偷抓起来。</span></font></p></td></tr><tr><td style="border-color:0 black black;border-style:none solid solid;border-width:medium .5pt .5pt;"><p><font size="3"><span style="font-size:10pt;">病毒为了进一步躲避杀毒软件,需要隐藏自己的特征码。常用的方式是把自己关键的代码部分进行加密,不运行时,杀毒软件就检验不到相应的特征码。病毒运行起来之后,再把其具有破坏性的代码解码出来并运行。病毒如果只采用一种加密方式,加密后的代码很快就会成为杀毒软件追查的新特征码,失去作用。所以狡猾的病毒可以采用随机加密的方式,衍生出无数变种。</span></font></p></td><td style="border-color:0 black black 0;border-style:none solid solid none;border-width:medium .5pt .5pt medium;"><p><font size="3"><span style="font-size:10pt;">小偷也不笨,也会改变特征来对付警察。平时不犯案的时候,完全可以把螺丝刀揣兜里,作案时候再掏出来就是了。此外,再时不时换几件外衣,警察就更认不出来了。</span></font></p></td></tr><tr><td style="border-color:0 black black;border-style:none solid solid;border-width:medium .5pt .5pt;"><p><font size="3"><span style="font-size:10pt;">对付变种病毒,有些杀毒软件就是简单地把变异后的新特征码添加在自己的病毒特征码库中。但是这种简陋的方法效率较低。所以,有的杀毒软件虽然病毒库非常庞大,杀毒能力却一般。能力更强的杀毒软件可以剥去常见的伪装外衣找出病毒。具有启发式查找能力的杀毒软件还会为病毒创造一个虚拟运行环境,让可疑程序在其中运行自己的代码,直到病毒露出马脚。</span></font></p></td><td style="border-color:0 black black 0;border-style:none solid solid none;border-width:medium .5pt .5pt medium;"><p><font size="3"><span style="font-size:10pt;">对付这种化了装的小偷,笨警察通过增加罪犯特征信息的方式来稽查坏人,比如在通缉犯特征列表里增加:穿黑大衣,左脸颊有块痣的;穿花格上衣,绿短裤,凉拖鞋的;穿白衣服,叼根烟,手上有块疤的,等等。聪明警察不用记那么多,聪明警察把所有被检查者的衣服都脱掉,再搜身,搜到螺丝刀的就是罪犯。聪明警察还知道引诱罪犯露出原形,比如把保险箱放在某人面前,而那人见到保险箱就立刻掏出来一把螺丝刀,则这人肯定是罪犯。</span></font></p></td></tr><tr><td style="border-color:0 black black;border-style:none solid solid;border-width:medium .5pt .5pt;"><p><font size="3"><span style="font-size:10pt;">用于盗版的注册机一类的软件,通常需要把自己挂到别的程序上,或者从别的程序进程里读数据出来。这些行为跟病毒干的事情非常类似,所以注册机程序经常被杀毒软件认作是病毒。</span></font></p></td><td style="border-color:0 black black 0;border-style:none solid solid none;border-width:medium .5pt .5pt medium;"><p><font size="3"><span style="font-size:10pt;">警察有时会抓错人的,比如看见锁头习惯性掏出螺丝刀的不一定都是小偷,也可能是开锁匠。</span></font></p></td></tr><tr><td style="border-color:0 black black;border-style:none solid solid;border-width:medium .5pt .5pt;"><p><font size="3"><span style="font-size:10pt;">早期,杀毒软件的主要工作是查杀磁盘上的病毒。扫描磁盘上每个文件,检查其中是否有与病毒库中特征码相同的代码。若找到,则清除病毒。现在的电脑硬盘都比较大,一个电脑里可以包含几百万个文件甚至更多。把这些文件扫都描一遍,可能要耗时数个小时,占用了大量计算资源。</span></font></p></td><td style="border-color:0 black black 0;border-style:none solid solid none;border-width:medium .5pt .5pt medium;"><p><font size="3"><span style="font-size:10pt;">最初,警察稽查坏蛋的方法是挨家挨户搜查。当年城堡规模都比较小,全搜查一遍也花不了多少时间。但现在城市动则几百万人口。挨家挨户的去搜查效率实在是太低了。</span></font></p></td></tr><tr><td style="border-color:0 black black;border-style:none solid solid;border-width:medium .5pt .5pt;"><p><font size="3"><span style="font-size:10pt;">病毒只能通过网络、文件拷贝等方式进入一台计算机,只要在文件进出本机时进行监察,就可以杜绝病毒的传播。同时,存在于硬盘上的一个病毒,如果不被运行或转移,也不具备任何破坏性。所以,保证系统安全并不需要检查硬盘上的每个文件,只要监管住主要的几个地方就可以了。<br>当前,口碑最好的几款杀毒软件中,就有些是以查杀效果见长;而有些是以监控效果闻名。如果监控的当,让病毒根本没有机会进入电脑或在电脑上运行起来,查不查硬盘也就无所谓了。</span></font></p></td><td style="border-color:0 black black 0;border-style:none solid solid none;border-width:medium .5pt .5pt medium;"><p><font size="3"><span style="font-size:10pt;">其实,警察并不需要经常性的普查每个人,也可以保证城堡的安全。他只要把守住关键的区域就可以了,比如,在城门、城中心广场等场所检查每个进出的人;在银行检查每个有资金流动的户头等。如果坏蛋老老实实呆在家里是不会对治安产生威胁的,只要在他干坏事前抓住他就可以了。</span></font></p></td></tr></tbody></table>

 

<table style="border-collapse:collapse;text-align:left;margin-left:auto;margin-right:auto;" border="0"><colgroup><col style="width:284px;"><col style="width:284px;"></colgroup><tbody valign="top"><tr><td style="border:.5pt solid black;"><p><font size="3"><span style="font-size:10pt;">以前,病毒制造者往往只是想炫耀一下自己的编程水平,他们通常不会从制造病毒中获得经济利益。所以,新病毒出现的速度并不是很快。然而,这几年,病毒产业突然发现了新的利润增长点:偷取计算机主人信息、资料、密码等,然后卖钱。在利益的驱动下,病毒制造业迅速发展,新病毒增速每年都翻几番。</span></font></p></td><td style="border-color:black black black 0;border-style:solid solid solid none;border-width:.5pt .5pt .5pt medium;"><p><font size="3"><span style="font-size:10pt;">最初,混进城的坏蛋只是想搞搞破坏。这种损人不利己的事只有少数变态才会做,所以警察的任务并不太重。但后来,坏蛋们意识到,可以从城中的银行偷钱出来。于是,各种小偷蜂拥而至。</span></font></p></td></tr><tr><td style="border-color:0 black black;border-style:none solid solid;border-width:medium .5pt .5pt;"><p><font size="3"><span style="font-size:10pt;">新病毒数量的膨胀造成了查毒软件病毒特征库的膨胀。巨大的特征库占用了大量资源,在存储空间上需要占用更大的内存,比对过程也需要更长的计算时间。</span></font></p></td><td style="border-color:0 black black 0;border-style:none solid solid none;border-width:medium .5pt .5pt medium;"><p><font size="3"><span style="font-size:10pt;">面对着那拿丝刀的、拿扳手的、拿锤子的、拿自行车条的……各式各样的小贼,采用传统的按通缉令比对的方式,即便是聪明警察也快要招架不住了。通缉令已经长得令人眼花缭乱了。</span></font></p></td></tr><tr><td style="border-color:0 black black;border-style:none solid solid;border-width:medium .5pt .5pt;"><p><font size="3"><span style="font-size:10pt;">解决这一问题的办法之一是云存储和云计算,这正是最近一些杀毒软件公司热炒的概念。杀毒公司拥有比客户更强大的计算和存储资源,所以,具有云计算功能的杀毒软件只把最常见的部分病毒的特征码放到被保护的计算机上。杀毒软件若发现被保护的计算机上有可疑文件,不能确认是否有病毒,则把可以文件交给杀毒软件公司。杀毒软件公司的服务器拥有庞大完整的病毒特征库,可以对可疑文件进行完整检查,以确认该文件是否包含病毒。然后将结果返回给杀毒软件客户端。</span></font></p></td><td style="border-color:0 black black 0;border-style:none solid solid none;border-width:medium .5pt .5pt medium;"><p><font size="3"><span style="font-size:10pt;">为了减轻警察们的负担,公安部决定只把近期破坏性最大的通缉犯列表发给各地警察。警察若发现不在列表中的可疑分子,可以将他们直接交给公安部。公安部有完整的通缉犯名单,并且可以调动更多的警察。他们可以以最快的速度查出可疑分子的身份。</span></font></p></td></tr><tr><td style="border-color:0 black black;border-style:none solid solid;border-width:medium .5pt .5pt;"><p><font size="3"><span style="font-size:10pt;">实际上,病毒还有比病毒特征码更为本质、稳定的特征,就是病毒的行为。病毒千变万化,但表现出来的行为特征就只有那么几条。比如自我繁殖和传播、试图取得计算机的控制权、试图查看改变其它可执行文件、试图访问某些数据等等。</span></font></p></td><td style="border-color:0 black black 0;border-style:none solid solid none;border-width:medium .5pt .5pt medium;"><p><font size="3"><span style="font-size:10pt;">外部特征并不是罪犯的最本质特征。之所以称其为罪犯,是因为他有犯罪行为。</span></font></p></td></tr><tr><td style="border-color:0 black black;border-style:none solid solid;border-width:medium .5pt .5pt;"><p><font size="3"><span style="font-size:10pt;">监视病毒的特征码,一定要在病毒被人发现,提取了它的特征码之后,才能对其进行监视。这时,病毒可能已经造成某些损失了。更何况,现在新病毒的增长速度远远尝超过杀毒软件公司更新病毒特征库的速度。杀毒公司对新病毒的反应速度只会越来越慢。</span></font></p></td><td style="border-color:0 black black 0;border-style:none solid solid none;border-width:medium .5pt .5pt medium;"><p><font size="3"><span style="font-size:10pt;">以外观特征来识别罪犯,必须要等到该人被确认为罪犯,公安部门整理出他的外观特征后,才能提供给其他警察进行比对。但是,对于没有案底的犯人来说,警察就无法将其识别出来了。一个人一旦进了通缉令,说明他已经为社会带来过危害了。</span></font></p></td></tr><tr><td style="border-color:0 black black;border-style:none solid solid;border-width:medium .5pt .5pt;"><p><font size="3"><span style="font-size:10pt;">监视病毒的行为,可以彻底解决提取病毒特征码带来的防毒滞后问题。监视病毒行为的软件,可以在不知道病毒特征码的情况前,根据一个软件的行为来判定它是否是病毒。</span></font></p></td><td style="border-color:0 black black 0;border-style:none solid solid none;border-width:medium .5pt .5pt medium;"><p><font size="3"><span style="font-size:10pt;">有没有更有效的制止犯罪的方法呢?可不可以在罪犯还没造成任何损失的情况下就将其制服呢?这也是有的,这就是对各种犯罪行为进行监视。</span></font></p></td></tr><tr><td style="border-color:0 black black;border-style:none solid solid;border-width:medium .5pt .5pt;"><p><font size="3"><span style="font-size:10pt;">监视程序行为的软件早已有之。最简单的监视方法是控制住系统中所有关键位置,比如某些文件夹,某些注册表的键值等。凡是试图改变这些部位的操作都会被暂时阻拦住,然后,询问电脑操作者是否允许这些操作。在得到计算机使用者的许可后再进行操作。时下,流行的计算机辅助软件都有这个功能。安装了它们,就会经常收到他们弹出的提示窗口,询问是否允许某某操作。问题是计算机的使用者也不一定知道这些操作是什么意思,是否安全。所以这类监视大多数情况下除了增添麻烦,并无任何意义。</span></font></p></td><td style="border-color:0 black black 0;border-style:none solid solid none;border-width:medium .5pt .5pt medium;"><p><font size="3"><span style="font-size:10pt;">最初级的监视方式是对城中的关键区域进行监控,比如说银行、交通要道等。凡是试图进入银行的人都会被拦阻,然后询问主管,是否允许其进入银行。不幸的是,主管并非上帝,他也不知道进入银行的人是为了正常业务,还是企图抢劫。所以,这种监视方法,除了增加主管的负担之外,并没有加强城堡安全。</span></font></p></td></tr><tr><td style="border-color:0 black black;border-style:none solid solid;border-width:medium .5pt .5pt;"><p><font size="3"><span style="font-size:10pt;">近年来,也有一些行为监控软件中添加了智能判断的功能。他们可以忽略那些安全的操作,只把病毒的作为显示给电脑操作者。如果电脑使用者选择清除病毒,它们还可以把病毒的所作所为都复原。这些软件也被称为主动防御型的防毒软件。</span></font></p></td><td style="border-color:0 black black 0;border-style:none solid solid none;border-width:medium .5pt .5pt medium;"><p><font size="3"><span style="font-size:10pt;">好在,最近出现了一批具备智能判断能力的警察。他们并不阻拦人们进入银行,而是只在有人行窃时,才将其逮捕,并追回赃款。</span></font></p></td></tr><tr><td style="border-color:0 black black;border-style:none solid solid;border-width:medium .5pt .5pt;"><p><font size="3"><span style="font-size:10pt;">主动防御型的防毒软件与传统按照特征码查杀病毒的软件相比,是个新兴技术,很多方面还有待完善,所以并不是在所有情况下都比传统杀毒软件更好。但是,主动防御型的防毒软件可以彻底脱离病毒特征码进行工作,可以及时阻隔新出现的病毒。它更适应当前新病毒数量激增的形式,所以可以肯定地说,它会是将来所有防杀毒软件的发展方向。实际上,很多传统的杀毒软件也已经开始在其中添加主动防御功能了。</span></font></p></td><td style="border-color:0 black black 0;border-style:none solid solid none;border-width:medium .5pt .5pt medium;"><p><font size="3"><span style="font-size:10pt;">新警察虽然技术水平更高,但缺乏经验,有时候并不比老警察表现更好。不过,具有智能识别犯罪行为的警察可以彻底摆脱公安部的通缉令,独立工作。并且可以在一个人初次犯罪时就将其拦截。这必然是今后所有警察的培训目标。</span></font></p><p></p><p></p></td></tr></tbody></table>

 

<table style="border-collapse:collapse;text-align:left;margin-left:auto;margin-right:auto;" border="0"><colgroup><col style="width:284px;"><col style="width:284px;"></colgroup><tbody valign="top"><tr><td style="border:.5pt solid black;"><p><font size="3"><span style="font-size:10pt;">计算机的出现的是为了让人们从简单重复的工作中解脱出来。但是,就防病毒这项工作来说,人们目前还是无法彻底从中摆脱出来,完全交由计算机去自动完成。尽管目前优秀的杀毒软件可以不需要终端用户的参与就独立维护终端计算机的安全,但它的背后还是离不开杀毒软件公司对其进行不断的维护。不论是升级病毒特征库,还是制定新的防病毒行为规则,都离不开专业人员的参与。<br>将来,新病毒的行为也会变化得越来越快,令杀毒软件编写人员应接不暇。所以,早晚有一天,计算机应该可以脱离人类的帮助,独立地抵御病毒的入侵。</span></font></p></td><td style="border-color:black black black 0;border-style:solid solid solid none;border-width:.5pt .5pt .5pt medium;"><p><font size="3"><span style="font-size:10pt;">考虑一个有机的生命体,比如一只小兔子,它不需要外界(比如上帝)的帮助,就可以独自抵御疾病。</span></font></p></td></tr><tr><td style="border-color:0 black black;border-style:none solid solid;border-width:medium .5pt .5pt;"><p><font size="3"><span style="font-size:10pt;">计算机进一步发展,肯定也会需要建立一套类似生物体内免疫系统一样的机制,用来抵御计算机病毒。免疫系统始终监视计算机的健康状况,一但健康出现问题,比如可使用资源异常减少,磁盘被垃圾文件占据等,则将近期新进入计算机的程序当作引起系统异常的罪魁祸首加以清除。如果清除了这些文件后,系统重回健康状态,则再也不允许这类文件进入系统。</span></font></p></td><td style="border-color:0 black black 0;border-style:none solid solid none;border-width:medium .5pt .5pt medium;"><p><font size="3"><span style="font-size:10pt;">当某种病菌第一次进入小兔子的身体后,小兔子不会立即对其作出反应。一旦病菌繁殖起来,小兔子的免疫系统就会意识到这是个危险的外来物,于是开动免疫机能将其消灭。小兔子的免疫系统是会记住入侵的病菌的,若同一种病菌再次侵入。小兔子的免疫系统会直接将其消灭。</span></font></p></td></tr><tr><td style="border-color:0 black black;border-style:none solid solid;border-width:medium .5pt .5pt;"><p><font size="3"><span style="font-size:10pt;">有的病毒一旦发作,可能就很难将其彻底清除。但是在一台电脑被病毒破坏至崩溃之前,至少还可以把病毒的信息发送给其它电脑。这样,其它电脑可以在病毒发作前,就识别出它并将其清理。</span></font></p></td><td style="border-color:0 black black 0;border-style:none solid solid none;border-width:medium .5pt .5pt medium;"><p><font size="3"><span style="font-size:10pt;">有些病菌是非常厉害的,单个生命体无法抵御其入侵。但是,所有生命体组成的物种却不至于被病菌消灭。这是因为个体虽然在病菌的进攻下死去,但它却把病菌入侵的信息提供给了其它个体。在这方面人类的表现是很有代表性的。某些人染病死去,其他人可以通过研究死去者获得抵御这种病菌的疫苗。疫苗能够帮助所有其它个体抵御这种疾病。</span></font></p></td></tr></tbody></table>

《[技术文章和讨论](blog/cns!5852D4F797C53FB6!2128.entry)》目录