综合性恶意代码分析平台设计∗

2019-03-26 08:44李程瑜齐玉东孙明玮丁海强
计算机与数字工程 2019年3期
关键词:调用次数函数

李程瑜 齐玉东 孙明玮 丁海强

(海军航空工程学院 烟台 264001)

1 引言

随着计算机、网络、信息等技术的飞速发展,人类社会已经进入信息化时代。信息化带给人们极大便捷的同时,也带来了隐私泄露等信息安全问题,其中恶意代码对信息安全构成的威胁最为严重。恶意代码指故意编制或设置的、对网络或系统会产生威胁或潜在威胁的计算机代码。随着网络技术高速发展,恶意代码[1]传播方式也在迅速地演化,从引导区传播,到邮件传播、网络传播,发作和流行时间越来越短。然而相比于恶意代码的发展,解决恶意代码问题的技术手段缺乏实时性和敏锐性。为解决这一问题以及更好地了解恶意代码的行为,本文提出了综合性的恶意代码行为分析平台。

2 平台概述

2.1 背景分析

恶意代码(恶意代码是对病毒、木马、蠕虫以及僵尸程序等的统称,在本文中暂只考虑Windows平台下的恶意代码)是黑客们实施入侵、维持入侵的基础。传统研究人员通过对恶意代码进行反汇编,在汇编代码层次上,对恶意代码展开详细分析。但这有两个前提条件:一是具备深厚的汇编技术基础;二是分析效率要足以应付恶意代码的不断更新和变异。但在恶意代码普遍加壳、变种不断涌现的情况下,上述两个条件都很难满足。

自动恶意代码行为分析方法[2]提供了一种新的视角来分析恶意代码,它不再对恶意代码本身实行静态解析,而是让恶意代码运行在一个可控环境中,通过对恶意代码所触发的行为[3]来认识恶意代码。更为重要的是,这种分析可在无人工干预的情况下自动化进行,通称这种可控的环境为沙箱[4](Sandbox)。类似的系统有:CWSandbox Anubis、Norman、ThreatExpert等。但这些系统只提供单个恶意代码的分析功能[5],对恶意代码的大小、类型具有限制。经研究,由于部分沙箱工具没有解释其实现原理和技术框架,在对P2P僵尸程序样本进行分析时,很多工具并不能有效提供分析报告。同时,研究者也不可能有耐心使用浏览器完成数百上千次恶意代码的提交,并在邮箱中等待报告。这些系统并没有提供源代码或者安装程序来实现自行部署,故需要一种替代方案基于本地,自行部署恶意代码行为分析系统,并根据需求随时调整分析过程。

2.2 相关工作

最早由Raymond W.Lo提出针对恶意代码的静态代码检测方法[6]:通过提取恶意代码静态代码中带有恶意行为趋向的标示来检测其他样本。该方法被Christodorescu、Preda等扩展为基于语义的恶意代码检测方法[7]。与此相反的是,Szor、Popov等提出利用混淆(obfuscation)技术[8]来应对静态代码检测的方法已在目前恶意代码发展中得到不断深入应用,恶意代码加壳和加密均属其常见类别。Royal,Martignoni等为了解决加壳带来的阻碍,通过一种半动态半静态方法执行分析。其基本思想在于将恶意代码进行动态调试执行,当样本执行到完成外壳步骤时,开始对恶意代码进行静态分析,绕开复杂脱壳工作。尽管这些方法构造精巧,但静态分析的效率和健壮性问题仍不能得到有效解决。故基于恶意代码行为的动态分析方法开始涌现,“代码可隐,行为难隐”成为其基本前提。

先 后 出 现 的 Anubis,BitBlaze,Norman,CWSandbox等沙盒系统,均可将恶意代码执行在精心构造的虚拟环境中,通过技术手段获取恶意代码行为踪迹。但CWSandbox等以网页形式应用且不开源,无法让研究者离线独立运行。故本文提出一种优化方案:以开源形式实现CWSandbox对恶意代码行为分析功能。基于此,本文设计并实现了综合性恶意代码行为分析平台,在以下几个方面做了积极地探索:

