基于API序列特征和统计特征组合的恶意样本检测框架
芦效峰 1 , 蒋方朔 1 , 周箫 1 , 崔宝江 1 , 伊胜伟 2 , 沙晶 3     
1. 北京邮电大学 网络空间安全学院, 北京 100876;
2. 中国信息安全测评中心, 北京 100085;
3. 公安部第三研究所, 上海 201204
摘要:针对恶意样本行为分析,该文提出了一种组合机器学习框架,首先对应用程序编程接口(application programming interface,API)序列中调用的依赖关系进行功能层面上的分析,提取特征,使用随机森林进行检测;其次利用深度学习中的循环神经网络处理时间序列数据的特性,在冗余信息预处理的基础上,直接对序列进行学习和检测;最后对2种方法进行了组合。在恶意软件样本上进行的实验结果表明:2种方法均可有效检测恶意样本,但是组合学习的效果更优,AUC(area under the curve of ROC)达到99.3%,优于现有的类似研究结果。
关键词计算机病毒与防治    恶意样本检测    机器学习    深度学习    调用序列    
API based sequence and statistical features in a combined malware detection architecture
LU Xiaofeng1, JIANG Fangshuo1, ZHOU Xiao1, CUI Baojiang1, YI Shengwei2, SHA Jing3     
1. School of Cyberspace Security, Beijing University of Post and Telecommunications, Beijing 100876, China;
2. China Information Technology Security Evaluation Center, Beijing 100085, China;
3. The Third Research Institute of Ministry of Public Security, Shanghai 201204, China
Abstract: This paper presents a combined machine learning framework for malware behavior analyses. One part of the framework analyzes the dependency relation in the API call sequence at the functional level to extract features to train and classify a random forest. The other part uses a recurrent neural network (RNN) to study the API sequence to identify malware with redundant information preprocessing using the RNN time series forecasting ability. Tests on a malware dataset show that both methods can effectively detect malwares. However, the combined framework is better with an AUC of 99.3%.
Key words: computer virus and prevention     malware classification     machine learning     deep learning     call sequence    

随着互联网迅速发展,恶意软件在种类和数量上快速增长,传播方式不断翻新,对于未知恶意软件的识别成为了一项新的挑战。特别是近年来针对工业控制系统的高级病毒、APT(advanced persistent threat)攻击越来越多,这类病毒大量的变种使得基于固定特征的检测变得越来越困难,工业控制系统的信息安全问题日益突出。随着人工智能技术的发展,研究人员提出利用机器学习技术对恶意样本行为进行检测和分类,取得了一定的效果[1-2]

基于机器学习研究恶意样本检测和分类是目前研究的主要方向。使用不同的行为特征作为统计模型的输入,这些特征包括静态反汇编后结果,以及使用N-Gram处理后的API调用序列。黄全伟[3]使用K-最临近、决策树以及支持向量机进行了分类学习。刘阳[4]主要使用反编译Android安装包(Android package,APK)得到静态特征,包括敏感API、字符串以及应用权限和证书等。杨宏宇等[5]将APK中的权限、应用动作以及应用分类作为特征,提出了一种改进的随机森林算法。张家旺等[6]对应用内的Native库进行了反编译,与权限等特征进行分类。Santos等[7]、Ravi等[8]、廖国辉等[9]主要使用了Windows环境下可执行文件(portable executable,PE)的静态特征和Opcode序列进行分析。Dahl等[10]使用了动态API序列和关联分析算法,根据置信度进行分类。上述文献多采用静态特征进行分析,对于有动态分析的文献则均使用N-gram方法来对长序列进行处理,得到特征向量。针对N-gram的局限性,例如恶意样本在API序列中插入不相关API来避开检测,则会导致N-gram方法失效,本文提出了一种API序列处理方法并用于随机森林算法进行恶意样本检测。

