本发明涉及计算机安全领域,特别是一种分布式病毒特征样本验证方法及系统。
背景技术:
病毒库是病毒特征的集合。现有的病毒查杀方法通过将文件与病毒库中的病毒特征进行比对来判断文件是否为病毒文件。通过病毒库来识别病毒文件要求病毒库中的病毒特征有效,避免出现“新病毒查不出,不是病毒却被冤枉”的现象。为避免误杀现象,计算机病毒分析人员在将病毒正式入库下发用户之前,需搜集样本(包括含病毒文件和不含病毒文件),然后按照提取出来的病毒特征对搜集到的样本做预测试,验证病毒特征是否有效。
目前,大多数测试方法采用push方式,将特征样本传输到测试机中,由测试机执行测试,并输出测试结果。在特征样本量少的情况下,此传输耗时可以忽略,但对于特征样本量大情况下,push方式会占用整个测试的大部分时间,且push过程中可能出现未知的错误,增加数据传输失败的风险。并且,大多数自动化测试只有一个设备节点执行测试,当执行耗时较长的任务时,不能快速输出测试结果。
针对现有的测试方法存在耗时长、效率低的问题,目前尚未提出有效的解决方案。
技术实现要素:
为了克服现有技术的缺陷,本发明提供一种分布式病毒特征样本的验证方法及系统。通过测试节点主动从管理服务器获取并执行任务的方式,实现对病毒特征样本的验证,其中,测试节点在执行子任务时,首先查询其所在的测试机是否存在所需的特征样本,在本地不存在所需特征样本情况下,再从样本存储服务器中获取特征样本,从而节省了特征样本传输时间,提高了验证效率。
本发明采用技术方案如下:
一种分布式病毒特征样本验证方法,包括:
测试节点向管理服务器获取测试任务,所述测试任务为主任务或子任务;
若管理服务器返回的测试任务为主任务,则根据所述主任务创建子任务,并将所述子任务发送至管理服务器;
若管理服务器返回的测试任务为子任务,则根据所述子任务下载测试包,所述测试包包括扫描引擎、病毒库、样本信息及对应的预期结果;根据所述样本信息获取特征样本;利用扫描引擎检测所述特征样本是否携带所述病毒库中的病毒特征,得到检测结果;判断所述检测结果与预期结果是否一致,并将判断结果发送至管理服务器。
相应地,本发明还提供了一种分布式病毒特征样本验证系统,包括管理服务器和至少一个测试机,所述测试机包括多个测试节点,
所述测试节点包括:
获取模块,用于向管理服务器获取测试任务,所述测试任务为主任务或子任务;
执行模块,用于在管理服务器返回的测试任务为主任务时,根据所述主任务创建一个或多个子任务,并将所述子任务发送至管理服务器,在管理服务器返回的测试任务为子任务时,根据所述子任务下载测试包,所述测试包包括扫描引擎、病毒库、样本信息及对应的预期结果;根据所述样本信息获取特征样本;利用扫描引擎检测所述特征样本是否携带所述病毒库中的病毒特征,得到检测结果;判断所述检测结果与预期结果是否一致,并将判断结果发送至管理服务器。
本发明的有益效果是:
本发明将多台测试机通过通信网络与管理服务器连接起来,构建分布式处理系统,用于对病毒特征样本进行验证,极大地提高了特征样本的验证效率,其主要体现在以下两方面,一方面,将主任务拆分为多个子任务,供所有测试节点获取并执行,提高了任务执行效率;另一方面,管理服务器返回给测试节点的子任务中不包含特征样本,在执行子任务时,首先从测试节点所在的测试机获取与样本信息对应的特征样本,在该测试机不存在所需特征样本情况下,再从样本存储服务器中获取特征样本,这种方式节省了将特征样本直接从管理服务器传输至测试节点的时间,有利于进一步提高测试任务的执行效率,快速输出测试结果。
此外,将任务拆解工作移至测试节点,由测试节点将主任务拆分成多个子任务,既提高了任务拆分效率,又降低了对管理服务器运算性能的要求。
在特征样本验证过程中,管理服务器通过更新任务执行状态来捕捉执行失败的任务,并将执行失败的任务重新调起,供测试节点重新获取和执行,提高了任务执行的成功率。
附图说明
为了更清楚地说明本发明的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它附图。
图1是本发明实施例中分布式病毒特征样本验证方法的一种实施环境的结构示意图;
图2是本发明的分布式病毒特征样本验证方法的一个实施例的流程示意图;
图3是本发明的分布式病毒特征样本验证方法中获取并执行主任务的步骤流程图;
图4是本发明的分布式病毒特征样本验证方法中获取并执行子任务的步骤流程图;
图5是本发明的分布式病毒特征样本验证方法中测试节点执行子任务的步骤流程图;
图6是本发明的分布式病毒特征样本验证系统的一个实施例的结构示意图;
图7是本发明的分布式病毒特征样本验证系统中测试节点的结构示意图;
图8是本发明的分布式病毒特征样本验证系统中管理服务器的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,图1是本发明实施例中分布式病毒特征样本验证方法的一种实施环境的结构示意图。
图1所示实施环境用于实现本发明任意实施例或实施方式所述的分布式病毒特征样本验证方法,包括管理服务器100、测试包存储服务器200、样本存储服务器300和至少一台测试机400,所述管理服务器100与测试包存储服务器200之间可以通过无线网络或有限网络进行连接,每个所述测试机400与管理服务器100、测试包存储服务器200、样本存储服务器300之间可以通过无线网络或有限网络进行连接。为便于描述,图1仅示出一台测试机400,实际可根据需要,增加测试机的数量。
其中,每台测试机400部署多台android虚拟机,同时设计多条线程,以一台android虚拟机和一线程构成测试节点,即每台测试机包含多个测试节点。所述测试节点用于主动向管理服务器100获取测试任务(测试任务包括主任务和子任务),执行获取的测试任务,并将执行结果反馈给管理服务器100,如果执行的测试任务为子任务,还需要从测试包存储服务器200下载测试包,以及从样本存储服务器300获取特征样本。进一步地,测试节点还需要向管理服务器100反馈测试任务的执行情况,以使管理服务器记录各测试任务的执行状态,将执行失败的任务加入未执行任务队列,由测试节点重新获取并执行。本发明中,所述测试机400可以为移动终端、计算机终端或者类似的运算装置,优选为安装windows系统的计算机终端。所述计算机终端包括处理器和用于存储特征样本的存储器,在所述计算机终端上模拟android运行环境,采用Oracle VM VirtualBox和android镜像在计算机终端上构建android虚拟机,并将存储特征样本的文件夹配置为虚拟机共享文件夹,设置开机自动挂载。执行子任务时,可从共享文件夹直接获取特征样本,省略了特征样本从管理服务器100push到android虚拟机所需时间。
本发明的管理服务器100以轮询方式监控测试包存储服务器,当发现有新的测试包存入测试包存储服务器200中时,根据新的测试包自动生成测试主任务和对应的任务列表,并根据测试节点获取测试任务的请求,将测试任务发送给测试节点执行,以及,在接收到测试节点反馈的执行结果后,更新任务列表。本发明中,管理服务器100可以为移动终端、计算机终端或者类似的运算装置,优选为安装windows系统的计算机终端(如个人计算机PC)。计算机终端可以包括一个或多个处理器(处理器可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器,当然,计算机终端的结构并不限于上述电子装置,例如还可包括比更多的组件。存储器可用于存储数据、应用软件的软件程序以及模块,如存储测试任务、任务列表和测试报告,以及存储实现查询测试任务、生成测试报告及将执行失败的子任务重新加入未执行任务队列等数据处理对应的程序指令/模块。
测试包存储服务器200中存储的测试包是指由其他编译平台生成的,可以正式外发到线上供用户使用的某一版本的病毒查杀软件,即准备发布的包。样本存储服务器300用于存储特征样本,测试节点在执行子任务时,可以从样本存储服务器300中获取特征样本,以减少从管理服务器100传输数据至测试节点400所耗时间。测试包存储服务器200和样本存储服务器300均包含存储器,存储器可以包括高速随机存储器,还可包括非易失性存储器,如一个或多个磁性存储装置、闪存或者其他非易失性固态存储器。
请参阅图2,图2是本发明的分布式病毒特征样本验证方法的一个实施例的流程示意图。
本实施方式所述的一种分布式计病毒特征样本验证方法,包括以下步骤:
步骤S201,测试节点向管理服务器获取测试任务,所述测试任务为主任务或子任务;
步骤S202,若管理服务器返回的测试任务为主任务,则根据所述主任务创建子任务,并将所述子任务发送至管理服务器;
若管理服务器返回的测试任务为子任务,则根据所述子任务下载测试包,所述测试包包括扫描引擎、病毒库、样本信息及对应的预期结果;根据所述样本信息获取特征样本;利用扫描引擎检测所述特征样本是否携带所述病毒库中的病毒特征,得到检测结果;判断所述检测结果与预期结果是否一致,并将判断结果发送至管理服务器。
采用本发明方法可显著提高对特征样本的验证效率,主要体现在:一、由测试节点将主任务拆分为多个子任务,由于测试节点数量较多,可在同一时间对不同的主任务进行拆分,相比于传统方法中采用管理服务器一次仅能拆分一个主任务的方式,显著提高了执行效率;二、管理服务器发送给测试节点的子任务中不包含特征样本,测试节点在执行子任务时,可以从虚拟机共享文件夹或者样本存储服务器中获取特征样本,从而减少了特征样本从管理服务器传输到测试节点所耗时间,利于提高执行效率。
下面将结合附图3-5,详细描述执行本发明的分布式病毒特征样本验证方法的步骤流程。
请参阅图3,图3是本发明的分布式病毒特征样本验证方法中获取并执行主任务的步骤流程图。所述步骤包括:
S301、管理服务器根据测试包生成主任务和与所述主任务对应的任务列表,并存储所述主任务和任务列表。
具体地,测试包是由其他编译平台生成的,可以正式外发到线上供用户使用的某一版本的病毒查杀软件,即准备发布的包,在发布前需要先经过测试流程测试,测试包全部存储在测试包存储服务器上。
根据测试包生成主任务和任务列表的方法包括自动创建方式和人工创建方式。其中,自动创建方式为:管理服务器通过监控程序实时监控测试包存储服务器,当发现测试包存储服务器有新存入的测试包后,会根据所述测试包生成测试主任务和对应的任务列表,然后将主任务和任务列表存入存储器中。其中,主任务包含主任务ID、优先级描述、测试包信息及测试项目,所述测试包信息可以包括测试包存储地址等,任务列表中包括主任务ID。人工创建方式为:根据测试包人工创建测试主任务,并可以指定一个或多个测试项目。
存储器中的主任务具有优先级属性,优先级被划分为高、中、低三种,管理服务器在响应测试节点后,会按照任务的优先级次序发送任务。优选地,可以将自动创建的测试主任务的优先级默认为中,人工创建的测试主任务可以自主选择高中低三种优先级,以避免有紧急任务时,由于任务队列中任务过多,导致一些紧急的任务无法及时执行。相应地,测试子任务也有优先级属性,子任务的优先级属性与主任务的优先级属性一致。在某些子任务的状态为执行失败后,执行失败的子任务被重新挂起,其优先级保持不变,但需在同一优先级的其他子任务执行完毕后,该执行失败的子任务才会被重新获取并执行。例如10个子任务中,有一个子任务Q执行失败,该子任务Q在其他9个子任务均执行完成后,由测试节点获取并执行。
S302、测试节点向管理服务器请求测试任务。
测试节点向管理服务器发送获取测试任务的请求。
S303、管理服务器查询是否存在未执行的测试任务,将未执行的子任务发送至测试节点。
管理服务器接收测试节点发送的获取任务的请求,优先查询存储器中是否存在未执行的主任务,若查询到存在未执行的主任务,则将所述主任务发送给测试节点,若未查询到未执行的主任务,则进一步查询是否存在未执行的子任务。
具体地,可以通过查询任务列表来判断是否存在未执行的主任务或子任务。任务列表中记录了主任务ID、主任务的执行状态、主任务拆分后的子任务ID及各子任务的执行状态。查询任务列表时,优先查询主任务的执行状态,再将未执行的主任务按优先级从高到低依次发送给不同的测试节点。
S304、测试节点根据主任务创建一个或多个子任务,并将子任务返回至管理服务器。
测试节点收到管理服务器返回的主任务后,根据主任务中的测试项目创建一个或多个子任务,根据主任务ID为每个子任务分配子任务ID,并根据主任务的执行情况生成主任务执行报告,所述主任务执行报告包括主任务ID、主任务的执行状态及子任务ID;然后将子任务和主任务执行报告发送至管理服务器。
S305、管理服务器存储所述子任务,并将子任务信息添加到任务列表中。
管理服务器接收测试节点返回的根据主任务创建的子任务和主任务执行报告,将所述子任务存入存储器中,并根据主任务执行报告将主任务的执行状态更新为正在执行、将子任务ID添加至任务列表中。
参见图4,图4是本发明的分布式病毒特征样本验证方法中获取并执行子任务的步骤流程图。所述步骤包括:
S401、管理服务器根据测试包生成主任务和任务列表,并存储所述主任务和任务列表。
管理服务器可以通过自动创建方式创建主任务,具体为:通过监控程序以轮询方式监控测试包存储服务器,当发现测试包存储服务器有新存入的测试包后,自动根据所述测试包生成主任务和对应的任务列表,然后将主任务和任务列表存入存储器中。其中,主任务包含主任务ID、优先级描述、测试包信息及测试项目,所述测试包信息可以包括测试包存储地址等,任务列表中包括主任务ID。
存储器中的主任务具有优先级属性,优先级被划分为高、中、低三种,管理服务器在响应测试节点后,会按照任务的优先级次序发送任务。相应地,根据主任务创建的子任务也有优先级属性,子任务的优先级属性与主任务的优先级属性一致。在子任务的状态为执行失败后,执行失败的子任务被重新挂起,其优先级保持不变。
S402、测试节点向管理服务器请求测试任务。
测试节点向管理服务器发送获取测试任务的请求。
S403、管理服务器查询是否存在未执行的测试任务,将未执行的子任务发送至测试节点。
管理服务器接收测试节点发送的获取任务的请求,优先查询存储器中是否存在未执行的主任务,若未查询到未执行的主任务,则进一步查询是否存在未执行的子任务,并将未执行的子任务发送给测试节点。
具体地,可以通过查询任务列表来判断是否存在未执行的主任务或子任务。任务列表中记录了主任务ID、主任务的执行状态、主任务拆分后的子任务ID及各子任务的执行状态。查询任务列表时,优先查询主任务的执行状态,在所有主任务都处于完成执行或正在执行状态后,查询子任务的执行状态,将未执行的子任务按优先级从高到低依次发送给不同的测试节点。
S404、测试节点执行所述子任务,并将执行结果反馈至管理服务器。
参见图5,图5是本发明的分布式病毒特征样本验证方法中测试节点执行子任务的步骤流程图,所述步骤包括:
S4041、根据子任务下载测试包,所述测试包包括扫描引擎、病毒库、样本信息和与所述样本信息对应的预期结果。
具体地,根据子任务中包含的测试包下载地址,从测试包存储服务器下载对应的测试包,所述测试包包括扫描引擎、病毒库、样本信息和与所述样本信息对应的预期结果。所述样本信息对应的样本默认为携带病毒库中病毒特征的样本,其对应的预期结果默认为样本含有病毒,预期结果随样本信息一起存储,当然,预期结果也可以是人工编译的结果。
S4042、根据测试包中的样本信息获取特征样本。
根据样本信息中的特征查找特征样本,首先查询测试节点其所在的测试机上是否存储有与所述样本信息中的特征相匹配的特征样本,若是,则直接从测试机上调取所述特征样本,若否,则根据所述特征样本信息中的地址从样本存储服务器中下载特征样本。
S4043、利用扫描引擎检测特征样本是否含有病毒库中的病毒特征,得到检测结果。
通过adb install安装扫描引擎到android虚拟机中,开启新线程A,通过adb logcat等待收集扫描执行结果,使用uiautomator测试框架驱动被测扫描引擎并模拟点击扫描操作,在虚拟机中运行扫描引擎以检测所述特征样本是否含有所述病毒库中的病毒特征,得到检测结果。
S4044、判断检测就诶过与预期结果是否一致,并将判断结果返回至管理服务器。
将检测结果与预期结果进行对比,记录检测结果和预期结果不一致的内容,形成差异数据,将差异数据作为判断结果发送给管理服务器。
此外,测试节点还根据子任务执行情况生成子任务执行报告,并将所述子任务执行报告发送给管理服务器。所述子任务执行报告记录了子任务ID及对应的执行状态,所述执行状态包括完成执行和执行失败,若成功执行上述步骤S4041-S4044,则判定为子任务完成执行,若在执行步骤S4041-S4044过程中,遇到下载测试包失败、下载样本失败、引擎初始化或者扫描失败等,则判定为子任务执行失败。
S405、管理服务器存储测试节点反馈的执行结果,并更新任务列表中子任务的执行状态。
管理服务器接收测试节点反馈的判断结果和子任务执行报告,将所述判断结果存入存储器中,并根据子任务执行报告更新任务列表中子任务的执行状态,所述子任务的执行状态包括完成执行和执行失败。
进一步地,分布式病毒特征样本验证方法还包括:管理服务器监控所述任务列表,当主任务的所有子任务均更新为完成执行后,生成与所述主任务对应的测试报告,测试报告可体现子任务对应的检测结果、检测结果与预期结果的差异数据等;当监控到子任务的执行状态为执行失败时,将执行失败的子任务加入未执行的子任务队列,供测试节点重新获取和执行。
本发明方法中,管理服务器通过更新任务执行状态来捕捉执行失败的任务,并将执行失败的任务重新调起,供测试节点重新获取和执行,提高了任务执行的成功率。
与上述分布式病毒特征样本验证方法相对应,本发明实施例还提供一种分布式病毒特征样本验证系统。如图6所示,所述系统包括:测试包存储服务器200、样本存储服务器300、管理服务器100和至少一台测试机400,所述测试机400包括多个测试节点410。所述管理服务器100与测试包存储服务器200之间通过无线网络或有限网络连接,所述测试机400分别与管理服务器100、测试包存储服务器200和样本存储服务器300之间通过无线网络或有限网络连接。
所述测试包存储服务器200,用于存储测试包。所述测试包是由其他编译平台生成的,可以正式外发到线上供用户使用的某一版本的病毒查杀软件,即准备发布的包。
所述样本存储服务器300,用于存储特征样本。
请参见图8,所述管理服务器100包括任务创建模块110、查询模块120、更新模块130、任务监控模块140和存储模块150。
所述任务创建模块110,用于根据测试包存储服务器200中的测试包创建主任务和与主任务对应的任务列表。任务创建模块110以轮询方式监控测试包存储服务器200,当发现有新的测试包存入测试包存储服务器200后,自动根据所述测试包生成主任务和对应的任务列表,然后将主任务和任务列表存入存储器中。其中,主任务包含主任务ID、优先级描述、测试包信息及测试项目,所述测试包信息可以包括测试包存储地址等,任务列表可以用于记录主任务ID、主任务的执行状态、主任务拆分后的子任务ID及各子任务的执行状态。
所述查询模块120,用于响应测试节点410获取测试任务的请求,查询存储模块150中是否存在未执行的主任务,若是,则将所述主任务发送至测试节点,若否,则查询存储模块中是否存在未执行的子任务,并将未执行的子任务发送至测试节点。具体地,可以通过查询任务列表来判断是否存在未执行的主任务或子任务。查询任务列表时,优先查询主任务的执行状态,在所有主任务都处于完成执行或正在执行状态后,查询子任务的执行状态。在发送主任务或子任务时,依据主任务或子任务的优先级从高到低依次发送给不同的测试节点。
所述更新模块130,用于在接收到测试节点返回的子任务后,将子任务信息添加到任务列表中,以及,在接收到测试节点返回的判断结果后,更新任务列表中对应子任务的执行状态,所述执行状态包括完成执行和执行失败。具体地,依据测试节点返回的主任务执行报告在任务列表中添加子任务信息,依据测试节点返回的子任务执行报告在任务列表中更新子任务的执行状态。
所述任务监控模块140,用于监控所述任务列表,当主任务的所有子任务均更新为完成执行后,生成与所述主任务对应的测试报告;当监控到子任务的执行状态为执行失败时,将执行失败的子任务作为未执行的子任务,供测试节点重新获取。
所述存储模块150,用于存储任务创建模块创建的主任务和任务列表、执行模块返回的子任务和判断结果以及任务监控模块生成的测试报告。
请参见图7,所述测试节点410包括获取模块411和执行模块412。
所述获取模块411,用于向管理服务器获取测试任务,所述测试任务为主任务或子任务。
所述执行模块412,用于在管理服务器返回的测试任务为主任务时,根据所述主任务创建一个或多个子任务,并将所述子任务发送至管理服务器,在管理服务器返回的测试任务为子任务时,根据所述子任务下载测试包,所述测试包包括扫描引擎、病毒库、样本信息及对应的预期结果;根据所述样本信息获取特征样本;利用扫描引擎检测所述特征样本是否携带所述病毒库中的病毒特征,得到检测结果;判断所述检测结果与预期结果是否一致,并将判断结果发送至管理服务器。
所述执行模块412包括获取单元4121、检测单元4122和判断单元4123。
所述获取单元4121,用于根据所述子任务从所述测试包存储服务器200下载测试包,还用于根据所述测试包中的样本信息获取特征样本,包括:查询测试节点410所在的测试机400是否存储有与所述样本信息中的特征相匹配的特征样本,若是,则从所述测试机获取所述特征样本,若否,则根据所述特征样本信息中的地址从样本存储服务器中下载特征样本。
所述检测单元4122,用于利用扫描引擎检测所述特征样本是否携带所述病毒库中的病毒特征,得到检测结果。
所述判断单元4123,判断所述检测结果与预期结果是否一致,并将判断结果发送至管理服务器100。
以上所揭露的仅为本发明的较佳实施例而已,当然不能以此来限定本发明的权利范围,依据本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。