1)针对开源软件 Cuckoo Sandbox[9]在分析处理恶意代码时存在API监控种类较少、难以统计等不足,对其进行了针对性的改进开发。通过重新编译DLL添加监控的API函数种类,扩展了对恶意代码的分析范围。

2)本作品应用虚拟机技术架设“沙箱”,构建恶意代码行为监控环境。经过课题组测试,发现当恶意行为发现软件运行环境和恶意代码监控环境一致时,存在不安全性和未知性。故此提出在Linux系统下应用加载Windows系统的虚拟机构建“沙箱”,为恶意代码分析提供了一个安全、可控环境,并使作品软件程序更加轻量级。

3)恶意代码都有数个进程,分析其行为时每个进程各产生一组API调用[10]子序列,该类型分析报告包含恶意代码特征过于抽象,不利于后续研究展开。故此,本作品提出了整合API调用序列、统计API调用次数算法。对同一恶意代码所有进程的API调用子序列按其第一个API调用时间先后顺序排序整合,并统计每个API调用次数,生成总体报告。该算法从统计角度提取了恶意代码部分特征,为敏感API选取提供了参考依据。

3 结构设计及关键技术

3.1 方案设计

本平台拟实现对各类恶意代码行为的分析,具体方案设计如图1所示。

图1 模块化设计结构图

1)虚拟机:构建恶意代码行为监测环境;

2)恶意代码行为分析:实现恶意代码行为监测、跟踪和捕获功能;

3)报告生成模块:合并API调用子序列,生成行为分析报告;

4)API调用次数统计模块:统计恶意代码调用API函数次数。

3.2 关键处理过程

为实现监测、分析多种恶意代码功能,本平台融合沙箱技术、API Hook技术、DLL编写技术、注入技术等,成功构建综合性恶意代码分析平台。其原理及关键处理过程如下所述。

1)沙箱技术:本平台基于沙箱(这里的沙箱采用虚拟机实现)技术,构建恶意代码的动态行为分析平台。沙箱是一种按照安全策略限制程序行为的执行环境。沙箱技术指根据系统中每一个可执行程序的访问资源及其系统赋予的权限,建立应用程序“沙箱”,限制恶意代码运行。每个应用程序都运行在自己的“沙箱”中,不会对其它程序的运行产生影响。同样,操作系统与驱动程序也存活在自己的“沙箱”之中,故这些程序也不会影响其正常运行。针对每个应用程序,沙箱均准备了一个配置文件,限制该文件能够访问的资源与系统赋予的权限。这些策略允许选择系统管理应用程序的方式:应用程序既可被“限制运行”,也可被“禁止运行”。通过在“沙箱”中执行不受信任的代码与脚本,系统可以限制甚至防止恶意代码对系统完整的破坏。

2)API Hook[11]技术:所有程序的启动都要调用API函数,包括恶意代码在内。API Hook技术是一种用于改变API执行结果的技术。本平台利用API Hook技术,对恶意代码API函数调用进行捕获,进而改变系统API的原有功能。

3)DLL 编写、注入技术[12]:DLL(Dynamic Link Library)是一个包含可由多个程序同时使用的代码数据库,不是可执行文件。它提供了一种方法,使进程可以调用不属于其可执行代码的函数。DLL注入将一个DLL放进某进程的地址空间,使其成为该进程的一部分。

3.3 软件实现

平台在 VS2010、gcc for windows、gdb for windows和mingw下开发完成。主要工作体现在以下两方面:

1)编写DLL函数增添API函数种类。

要增加监控的API函数,需对API Hook实现过程有一定了解。本平台利用mingw编写cuckoomon.dll用以完成API Hook的主要流程,如图2所示。为方便更新,设计并编译一个通用组件chook.dll负责具体API函数指针的保存、转移和返回,在cuckoomon.dll中嵌套调用[13]。

2)获取API调用总序列、统计API调用次数。

把每个进程API调用子序列提出后作为整体,按照每个子序列中第一个函数的调用时间点进行排序,合并形成总序列。在此基础上建立统计报告对API调用次数进行统计,整合所有API函数调用次数情况,并与其他恶意代码分析平台相互比对,验证本平台实用性,如图3所示。