最近几年,基于深度学习的恶意样本检测成为热点。Dahl等[10]使用神经网络方法分类大规模数据集下的恶意样本。Saxe等[11]使用前向神经网络分类静态分析结果,但没有考虑动态分析的调用序列。前向神经网络兴起之后,深度学习模型卷积神经网络(convolutional neural network, CNN)和循环神经网络(recurrent neural network, RNN)以及它们的改进版本成为恶意样本检测的重点,Kolosnjaji等[12]提出使用N-Gram和CNN提取动态调用序列特征,提取的时间序列特征信息输入RNN分类。

Tobiyama等[13]提出样本动态执行时提取API序列和API返回值,作为特征序列输入RNN模型中提取高层特征。微软研究员提出动态执行时提取操作系统API和C库API作为调用序列,输入RNN和回声状态网络(echo state network,ESN)模型[14]。上述文献中每个样本得到的调用序列长度差别很大,长度可以达到1~1 000 000,但是对序列数据保留样本信息,减少序列长度的自动化算法较少研究,文[13-14]采取的策略都比较简单,本文对减少序列长度的自动化算法进行研究。进一步基于序列数据的长短期记忆(long short-term memory,LSTM)深度学习模型[2]和基于API调用统计特征的组合,提出一个基于API序列特征和统计特征组合的恶意样本检测框架(API based sequence & statistics features combined malware detection architecture, ASSCA)。

1 组合学习检测框架 1.1 组合学习检测框架描述

针对恶意样本检测的组合学习框架ASSCA的架构图如图 1所示。工作时,首先获取样本,使用沙箱执行样本获取执行时的系统调用,分别使用基于机器学习的随机森林, 和基于深度学习的循环神经网络RNN模型的变形长短期记忆LSTM模型对样本进行分类。使用随机森林模型对关联分析处理之后的系统调用序列进行分类。

图 1 系统框架

1.2 深度学习方法

ASSCA使用LSTM模型提取抽象特征,Logistic作为分类器分类恶意样本。

1.2.1 序列数据预处理

从沙箱中提取的数据是API调用序列,为了后续的数据处理和模型分类,对每个API函数用特定的整数表示[3],不同的API函数所对应的整数是不相同的。

1.2.1.1 冗余子序列去除法

1) N-Gram样本子序列提取。

以上得到的每一个样本的API序列长度不一,样本长度1~1 000 000不等。通过对时间序列方法和恶意样本API序列行为进行分析,序列中存在大量子序列对样本分类作用很小,本文可以去除对分类样本起作用很小的子序列,达到分类更快更准确的目的。在进行子序列提取的时候,本文使用了基于文本的N-Gram方法。表 1是一段API函数序列以及所对应的整数序列,其中N的大小为4,滑动窗口移动距离为1。

表 1 4-Gram子序列提取
API调用名称 API调用序号 4-Gram
FindResourceExW 24 24 26 18 18
NtProtectVirtualMemory 26 26 18 18 6
NtProtectVirtualMemory 18 18 18 6 13

2) 信息增益去冗余子序列。

使用N-Gram方法提取的子序列维度很大,需要进行降维,只选择在代码检测过程中对分类样本作用大的子序列。本文使用基于信息增益的特征选择方法选择子序列。

在信息增益中,对一个子序列特征而言,系统有它和没它时信息量将发生变化,而前后信息量的差值就是这个特征给系统带来的信息量。所谓信息量,就是熵。子序列特征T给分类C带来的信息增益为

$ \begin{array}{*{20}{c}} {{\rm{IG}}\left( T \right) = H\left( C \right) - H\left( {C\left| T \right.} \right) = }\\ {\sum\limits_{{V_T} \in \left\{ {0,1} \right\}} {\sum\limits_{C \in \left\{ {{C_i}} \right\}} {P\left( {{V_T},C} \right)\lg \frac{{P\left( {{V_T},C} \right)}}{{P\left( {{V_T}} \right)P\left( C \right)}}} } .} \end{array} $ (1)

