安天实验室·反病毒引擎14年 卷首语 | AVL SDK引擎演进 | 原创技术文章&报告 | 引擎一日一问
反病毒引擎一日一问
安天实验室 反病毒引擎研发中心 2014年11月5日
问:某厂商文章说杀毒引擎“主要工作是利用病毒库中的样本去对照机器中的所有程序文件,看是否符合这些样本,符合的就是病毒,否则就不一定是病毒?”这个说法对么?反病毒引擎究竟是如何工作的?
答:我相信这只是该厂商市场传播人员不懂技术之笔误,他们自己也不可能这样去实现反病毒引擎。
但历史上并非没有,笔者讲一个真实的笑话,笔者多年前曾代表安天参加某个联合课题组,课题组内一位外 单位同仁问我,你们是怎么把病毒库做到这么小的,我们这边的病毒库都已经有2G大了。笔者当时大惊失色,问其实现方式,才知道,他们竟然把他们采集到的所 有病毒样本做成了一个文件,检测时就用待检测的文件到这个大的文件上比对相似度……
当然这种方法显然无论检出率、效率、资源占用,都不可能让人接受。而这位同仁做出这样的设计,就被经 常使用的“病毒库”一词误导了,反病毒引擎中的病毒库其实是特征库。其存放的并非病毒样本,而是病毒检测特征定义、处理参数和一些小的检测处理模块。当然 还有一些引擎设计的十分精妙,实现引擎库化,从而把更多引擎模块放在了病毒库中。
好,段子讲完,现在说说,反病毒引擎的基本工作原理。
通常的反病毒引擎可以检测文件对象和内存数据对象,因此其输入为待检测的文件或内存数据,而经过一组或多组检测模块识别后,反病毒引擎给出对应的判定结果,包括是否是恶意程序、是何种恶意代码家族以及变种,对应的处置清理方法等。
通常来看一套本地检测引擎包括如下几个部分:
- * 格式识别:完成对待检测对象的初步识别能力,把文件区分为可执行程序、压缩包、文档、图片、媒体、脚本等,之后送入不同的预处理或检测分支。
- * 预处理:主要是对待检测对象的处理工作,用于检测使用,包括解压、脱壳、脚本解密、文档格式解析、对于可执行程序模拟执行等工作。
- * 检测分支:是由一组检测模块构成,对待检测数据进行相应的检测。 因此我们在之前的文档中,曾经把引擎抽象为分流器、预处理器和检测器,但实际上的情况要比这更复杂。
我们举一个极端的例子:
例如:一个Windows平台下的EXE程序被送给引擎检测,此时文件首先是被识别为二进制检测分 支,而同时进一步精细的格式识别为PE,可进入PE检测分支,匹配PE的检测规则,此时如果经过识别发现有壳,则再次进入PE的预处理分支进行脱壳,脱壳 后的数据再次检测,如果发现还有嵌套加壳,就再脱一次,如此会循环到不能脱为止。但每层脱壳后,都要被PE的检测机制重新检查。
而假定此时发现其还是一个自解压文件,则将找到压缩数据的起始部分进行解压,所有被解压出来的文件。都要完成上面同样的递归检查。 而针对PE文件的具体检测方法有很多种,不同的反病毒引擎有不同的设计特点,这些机制由针对已知样本进行精确检测,也有针对未知样本进行检测的。 而类似复合文档对象、脚本对象、APK对象等等,也都有其相应的预处理和检测分支,以及对应的库。