防病毒程序如何检测 EICAR 测试病毒?

Posted

技术标签:

【中文标题】防病毒程序如何检测 EICAR 测试病毒?【英文标题】:How do the Antivirus programs detect the EICAR Test Virus? 【发布时间】:2010-10-13 19:05:27 【问题描述】:

EICAR 测试病毒用于测试防病毒程序的功能。为了将其检测为病毒,

防病毒程序是否应该有测试病毒的病毒定义

启发式将其检测为可疑模式并将其检测为病毒。

(我见过一个AV程序在下载的时候删除了文件,但没有将病毒识别为EICAR测试病毒。就像一个可疑对象--> ie如果有定义就应该识别病毒名称,详情等等不是吗?)

【问题讨论】:

这与编程有什么关系? 【参考方案1】:

恕我直言,测试病毒的重点是拥有已知无害且被接受为病毒的东西,以便最终用户可以验证 AV 软件是否已打开,并且可以看到病毒的影响鉴别。想想防火练习,用于 AV 软件。

我想大多数人都有一个签名,并直接认出它。

如果实际 EICAR 测试的位模式碰巧包含闻起来像可疑活动操作码的位模式,我不会感到惊讶,但我不知道是否是这种情况。如果是,那么它可能是对简单启发式病毒识别器的有效测试。但是,由于 EICAR 测试已经存在了很长时间,我还可以想象,任何缓存它的启发式方法都不足以捕捉到现在野外的任何东西。

我不认为识别 EICAR 是比“已安装 AV 并扫描预期扫描的内容”更强有力的主张的证据,如果开发 AV 系统,我不会尝试做出任何更强有力的主张关于它。

更新:

实际的 EICAR 测试病毒是以下字符串:

X5O!P%@AP[4\PZX54(P^)7CC)7$EICAR-标准-抗病毒-测试文件!$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 流行斧 0C32:0101 354F21 XOR AX,214F 0C32:0104 50 推斧 0C32:0105 254041 和 AX,4140 0C32:0108 50 推斧 0C32:0109 5B 流行音乐 BX 0C32:010A 345C XOR AL,5C 0C32:010C 50 推斧 0C32:010D 5A 流行音乐 DX 0C32:010E 58 POP AX 0C32:010F 353428 XOR AX,2834 0C32:0112 50 推斧 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-测试文件!$ 0C32:0140 12 月 48 日轴 0C32:0141 2B482A 子 CX,[BX+SI+2A]

执行到JGE 0140的指令后,最后两条指令修改为:

0C32:0140 CD21 INT 21 0C32:0142 CD20 INT 20

大多数 DOS 系统调用是通过 INT 21 调度的,AHAX 寄存器的值指定要执行的函数。在这种情况下,AH 是 0x09,它是打印字符串函数,它打印从偏移量 0x011C 开始的字符串,以美元符号终止。 (在纯 DOS 中,您必须使用不同的技巧打印美元符号。)INT 20 调用会在超过该点的任何额外字节被执行之前终止进程。

自修改代码是早期的病毒技巧,但在这里它用于保留对可在字符串中使用的字节值的限制。在现代系统中,如果在运行 COM 文件的 MSDOS 兼容模式下强制执行,数据执行保护功能可能会捕获修改。

【讨论】:

以上是关于防病毒程序如何检测 EICAR 测试病毒?的主要内容,如果未能解决你的问题,请参考以下文章

检测病毒扫描程序

请帮助我使用检测恶意行为的病毒检测程序

如何测试我正在开发的防病毒程序? [关闭]

手机浏览器检测到病毒无法下载

详解:如何检测局域网内是不是有arp病毒

如何针对流行的病毒扫描程序测试我的应用程序?