发明内容
本申请实施例提供一种识别病毒变种的方法及装置,用以提升病毒查杀的准确率。
本申请实施例提供的具体技术方案如下:
一种识别病毒变种的方法,包括:
运行待检测病毒样本,记录运行过程中产生的应用程序编程接口API调用序列;
获取预设的各个病毒家族样本对应的标准API调用序列,并将运行所述待检测病毒样本产生的API调用序列,与病毒家族样本对应的标准API调用序列进行匹配,获得匹配结果;
根据所述匹配结果,确定所述待检测病毒样本的API调用序列与任一病毒家族样本对应的标准API调用序列匹配成功时,确定所述待检测病毒样本为病毒变种。
这样,本申请以病毒家族样本对应的标准API调用情况为参考,对待检测病毒样本运行时产生的API的调用情况进行监控,无论待检测病毒样本是否经技术手段进行身份掩盖,若待检测病毒样本的API调用情况与病毒家族样本对应的标准API调用情况匹配,则被认为是病毒变种,从而能够准确无误地检测出病毒变种,通过动态检测机制,扩大提高现有识别和查杀技术的应用范围,大大提高了病毒查全率,并降低了病毒误杀率。特别需要说明的是,本申请实施例中所能够检测的病毒包括但不限于恶意程序、蠕虫、木马、僵尸等;适用范围包括但不限于针对修改特征码等各类病毒变种技术。
较佳的,进一步包括:
运行预设的病毒家族样本,记录每一种病毒家族在运行过程中调用的API类型和调用顺序,生成每一种病毒家族对应的标准API调用序列,构建API序列特征库。
较佳的,进一步包括:
在运行待检测病毒样本和预设的病毒家族样本的过程中,按照设定周期模拟用于激活病毒运行的物理触发事件。
较佳的,将运行所述待检测病毒样本产生的API调用序列与任一病毒家族样本对应的标准API调用序列进行匹配,获得匹配结果,并根据所述匹配结果,确定所述待检测病毒样本的API调用序列与所述任一病毒家族样本对应的标准API调用序列匹配成功,包括:
确定运行任一病毒家族样本对应的标准API调用序列时,所调用的第一API类型和调用顺序;
确定运行所述待检测病毒样本产生的API调用序列中,所调用的第二API类型和调用顺序;
计算所述第一API类型和调用顺序与所述第二API类型和调用顺序的匹配度,确定所述匹配度达到第一设定门限时,判定所述待检测病毒样本的API调用序列与所述任一病毒家族样本对应的标准API调用序列匹配成功。
较佳的,确定所述第一API类型和调用顺序与所述第二API类型和调用顺序的匹配度未达到第一设定门限时,进一步包括:
获取所述任一病毒家族样本对应的关键API调用序列,以及确定运行所述关键API调用序列时,所调用的第三API类型和调用顺序,其中,所述任一病毒家族样本对应的关键API调用序列中包含有从所述任一病毒家族对应的标准API调用序列中筛选出的关键API,所述关键API为预先设定的能够对系统安全运行造成影响的API;
计算所述第二API类型和调用顺序与所述第三API类型和调用顺序的匹配度,确定所述匹配度达到第二设定门限时,判定匹配成功;或者,将匹配结果呈现给用户,根据用户反馈的结果判断是否匹配成功。
一种识别病毒变种的装置,包括:
执行单元,用于运行待检测病毒样本,记录运行过程中产生的应用程序编程接口API调用序列;
匹配单元,获取预设的各个病毒家族样本对应的标准API调用序列,并将运行所述待检测病毒样本产生的API调用序列分别,与每一个病毒家族样本对应的标准API调用序列进行匹配,获得匹配结果;
识别单元,用于根据所述匹配结果,确定所述待检测病毒样本的API调用序列与任一病毒家族样本对应的标准API调用序列匹配成功时,确定所述待检测病毒样本为病毒变种。
这样,本申请以病毒家族样本对应的标准API调用情况为参考,对待检测病毒样本运行时产生的API的调用情况进行监控,无论待检测病毒样本是否经技术手段进行身份掩盖,若待检测病毒样本的API调用情况与病毒家族样本对应的标准API调用情况匹配,则被认为是病毒变种,从而能够准确无误地检测出病毒变种,通过动态检测机制,扩大提高现有识别和查杀技术的应用范围,大大提高了病毒查全率,并降低了病毒误杀率。特别需要说明的是,本申请实施例中所能够检测的病毒包括但不限于恶意程序、蠕虫、木马、僵尸等;适用范围包括但不限于针对修改特征码等各类病毒变种技术。
较佳的,所述执行单元进一步用于:
运行预设的病毒家族样本,记录每一种病毒家族在运行过程中调用的API类型和调用顺序,生成每一种病毒家族对应的标准API调用序列,构建API序列特征库。
较佳的,所述执行单元进一步用于:
在运行待检测病毒样本和预设的病毒家族样本的过程中,按照设定周期模拟用于激活病毒运行的物理触发事件。
较佳的,将运行所述待检测病毒样本产生的的API调用序列与任一病毒家族样本对应的标准API调用序列进行匹配,获得匹配结果,并根据所述匹配结果,确定所述待检测病毒样本的API调用序列与所述任一病毒家庭样本对应的标准API调用序列匹配成功时,
所述匹配单元进一步用于:
确定运行所述任一病毒家族样本对应的标准API调用序列时,所调用的第一API类型和调用顺序;
确定运行所述所述待检测病毒样本对应的API调用序列时,所调用的第二API类型和调用顺序;
计算所述第一API类型和调用顺序与所述第二API类型和调用顺序的匹配度;
所述识别单元进一步用于:
确定所述匹配度达到第一设定门限时,判定所述待检测病毒样本的API调用序列与所述任一病毒家庭样本对应的标准API调用序列匹配成功。
较佳的,所述匹配单元进一步用于:
根据所述识别单元的通知确定所述第一API类型和调用顺序与所述第二API类型和调用顺序的匹配度未达到第一设定门限时,获取所述任一病毒家族样本对应的关键API调用序列,以及确定运行所述关键API调用序列时,所调用的第三API类型和调用顺序,其中,所述任一病毒家族对应的关键API调用序列中包含有从所述任一病毒家族对应的标准API调用序列中筛选出的指定的关键API,所述关键API为预先设定的能够对系统安全运行造成影响的API;
计算所述第二API类型和调用顺序与所述第三API类型和调用顺序的匹配度;
所述识别单元进一步用于:
确定所述匹配度达到第二设定门限时,判定匹配成功;或者,将匹配结果呈现给用户,根据用户反馈的结果判断是否匹配成功。采用分配匹配算法计算两者的匹配度。
具体实施方式
为了提升病毒查杀的准确率,本申请提出了一种通过模拟器技术识别病毒变种的方法,通过这种方法可以提高现有识别和查杀技术的应用范围,大大提高了病毒查全率,并降低了病毒误杀率。
下面结合附图对本申请优选的实施方式进行详细说明。
在预处理阶段,需要建立API调用序列特征库,用于在后续流程中对病毒变种进行识别。具体过程如下:
首先,在预处理阶段,需要调用Android模拟器环境,针对系统中关键应用程序编程接口(Application Programming Interface,API)进行打桩和标记。所谓API,是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。而所谓打桩,即是在系统中每一个关键API位置处,记录该API的关键信息。比如被谁调用、API名称、类名称等等。由于病毒及其变种在运行过程中往往会调用一些关键API实现破坏行为,因此,可以基于开发经验,可以将具有重要作用的API标记为关键API,以便后续识别病毒及其变种时使用。
具体的,可以先创建Android模拟器,在框架(Framework)或者Android原生层(Native层)对系统调用的API进行打桩和标记,记录,调用程序的用户标识(Uid)等等数据。
样本,记录每一种病毒家族在运行过程中调用的API类型和调用顺序,生成每一种病毒家族对应的标准API调用序列,构建API序列特征库。
实际应用中,每一种病毒家族(即同源的一系列病毒)在运行过程中,其恶意行为是类似的,即是指同一病毒家族在运行过程中,调用API的行为是类似的,因此,可以根据预设的病毒家族样本,分别提取出每一个病毒家族在运行过程中执行的共同的API调用序列(即API调用命令),从而建立API序列特征库,为便于描述,后续将每一个病毒家族执行的共同的API调用序列称为这个病毒家族的标准API调用序列。
具体的,在运行病毒家族样本时,可以修改Android模拟器框架逻辑,使得各种病毒家族样本在运行时,无需等待必要的物理触发事件,而是由系统定期发送各种模拟自启事件,自动触发各各病毒家族样本的运行。如,若病毒家族A的运行需要依赖的物理触发事件为“系统启动”,则系统在运行过程中,无需定期重启,而是定期在系统中模拟自启事件“系统启动”,以指示各类病毒家族样本已满足其触发条件,可以运行。
进一步地,Android模拟器上运行病毒家族的已知病毒样本时,可以通过monkey、uiautomator模块,模拟用户操作环境,例如,手机环境、PC环境等等。其中,Monkey为在Android上进行自动化测试Android安装包(APK)的工具。Uiautomato为一套用于Android进行自动化测试的框架结构,用户可以使用该框架逻辑,编写测试某APK的测试用例。
例如,假设病毒家族A中存在病毒变种a1、病毒变种a2和病毒变种a3,
其中,病毒变种a1在执行过程中,调用了API 1、API 2、AIP 3、API 4;
病毒变种a2在执行过程中,调用了API 1、API 3、API 5、API 6;病毒变种a3在执行过程中,调用了API 2、API3、API 6、API 7。
显然,三个病毒变种都调用了API 3,其中两个调用了API 1和API 2,因此,这三种API的调用率都超过了预设阈值(假设为50%),则最终选定病毒家族A对应的标准AIP调用序列为API 1API 2和API 3,较佳的,在针对病毒家族记录标准API调用序列时,可以记录各个API的调用顺序,也可以不记录各个API的调用顺序,具体视应用环境而定,在此不再赘述。
基于生成的各个病毒家族样本的标准API调用序列,可以建立标准API调用序列特征库,用于后续匹配流程中随时获取所需的标准API调用序列。
进一步地,在针对每一个病毒家族制定了对应的标准API调用序列后,可选的,可以进一步在各个病毒家族对应的标准API调用序列中筛选出关键API调用序列,也保存在API序列特征库中,其中,每一个病毒家族对应的关键API调用序列中都包含了从相应API调用序列中筛选出的预先进行打桩和标记的关键API,这些关键API对应了系统中的关键性操作,比如:自启动事件、联网、获取隐私数据、发送短信等。
基于上述预处理过程,参阅图1所示,本申请实施例中,对病毒变种进行识别的详细流程如下:
步骤100:运行待检测病毒样本,记录运行过程中产生的API调用序列。
实际应用中,待检测的病毒样本可以是一个也可以是多个,每一个病毒样本的检测流程相同,因此,本申请实施例中仅以一个为例进行介绍。
具体的,在运行待检测病毒样本时,根据待检测病毒样本在运行过程中所调用的API的类型的调用顺序,生成相应的API调用序列。在运行待检测病毒家族样本时,同样可以修改Android模拟器框架逻辑,使得待检测病毒样本在运行时,无需等待必要的物理触发事件,而是由系统定期发送各种模拟自启事件,自动触发待检测病毒家族样本的运行。如,若待检测病毒家族样本的运行需要依赖的物理触发事件为“用户发送短信”,则系统在运行过程中,无需定期发送短信,而是定期在系统中模拟自启事件“发送短信”,以指示待检测病毒家族样本已满足其触发条件,可以运行。
进一步地,Android模拟器上运行待检测病毒家族样本时,同样可以通过monkey、uiautomator模块,模拟用户操作环境,例如,手机环境、PC环境等等。
步骤110:获取预设的各个病毒家族样本对应的标准API调用序列,并将运行待检测病毒样本产生的API调用序列,与病毒家族样本对应的标准API调用序列进行匹配,获得匹配结果。
具体的,可以从预处理阶段生成的API调用序列特征库中,获取预先生成的各个病毒家族样本对应的标准API调用序列,然后将各个标准API调用序列一一与待检测病毒样本的API调用进行匹配。
实际应用中,由于可能存在海量待检测病毒样本的API调用序列,因此,为了提高匹配效率,较佳的,可以采用分段匹配算法判断待检测病毒样本对应的API调用序列是否与某病毒家族样本的标准API调用序列匹配的唯一API时序路径,如果存在,则直接判定为病毒变种。
分段匹配算法为现有技术下常用的匹配算法之一,下面以举例形式进行介绍:
比如有一串病毒特征的函数调用路径为“P:p1p2p3p4”,而某一个病毒样本运行之后,得到的函数调用路径为“T:t1t2t3t4t5t6t7t8t9”,那么,就是要从路径“t1t2t3t4t5t6t7t8t9”中寻找是否存在路径“p1p2p3p4”路径。那么,最简单的匹配方式为:先判断t1是否等于p1,若相等,再比较t2是否等于p2,若不相等,则比较t2是否等于p1,以此类推,采用分段匹配的方式来比较全部的路径。
具体的,分段匹配算法中有很经典的算法:如克努特-莫里斯-普拉特(The Knuth-Morris-Pratt Algorithm,KMP)和波尔-莫尔(Boyer-Moore,BM)算法。
以标准API特征序列1为例,在匹配过程中,可以执行但不限于以下操作:
确定运行标准API调用序列1时所调用的第一API类型和调用顺序,以及确定运行待检测病毒样本的API调用序列时所调用的第二API类型和调用顺序,计算第一API类型和调用顺序与第二API类型和调用顺序的匹配度(可以采用但不限于使用分段匹配算法),确定该匹配度达到第一设定门限(例如,80%)时,判定匹配成功。
进一步地,在确定上述两者的匹配度未达到第一设定门限时,可选的,可以从预处理阶段配置的API序列特征库中,进一步挑选出上述标准API调用序列1所对应的关键API调用序列1,其中,关键API调用序列中1包含有从标准API调用序列1中筛选出的指定的关键API(即在预处理阶段进行打桩和标记的API),所谓关键API即是指预先设定的能够对系统安全运行造成影响的API。
接着,确定运行关键API调用序列1时,所调用的第三API类型和调用顺序,以及计算第二API类型和调用顺序与第三API类型和调用顺序的匹配度,确定该匹配度达到第二设定门限时,直接判定匹配成功;或者,将匹配结果呈现给用户,根据用户反馈的结果判断是否匹配成功。
之所以在API序列特征库中记录各个病毒家族样本的标准API调用序列之外,进一步记录了各个病毒家族样本的关键API调用序列,是因为即使待检测病毒样本和任何一个病毒家族样本的标准API调用序列均不匹配,也不能完全排队待检测病毒样本是病毒变种的可能性,很大程度上,待检测病毒有可能是一个新的病毒变种,其调用的API类型和调用顺序相较归属的病毒家族样本发生了很大改变,因此与已有的病毒家族样本对应的标准API调用序列均不匹配。
有鉴于此,为了确保不漏检病毒变种,此时,需要使用各个病毒家族样本对应的关键API调用序列与待检测病毒对应的API调用序列进行再次匹配(此种匹配亦称为模糊匹配),若待检测病毒对应的API调用序列在执行过程中,调用了关键API且调用顺序与病毒家族样本类似(即匹配度达到门限值),则可以直接确定匹配成功,即将待检测病毒确定为病毒变种,或者,为了得到更明确的结果,可以将待检测病毒发往后台,提示管理人员该待检测病毒有可能为病毒变种,请求进行确认;在接收到管理人员的反馈结果时,根据管理人员的指示确定待检测病毒是否为病毒变种并进行记录。
步骤120:根据获得的匹配结果,确定待检测病毒样本的API调用序列与任一病毒家族样本对应的标准API调用序列匹配成功时,确定所述待检测病毒样本为病毒变种。
确定待检测病毒为病毒变种后,可以将其对应的API调用序列作为标准API调用序列记录至API序列特征库中,同时,筛选出对应的关键API调用序列,亦记录至API序列特征库中,这样,可以通过连续的匹配过程,不断更新API序列特征库,以保持数据的实时性和有效性。
基于上述实施例,参阅图2所示,本申请实施例中,用于识别病毒变种的装置包括执行单元20、匹配单元21和识别单元22,其中,
执行单元20,用于运行待检测病毒样本,记录运行过程中产生的应用程序编程接口API调用序列;
匹配单元21,获取预设的各个病毒家族样本对应的标准API调用序列,并将运行待检测病毒样本产生的API调用序列分别,与每一个病毒家族样本对应的标准API调用序列进行匹配,获得匹配结果;
识别单元22,用于根据匹配结果,确定待检测病毒样本的API调用序列与任一病毒家族样本对应的标准API调用序列匹配成功时,确定待检测病毒样本为病毒变种。
较佳的,执行单元20进一步用于:
运行预设的病毒家族样本,记录每一种病毒家族在运行过程中调用的API类型和调用顺序,生成每一种病毒家族对应的标准API调用序列,构建API序列特征库。
较佳的,执行单元20进一步用于:
在运行待检测病毒样本和预设的病毒家族样本的过程中,按照设定周期模拟用于激活病毒运行的物理触发事件。
较佳的,将运行待检测病毒样本产生的的API调用序列与任一病毒家族样本对应的标准API调用序列进行匹配,获得匹配结果,并根据匹配结果,确定待检测病毒样本的API调用序列与任一病毒家庭样本对应的标准API调用序列匹配成功时,匹配单元21进一步用于:
确定运行任一病毒家族样本对应的标准API调用序列时,所调用的第一API类型和调用顺序;
确定运行待检测病毒样本对应的API调用序列时,所调用的第二API类型和调用顺序;
计算第一API类型和调用顺序与第二API类型和调用顺序的匹配度;
识别单元22进一步用于:
确定匹配度达到第一设定门限时,判定待检测病毒样本的API调用序列与任一病毒家庭样本对应的标准API调用序列匹配成功。
较佳的,匹配单元21进一步用于:
根据识别单元的通知确定第一API类型和调用顺序与第二API类型和调用顺序的匹配度未达到第一设定门限时,获取任一病毒家族样本对应的关键API调用序列,以及确定运行关键API调用序列时,所调用的第三API类型和调用顺序,其中,任一病毒家族对应的关键API调用序列中包含有从任一病毒家族对应的标准API调用序列中筛选出的指定的关键API,关键API为预先设定的能够对系统安全运行造成影响的API;
计算第二API类型和调用顺序与第三API类型和调用顺序的匹配度;
识别单元22进一步用于:
确定匹配度达到第二设定门限时,判定匹配成功;或者,将匹配结果呈现给用户,根据用户反馈的结果判断是否匹配成功。采用分配匹配算法计算两者的匹配度。
综上所述,本申请实施例中,以病毒家族样本对应的标准API调用情况为参考,对待检测病毒样本运行时产生的API的调用情况进行监控,无论待检测病毒样本是否经技术手段进行身份掩盖,若待检测病毒样本的API调用情况与病毒家族样本对应的标准API调用情况匹配,则被认为是病毒变种,从而能够准确无误地检测出病毒变种,通过动态检测机制,扩大提高现有识别和查杀技术的应用范围,大大提高了病毒查全率。特别需要说明的是,本申请实施例中所能够检测的病毒包括但不限于恶意程序、蠕虫、木马、僵尸等;适用范围包括但不限于针对修改特征码等各类病毒变种技术。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请实施例进行各种改动和变型而不脱离本申请实施例的精神和范围。这样,倘若本申请实施例的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。