其中:VT是子序列的值,当T在一个样本中出现时VT=1,否则为0;P(VT, C)是在类别C中子序列T出现的样本的比例;P(VT)是在整个样本中子序列T出现的样本所占的比例;P(C)是在整个训练样本中类别为C所占的比例。

3) 样本有效子序列连接。

通过N-Gram得到的每个样本的子序列列表作为数据集。通过信息增益选择的特征子序列叫做有效子序列,它们的集合叫做字典集。表 2是4-Gram子序列连接,从数据集中把存在在字典集的4-Gram子序列提取出来,按时间顺序连接得到样本时间调用序列。这样得到的样本调用序列就去除了对分类作用很小的子序列,大大减小了样本的时间调用序列长度。

表 2 4-Gram子序列连接
4-Gram子序列a 4-Gram子序列b 连接
S1S2S3S4 S2S3S4S5 S1S2S3S4S5
S1S2S2S2 S2S2S2S2 S1S2S2S2S2

1.2.1.2 连续相同模式调用去除

除了使用信息增益减小序列长度,在分析序列中发现同一种模式API连续被调用频繁,存在信息冗余。为了使输入到模型的数值序列长度减短,但调用保留的信息量不减少,文[13]使用连续相同API函数去除的方法,本文在此基础上做了改进。表 3为预处理中本文采取的连续相同模式API去除方法。

表 3 连续相同模式API去除
连续相同模式调用 连续相同模式调用去除后
S1S1 S1S1 S1S1 S1S1
S1S2S4S3 S1S2S4S3 S1S2S4S3

1.2.2 深度学习算法模型

循环神经网络RNN模型中,每一个隐含层输出都会保留在网络里,和系统下一时刻的输入一起共同决定下一时刻的输出。长短期记忆LSTM模型是RNN模型的一个改进版本,克服了反向传播梯度弥散或者梯度爆炸,更适合处理存在长期依赖的序列数据。LSTM模型随着层数增加,提取的高层特征越抽象,消耗的时间越多。本文综合考虑以上因素使用隐藏层2层的LSTM模型结构,深度学习模型结构如图 2所示。

图 2 深度学习模型结构

1.2.2.1 深度学习LSTM模型

模型中输入X={x0, xt, …, xn}时间序列, 令xt是某个时间点的输入,为预处理得到样本时间序列中的一个系统调用函数,用one-hot向量表示。WiWfWcWoUiUfUcUoVo是权重矩阵,bibfbcbo是偏置向量。

首先计算时间t输入门和记忆门的状态中间值、遗忘门,

