计算机病毒的危害与不可判定性 1994-08-05 1992年3月6日“米开朗琪罗”病毒大爆发,紧接着“黑色星期五”病毒又再次使计算机用户遭受厄运,每次病毒的发作,都会造成巨额的经济损失,著名的1988年美国的MORRIS事件,造成直接经济损失达600万美元。为此,美国国防部还成立了一个由100多位计算机专家组成的专门班子,研究国防部门计算机系统对系统病毒的防范。 病毒的流行,暴露了当今计算机系统和安全方面的问题及脆弱性,尽管我们在防范计算机病毒,加强计算机安全方面取得了很大的成绩,但是病毒与反病毒技术是一对相互对立和相互促进的矛盾,在反病毒技术取得进步的同时,病毒必然会寻找新的脆弱点,在攻击目标、传染方式、破坏手段等方面会有新变化,因此,我们必须对病毒特征进行深入研究以提出一套综合治理病毒的方法。 (2)计算机病毒的不可判定性 由于计算机病毒的危害极大,防范起来又十分困难,人们希望开发出一种通用的程序,它能判断出一段解释为指令的代码是不是病毒,但不幸的是,F·COHEN博士给出了如下简结的证明:假设能研究出一个检测程序D,对任何一个程序X。 D(X)=TRUE,X是病毒 D(X)=FALSE,X不是病毒 那么D无法判断以下程序V是不是病毒: PROCEDURE V: BEGIN: 1.IF NOT D(R) THEN GOTO 3; 2.GOTO 5; 3.传染一个可执行文件 4.若触发条件成立则执行破坏功能 5.正常功能; . . . END 这样,当D判断V是病毒时,V却不传染即V不是病毒,若D判断V是正常程序,V却执行病毒的功能,这与D的假设矛盾,即D是不可能编写出来的。 由于理论上的限制,不可能有一种完美无缺的,无条件病毒防治方法。只能在一定的条件下,一定范围内对计算机病毒进行防治,也就是说,在区分计算机病毒与正常程序的时候,要同时考虑以下几个方面: 1.十分有效地发现计算机病毒 2.尽可能减少对正常程序的误判 而以上2个方面又是相互制约的,增强其中任一方面都必然会削弱另一方面。