图3 API调用次数统计流程图

本平台总体软件实现步骤如下:

第1步,判断是否安装Linux操作系统,安装则跳过此步;未安装则建议安装兼容性好、内核稳定的通用发行版本ubuntu。

第2步,在Linux系统下加载综合性恶意代码分析模块。

第3步,在Linux系统里加载装有XP的虚拟机。完成后将可疑文件(常为恶意代码)导入虚拟机中,对其监测分析,得到分析结果并生成分析结果报告。如图4所示。

4 软件测试与结果分析

4.1 测试方案

本平台拟从三个方面进行效能测试和功能性测试。

实验1:在恶意代码分析平台中注入已知API调用序列的恶意代码,测试分析平台的试用性与正确性。

实验2:与CWSandbox对比。CWSandbox分析功能较为全面,故将本平台生成的分析报告从API调用序列报告之间的几何距离和API调用数目两方面与CWSandbox所得报告相比较,通过比较结果检测本平台分析功能的完备性。

实验3:监测新增API函数、统计API调用次数。本平台将对某恶意代码调用的每一个API函数次数进行统计,由多至少排列。该实验从统计学角度提取了部分特征并判断本平台扩展的监控种类实用性大小。

4.2 测试数据

为了能更好检验本平台的恶意代码行为分析功能,选用从德国蜜罐[14]组织获取的3131个恶意代码为实例数据集(可从网站www.mlsec.org/Malheur/获得),这些恶意代码经6个独立的反病毒厂商分析,共分为24个类别,共包含41个僵尸程序变种,具体如图4所示。

图4 恶意代码数据类

4.3 结果分析

1)实验1:恶意代码行为分析准确性检验。用分析平台对上述已知类型的恶意代码进行跟踪检测,生成恶意代码特征分析报告。报告显示数据与预期客观数据基本保持一致,一定程度上客观、准确地反应了恶意代码某些数据与特性,说明本平台具有对普遍恶意代码的跟踪分析能力。

2)实验2:与CWSandbox对比。在此实验中,主要统计本平台和CWSandbox对恶意代码数据集分析结果中11个重要系统行为类别的API调用数目,如图5所示(每一类中的第一列对应CWSandbox,第二列对应本平台)。由图5可知多数类别中本平台所获取的数目、对应统计结果大小分布与CWSandbox基本保持一致。

3)实验3:监测新增API函数、统计API调用次数。应用本平台对某恶意代码进行检测分析,生成行为分析报告,对本平台新增API监控函数进行标记。记录该恶意代码所有进程的API调用序列,并统计每个API调用次数,按照由多至少顺序排列,如表1所示。

图5 API调用数目对比图

表1 某恶意代码API调用次数统计表

由数据可看出,本平台新增API函数调用次数均排列于统计表前列,证明本平台扩展的API监控种类具有实用性。

5 结语

本文设计实现的综合性恶意代码分析平台有效克服了传统分析平台[15]的局限性、模糊性,在恶意代码分析的深度和广度上均有扩展,主要具有以下优点:

1)以开源为宗旨,在Linux系统下进行平台开发和实现。运行形式为命令行,使平台软件程序更加轻量级。

2)采用在Linux系统下应用Windows虚拟机构建“沙箱”技术,为恶意代码分析提供安全、可控环境。

3)核心函数以DLL形式编译、存储,便于开源代码的改进、更新和维护。

本平台为用户提供了一个完备动态行为分析综合解决方案。根据监控对象和目的,可灵活调整设置、改造沙箱技术并捕获API函数种类。本平台针对性强、可操性强、覆盖范围广,具有良好的实用性和适用性。

猜你喜欢
调用次数函数
2020年,我国汽车召回次数同比减少10.8%,召回数量同比增长3.9%
最后才吃梨
俄罗斯是全球阅兵次数最多的国家吗?
基于Android Broadcast的短信安全监听系统的设计和实现
关于函数的一些补充知识
高中数学中二次函数应用举隅オ
无独有偶 曲径通幽
利用RFC技术实现SAP系统接口通信
C++语言中函数参数传递方式剖析