$ \begin{array}{*{20}{c}} {{i_t} = \sigma \left( {{\mathit{\boldsymbol{W}}_i}{x_t} + {\mathit{\boldsymbol{U}}_i}{h_{t - 1}} + {\mathit{\boldsymbol{b}}_i}} \right),}\\ {{{C'}_t} = \tanh \left( {{\mathit{\boldsymbol{W}}_c}{x_t} + {\mathit{\boldsymbol{U}}_c}{h_{t - 1}} + {\mathit{\boldsymbol{b}}_c}} \right),}\\ {{f_t} = \sigma \left( {{\mathit{\boldsymbol{W}}_f}{x_t} + {\mathit{\boldsymbol{U}}_f}{h_{t - 1}} + {\mathit{\boldsymbol{b}}_f}} \right).} \end{array} $ (2)

其次,计算记忆门状态值以及输出门和隐藏层输出,

$ \begin{array}{*{20}{c}} {{C_t} = {i_t}{{C'}_t} + {f_t}{C_{t - 1}},}\\ {{o_t} = \sigma \left( {{x_t} + {\mathit{\boldsymbol{U}}_o}{h_{t - 1}} + {\mathit{\boldsymbol{b}}_o}} \right),}\\ {{h_t} = {o_t}\tanh {C_t}.} \end{array} $ (3)

隐藏层ht包含着序列的特征信息,特征信息输入到分类模型进行恶意样本分类检测。

1.2.2.2 Max-Pooling提取隐藏层特征

处理隐藏层特征信息,获取能够代表序列信息的特征至关重要。本文使用Max-Pooling算法提取隐藏层特征。Max-Pooling获得的特征向量每个单元公式如下:

$ {h_{\max }}\left( i \right) = \max \left( {{h_0}\left( i \right),{h_1}\left( i \right), \cdots ,{h_n}\left( i \right)} \right). $ (4)

其中:i∈(0, 1, …, N-1), N是每个隐藏层神经元的数量。最后输入到分类模型的特征向量由Max-Pooling的输出和隐藏层最后的状态向量连接[hmax, hn]。

从Max-Pooling得到的特征向量最后输入到分类器中进行分类,本文是对恶意样本进行二分类,因此选择Logistic分类器。

1.3 机器学习方法 1.3.1 系统调用关联分析算法

对于系统调用,本文不仅采用序列形式的分析方法,还对系统调用之间的关联进行了分析。通过计算系统调用之间的关联,可以发掘出潜在的特征。

本文提出了一种基于参数Hash的API关联快速分析算法即AMHARA(argument-Hashing based API correlation fast analysis algorithm)算法,该算法遍历整个API调用序列,对于当前遍历到的调用si,向前反向遍历T个调用,在反向遍历到一个调用sj(T < j < i)时,对sisj进行参数比对,算法示意如图 3所示。对于2个API调用,sisj分别有一个实参列表[si0, si1, …, sim]、[sj0, sj1, …, sjn]。算法枚举每个参数列表里的参数,进行逐项比对。

$ {S_{i,j}} = \sum\limits_{k = 0}^m {\sum\limits_{l = 0}^n {{\rm{Compare}}\left( {s_i^k,s_j^l} \right)} } . $ (5)
图 3 AMHARA关联分析算法示意图

如式(5),Compare函数会比较2个输入参数是否完全一样,相同返回1,不相同返回0。如果Si, j>0,那么sisj为相关联API。

在比对参数时,部分参数长度大,例如buffer,如果参数平均长度为k,那么这个算法的时间复杂度上界为O(mnk)。本文在进行比较之前,对参数进行逐项Hash,比对时直接比对参数Hash值,使时间复杂度上界降为O(mn),

$ {S_{i,j}} = \sum\limits_{k = 0}^m {\sum\limits_{l = 0}^n {{\rm{Compare}}\left[ {{\rm{hash}}\left( {s_i^k} \right),{\rm{hash}}\left( {s_j^l} \right)} \right]} } . $ (6)

算法运行完成之后,得到一个调用对的集合,这个集合不仅记录了该序列中存在的调用对,并且记录了调用对出现的次数。该操作会有效地减少特征数量,将特征空间收缩到一个可以接受的范围,例如对于一个有400种API调用的序列,使用关联图可能使得调用图的种类数量,即特征数量, 在百万种以上,而使用调用对来简化特征,可以使得提取的特征数量降低到2万以内(400×400)。同时,这种方法提高了处理效率,避免了对关联图复杂的处理过程。

1.3.2 系统调用频度统计分析

在分类过程中,本文还将单个API调用的频度作为辅助的统计特征,这样在仅增加少量的特征的情况下,提高了分类准确率。因为对于某些恶意样本,从单个的API调用数量上就可以判断其恶意性。

图 4是2017年5月流行的“WannaCry”勒索病毒的运行截图,WannaCry对磁盘上的大量文件进行加密保存并删除原文件。表 4列出了WannaCry在沙箱中运行期间总共被记录了150 079次API调用,其中NtWriteFile占13%,NtCreateFile占7.0%,DeleteFile占4.8%。因为正常程序要写入一个大文件时同样会存在大量的NtWriteFile调用,所以不能仅依靠NtWriteFile作为特征来识别勒索软件。文件的打开和创建操作均是通过调用NtCreateFile来实现的,因此检测算法是从NtCreateFile、DeleteFile、MoveFileWithProgress这3项API调用的数量上来判断样本是否存在类似恶意行为。

图 4 WannaCry运行截图

表 4 WannaCry调用API列表(前10项)
连续相同模式调用 连续相同模式调用去除后
NtWriteFile 19 622
NtClose 16 819
NtCreateFile 10 486
DeleteFile 7 226
NtQueryKey 7 076
GetSystemMetrics 6 861
NtReadFile 6 670
GetFileAttributes 6 486
MoveFileWithProgress 6 394
RegQueryValueExW 6 029
…… ……
总计 150 079

1.3.3 随机森林分类器

随机森林作为一种基于统计的分类模型,具有良好的性能,随机特征选取保证了更小的泛化误差,在数据量小的情况下非常有利。并且不做特征选择即可处理高维度数据,容易在分布式计算平台上进行大规模并行化训练。因此在分类器的选择上,本文使用了随机森林作为分类器,而且在实验中得到了良好的性能。

2 实验 2.1 实验指标

实验使用谷歌的Tensorflow框架[15]实现算法。对于分类算法,评价指标有准确率(accuracy,ACC)、精确度与召回率曲线(precision-recall curve,PRC)、特征曲线(receiver operating characteristic,ROC)和曲线区域面积AUC。相比PRC和ROC曲线的优点为在测试集中正负样本分布变化时能够基本保持不变。AUC越大表明分类器效果越好,因此在本文二分类算法中主要选择ROC和AUC作为评价指标。ROC是一个二维坐标轴中的曲线,横坐标是假阳性率(false positive rate,FPR),纵坐标是真阳性率(true positive rate,TPR)。由表 5的混淆矩阵得到TPR和FPR定义,

$ {\rm{TPR}} = \frac{{{\rm{TP}}}}{{{\rm{TP}} + {\rm{FN}}}}, $ (7)
$ {\rm{FPR}} = \frac{{{\rm{FP}}}}{{{\rm{FP}} + {\rm{TN}}}}. $ (8)
表 5 混淆矩阵
真实值 预测值
P N
P' TP FP
N' FN TN

混淆矩阵中:真正类(TP)即正确的肯定数目;假负类(false negative,FN)即漏报没有找到正确匹配的数目;假正类(false positive,FP)即误报没有的匹配不正确的数目;真负类(true negative,TN)是正确拒绝的非匹配数目。

由一个确定的分类器和测试集可得到一组FPR、TPR。通过设置不同的阈值,得到一系列FPR、TPR构成ROC曲线。

2.2 数据集

实验收集的样本来自于3个数据集:正常样本来自Windows 7和Windows XP系统的exe文件,恶意样本从Virus Share[16]、VirusTotal[17]收集器中爬取。样本的标签来自于从VirusTotal.com上获取的各大安全厂商对于样本的检测结果,对检测结果进行基于加权的概率统计,计算样本的威胁度。经过清洗的数据集中样本总共2 782个,其中恶意样本1 430个,非恶意样本1 352个。本文从数据集中随机取20%的数据作为测试集,其余作为训练集。

2.3 深度学习实验 2.3.1 实验参数

实验时,从训练集中取出10%的数据作为验证集。如表 6所示,实验参数分为LSTM模型参数和Logistic分类参数。

表 6 实验参数
指标 LSTM模型参数 Logistic分类参数
输入 输入向量维度:200(500…),
dropout: 0.5,
使用word embedding、embedding
维度:100
输入维度:1 000
中间层 dropout: 0.5,
记忆单元维度:500,
遗忘门偏置:1.0
No
其他参数 初始学习率:0.001,
梯度裁剪:1.0
w:均值0,
标准差0.1的随机值b: 0.1

2.3.2 实验结果

实验中使用不同的预处理方法得到不同的分类效果,如图 5所示。

图 5 LSTM实验

1) 研究节1.2.1中的冗余子序列去除方法中使用不同N-Gram方法的结果,如图 5a所示。由图可以看出最好的是使用3-Gram方法,AUC是0.953 9,文[3]也是使用3-Gram方法得到的结果最好,使用和本文相同的样本动态序列提取方法准确率为85%~90%。

2) 研究在使用冗余子序列去除方法中信息增益选择子序列频数的影响,如图 5b所示。由图 5b可以看出信息增益选择子序列频数为1 000最好,AUC为0.964。信息增益选择子序列频数越小表明这些子序列包含的样本分类信息量越大,在输入序列长度固定的情况下,由这些子序列构成的样本时间序列包含的信息越多,所以AUC越大。

3) 研究样本时间序列长度的影响。图 5c是使用冗余子序列去除法中N-Gram方法固定为3-Gram, 信息增益选择子序列频数固定为1 000得到样本时间序列,分别将得到的样本时间序列长度截断为200、500、1 000得到的曲线,序列长度对训练时间的影响见表 7,由实验可以看出,序列长度越长,结果越好,但是由于输入到模型的序列长度增加,模型的训练时间也越长,但是序列长度增加带来的效果提升随之递减。

表 7 缩短序列长度对于训练时间的影响
序列长度 单个Epoch平均消耗时间/s AUC
序列长度 单个Epoch平均消耗时间/s AUC

4) 研究不同预处理方法对实验的影响。图 5d是使用冗余子序列去除方法和使用连续相同调用模式去除方法的结果比较,由实验可以看出使用2种预处理方法比不使用预处理方法结果好。使用冗余子序列去除的预处理方法效果最好。

表 8是不同预处理方法得到的AUC,冗余子序列去除方法得到的AUC为98.3%,相比其他方法,使用冗余子序列去除方法不仅可以缩短训练时间,还使得分类更准确。

表 8 不同分类的AUC结果
序号 方法 AUC
序号 方法 AUC

2.4 随机森林实验 2.4.1 实验内容

使用Scikit-Learn[18]中的随机森林回归算法来实现恶意样本的分类器。本文在训练集上使用了5-Fold交叉验证,来验证分类器性能。实验主要研究随机森林的决策树数量、决策分割评价方法、Bootstrap采样方法和最优分割考虑特征数量对随机森林算法分类效果的影响。

2.4.2 实验结果

对于随机森林回归,有多个参数会对实验结果产生影响,本文进行了多组对比实验来验证不同参数对AUC值的影响。同时,模型训练的时间性能也是本文研究的一个重要方面。

1) 随机森林中决策树的数量对于随机森林整体性能的影响。该参数表示在随机森林会生产多少颗决策树来进行决策。在试验中,本文对于其他参数使用函数默认值,即使用均方误差,使用Bootstrap分割时考虑特征数量为10%的总特征数量。在实验中,本文发现提高决策树数量会带来AUC提升,如图 6a所示,但同时会造成训练过程中消耗时间增加。决策树的数量增加对于AUC提升的收益会逐渐减小,可以根据实验情况和硬件规模进行取舍。

图 6 (网络版彩图)随机森林回归实验

2) 决策分割评价方法对于AUC的影响。该参数使用在决策树构建过程中,为衡量一个分割的优劣提供标准,有均方误差(mean squared error,MSE,如式(7))和绝对平均误差(mean absolute error,MAE,如式(8))。如图 6b所示,MSE相较于MAE在实验中表现更好,原因是MSE的乘幂运算会减少某个特征存在的较小的误差对结果的影响。

