|
国内反病毒五大误区(之二)
国内反病毒五大误区(之二) ——Cache与内存(RAM)病毒
几乎是在 "发现CMOS病毒"的同时,国内的许多软件用户"发现了Cache中有计算机病毒"。但也与"CMOS病毒"一样,Cache病毒是根本不可能存在的。 Cache物理器件上是一块高速缓存芯片,它被设置在RAM与CPU之间,是RAM到CPU的一条必由通道。由于CPU的运算速度越来越快,而计算机的内存(RAM)的速度总是显得跟不上CPU。为了缓解CPU与RAM之间的速度矛盾,一般采用在它们之间加入一块高速缓存芯片Cache,使同一时间下RAM为CPU准备的代码不再是单一的指令/数据,而是一长段指令序列或可访问数据块。 可见Cache中存放的是非静态数据(计算机用语中的"数据"包括"程序代码"),它总是随程序的执行在不断刷新,被RAM中的数据不断更换。它的内容总是RAM中数据的某一部分的备份。 如果RAM中有了病毒,其病毒代码将经由Cache送到CPU,由CPU解码执行。病毒代码"流经" Cache这一现象并不能称为"有Cache病毒",就好象我们不能因为病毒代码在CPU中执行就认为有CPU病毒一样。事实上,从PC机的组成原理来看,所有病毒都必将经由Cache进入CPU,因为所有正常或非正常数据都是这样进入CPU中解码执行的。 和CMOS不一样的是,Cache并没有专用电源供电。因而Cache中的数据将在关机后自动清除,在开机时自动刷新。这样的环境中的"病毒"是既无法存储又无法复制的。可见,Cache并不是病毒的安乐窝,没有人会考虑在这样的环境中置放病毒。 同样关机自动清除、开机自动刷新的计算机器件有RAM。但反病毒软件业界却诤诤有词的提出了"内存病毒",即"RAM病毒"的概念。这又是怎么一回事呢? 我们知道,程序执行时,数据流是这样被传送的: 外存(软/硬盘) 网络 => 内存(RAM) => Cache => CPU …… 在这个传送流程中,RAM是最重要的数据存储器件,所有程序/数据都是通过RAM寻址的(Cache中不可能有病毒的重要原因之一也在于Cache不能被软件编址)。也就是说,病毒要被CPU执行,势必要在RAM中有一个其"纯净代码"的备份。这"纯净代码"是指病毒自身已经经过脱壳、解密以及变形还原的一段将最终交由CPU解码执行的病毒体。 要解释"RAM病毒"是并不难的。--既然所有程序都是以RAM为CPU所操纵的直接后备储存器的,那么病毒体也自然就包含其中。但是,要解除RAM病毒却是很难的。 RAM中的病毒可能已控制了系统的某些中断或其它的一些软硬件资源,甚至接管操作系统内核(例DOS系统)。其原中断的向量入口以及所控制的系统资源位置,都由病毒保存。这种情况下,我们可以通过访问活动病毒体(RAM中的病毒),取得上述信息,并恢复相应的系统数据(这实际并不容易实现)。但是,也有些病毒根本不对系统数据作保存(例如DS.3783病毒),这样就使得内存解毒可能遇到的情况变十分复杂。所以内存解毒的技术性很高。 有些资料认为:不需要进行内存解毒,因为内存病毒只要关机就会消失;如果用干净系统盘引导,则将不再出现所谓"内存病毒"。粗略看,这样说是有道理的,但事实并非如此。 有些病毒是必须要在带毒环境下才可能杀除的。这种病毒一般是重写了系统的部分内核,如果不通过运行病毒来访问数据,将得到不可测的数据。这种情况下,我们只能首先抑制内存病毒的进一步传染,同时利用它的代码来访问并恢复数据,最后再杀除病毒。这样的杀毒机制便是内存杀毒和带毒杀毒。例如DIR-II病毒就必须用这种方法才能实现杀毒。 国际反病毒软件有较大一部分实现了内存杀毒和带毒杀毒,例如著名的所罗门(Dr/Solomon's Anti-Virus)杀病毒软件。作为一种辅助手段,国内软件也早就开始了相应研究和尝试。KV系列软件率先在DIR-II、DieHard等为数不多的解病毒模块中用到了该技术,而AV95自其1.0版开始,便在解毒模块中大量使用了内存杀毒技巧,基本达到了在不重新引导机器的情况下安全杀毒,从而将"内存杀毒"这一技术提升到了实用高度。
(,2000-11-20)
|