LINKS

 

 

[回首页]

一种解决计算机病毒的容错方法

一种解决计算机病毒的容错方法

1.引言

在当今的信息社会里,计算机系统其易受攻击的脆弱性备受人们关注。目前对计算机系统可能采取的攻击形式有三:其一,从计算机系统外部发动攻击;其二,利用从合法授权的用户那里获得的访问权实施攻击;其三,从计算机系统内部通过系统设计者蓄意设置的预定故障进行攻击。由上述三种攻击可知,当前计算机系统的安全问题,除需要考虑与防止敏感信息越权泄露及信息和程序越权修改等有关的传统安全问题之外,还需寻求消除诸如特洛伊木马、计算机病毒、逻辑炸弹等恶意逻辑的影响问题。这个问题揭示了与容错里要解决的问题有许多相似之处。所以当今的计算机安全问题与容错有着密不可分的关系,而且将成为支持军用高可靠计算机的两大特性。

众所周知,源于提高硬件可靠性的容错技术,后又被用于解决软件的可靠性问题。其主要目的是提供足够的冗余信息与算法程序,使系统在实际运行中能够发现设计错误,采取补救措施,保证计算机系统的正常运行。下面介绍容错技术在计算机安全问题上的应用,即用扩充的程序流监控器机制来解决计算机病毒的检测和抑制问题。该机制使计算机既能容忍故意故障又能容忍随机物理故障。这里所描述的技术能明确地用于检测由物理故障及病毒存在所造成的控制流错误。

2.容错反计算机病毒的依据

计算机病毒是一种隐藏在计算机系统的可访问信息资源中,利用系统信息资源进行繁殖并生存,能影响计算机系统正常运行,并通过系统信息共享的途径进行传染的、执行的编码集合。它的传染表征为:(a)病毒附加在可执行文件头尾或插在中间;(b)可执行文件的长度变长,容量增大;(c)可执行文件的建立日期受到修改;(d)可执行文件的行为发生变化;……等。从信息流的角度看,病毒是一段二进制代码,是一串信息流。如果信息流是一段数据,则不可能指望它能复制自身;如果信息流是一段指令,则它一旦被解释,就完全可以通过信息流有限度传递的特性,驱动计算机各电路,将自己传递到选择好的目标。因此,从根本上来说,计算机系统信息流的二义性,即信息流即可当作数据流,又可当作指令流(程序流)的特性,决定了病毒的传染性。因此病毒要传染可执行程序势必会引起该程序程序流的改变,尤其是控制流的改变。所以行为和程序流的改变成为容错方法检测和遏制病毒机制的主要依据。但两者的监探粒度是不相同的,前者是粗粒度的监控,后者则细粒度的监控。例如,D.E.Denning在“一种入侵检测模型”一文中所提出的一种用监控系统行为来解决病毒检测和其他威胁的方案,这是一种粗粒度的监控方法。但本文所描述的则是一种细粒度的监控方案,即用监控程序控制流的方法来处理病毒检测问题。

在容错方法中,假定在系统中将出现故障,而且在设计中必须包含运行时间机制以便容忍故障。这些机制是故障免除技术的补充,其目标是在整个计算机系统的生命周期间清除所有故障(或硬件和软件的缺陷),用标准故障类来定义和表征待处理的所有故障。一旦这样做了,错误检测,屏蔽,错误恢复和错误抑制边界就被选定了。这就导出解决这里所提出的计算机病毒问题的一般方法。这种方法已应用于解决如陷井门,拒绝服务,隐蔽信道等安全威胁问题。

3.面向容错的计算机病毒的刻划

面向容错的计算机病毒行为可刻划如下:计算机病毒最初可能开始于用病毒注入或传染一个可执行文件的一种特殊类型的特洛伊木马;该特洛伊木马是一种故意设计故障,通过改变可执行文件资源的状态产生一个“错误”;然后,被传染的可执行文件扩散或传播该错误给其他可执行文件,从而该错误成为导致其他错误的故障。标准错误传播跟随机故障情况下的传播是一样的。所以计算机病毒错误传播为:故障→错误→故障→错误。因此计算机病毒既是一种故意又是一种错误。这种对病毒既是故障又是错误的刻划表现了应当用两种而不是一种机制去对抗病毒。

计算机病毒设计故障可能造成的破坏类型有:损害功能和数据的完整性;未授权的程序修改;未授权的泄露;拒绝服务和电子诱骗。

病毒有两个生存期:经由特洛伊木马的设计故障和错误传播或传染可执行文件。这两个生命期都能从不同的角度加以检测和恢复。用N版本程度设计(NVP)能屏蔽掉经由特洛伊木马的故障设计故障。同时它必须附带一种能在错误期检测病毒的机制。下面将提出反病毒传检测和恢复方案以及程序流监控器的扩充。

4.程序流监控器

程序流监控器(PFM)是一种能用于容错计算机设计的并发错误检测机制。它基本上是一种监控程序处理器,监控程序处理器是个能通过监控主处理器的行为来完成并发系统级错误检测的小而简单的协同处理器。它能用于检测因瞬时故障和永久故障所造成的控制流错误。

控制流错误是指指令的不正确顺序,转移到错误地址,从错误地址转移等等,这些错误可能是指令寄存器,程序计数器,地址寄存器,译码电路,存储器编址电路等故障的结果。

控制流错误的检测是通过程序行为的动态特性与期望的行为比较来完成的。一种方法是把特征标记和不含任何控制改变指令的汇编语言语句的顺序结合起来实现控制流错误的检测。该特征标记是从汇编语言语句中求出来的。特征标记生成之后,它可能被存储于控制流图(CFG),嵌入图程序或嵌入可执行代码。该特征标记和控制流图通过编译程序和连接程序来生成。