$ {\rm{MSE}} = \frac{1}{n}\sum\limits_{i = 1}^n {{{\left( {{f_i} - {y_i}} \right)}^2}} , $ (9)
$ {\rm{MAE}} = \frac{1}{n}\sum\limits_{i = 1}^n {\left| {{f_i} - {y_i}} \right|} . $ (10)

在实验中,发现MSE和MAE 2种方法消耗时间差别巨大。经过排查,发现原因在于本文使用的Scikit-Learn包中存在Bug,本文使用的版本为0.18.1,该版本的MAE方法存在内存泄露。在运行过程中,程序不断向内核申请新的内存空间,频繁地在用户态/内核态切换,造成了巨大的时间消耗。当物理内存不足时,内核会使用硬盘上的交换空间来减轻物理内存压力,但此方法造成了更大的时间消耗,最终导致2种方法时间差距在30倍以上。

3) 是否使用Bootstrap采样对AUC的影响。使用了Bootstrap方法之后,分类器效率更高,如图 6c所示。这说明在目前数据量较少的情况下,在构建决策树的过程中,进行有放回的抽样可以更好地估计整体的假设分布,进而得到更好的分类器。

4) 最优分割时考虑的特征数量对于系统的整体性能影响。该参数指定了在决策树构造过程中,在寻找最优分割时需要考虑多少维特征。本文进行了多次实验来对比使用不同数量的特征的影响情况,实验结果如图 6d所示。总特征数量为22 043,根据实验结果可以看到,训练消耗时间与使用的特征数量成正比。

