***病毒的危害在于它对计算机系统具有强大的控制和破坏能力。功能强大的***一旦被植入用户的计算机,***的制造者就可以像操作自己的计算机一样控制服务端计算机,甚至可以远程监控用户的所有操作。在每年爆发的众多网络安全事件中,大部分网络***都是通过***病毒进行的。著名的微软公司也曾经遭到过蠕虫***的***,导致部分产品源码的泄露,造成了很大的损失。
 
    ***病毒之所以会造成很大损失,其根本原因就是其隐蔽性非常强。***病毒的隐藏性也是病毒的最大特点。***病毒的发作必须借助于服务端的支持。下面我们就对***病毒的隐藏方式进行详细分析。
 
(1)将自己伪装成系统文件。
    ***病毒会想方设法将自己伪装成“不起眼”的文件或“正规”的系统文件,并把自己隐藏在系统文件夹中,与系统文件混在一起。例如,把服务端的文件命名为Mircosoft.sys,病毒会故意将几个字母的顺序颠倒或写错,使一般用户很难发现,即便发现也会认为是微软自带的系统程序,从而丧失警惕性。还有一些***病毒将自己隐藏在任务栏里并隐藏自己的图标(如图6-1所示),伺机发作,一般用户很难注意到。
 
(2)将***病毒的服务端伪装成系统服务。
    当用户的计算机被***病毒***并被远程***或控制的时候,往往会出现系统运行变慢或某些应用程序无法正常运行等情况。这种情况的发生很容易被用户察觉。通常情况下,用户会按下Ctrl+Alt+Del调用任务管理器查看进程。***病毒会将自己伪装成“系统服务”,从而逃过用户的检查。目前,大多数***病毒的服务端运行时都不会从任务管理器中被轻易查到。
 
 
图6-1 ***病毒将自己隐藏在任务栏里并隐藏自己的图标
 
(3)将***程序加载到系统文件中。
    win.ini和system.ini是两个比较重要的系统文件。在win.ini有两个重要的加载项——“run=”和“load=”,它们分别担负着系统启动时自动运行和加载程序的功能。在默认情况下,这两项的值都应该为空。有一些***病毒会隐藏在win.ini中,以便在系统启动时自动运行,如果发现在“run=”和“load=”后面有陌生的启动程序,例如,run=c:windows abc.exe load=c:windows abc.exe,那么这个可疑的abc.exe很可能是***程序。
 
    还有的***病毒会隐藏在system.ini内[BOOT]子项中的“Shell”启动项中,将“Explorer”变成病毒自己的程序名,从而在启动时伺机发作。用户可以通过“开始”→“运行”→“msconfig”来查看自己的系统文件是否正常。
 
    类似的经常被***加载的可以自动被Windows加载运行的文件还有Winstart.bat。由于Autoexec.bat的功能可以由Winstart.bat代替完成,因此***完全可以像在Autoexec.bat中那样被加载运行,所以危险性也非常大。
 
(4)充分利用端口隐藏。
 
    每一台计算机都默认有256?256 ? 65 536个端口,我们常用的端口不到默认值的1/3。由于占用常规端口会造成系统异常而引起用户警觉,因此病毒通常将自己隐藏在一些不常用的端口中,一般是1024以上的高端口。一些比较“高级”的***程序具有端口修改功能,这就使用户的端口扫描变得像大海捞针一样困难。更有甚者,有些***病毒能够做到在与正常程序共用端口(如80端口)的同时不影响程序的运行,这就更使得用户防不胜防。
 
(5)隐藏在注册表中。
 
    注册表中含有“run”的启动项也是***病毒经常隐藏的地方。如,HKEY_LOCAL_MACHINE\ Software\Microsoft\Windows\CurrentVersion下以“run”开头的键值,如图6-2所示。
 
 
图6-2 注册表中含有“run”的启动项也是***病毒经常隐藏的地方
 
    此外,还有其他位置的键值也需要引起注意。例如,HKEY_CURRENT_USER\Software\ Microsoft\Windows\CurrentVersion下以“run”开头的键值;HKEY-USERS.\Default\Software\ Microsoft\Windows\CurrentVersion下所有以“run”开头的键值;等等。
 
