如何防病毒程序检测EICAR测试病毒?
-
19-08-2019 - |
题
EICAR测试病毒是用来测试抗病毒程序的功能。为了它检测作为病毒,
应该防病毒程序具有用于测试病毒的病毒定义
OR
在启发式检测为可疑的图案,并检测它作为病毒。
(我看到一个场合的AV程序删除,同时下载该文件,但没有确定该病毒为EICAR测试病毒就像一个可疑对象 - >即如果有应该识别病毒名称定义,细节等是吗?)
解决方案
IMHO,测试病毒的点是有东西是两个已知是无害的,并接受为病毒,以便最终用户可以验证该AV软件被导通,并且可以看到一个病毒的效果鉴定。认为消防演习,对于杀毒软件。
我可以想象大部分具有用于它的签名,并直接将其识别为这样。
我也不会感到惊讶,如果实际EICAR测试的位模式发生了包括闻起来像操作码的可疑活动的位模式,但我不知道,如果是这样的话。如果是,那么它可能是一个简单的启发式病毒识别的有效检验。然而,由于EICAR测试已经有一个的长的时候,我也想像,能够缓存任何启发式不够好,现在就捕捉到任何在野外。
我不会期望,承认EICAR是任何证据要求不是“AV安装和扫描什么预期扫描”,如果开发一个AV系统,我不会尝试作出任何更强的要求更强它。
<强>更新强>
在实际EICAR测试病毒是以下字符串:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
将其(根据维基百科文章)精心制作成具有几个令人感兴趣的性质的。
首先,它仅由可打印的ASCII字符。它通常包括空格和/或在最后一个换行符,但在其承认没有影响,或者其功能。
这就提出了第二属性:它实际上是用于CPU 8086的可执行程序。它可以在扩展.COM文件被保存(通过记事本,例如),它可以在MS-DOS上运行,甚至在Windows的MS-DOS兼容模式MSDOS的大部分克隆命令提示符(包括在Vista上,但不能在任何64位Windows,因为它们决定与16位实模式的兼容性不再是一个优先级)。
当运行时,它产生作为输出字符串 “EICAR-STANDARD-ANTIVIRUS-TEST-FILE!”然后退出。
为什么他们到这方面的努力?显然,研究人员希望这是已知的安全运行,在部分使现场扫描仪可以无需捕捉到真正的病毒和风险真正的感染进行测试的程序。他们还希望它很容易通过常规和非常规的手段来分发。因为事实证明,有在x86实模式指令集,每一个字节符合限制条件,它也可以是可打印的ASCII字符的有用的子集,他们实现这两个目标。
在维基制品具有一个链接到一个窜吹塑解释的程序实际上是如何工作的,这也是一个有趣的阅读。增加了复杂的事实是,只有这样,才能是打印到控制台或退出在DOS实模式的程序是发出软件中断指令,其操作码(0XCD)不是一个可打印的7位ASCII字符。此外,两个中断需要一个字节直接参数,其中之一将需要一个空格字符。由于自我强加的规则是不允许的空间,节目(“H + H *”字符串中)的最后一个字节的所有四个到位修改指令指针到达那里来执行它们。
和拆卸在我的XP盒命令提示与调试命令倾倒EICAR.COM,我看到:
0C32:0100 58 POP AX 0C32:0101 354F21 XOR AX,214F 0C32:0104 50 PUSH AX 0C32:0105 254041 AND AX,4140 0C32:0108 50 PUSH AX 0C32:0109 5B POP BX 0C32:010A 345C XOR AL,5C 0C32:010C 50 PUSH AX 0C32:010D 5A POP DX 0C32:010E 58 POP AX 0C32:010F 353428 XOR AX,2834 0C32:0112 50 PUSH AX 0C32:0113 5E POP SI 0C32:0114 2937 SUB [BX],SI 0C32:0116 43 INC BX 0C32:0117 43 INC BX 0C32:0118 2937 SUB [BX],SI 0C32:011A 7D24 JGE 0140 0C32:0110 45 49 43 41 EICA 0C32:0120 52 2D 53 54 41 4E 44 41-52 44 2D 41 4E 54 49 56 R-STANDARD-ANTIV 0C32:0130 49 52 55 53 2D 54 45 53-54 2D 46 49 4C 45 21 24 IRUS-TEST-FILE!$ 0C32:0140 48 DEC AX 0C32:0141 2B482A SUB CX,[BX+SI+2A]
执行高达JGE 0140
指令后,最后两个指令已被修改为:
0C32:0140 CD21 INT 21 0C32:0142 CD20 INT 20
大多数DOS系统调用是通过INT 21
与AH
或AX
寄存器指定要执行的函数的值分派。在这种情况下,AH
是0×09,这是打印字符串功能,打印字符串起始于偏移0x011C,用美元符号终止。 (你必须打印一个美元符号与在纯DOS不同的特技。)的INT 20
呼叫终止该处理可以被执行过去该点的任何额外的字节之前。
自修改代码是早期病毒特技,但在这里它被用来保持在可在字符串中可以使用的字节值的限制。在现代的系统中,可能的是,数据执行保护功能会赶上的变形例中,如果被执行的上MSDOS兼容模式运行的COM文件。