对于参数优化所带来的性能提升结果如表 9所示,可以看到参数优化之后,总体上不仅提升了AUC,而且缩短了训练耗时,训练耗时减少80%~84%。

表 9 随机森林参数优化结果
项目 优化方法 优化前结果 优化后结果
决策树数量 减少决策树数量,保证AUC变化不大的前提下,提高训练速度 AUC:0.985 2
耗时:3 431 s
AUC:0.984 0
耗时:719 s
最优分割考虑特征数量 减少最优分割考虑特征数量,在避免过拟合的情况下提高训练速度 AUC:0.983 4
耗时:716 s
AUC:0.987 1
耗时:115 s

2.5 随机森林和LSTM组合实验

上述机器学习随机森林经过参数优化之后,AUC的最高结果为0.987,使用深度学习LSTM结果为0.983,实验将机器学习与深度学习组合,对单个样本使用2种方法进行预测,取固定阈值下与阈值的差较大的概率作为最终预测值,计算ROC和AUC。结合后AUC为0.993,比上述分开实验结果好。

表 10为不同检测算法的准确率。使用本文机器学习与深度学习组合学习框架准确率为0.957。在文[13]中,预处理使用相同API函数调用合并,使用卷积神经网络CNN加循环神经网络LSTM的模型准确率为0.894。在文[3]中,使用信息增益选择子序列进行特征提取,使用决策树算法准确率为0.95。实验结果表明本文的机器学习和深度学习组合学习方法效果更好。