(6)自动备份。
    为了避免在被发现之后清除,有些***会自动进行备份。这些备份的文件在***被清除之后激活,并再次感染系统。
 
(7)***程序与其他程序绑定。
    现在,很多***利用了一种称为文件捆绑机的工具,如exe-binder,这种工具可以把任意两个文件捆绑在一起,在运行时两个文件可以同时运行,但前台只能看见一个程序。例如,一些***程序能够把它自身的exe文件和服务器端的图片文件绑定,在用户看图片的时候,***也不知不觉地侵入了用户的系统。如果***程序绑定到系统文件,那么每一次Windows启动都会启动***。
 
(8)“穿墙术”。
    病毒启动后会释放一个动态库文件,然后将这个动态库文件插入系统的进程体内运行,而病毒的绝大部分功能全部包括在这个动态库中,之后病毒的进程退出。这样在系统中就找不到病毒进程了,但是实际上很多的系统进程内部都有病毒模块在运行。这种病毒连防火墙都无法防范,这就是俗称的“穿墙术”。
如图6-3所示就是“灰鸽子”将自己的病毒体注入系统进程中的截图。
 
 
 
图6-3 “灰鸽子”将自己的病毒体注入系统进程中的截图
 
    可以看到,病毒将自己的DLL部分注入了IE的进程中。在WINNT目录下也可以看到这几个文件。
 
(9)利用远程线程的方式隐藏。
    远程线程是Windows为程序开发人员提供的一种系统功能,这种功能允许一个进程(进程A)在其他的进程(B)空间中分配内存,并且将自己的数据复制到其中,然后将复制的数据作为一个线程启动,这样进程B中就多出了一个新的线程——病毒线程,而且操作系统会认为这个病毒线程就是进程B的线程,线程所作的任何操作都会被记录为进程B的操作,这也是穿墙术的一种实现方法。我们可以通过比较图6-4和图6-5来说明。
 
    图6-4所示是正常进程空间的内存情况,图6-5中IE进程的内存中多了一个EXE文件部分(矩形标注处),这部分就是病毒体。
 
 
图6-4 正常进程空间的内存情况
 
 
图6-5 IE进程的内存中多了一个EXE文件部分
 
(10)通过拦截系统功能调用的方式来隐藏自己。
    系统功能调用是系统给应用程序提供的程序接口。例如,文件读写,文件搜索,进程遍历,包括杀毒软件的查杀毒功能等都需要系统调用的支持。病毒为了防止被发现就会设法接管这些系统调用,比如,病毒如果接管了文件打开操作,当杀毒软件调用打开文件操作时就会启动病毒代码,此时病毒判断当前打开的是否是病毒文件本身,如果不是,就去调用正确的系统调用;如果是病毒,病毒代码就会返回“文件不存在”的信息。这样杀毒软件就无法在系统中找到病毒文件,也就无法查杀病毒了。例如,灰鸽子病毒就是使用了这种方式来隐藏自己的,一旦病毒启动,病毒建立的注册表启动项、注册的系统服务、病毒的进程、病毒的文件都无法被正常发现,这就给病毒的排查带来很大困难。
 
(11)通过先发制人的方法***杀毒软件。
    还有的病毒不是使用隐藏的方式,而是使用先发制人方法***杀毒软件。病毒启动后在进程中搜索国内外著名的反病毒软件的进程,找到后就将其杀死,然后将相应的文件删除,将反病毒软件注册的系统服务删除,等等,俨然成了反病毒软件的卸载程序,从而防止被反病毒软件发现并清除。
    综上所述,由于没有服务端的支持,***病毒就无法达到远程控制和破坏的目的,所以***病毒除了传播以外的首要目的就是想方设法将自己伪装隐藏起来,以便在运行时不被用户发现。因此,隐藏性是***病毒的最大特点。
 
本文节选自电子工业出版社2008年11月出版的《计算机病毒分析与防范大全(第2版)》