米昂
(国家计算机网络应急技术处理协调中心上海分中心 上海市 200000)
对接多种扫描引擎对上传文件进行扫描判定的应用场景,最著名的是Virustotal 平台,能够向用户输出其对接的多种公开引擎的判定结果列表。然而在使用中,其存在以下问题:
(1)无法对接私有引擎。目前国内部分安全厂商或主管部门也建设有私有的APP 扫描引擎,由于Virustotal 平台对接的扫描引擎无法自定义,导致其无法对接私有平台的检测结果。
(2)仅返回扫描引擎的判定结果列表。Virustotal 仅返回样本在各引擎中的恶意性判定结果列表,每个引擎的判定结果包括恶意、非恶意、疑似等。但通过平台无法获取到各引擎详细的扫描报告以及具有置信度的恶意性判定建议。
实现多引擎的对接并基于扫描结果进行样本的恶意性判定,需要解决两方面问题。一方面,是实现高性能、异步的对接过程,合理调度文件上传、引擎扫描、获取扫描结果等相关过程异步且有序的逐步完成[1];另一方面,是基于各扫描引擎返回的不同判定结果,有置信度的输出恶意性判定建议。
针对以上问题,系统采用了工作流调度机制结合分布式异步任务队列[2]的技术方案,并采用决策树算法,针对同一款APP 样本对接不同的扫描引擎进行样本恶意性判定。
系统架构如图1 所示。系统通过调度执行层对样本分发上传、启动样本扫描任务、扫描结果获取与分析、格式化保存数据等高耗时操作使用进行异步调度并执行,并将相关结果保存至数据库,用户通过展示界面可以对APP 应用情况进行查询与统计,并查看后台扫描任务进度情况。
由于将APP 样本分发上传至各扫描引擎并获取分析扫描结果是一个高延时的工作,为避免主进程因高耗时的IO 操作阻塞等待,并且实现系统展示界面的即时性操作与APP 分发扫描分析等高耗时任务的分离,系统在任务调度执行过程使用了异步分布式的工作模式;同事,为了保证样本上传、引擎扫描、获取结果、分析结果等过程能够按照顺序逐步完成,又结合了工作流调度执行的机制,技术方案如图2 所示。
其中,界面展示层使用Django 开发页面展示逻辑,异步工作流调度引擎采用AirFlow 工作流框架,高耗时任务采用分布式执行框架Celery 完成,并使用RabbitMQ 作为分布式执行的消息队列。
系统的用户视图仅为Web 界面,除了常规的查询APP 样本信息、各引擎扫描结果详细信息、各类综合统计的Web 浏览外,用户在界面上启动APP 检测任务。任务启动后,Web 逻辑将任务信息提交工作流引擎进行调度,并从工作流引擎获取任务执行状态的实时信息。接到任务后,AirFlow 工作流引擎通过DAG(有向无环图)的工作模式以及调度器确保单次任务能够按照分发样本、获取报告等流程逐步异步且有序的执行。而对于向对接的多个APP 检测平台并发上传样本、从多个平台拉取报告、以及多批次扫描任务并发执行的具体过程,由工作流引擎通过消息队列调度分布式系统Celery 具体完成。
图1
图2
由于对接的扫描引擎的扫描原理与能力各不相同,所以大量存在对于同一款APP 出现不同恶意性判定结果的情况。VirusTotal 的解决方法是展示判定为恶意的引擎数量与参与扫描的全部引擎总数的占比,但并不能根据各引擎长期的表现情况给出经验的判定预测。本系统使用决策树模型解决上述问题。
决策树是一种树状分类结构模型,是一种通过对变量值拆分建立起来的分类规则,又利用树形图分割形成的概念路径的数据分析技术。由于本系统对接的各类扫描引擎对于APP 样本的恶意性判断结果为“正常”、“恶意”、“疑似”、“失败”等离散值,例如MD5 值 为117B359038FC2DA271722BF16FADB3FA 的APP 样本在部分引擎中的判定结果如表1 所示。所以系统使用基于ID3 算法的决策树模型对新样本的恶意性进行预测,其决策属性即各扫描引擎给出的判定结果。
表1:样本117B359038FC2DA271722BF16FADB3FA 扫描情况
图3
ID3 决策树的核心思想是利用信息熵原理选择信息增益最大的属性作为分类属性,递归地拓展决策树的分枝,完成决策树的构造[3]。本系统使用已收集掌握的正常APP 与恶意APP 样本构建训练集,获取这些样本在平台对接的各引擎中的扫描结果,并对样本真实的恶意性进行标识,进而使用ID3 算法构建决策树。当系统接收新样本并从各扫描引擎获得扫描结果后,依据决策树给出样本是否为恶意的预测值。同时,由于ID3 决策树的节点选择的是信息增益最大的属性,所以也可根据最终形成的决策树侧面反映系统所对接的各扫描引擎的扫描能力。当作为判定属性的引擎结果所处的决策树层数越低时,表示该引擎的扫描结果信息增益越大,其扫描能力越强。
基于上述架构设计与核心技术,本系统实现的用户视图Web界面如图3 所示。用户在界面上可以进行各种类型的查询统计操作,并可将一批次APP 样本配置成为一个任务进行启动。后台程序在分布式异步工作流的工作模式下,按照业务流程顺序,完成将各样本分发至各扫描平台、启动扫描、监控扫描、获取各扫描引擎对各APP样本的扫描结果、对单个APP的所有扫描结果综合研判等过程,有序且异步的调度完成整个业务逻辑。用户在界面上可以实时查看到业务进展,并最终获得APP 的扫描报告与综合判定结果。