当一个程序运行在CPU上时,通过一个基于线性反馈移位寄存器(LFSR)的特征标记发生器读取指令。这样,由一个已知的本原多项式(如X16+X 12+X 3+X+1)可计算出一个特征标记。当一个控制流改变的指令经过该特征标记发生器时,当前的特征标记值就被传送给PFM,PFM则比较运行时间和连接时间所产生的特征标记,若不一致,则表明有一个错误状态。如果使用控制流图,则作这些特征标记比较就得遍历CFG。

对于计算机病毒的检测,基于PFM方案的可用性主要在于能对病毒的活动也可以表示为有病毒指令顺序的监控。但由于现有的方案无法察觉隐蔽的病毒,所以必须把PFM加以扩充。

5.处理病毒传染的扩展程序流监控器

目前的PFM方案能用于检测随机物理故障和潜在的某些设计故障,但不能检测故意故障。因此,现有的方案只对少数病毒的攻击敏感。

现有的PFM用于反病毒有以下两个弱点:其一,PFM仅用一种本原多项式来计算全部的特征标记,因此,在监控机上计算机病毒将会被生成有效的特征标记。若用CFG,则病毒就会把它的特征标记附加在CFG上。其二,现有的PFM设计无能力区分病毒与随机故障。

由于暂时故障、永久故障和计算机病毒的恢复操作是各不相同的,所以基于PFM的方案必须有一种识别病毒的恢复方法。为此,利用控制流图(CFG)对PFM方案作以下五种扩充:

(1)特征标记发生器必须有使用许多不同本原多项式的能力。构造一个具有足够多的D型触发器、XOR门和反馈环路的LFSR来生成一个整多项式。PFM可以对产生多项式的LFSR采用启动/禁止XOR门和反馈环路的方式来变换LFSR。该多项式用一个被锁存在LFSR里的32位向量来表示,此向量的位控制启动/禁止。

(2)编译器和连接器对必须为每个被编译的程序随机地赋予一个本原多项式,同时还需保护该多项式免遭泄露和修改。因此,多项式位向量可以跟连接期产生的特征标记一起被存储于CFG,然后加密整个CFG。

(3)为了得到预先计算好的特征标记和多项式,PFM必须在程序执行之前立刻解密已送到的CFG。因此,这种方法必须为每个CFG提供不同加密密钥的管理,并且必须确保可执行文件与CFG的联合。一旦获得多项式位向量,就应将它传送给LFSR。

(4)所有的I/O操作都是最基本的操作。仅当这些操作代码程序的特征标记比较有效时,它们才能被执行。这种特性锁住了病毒的传染能力。对于用向后恢复(即重算)的容错计算机来说,这是一种必不可缺的要求,因为在没有损害服务的情况下,大多数I/O操作是不能重算的。

(5)现有的PFM设计都致力于错误检测并未明显地给出后续恢复的方法。但恢复的细节对我们应用PFM是十分重要的,因为我们需要把病毒错误和物理故障区分开来。在错误状态的检测上,必须保存无效、动态生成的特征标记以及在PFM上出现过错误的代码位置,然后用重算(向后错误恢复)并从程序中一个重算点出发重新开始程序的执行,以便直接接受先前的特征标记检查。

重算过程确定故障类型的方法如下:第一,若原始错误起因于瞬时故障,则将继续重新计算,并在成功的特征标记校验之后,程序将继续执行。第二,若原始错误是由永久故障造成的,则在重算之后故障仍会导致不合理的动态生成特征标记。对于某些故障,第二次特征标记将不同于第一次无效的特征标记,并且指出一个永久物理故障。第三,原始错误可以起因于引发再次出现相同错误的永久故障。相同错误的生成,除了不正确之外,特征标记在首次重算之后还将要求运行诊断程序查出永久故障。最后,若诊断程序不能检测故障,则一个已被检测过的病毒错误的存在将具有一种高概率。

由于计算机结构没有有效的进程隔离(例Intel8086, Intel80286的保护模式),所以只能由PFM对读到存储器的存储地址进行监控。这将检测出可执行文件在运行里的病毒感染(如一个病毒代码块移入一个进程的未用栈空间)。这种方法是PFM的一种设计选择,而不是技术的一种真正扩充。事实上,CPU的所有外部可见活动都能由PFM加以监控。

基于PFM的病毒检测方法具有以下显著的优点:首先,它保护可执行文件,乃至在运行期内也能保护可执行文件;第二,它也提供了对由物理故障和可以确定的设计故障所引发的错误的检测;第三,在适度的额外开销之内,把标准PFM方案扩充成用于病毒检测的PFM;第四,在CFG解密之后,在运行期里无性能降低出现;最后,PFM是能抗病毒的,因为它的部件都是硬连线和基本的ROM,并且PFM局部存储器以及LFSR只能由PFM来存取。

基于PFM方法的额外开销如下:(a)“编译器和连接器对”必须给定多项式;(b)应该加密CFG,并对每个CFG的密钥必须加以管理和保护;(c)需要对现有的编译器和连接器进行修改;(d)要求具有最基本的I/O额外机制;(e)由于PFM存储器里的额外开销与CFG的建立相关联,所以该方案适用于进程关联信息转换不频繁的环境(例,多处理机应用,嵌入式应用,个人计算机)。

6.结束语

目前,UCLA实验室正在加紧把程序流监控器的扩充用来解决计算机病毒的检测和抑制的研究。预期的研究结论是:通过上述组合的公共机制使计算机既能容忍故障故障又能容忍随机物理故障,从而达到检测和抑制既是故障又是错误的病毒。

(,2000-11-08)