EICAR测试病毒用于测试反病毒程序的功能。为了将其检测为病毒,
防病毒程序是否应具有测试病毒的病毒定义
OR
启发式检测将其检测为可疑模式并将其检测为病毒。
(我已经看到AV程序在下载时删除文件但没有将病毒识别为EICAR测试病毒的情况。就像一个可疑对象 - >即如果它有定义它应该识别病毒名称,细节等不是吗?)
答案 0 :(得分:32)
我想大多数人都有签名,并直接认出来。
如果实际的EICAR测试的位模式碰巧包含像可疑活动的操作码一样闻到的位模式,我不会感到惊讶,但我不知道是否是这种情况。如果是,那么它可能是一个简单的启发式病毒识别器的有效测试。但是,由于EICAR测试已经存在 long 时间,我还想象任何缓存它的启发式方法都不足以在野外捕获任何东西。
我不希望认识到EICAR证明任何声明强于“AV安装并扫描预期扫描的内容”,如果开发AV系统,我不会尝试做出任何更强烈的声明关于它。
<强>更新强>
实际的EICAR测试病毒是以下字符串:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
经过精心设计(根据Wikipedia article),有一些有趣的属性。
首先,它只包含可打印的ASCII字符。它通常会在末尾包含空格和/或换行符,但这对其识别或功能没有影响。
它引发了第二个属性:它实际上是8086 CPU的可执行程序。它可以保存(例如通过记事本)在扩展名为.COM的文件中,它可以在MSDOS,大多数MSDOS克隆上运行,甚至可以在Windows命令提示符的MSDOS兼容模式下运行(包括在Vista上,但不是在任何64位Windows上,因为他们认为与16位实模式的兼容性不再是优先考虑的事项。)
运行时,它会生成字符串“EICAR-STANDARD-ANTIVIRUS-TEST-FILE!”作为输出。然后退出。
他们为什么要这么努力?显然,研究人员想要一个已知可以安全运行的程序,部分原因是可以测试实时扫描仪而无需捕获真正的病毒并冒着真正的感染风险。他们还希望通过传统和非传统手段轻松分发。由于事实证明x86实模式指令集有一个有用的子集,其中每个字节都满足它也是可打印的ASCII字符的限制,因此它们实现了两个目标。
wiki文章有一个blow-by-blow explanation链接指向程序实际工作方式,这也是一个有趣的读物。增加复杂性的事实是,在DOS实模式下打印到控制台或退出程序的唯一方法是发出软件中断指令,其操作码(0xCD)不是可打印的7位ASCII字符。此外,两个中断每个都需要一个字节的立即参数,其中一个需要是一个空格字符。由于自我强加的规则是不允许空格,所以程序的所有四个最后字节(字符串中的“H + H *”)都会在指令指针到达之前进行修改。
在XP框的命令提示符下使用DEBUG命令反汇编和转储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
是0x09,这是打印字符串函数,它打印从偏移量0x011C开始的字符串,由美元符号终止。 (你必须在纯DOS中使用不同的技巧打印一个美元符号。)INT 20
调用会在超过该点的任何额外字节执行之前终止进程。
自修改代码是一种早期的病毒技巧,但在这里它用于保留可以在字符串中使用的字节值的限制。在现代系统中,如果在运行COM文件的MSDOS兼容模式上强制执行,则数据执行保护功能可能会捕获修改。