表 10 不同算法的准确率比较
方法 论文发表年份 准确率
决策树[3] 2009 0.950
基于置信度的算法[8] 2012 0.900
K-临近[9] 2014 0.941
循环神经网络+卷积神经网络[13] 2016 0.894
神经网络[10] 2016 0.905
随机森林[6] 2017 0.953
本文使用的组合模型 0.957

3 结论

本文针对恶意样本的动态分析,提出了一种机器学习和深度学习组合的学习框架用于恶意样本检测,并且提出一种基于参数Hash的API关联快速分析算法。在采用深度学习进行恶意样本检测方面,研究了冗余数据处理和基于循环神经网络的深度学习模型。实验结果表明:组合学习方法在测试集上检测的AUC达到0.993,并且具有对未知恶意样本进行检测的能力。

参考文献
[1] WANG X Z, LIU J W, CHEN X E. Say no to overfitting. (2017-05-31). https://www.kaggle.com/c/malware-classification/discussion/13897.
[2] LIPTON Z C, BERKOWITZ J, ELKAN C. A critical review of recurrent neural networks for sequence learning[J]. arXiv preprint arXiv: 1506. 00019, 2015.
[3] 黄全伟. 基于N-Gram系统调用序列的恶意代码静态检测[D]. 哈尔滨: 哈尔滨工业大学, 2009.
HUANG Q W. Malicious executables detection based on N-Gram system call sequences[D]. Harbin: Harbin Institute of Technology, 2009. (in Chinese) http: //cdmd. cnki. com. cn/Article/CDMD-10213-2011015726. htm
[4] 刘阳. 应用随机森林与神经网络算法检测与分析Android应用恶意样本[D]. 北京: 北京交通大学, 2015.
LIU Y. Employing the algorithms of random forest and neural networks for the detection and analysis of malicious code of Android applications[D]. Beijing: Beijing Jiaotong University, 2015. (in Chinese) http: //cdmd. cnki. com. cn/Article/CDMD-10004-1015593889. htm
[5] 杨宏宇, 徐晋. 基于改进随机森林算法的Android恶意软件检测[J]. 通信学报, 2017(4): 8–16.
YANG H Y, XU J. Android malware detection based on improved random forest[J]. Journal on Communications, 2017(4): 8–16. DOI:10.11959/j.issn.1000-436x.2017073 (in Chinese)
[6] 张家旺, 李燕伟. 基于机器学习算法的Android恶意程序检测系统[J]. 计算机应用研究, 2017(6): 1–6.
ZHANG J W, LI Y W. Malware detection system implementation of Android application based on machine learning[J]. Application Research of Computers, 2017(6): 1–6. (in Chinese)
[7] 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: 64–82. DOI:10.1016/j.ins.2011.08.020
[8] RAVI C, MANOHARAN R. Malware detection using windows API sequence and machine learning[J]. International Journal of Computer Applications, 2012, 43(17): 12–16. DOI:10.5120/6194-8715
[9] 廖国辉, 刘嘉勇. 基于数据挖掘和机器学习的恶意代码检测方法[J]. 信息安全研究, 2016(1): 74–79.
LIAO G H, LIU J Y. A malicious code detection method based on data mining and machine learning[J]. Journal of Information Security Research, 2016(1): 74–79. (in Chinese)
[10] DAHL G E, STOKES J W, DENG L, et al. Large-scale malware classification using random projections and neural networks[C]//2013 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). Vancouver, BC, Canada: IEEE, 2013: 3422-3426.
[11] SAXE J, BERLIN K. Deep neural network based malware detection using two dimensional binary program features[C]//201510th International Conference on Malicious and Unwanted Software (MALWARE). Fajardo, Puerto Rico: IEEE, 2015: 11-20.
[12] KOLOSNJAJI B, ZARRAS A, WEBSTER G, et al. Deep learning for classification of malware system call sequences[C]//Australasian Joint Conference on Artificial Intelligence. Hobart, TAS, Australia: Springer International Publishing, 2016: 137-149.
[13] TOBIYAMA S, YAMAGUCHI Y, SHIMADA H, et al. Malware detection with deep neural network using process behavior[C]//201640th Annual IEEE Conference on Computer Software and Applications (COMPSAC). Atlanta, GA, USA: IEEE, 2016, 2: 577-582.
[14] PASCANU R, STOKES J W, SANOSSIAN H, et al. Malware classification with recurrent networks[C]//2015 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). Brisbane, QLD, Australia: IEEE, 2015: 1916-1920.
[15] Tensorflow. . (2017-05-31). https://www.tensorflow.org/,2017.
[16] VirusShare. . (2017-05-31). https://virusshare.com,2017.
[17] VirusTotal. . (2017-05-31). http://www.virustotal.com,2017.
[18] Scikit-Learn. . (2017-05-31). http://scikit-learn.org/,2017.