互联网的快速崛起给网络空间带来新的发展机遇,但同时也带来越来越严重的网络安全问题。高速互联网在实现设备与服务互连的同时,也为网络黑客从海外实施远程匿名攻击提供了便捷途径,在目前网络安全犯罪成本较低的情况下,黑客在各类社交网络传播恶意代码的频率逐年升高。恶意代码由攻击者创建旨在损害网络系统安全性或泄露被攻击者隐私信息,其包括蠕虫病毒、特洛伊木马等常见的计算机病毒,以及间谍软件、广告软件和行为记录软件等恶意软件。目前,恶意代码的数量正在呈爆发性增长。根据卡巴斯基报告[1],2019年第一季度,网站META区域受到加密挖掘恶意软件、网络钓鱼和勒索软件等持续攻击,该季度恶意软件攻击超过1.5亿次,平均每天达到160万次,相较2018年第一季度增长108%。
恶意代码的检测方法主要包括基于签名的检测方法、启发式检测方法以及行为式检测方法等,其中基于签名的检测方法应用最为广泛。该方法主要基于模式匹配的思想,为每种已知恶意代码产生一个唯一的签名特征标记并创建恶意代码库,通过将未知代码的签名特征与恶意代码库进行对比来识别恶意代码。其检测速度较快且准确率高,但对于未出现过的病毒无法进行检测。此外,大量恶意软件为避免被查杀进行加壳和混淆处理,增大了其检测与识别难度。
针对上述问题,本文提出一种结合动态行为和机器学习的恶意代码检测方法。建立自动化分析Cuckoo沙箱[2]解析恶意代码网络日志以获取其行为信息,将Cuckoo沙箱和改进DynamoRIO系统相结合作为虚拟环境,提取恶意代码样本应用程序接口(Application Programming Interface,API)调用序列特征以全面获取其文件操作、进程操作和注册表操作等行为信息,并基于双向门循环单元(Bidirectional Gated Recurrent Unit,BGRU)网络构建恶意代码检测模型。
1 相关工作对恶意代码的有效检测是保证网络空间安全的重要手段,现有恶意代码检测方法主要包括基于静态的检测方法和基于动态的检测方法。在基于静态的检测方法中,利用签名的恶意代码检测方法应用最广泛,其主要采用预定义的方式进行防护,虽然可识别通用应用程序中的恶意软件,但需要对签名数据库进行定期维护。目前,基于机器学习的恶意代码检测方法还使用了操作码特征[3]与二进制文件特征。文献[4]基于操作码序列以可执行文件向量来表示恶意软件,并采用机器学习算法检测恶意代码。文献[5]基于n-gram和SVDD技术提出一种未知恶意代码检测方法SSPV-SVDD,其对单个恶意代码家族的识别准确率达到97%。文献[6]提出一种基于可执行文件加壳算法的分类方法来检测恶意代码,先缩放给定可执行文件的熵值,将特定存储位置的熵值转换为符号表示,再使用朴素贝叶斯和支持向量机检测加壳算法并对符号分布进行分类,该方法的准确率和查全率分别达到95.35%和95.83%。文献[7-8]采用可视化方法将恶意代码转换为图像并使用神经网络进行训练,成功对恶意代码进行分类。
静态二进制检测方法在很大程度上受到混淆技术限制,虽然简单混淆的代码在一定程度上能被检测,但现有检测方法在处理混淆代码时存在NP难题[9]。由于动态检测方法能有效检测恶意样本的行为信息,因此对于恶意代码动态检测技术的研究受到广泛关注。文献[10] 提出一种恶意软件检测算法,利用目标可执行文件的动态收集所得指令跟踪记录来构建子图表示马尔可夫链,创建指令跟踪图间的相似度矩阵,并将其发送到支持向量机进行分类。文献[11]采用动态指令序列n-gram提取特征,利用K均值算法与EM聚类算法对恶意代码进行分类,实验结果表明EM聚类算法优于K均值算法,且两种算法的分类精度均超过90%。
网络行为是影响恶意样本动态行为的重要因素。目前基于网络行为的恶意代码检测主要采用传统方法,即由人工设计特征字段,通过频数统计方式提取特征,并构建传统机器学习模型或卷积神经网络(Convolutional Neural Network,CNN)模型进行分类。文献[12]提出端到端的监督学习模型,从不同协议和网络流量层中提取多类特征,通过计算得到特征向量来检测恶意软件。除此之外,文献[13]将流量数据视为图像并提出一种基于CNN的恶意软件流量分类方法,将表示学习方法应用于恶意软件流量分类。本文基于API调用序列及网络行为来提取特征,采用词嵌入方式将网络流量转换为语句向量,并构建BGRU深度学习模型对恶意代码进行检测。
2 本文恶意代码检测方法 2.1 方法流程本文提出一种结合动态行为和机器学习的恶意代码检测方法,其流程如图 1所示。为全面记录恶意代码的行为信息,先构建Cuckoo沙箱和DynamoRIO系统获取动态行为,再针对恶意代码样本的API调用序列与网络行为提取并融合特征,得到对应的特征向量并以此训练BGRU分类模型,从而实现对恶意代码的检测。
|
Download:
|
| 图 1 本文方法的流程 Fig. 1 Procedure of the proposed method | |
安全分析人员利用动态沙箱技术可从实际行为中分析并检测出恶意代码,并有效降低误报率。CWSandbox、Anubis、BitBlaze、Norman以及ThreatExpert等分析系统利用动态插桩技术实现了对恶意样本行为的有效监控。因此,本文结合沙箱技术与动态插桩技术分析记录样本的行为信息。
本文采用Cuckoo沙箱技术和DynamoRIO系统动态二进制插桩工具来获得样本行为信息。Cuckoo沙箱和DynamoRIO系统获取恶意代码样本API序列信息的机制不同。Cuckoo沙箱技术是一种封闭式沙箱技术,Cuckoo沙箱可将二进制样本置于虚拟环境中自动化运行并记录其API序列信息与网络通信信息。为解决恶意代码的反调试问题,本文对Cuckoo沙箱源码的vmdetect.yar规则进行改进,从而获取API序列信息及网络通信信息,同时避免恶意代码检测出虚拟环境而停止运行。DynamoRIO系统是一种有效的二进制插桩工具,其较Pin运行速度更快。本文以基本块为单位,对各类指令进行分析,并基于回调机制对DynamoRIO系统进行完善,使其能获取完整的API序列调用信息,通过将Cuckoo沙箱和DynamoRIO系统相结合,以更全面地获取恶意代码样本行为信息。
2.2.1 Cuckoo沙箱Cuckoo沙箱是Google公司开发的一个开源的自动化恶意代码分析系统,可分析office文档、pdf文件、可执行文件以及电子邮件等多种文件类型,能用于Windows、Linux和Android等系统的恶意软件检测,其结构如图 2所示。Cuckoo沙箱由一个处于核心位置的主机(中央管理软件)和多个Guest计算机(用于分析的虚拟或物理计算机)组成。主机是沙箱运行的核心组件,主要负责样本执行与分析过程的调度以及Guest计算机的管理。Guest计算机处于隔离环境,每次样本分析都会从一个处于纯净状态的快照开始,可保证恶意代码样本被安全地执行与分析,从而确保分析的正确性,避免多个分析之间的相互干扰。
|
Download:
|
| 图 2 Cuckoo沙箱结构 Fig. 2 Cuckoo sandbox structure | |
采用Cuckoo沙箱运行恶意代码样本后,可获得以下信息:1)恶意代码内部函数与Windows API调用跟踪信息(API日志);2)恶意代码执行期间文件创建、删除与下载的操作信息;3)以PCAP形式对恶意代码网络行为的跟踪信息(网络日志);4)恶意代码样本的静态数据以及释放文件的行为信息;5)程序执行期间桌面操作截图;6)文件操作、注册表操作、互斥操作和服务操作等系统操作信息;7)机器全内存空间的转储信息。
恶意代码通常具有反调试功能,为有效记录恶意代码样本的行为信息,本文对Cuckoo沙箱源码的vmdetect.yar规则文件改进如下:
$vmware = {56 4D 58 68}
$virtualpc = {0F 3F 07 0B}
$ssexy = {66 0F 70????66 0F DB??????????66 0F DB??????????66 0F EF}
$vmcheckdll = {45 C7 00 01}
$redpill = {0F 01 0D 00 00 00 00 C3}
$vmware1 = "VMXh"
$vmware2 = "Ven_VMware_" nocase
$vmware3 = "Prod_VMware_Virtual_" nocase
$vmware4 = "hgfs.sys" nocase
$vmware5 = "mhgfs.sys" nocase
$vmware6 = "prleth.sys" nocase
…
由Cuckoo沙箱可得到存储格式为json的恶意代码样本行为信息报告。此外,为进一步提取样本动态特征,本文基于FakeNet模拟网络环境,将Cuckoo沙箱记录的网络日志以pcap格式进行存储,作为恶意代码样本的网络行为报告。
2.2.2 DynamoRIO系统由于目前恶意代码大部分已采用抗检测技术,当检测到虚拟环境或沙箱时会隐藏自身恶意行为,或者采用反Hook及绕过API层直接调用系统的方式,导致采用动态检测方法分析API记录时出现漏报或误报。
DynamoRIO[14]是一种代码运行控制系统,该系统高效透明且控制全面,能有效监控应用程序中每个已执行的指令。DynamoRIO系统也是一个跨平台的二进制检测平台,可适用于移植性程序。由于DynamoRIO系统采用回调机制处理二进制可执行代码,因此通过设置回调,可利用DynamoRIO系统轻松操控目标程序的二进制可执行代码。
本文对DynamoRIO系统的drstrace和drltrace进行改进,进而获取二进制程序的行为信息,具体流程如图 3所示。改进后的DynamoRIO系统以基本块为单位分析各指令,并对调用指令类型进行判断。如果属于系统调用,则分别采用drsys_syscall_name()函数和drsys_iterate_args()函数获取系统调用的名称与参数信息;如果属于API调用,则分别采用dr_module_preferred_name()函数和drwrap_get_arg()函数获取API调用的名称与参数信息。参数按照类型分为直接参数和间接参数两种。直接参数可从函数的栈中直接获取,例如立即数。间接参数需要根据函数栈中的地址间接寻址,从内存读取参数信息。本文将DynamoRIO系统作为提取恶意代码样本行为信息的补充实验环境,并使用FakeNet模拟网络环境。
|
Download:
|
| 图 3 DynamoRIO系统操作流程 Fig. 3 Operation procedure of DynamoRIO system | |
本节对上文中得到的行为信息进行特征提取并向量化(将API序列转换为数字向量,用于分类模型输入)。恶意代码样本的行为信息表现在文件、进程、注册表以及网络等方面。而API调用序列可表征恶意代码样本的文件操作、进程操作和注册表操作等。例如,修改注册表通常需要通过RegOpenKey Ex、RegSetValue、RegCloseKey 3个API调用组合来实现。因此,可利用这种API调用组合来提取特征,从而得到恶意代码样本的文件操作、进程操作和注册表操作等信息。此外,还可通过Cuckoo沙箱获取恶意代码样本的网络日志,进而得到其网络行为信息。为全面描述恶意代码样本的行为信息,本文从API调用序列和网络行为两方面提取特征。
2.3.1 API调用序列本文基于API调用序列执行特征向量化。为了更有效地记录恶意代码样本的行为记录,在向量化之前,先对Cuckoo沙箱报告进行分析。Cuckoo沙箱的分析日志以json格式存储,并通过调用来提取进程记录的顺序信息。在Cuckoo沙箱报告中,API调用序列存储于behavior/processes/calls字段下,可根据processtree字段绘制进程调用树,并结合processes/calls字段解析得到Cuckoo沙箱的API执行序列。然后对DynamoRIO系统报告进行分析,从中提取API信息,并将此结果与Cuckoo沙箱的结果进行合并。
程序在执行过程中会多次循环调用相同的API序列以执行同一命令。由于本文目标是通过提取API调用序列来检测恶意代码,因此无需大量重复的API调用。基于此,本文去掉了冗余的API调用序列,然后将其向量化。图 4为恶意代码样本报告中API提取示例(md5:ffff3f7dad938ac9c8cb2d2d4e25a310)。恶意代码样本根据calls中的API提取序列信息,并重复调用GetFileType(见方框处)。因此,本文将该冗余API信息删除。
|
Download:
|
| 图 4 恶意代码样本报告中API提取示例 Fig. 4 Examples of API extraction in malicious code sample report | |
本文使用Word2vec[15]将API序列全部转换为数字向量。Word2Vec由两层神经网络组成,是Google公司于2013年所推出用于构建单词向量的工具。单词向量是在文档中供计算机处理的单词数值向量。将文本语料库输入Word2Vec中,输出即为文本语料库中每个单词的向量。与TF-IDF等传统单词向量构造方法相比,Word2Vec构造的单词向量包含更丰富的语义信息(具有相似语义的单词,其词向量表现出高度的相似性)。本文通过Word2Vec将API序列转换为固定长度的向量,并将向量长度设置为50。
2.3.2 网络行为信息为解析网络日志数据包pcap文件,提取其特征并将其向量化后输入神经网络,本文基于文本分类的思想(不考虑文档整体,以文档中段落和语句为处理对象),对网络流量进行处理。
首先对pcap文件进行解析,将其中的数据包作为处理对象,并根据每个数据包构造关键语句(特征向量),语句中每个单词均为数据包中的一个字段。然后利用词嵌入方法[16]从该语句中提取语义和语法特征。由于段落的语义通常可由关键语句决定,因此本文选择语句(数据包)的语义,而不是整个段落(网络流)的语义。此外,每个数据包固有的字段顺序起到类似语法规则的作用,这些语法规则对于构建恶意数据流量(基于签名的检测)或构建数据良性流量(异常检测)的语句模式起到决定性作用。值得注意的是,根据单个或多个数据包的行为和特征可以判断是否为恶意数据流量,因此这种基于数据包的语句特征提取方式可用于恶意代码样本的判定。
通常,每个数据包的字段为1个字节的数据包头、数据包头的1个字段或者有效载荷的数据块。本文将数据包头中的字段视为1个单词,由于数据包中字段长度不同,因此得到的单词长度也不同。将数据包中字段长度固定为n个字节,如果数据包中字段长度小于n个字节,则将其用零填充,具体如图 5所示。由于大部分TCP数据包含有14个字节的MAC报头、20个字节的IP报头和20个字节的TCP报头[17],因此本文设置n=54。
|
Download:
|
| 图 5 数据流量向量化示意图 Fig. 5 Schematic diagram of data flow vectorization | |
由于API调用序列及网络流量中数据包信息均具有前后关系,因此经过特征提取与向量化处理后,特征向量也具有前后依赖关系,这与人脑思维类似。例如,人们阅读文章时能在理解前文所阅读单词的基础上理解当前阅读的单词。循环神经网络[18](Recurrent Neural Network,RNN)具有递归结构,可以连续保留先前的信息,但是随着时间的延长,其会失去保存与处理信息的能力,且存在梯度消失的问题。对此,研究人员提出RNN的特殊选择方法,其中最具代表性的是LSTM [19]和GRU[20],这两种方法均可通过门控机制获取长期的依赖关系。GRU结构更简单且计算复杂度更低,其运行速度要快于LSTM[21]。
具体而言,两个关键模块构成基于GRU的网络。一个模块是包含第j个GRU隐藏单元且具有相应权重矩阵Wr和Ur的复位门r
第j个GRU隐藏单元的整个数据流量计算公式如下所示:
| $ {r}_{t}^{j}=\sigma ({\boldsymbol{W}}_{r}{\boldsymbol{x}}_{t}+{\boldsymbol{U}}_{r}{\boldsymbol{h}}_{t-1}{)}^{j} $ | (1) |
| $ {z}_{t}^{j}=\sigma ({\boldsymbol{W}}_{z}{\boldsymbol{x}}_{t}+{\boldsymbol{U}}_{z}{\boldsymbol{h}}_{t-1}){}^{j} $ | (2) |
| $ {\tilde{\boldsymbol{h}}}_{t}^{j}=\mathrm{t}\mathrm{a}\mathrm{n}\mathrm{h}({\boldsymbol{W}}_{h}{\boldsymbol{x}}_{t}+{\boldsymbol{U}}_{h}({r}_{t}\odot {\boldsymbol{h}}_{t-1}\left)\right){}^{j} $ | (3) |
| $ {\boldsymbol{h}}_{t}^{j}={z}_{t}^{j}{\tilde{\boldsymbol{h}}}_{t}^{j}+(1-{z}_{t}^{j}){\boldsymbol{h}}_{t-1}^{j} $ | (4) |
其中:σ(·)为sigmoid激活函数,本文中σ(x)=
在提取单词的语义特征时,未来信息与语句S中的历史信息同样重要,而上述基于正序的体系结构仅考虑了历史信息。对此,本文使用BGRU网络,该网络引入一个未来层解决上述问题,其结构如图 6所示。在未来层中,数据的输入顺序与输入层相反。BGRU网络使用两个隐藏层分别从过去和未来提取信息,这两个隐藏层连接到同一个输出层,BGRU网络充分利用了输入序列的上下文信息。
|
Download:
|
| 图 6 BGRU网络结构 Fig. 6 BGRU network structure | |
本文分类模型的结构如图 7所示。其中,左GRU层通过馈送语句S的正序来学习当前输入xt的历史信息,而右GRU层通过馈送语句S的逆序来获得当前输入xt的未来信息。
|
Download:
|
| 图 7 本文分类网络结构 Fig. 7 Structure of the proposed classification network | |
语句S第i个单词最终输出的表达式如下:
| $ {\boldsymbol{h}}_{i}=\left[{\overrightarrow{\boldsymbol{h}}}_{i} \oplus {\overleftarrow{\boldsymbol{h}}}_{i}\right] $ | (5) |
其中,
本文通过RNN模型分别学习到API_Cuckoo(从Cuckoo沙箱中提取的API)、API_DynamoRIO(从DynamoRIO系统提取的API)和Net_pcap(网络流量pcap包)3种序列特征。由于这3种序列特征均具有前后依赖的关系,因此本文采用双向的BGRU网络作为分类网络,其可以利用输入序列的上下文信息更好地学习序列特征的依赖关系。在图 7中,先将序列按前向顺序输入GRU层得到前向输入隐藏层信息h_forward,再将序列按后向顺序输入GRU层得到后向输入隐藏层信息h_backward,然后将两者结合后作为BGRU的输出。通过BGRU网络,本文学习到API_Cuckoo、API_DynamoRIO和Net_pcap 3种序列特征,然后通过Concat拼接输出向量,最终基于全连接层和Softmax层得到检测结果。
3 实验与结果分析 3.1 实验准备本文结合Cuckoo沙箱和改进DynamoRIO系统作为虚拟环境,对恶意代码样本的API调用序列及网络行为特征进行提取与融合,以全面获取恶意代码文本的行为信息。为构建神经网络模型,选择系统的开发框架为pytorch[22],开发语言为python 3.6。实验环境为Ubuntu 18.04.2 LTS操作系统,NVIDIA GeForce GTX 1080 GPU和8 GB内存。
本文构建包含大量样本的数据集以对所提方法进行有效评估,数据集所用恶意代码样本来自恶意软件样本的公开存储库VirusShare,良性应用程序样本来自经过安全检查的Windows 7操作系统平台,包括常见的exe、DLL等PE格式文件。数据集共有18 153个样本,其中包含12 170个恶意代码样本和5 983个良性应用程序样本。
为确保恶意代码样本标签的可信度,通过在线病毒扫描网站Virustotal将恶意代码样本与反病毒引擎的标签进行标记(在Virustotal中通过调用相关API进行样本上传,每个样本平均被58个反病毒引擎扫描)。为保证样本标签的准确性,以大量反病毒引擎的扫描结果为筛选依据,根据恶意性判定频率筛选恶意代码样本。本文实验频率阈值设定为0.8,仅保留超过80%反病毒引擎判定为恶意性的恶意样本,良性应用程序样本均完全通过Virustotal网站的恶意性检测。
3.2 度量指标在本文实验中,使用准确率(A)、精确率(P)、召回率(R)以及F1值作为分类模型的性能评价指标。在分类问题中,度量指标的混淆矩阵由TP、TN、FP和FN 4个值构成,其中:TP表示将正类样本预测为正的数量;TN表示将负类样本预测为负的数量;FP表示将负类样本预测为正的数量;FN表示将正类样本预测为负的数量。
1) 准确率。准确率定义为
2) 精确率。精确率定义为
3) 召回率。召回率定义为
4) F1值。精确率与召回率之间常出现矛盾,F1值是两者的综合,被定义为精确率与召回率的调和平均值,即
为评估本文方法的有效性以及参数设置对实验结果的影响,以下分别进行隐含层节点数的选择实验、消融实验以及模型对比实验。
3.3.1 隐含层节点数的选择实验BGRU较BLSTM结构更简单且计算复杂度更低,其隐含层节点数对模型的复杂度和分类效果有一定的影响。本文基于样本API调用序列与网络行为的融合特征对模型进行训练,并通过选择实验得到隐含层节点数分别为50、100、150和200时本文模型的准确率、精确率、召回率以及F1值,结果如表 1所示。可以看出,当隐层结点数为100时,模型各指标均为最优,其原因是当隐层结点数过少时,网络不具有必要的学习能力和信息处理能力。当隐层结点数过多时,网络结构的复杂性大幅增加,网络在学习过程中更易陷入局部极小点且学习速度减慢。因此,本文设置隐含层节点为100。
|
下载CSV 表 1 不同隐含层节点数的选择实验结果 Table 1 Results of selection experiment with different hidden layer nodes |
为进一步探究不同序列特征对模型分类性能的影响,本文基于BGRU模型进行消融实验,实验结果如表 2所示。可以看出,单独基于Cuckoo沙箱得到的API调用序列(API_Cuckoo)的分类效果比单独基于DynamoRIO系统得到的API调用序列(API_DynamoRIO)更好,将两者结合后,所得API_CkDR分类效果更好。将序列特征融入后形成API_Net_all,尽管准确率低于API_CkDR,但其精确率、召回率和F1分数都要高于API_CkDR。
|
下载CSV 表 2 消融实验结果 Table 2 Ablation experiment results |
由上述分析可知,基于DynamoRIO的API调用序列对Cuckoo沙箱具有一定的补充作用,其原因是目前恶意代码大部分采用了抗检测技术,当检测到虚拟环境或沙箱时会隐藏恶意行为,从而导致Cuckoo沙箱的API记录出现漏报或误报的情况。本文通过改进DynamoRIO系统,能更准确和全面地获取二进制程序的行为信息,因此,将API_Cuckoo和API_DynamoRIO结合得到的API_CkDR分类效果更好。
上述序列特征的融入,从网络数据流量方面对模型特征进行了有效补充。表 2中精确率的有效提升说明模型对恶意代码样本检测能力得到加强。此外,F1值的提升说明序列特征融入后,模型具有更好的分类性能。由消融实验结果可知,本文所提的API_cuckoo、API_DynamoRIO和Net_pcap对分类模型有正作用,均为有效特征。
3.3.3 模型对比实验由上述实验结果可知,本文提出的API_Cuckoo、API_DynamoRIO和Net_pcap均为有效特征。由于这些网络特征具有前后依赖关系,而API及网络流量的恶意行为取决于特征序列片段的上下文,且上下文在自然语言处理中至关重要,因此为了更好地学习到上述网络特征的内在关系,本文基于自然处理领域深度学习的研究结果,选择RNN模型分别对各序列特征进行学习,以提取其内在信息。
为进一步验证不同模型的检测效果,本文基于Cuckoo沙箱和改进DynamoRIO系统相结合的虚拟环境,设计并建立单向的LSTM、GRU和双向的BLSTM、BGRU 4种RNN模型进行对比。针对API_Cuckoo、API_DynamoRIO和Net_pcap特征长度不一致的问题,通过本文模型提取出各RNN隐藏层中的向量来表示特征的内在信息,可将不等长的特征转化为等长的向量。因此,本文采用4种RNN模型进行实验,以探究不同RNN结构及单双方向的神经网络对实验结果的影响,实验结果如表 3所示。
|
下载CSV 表 3 不同模型对比实验结果 Table 3 Comparison experiment results of different models |
由表 3可以看出,双向神经网络模型的检测性能均优于单向神经网络模型,例如BLSTM优于LSTM,BGRU优于GRU。这是因为在提取单词语义特征时,未来信息与历史信息同样重要,而基于正序体系结构的LSTM和GRU仅考虑了历史信息。双向神经网络模型引入未来层来解决该问题,利用两个隐藏层从过去和未来提取信息,并将这两个隐藏层连接到同一输出层。由于双向神经网络模型能充分利用输入序列的上下文信息,同时考虑到历史信息和未来信息,因此其检测性能更好。由表 3还可以看出,BGRU的准确率最高,达到96.38%,其与BLSTM实验结果接近,但训练速度是BLSTM的1.26倍,BGRU准确率较GRU更高。由上述结果可知,双向深度学习模型对于恶意代码的检测性能要优于单向深度学习模型。
此外,本文将BGRU和BLSTM的时间复杂度进行对比,发现BGRU收敛速度较BLSTM更快。这是因为GRU参数较少,其更易收敛,且GRU的结构较LSTM更简单,因此BGRU的训练与测试时间均较BLSTM更短。从结构上来看,GRU只有2个门(update和reset),LSTM有3个门(forget,input和output),GRU直接将隐藏状态传给下一个单元,而LSTM则用记忆单元把隐藏状态包装起来。实际上,GRU和LSTM的性能在很多分类任务中较接近,但在本文实验中,由于引入更复杂的双向网络模型,GRU的高速收敛使得模型训练效果更优,因此GRU的检测性能要略优于LSTM。
4 结束语本文提出一种结合动态行为和机器学习的恶意代码检测方法。搭建Cuckoo沙箱记录恶意代码网络行为信息,结合Cuckoo沙箱和改进DynamoRIO系统提取恶意代码样本API调用序列及网络行为特征,从而获取其网络行为信息,并采用Cuckoo沙箱获取的恶意代码行为信息训练BGRU分类模型。实验结果表明,该方法能全面获得恶意代码的行为信息,其采用的BGRU模型检测效果较LSTM、BLSTM等模型更好,精确率和F1值分别达到97.84%和98.07%。后续将融合静态信息与API调用序列的特征构建更复杂的机器学习模型,进一步提高恶意代码检测精度。
| [1] |
Kaspersky Lab.Digital dangerscape: kaspersky lab spotlights cybersecurity trends in the middle east, turkey and africa[EB/OL].[2019-09-10]. https://me-en.kaspersky.com/about/press-releases/2019_digital-dangerscape-kaspersky-lab-spotlights-cybersecurity-trends-in-the-middle-east-turkey-and-africa.
|
| [2] |
FERRAND O. How to detect the Cuckoo sandbox and to strengthen it?[J]. Journal of Computer Virology and Hacking Techniques, 2015, 11(9): 51-58. DOI:10.1007/s11416-014-0224-9 |
| [3] |
ZHANG Jinglian, PENG Yanbing. Research on malware code classification based on features fusion[J]. Computer Engineering, 2019, 45(8): 281-286. (in Chinese) 张景莲, 彭艳兵. 基于特征融合的恶意代码分类研究[J]. 计算机工程, 2019, 45(8): 281-286. |
| [4] |
SANTOS I, BREZO F, UGARTE-PEDRERO X, et al. Opcode sequences as representation of executables for data-mining-based unknown malware detection[J]. Information Sciences, 2013, 231(5): 64-82. |
| [5] |
BOUJNOUNI E M, JEDRA M, ZAHID N.New malware detection framework based on n-grams and support vector domain description[C]//Proceedings of 2015 International Conference on Information Assurance and Security.Washington D.C., USA: IEEE Press, 2015: 123-128.
|
| [6] |
ERDENE B M, PARK H, LI H, et al. Entropy analysis to classify unknown packing algorithms for malware detection[J]. International Journal of Information Security, 2017, 16(3): 227-248. DOI:10.1007/s10207-016-0330-4 |
| [7] |
ZENG Yaqin, ZHANG Linlin, ZHANG Ruonan, et al. Malware family classification model based on MobileNet[J]. Computer Engineering, 2020, 46(4): 162-168. (in Chinese) 曾娅琴, 张琳琳, 张若楠, 等. 基于MobileNet的恶意软件家族分类模型[J]. 计算机工程, 2020, 46(4): 162-168. |
| [8] |
WANG Bo, CAI Honghao, SU Yang.Classification of malicious code variants based on VGG net[EB/OL].[2019-09-10]. http://kns.cnki.net/kcms/detail/51.1307.TP.20190924.1107.006.html.(in Chinese) 王博, 蔡弘昊, 苏旸. 基于VGG网络的恶意代码变种分类[EB/OL]. [2019-09-10]. http://kns.cnki.net/kcms/detail/51.1307.TP.20190924.1107.006.html. |
| [9] |
SPINELLIS D. Reliable identification of bounded-length viruses is NP-complete[J]. IEEE Transactions on Information Theory, 2003, 49(1): 280-284. DOI:10.1109/TIT.2002.806137 |
| [10] |
ANDERSON B, QUIST D, NEIL J, et al. Graph-based malware detection using dynamic analysis[J]. Journal in Computer Virology, 2011, 7(4): 247-258. DOI:10.1007/s11416-011-0152-x |
| [11] |
PAI S, TROIA D F, VISAGGIO C A, et al. Clustering for malware classification[J]. Journal of Computer Virology and Hacking Techniques, 2017, 13(2): 95-107. DOI:10.1007/s11416-016-0265-3 |
| [12] |
BEKERMAN D, SHAPIRA B, ROKACH L, et al.Unknown malware detection using network traffic classification[C]//Proceedings of 2015 IEEE Conference on Communications and Network Security.Washington D.C., USA: IEEE Press, 2015: 134-142.
|
| [13] |
WANG Wei, ZHU Ming, ZENG Xuewen, et al.Malware traffic classification using convolutional neural network for representation learning[C]//Proceedings of 2017 International Conference on Information Networking.Washington D.C., USA: IEEE Press, 2017: 712-717.
|
| [14] |
WANG Qian, SHU Hui, LI Yang, et al. Malicious code behavior analysis based on DynamoRIO[J]. Computer Engineering, 2011, 37(18): 139-141. (in Chinese) 王乾, 舒辉, 李洋, 等. 基于DynamoRIO的恶意代码行为分析[J]. 计算机工程, 2011, 37(18): 139-141. |
| [15] |
GOLDBERG Y, LEVY O.Word2vec explained: deriving Mikolovet al.'s negative-sampling word-embedding method[EB/OL].[2019-09-10]. https://www.oalib.com/paper/4043543#.YBWpctfSmuw.
|
| [16] |
MIKOLOV T, YIH W, ZWEIG G.Linguistic regularities in continuous space word representations[C]//Proceedings of 2013 Conference of the North American Chapter of the Association for Computational Linguistics.New York, USA: ACM Press 2013: 746-751.
|
| [17] |
HWANG R H, PENG M C, NGUYEN V L, et al. An LSTM-based deep learning approach for classifying malicious traffic at the packet level[J]. Applied Sciences, 2019, 9(16): 3414-3416. DOI:10.3390/app9163414 |
| [18] |
WANG Baozong, LIU Yongshan, SHI Yu. Constrained relationship-based RNN queries algorithm in two-dimension space[J]. Computer Engineering, 2008, 34(16): 69-71. (in Chinese) 王宝宗, 刘永山, 时玉. 二维空间中基于约束关系的RNN查询算法[J]. 计算机工程, 2008, 34(16): 69-71. |
| [19] |
GERS F A, SCHMIDHUBER J, CUMMINS F. Learning to forget: continual prediction with LSTM[J]. Neural Computation, 1999, 12(10): 2451-2471. |
| [20] |
CHUNG J, GULCEHRE C, CHO K H, et al.Empirical evaluation of gated recurrent neural networks on sequence modeling[EB/OL].[2019-09-10]. https://www.researchgate.net/publication/269416998_Empirical_Evaluation_of_Gated_Recurrent_Neural_Networks_on_Sequence_Modeling.
|
| [21] |
FU Rui, ZHANG Zuo, LI Li.Using LSTM and GRU neural network methods for traffic flow prediction[C]//Proceedings of 2016 Youth Academic Annual Conference of Chinese Association of Automation.Washington D.C., USA: IEEE Press, 2016: 324-328.
|
| [22] |
KETKAR N.Deep learning with python[M]. Berlin, Germany: Springer, 2017.
|
2021, Vol. 47
