APP下载

基于机器学习的恶意软件识别研究综述

2022-12-06王志文刘广起韩晓晖左文波吴晓明王连海

小型微型计算机系统 2022年12期
关键词:降维调用神经网络

王志文,刘广起,韩晓晖,左文波,吴晓明,王连海

(齐鲁工业大学(山东省科学院) 山东省计算中心(国家超级计算济南中心)山东省计算机网络重点实验室,济南 250014)

1 引 言

恶意软件指运行在用户计算机或其他终端上、在用户不知情或未允许的情况下利用操作系统或应用程序漏洞侵害用户合法权益的软件.根据特征和危害不同,目前恶意软件主要可以分为广告软件、勒索软件、后门、特洛伊木马等类别,如表1所示.恶意软件给网络用户、企业、工业设施、网络和信息设备等带来严重的安全威胁,并且近年来新型恶意软件的数量不断增长,仅2019年就有至少500个新型恶意软件家族出现[1,2].

表1 恶意软件类型

为有效应对数量日益增长的恶意软件及其威胁,目前学术界和产业界广泛开展了恶意软件识别研究工作,包括对恶意软件的检测和族系分类.早期,产业界一般通过基于签名匹配的方式来识别恶意软件[3-5].这种方式优点是对于已知恶意软件检测的准确率高、误报率低,缺点是无法有效检测未知恶意软件.之后许多基于启发式的方法被相继提出,这类方法根据恶意软件的特性,预定义一系列静态或动态的启发式规则来识别恶意软件[8-11].其优点是能够检测部分未知的恶意代码,缺点是误报率较高.随着反检测技术的发展,恶意软件可通过加壳、变形、多态、自毁等技术隐蔽自身或变种,上述两类识别方法的有效性逐渐降低.

近年来,基于机器学习的恶意代码识别技术逐渐成为主流,其流程如图1所示.良好的特征表示是基于机器学习的恶意软件识别算法能否取得理想性能的关键因素之一.早期基于机器学习的识别技术通过人工特征工程方法提取样本的特征表示,再训练支持向量机(SVM)、随机森林(RF)等分类模型来检测恶意软件(如图1上半部分所示).然而,人工特征工程的成本较高,且随着恶意代码功能的不断复杂化、隐蔽化,如何设计有效的特征成为一个极具挑战的问题.近期,随着深度学习技术的突破性进展,基于循环神经网络、卷积神经网络等深度学习模型的恶意代码识别成为新的研究趋势.深度学习模型基于深层神经网络可自动学习样本的区分性特征表示,因而可以实现端到端的恶意软件检测(如图1下半部分所示).

图1 恶意软件识别流程

本文对近年来基于机器学习的恶意软件识别相关研究工作进行了归类和梳理,以样本特征表示的获取方法为主线,从基于特征工程的识别模型和基于特征学习的识别模型两个方面对已有研究进行了阐述,并整理了目前可用于训练识别模型的公开数据集,在此基础上进一步展望了恶意软件识别研究当前面临的问题和挑战.本文旨在帮助读者比较全面地了解基于机器学习的恶意软件识别技术及主要进展,为该领域的研究人员提供技术参考,以推动该领域的进一步发展.

2 基于特征工程的恶意软件识别

基于特征工程的恶意软件识别通过人工设计的处理流程,在样本中提取有意义的特征对其进行表示,再利用机器学习模型对恶意软件进行识别.本节从恶意软件特征表示、特征选择与降维两个方面对已有研究工作进行了归纳,相关工作在表2中列出.

表2 基于特征工程的恶意软件识别研究工作总结

2.1 恶意软件特征表示

目前,针对恶意软件的特征分析方法主要可分为静态和动态两种方式.

2.1.1 静态特征分析

静态特征分析是指在不运行软件的情况下,通过分析软件所包含文件的内容来提取特征.针对Windows平台恶意软件,许多研究从EXE、DLL等PE(Portable Executable)文件中提取恶意软件的静态特征表示.Ye等人[13]以PE文件中的API及其它能够反映攻击者意图和目标的字符串作为特征,基于SVM构建恶意软件识别模型.Shafiq等人[14]分别从PE文件头、节表和节中提取动态链接库引用、符号数、链接器版本和导入/导出表大小等信息作为特征,基于J48、朴素贝叶斯(NB)等构建恶意软件识别模型.另有一些研究从PE文件中提取序列化的静态特征表示,使用n-gram的出现频率作为特征.例如,Abou-Assaleh等人[18]选择PE文件中出现最频繁的二进制字节n-gram(如图2所示)作为特征;Santos等人[20]和Ding等人[21]使用PE文件汇编操作码序列的n-gram作为特征;Moskovitch等人[19]对PE文件的二进制字节n-gram和汇编操作码n-gram的有效性进行了对比,实验结果表明操作码序列n-gram更有效.上述基于序列特征的方法并未考虑程序执行时的实际控制流,即软件运行时的真实行为.针对此问题,Ding等人[22]将PE汇编文件解析为执行树,基于树遍历算法生成所有可能执行路径的操作码n-gram作为特征.

图2 字节tri-gram提取过程

针对Android平台的恶意软件,邵等人[23]从Android软件的清单文件和DEX反汇编文件中提取权限和API特征,分别使用SVM和k-NN构建恶意软件识别模型.Alazab等人[24]进一步将API调用划分为模糊调用、风险调用、破坏性调用等类别,对特征的有效性进行了评估,实验表明破坏性调用与风险调用的组合效果最好.杨等人[25]从清单文件中提取权限和意图(Intent)两类特征,提出一种改进的随机森林算法识别恶意软件.王等人[26]提取锁屏、加密、权限、威胁文本、支付方式和网络通信6类特征,使用Prism算法对勒索软件进行检测.

2.1.2 动态特征分析

动态特征分析[27]通过在虚拟机或沙箱中运行恶意软件并进行实时监控,分析和提取其在运行时的行为特征.

针对Window平台的恶意软件,Huang等人[29]分别使用了软件运行时的API调用、组合和API调用序列的tri-gram作为特征,训练多任务前馈神经网络来识别恶意软件.Ijaz等人[30]提取访问/删除/修改文件数、注册表键值、IP地址、DNS查询、运行时API调用和访问链接等作为特征构建恶意软件识别模型,实验表明某些恶意软件能够检测到沙箱环境并隐匿自身的恶意行为,导致识别模型失效.

针对Andriod平台的恶意软件,Burguera等人[32]以运行时调用的系统API次数作为特征,提出一种基于k-Means聚类的识别模型.Shabtai等人[33]设计了88个特征来捕捉软件运行时功率、内存、网络、触屏和键盘等14个方面的信息,使用不同分类器构建识别模型,实验表明基于J48和NB的识别模型表现较好.Alzaylaee等人[34]融合运行时的API调用、动作/事件等动态特征和权限等静态特征,使用多层感知机(MLP)构建识别模型.Xu等人[36]基于运行时的系统调用和进程号(PID)构建软件的直方图系统调用图、n-gram系统调用图和马尔可夫链系统调用图表示,通过最短路径图核[37]算法构造核矩阵,并使用SVM对恶意软件进行识别.

与静态特征分析方法相比,动态分析方法能够更好的识别恶意软件的非常态行为,但提取特征的过程非常耗时,因此不适合时效性高的检测任务.

2.2 特征选择与降维

为防止高维特征造成的过拟合问题,许多研究进一步对初始特征进行特征选择或降维.其中,常用的特征选择方法包括信息增益[24,34](IG)、互信息[23,29]等,常用的特征降维方法包括主成分分析[14](PCA)、随机映射[39,29]等.Huang等[29]先后使用了互信息和随机映射,将特征空间从百万维映射到数千维.Shafiq等人[14]使用冗余特征去除(RFR)、PCA和哈尔小波变换(HWT)3种不同的方法对提取的特征进行降维.Yang等人[25]分别使用IG和ReliefF算法对提取的特征进行选择,实验表明随着特征数的增加,IG算法相较ReliefF更加稳定.Shabtai等人[33]对比了卡方检验[40]、Fisher分值[41]和IG 3种特征选择方法,实验表明没有一种方法在所有实验设置中具有绝对优势.

部分研究借助自动编码器(Auto Encoder)实现特征降维[42-45](如图3所示),但对于上万维的特征,训练编码器非常困难.针对这一问题,Hinton等人[46]提出的深度信念网络(DBN),通过逐层预训练和参数微调,可达到很好的降维效果.Su等人[47]对从Android软件中提取的组件、意图和请求权限等特征进行0/1编码,使用DBN进行降维,降维后识别准确率达97.5%.Ding等人[21]提取PE文件操作码n-gram并使用DBN进行降维,也获得了显著的性能提升.

图3 自动编码器实现降维

3 基于特征学习的恶意软件识别

随着深度学习技术的突破性进展,利用深度神经网络的识别恶意软件成为新的研究趋势.由于深层神经网络具有自动学习区分性特征的能力,本文将这类研究归类为基于特征学习的识别方法.针对不同的样本表示方式,这些方法又可划分为基于循环神经网络、基于卷积神经网络和基于图神经网络3类,本节分别对其进行阐述,相关模型在表3中列出.

表3 基于特征学习的恶意软件识别研究工作总结

3.1 基于循环神经网络的恶意软件识别

循环神经网络(Recurrent Neural Network,RNN)具有很好的序列化数据处理能力,已被广泛应用在自然语言处理、机器翻译等任务中.有鉴于此,许多研究首先通过静态或动态分析方法将恶意软件解析为操作码序列、API调用序列等序列化数据的形式,然后基于RNN构建恶意软件识别模型.例如,Catak等人[48]动态提取软件的API调用序列,采用词嵌入(Embedding)获得序列的张量表示,并将其输入长短期记忆网络(LSTM)进行恶意软件族系分类.Jeon等人[49]反汇编提取软件的操作码序列,采用卷积自动编码器获得序列的压缩向量表示,将向量输入LSTM计算软件为恶意的概率.考虑到同类恶意软件的不同变体在程序实现和实际执行流程上不尽相同,许多研究者使用双向RNN来同时从正向和反向捕捉序列元素的依赖性,以更好的识别恶意序列模式.例如,郑等人[12]使用CNN+BiLSTM(双向LSTM)对软件的API调用序列进行分类,得到的结果显著优于单向LSTM.Liu等人[50]同样采用BiLSTM建模API调用序列,并与门控循环单元(GRU)、BiGRU(双向GRU)、LSTM进行比较,实验表明BiLSTM表现最优.Lu等人[61]通过IG选出API调用的关键n-gram序列,并提出一种双向残差LSTM对选出的序列进行进一步特征学习,最后使用RF进行恶意软件识别.

尽管基于RNN的恶意软件识别方法取得了不错的性能,但攻击者可以通过添加大量非关键序列元素的方式对此类模型进行迷惑.因此,如何提升RNN识别模型对于序列元素混淆的鲁棒性仍是需要深入研究的问题.

3.2 基于卷积神经网络的恶意软件识别

部分研究将软件转换为可视化图像,利用图像处领域的方法和模型构建恶意软件识别模型.Choi等人[57]以软件二进制表示中的每8位作为一个像素,将文件转换为通道数为1的灰度图像(过程如图4所示),再使用CNN进行恶意软件识别.Jung等人[35]考虑Android软件的DEX文件可能包含大量噪声,因此仅将其中的数据部分转换为灰度图,使用CNN进行恶意软件识别.Yuan等人[58]将字节表示的整数值视为状态,基于软件的字节序列计算状态间的转移概率,然后构造“马尔科夫图像(Markov Image)”(如图5所示)输入CNN模型来识别恶意软件.Zhang等人[60]采用了相似的思路,将软件汇编操作码转移概率及其IG的乘积作为一个像素来构造图像,并进一步使用直方图归一化、膨胀和腐蚀等方法进行图像增强.也有研究将软件的二进制文件转换为三通道的RGB彩色图像表示[62-64].Vasan等人[62]将MalImg数据集中以灰度图表示的恶意软件样本通过色彩映射(colormap)转换为彩色图像,并通过旋转、翻转和缩放等操作对数据进行增强,使用CNN进行恶意软件识别.Xiao等人[63]和Huang等人[64]将软件字节码表示中连续的3个字节分别视为RGB色彩空间3个通道的像素值来构建彩色图像,进而基于CNN构建识别模型.

图4 灰度图转化过程

图5 字节转移概率矩阵转化过程

通常,深层卷积网络相比浅层网络结构能够更好地学习有效的表征,对数据的拟合能力更强.对于恶意软件识别,更深层的网络结构可以更有效的应对混淆后的样本.然而,随着深度的增加和网络结构越来越复杂,会造成训练时的梯度消失或梯度爆炸的问题,使参数得不到有效更新[65,66].He等人[67]提出ResNet模型,通过残差结构有效缓解了上述问题,使得卷积网络结构可以达到上百层甚至上千层.但深层卷积网络由于参数规模更大,需要更多的数据才能很好的训练.鉴于能够获得的恶意软件族系标注样本规模有限,许多研究基于迁移学习的思想,首先在大规模图像数据上训练深层卷积网络模型,然后再将模型学习到的知识迁移到恶意软件识别任务中.例如,Vasan等人[68]提出的IMCEC架构首先在ImageNet数据集[69]上训练VGG16[59]和ResNet50模型,然后通过迁移学习将两个模型的参数迁移到恶意软件识别模型中.

在小数据集上训练深度学习模型易导致过拟合问题.针对小样本条件下的恶意代码模型训练,Kim等人[70]提出tGAN模型,在将恶意软件样本转换为图像后,首先训练卷积自动编码器学习恶意软件各类别的特征表示,然后将自动编码器中的解码器迁移到对抗生成网络(GAN)中,分别利用GAN的生成器和鉴别器进行数据增强和恶意软件识别,实验表明该模型在小样本条件下的准确率达90%.

基于可视化利用图像处理技术构建的恶意软件识别模型往往能够取得较高的准确率.然而,已有研究一般是将1维的序列强制转换为2维的“图像”,因而第二维度的结构关系并不是恶意软件中自然存在的.如何构建一种更合理的可视化表示,以更好的发挥CNN模型的优势,值得进一步探讨.此外,虽然基于VGG16、ResNet50等结构构建的识别模型可以获得很好的分类效果,但所需的训练和推理时间及消耗的计算资源往往也很高,限制了此类模型的应用.

3.3 基于图神经网络的恶意软件识别

图神经网络(Graph Neural Networks,GNN)将图分析引入深度学习模型,具有很好地处理关系型数据的能力.许多研究者尝试将软件样本表示为图的形式,然后使用GNN模型对图进行分类实现恶意软件识别.如,Li等人[17]将从软件样本中动态提取的API调用序列和由整个样本生成的马尔可夫链分别将软件样本表示为一个有向循环图和一个共享权重图,将二者融合后使用图卷积神经网络(Graph Convolutional Network,GCN)进行恶意软件检测.Busch等人[28]通过监测软件运行时的网络流量构建有向图然后使用GNN对软件进行分类,图中的节点对应网络中的IP地址,边表示网络流量的方向并具有发送包数目、包长度均值、包传送间隔最大和最小值等属性.为了避免引入运行时开销,Feng等人[31]将Android应用程序反编译为Smali文件,从中提取函数调用关系构建函数调用图,并将函数的语义信息、安全级别、权限作为节点属性,使用GNN进行恶意软件识别.整体来看,目前将GNN应用于恶意软件识别的研究工作还较少,在样本的图表示和表征学习等方面仍值得进一步探讨.

4 恶意软件数据集

为了方便研究者训练机器学习模型并评测模型性能,学术界和产业界发布了多个恶意软件数据集.本节汇总了已公开的Windows、Andriod等系统和平台上的恶意软件数据集,获取链接在表4中列出,供研究者参考.

表4 恶意软件数据集/平台的获取链接

4.1 Windows平台恶意软件数据集

目前,已公开的Window平台恶意软数据集的数据格式包括字节文件、汇编文件、动态API调用序列、可视化图像等.

MalImg数据集[71]包括25个不同家族的9339个恶意软件样本,每个样本为一幅由恶意软件转换得到的灰度图像,具体格式如图6所示.通过观察样本可发现,许多研究的实验在此数据集上进行[15,16,62,72].

图6 不同家族样本灰度图

MMCC数据集[73]是微软为在BIG 2015上进行的恶意软件分类挑战赛公开的恶意软件数据集.该数据集包括Ramnit、Lollipop、Kelihosver3等9个恶意软件家族的21741个样本.每个恶意软件样本包含两种形式的文件,即二进制文件(.bytes)和使用IDA Pro提取的元数据文件(.asm),两种文件的数据格式如图7、图8所示.迄今为止,该数据集已被数百篇学术论文引用,如本文参考文献[53,55,56,58,74].

图7 二进制文件的十六进制表示

图8 汇编文件

Mal-API-2019数据集[75]是使用布谷鸟沙箱(Cuckoo Sandbox)提取生成的Windows恶意软件数据集.该数据集包括Trojan、Backdoor、Worm等8个不同类别共7107个恶意软件样本,每个样本由恶意软件运行时的API调用序列构成.

APIMDS数据集[76]包括Worm、Backdoor、Trojan等6个不同种类的23080个恶意软件的API调用序列,共涉及2727个不同的API调用.

Ember数据集[77]包含110万个PE文件样本,每个数据样本由5组格式特征(即,通用文件信息、头部信息、导入函数、导出函数、节信息)和3组格式无关特征(即,字节直方图、字节熵直方图、字符串信息)表示.

CILPKU08和Henchiri数据集均由可执行文件组成.其中,CILPKU08包括915个良性程序和3547个恶意程序;Henchiri包括1414个良性程序和2994个恶意程序.

4.2 Android平台恶意软件数据集

目前,可公开获取的Android平台恶意软件数量大、类型繁多.卢森堡大学公布的AndroZoo数据集[78]包含1700万个APK样本,并仍在不断扩展.在线平台VirusShare上汇集了近4000万个恶意软件样本,Contagio社区包含许多用户分享的大量恶意软件.Drebin数据集[79]包含179个不同恶意软件家族的5560个样本,每个样本由从清单文件中和反汇编DEX文件中通过静态分析获取的特征表示.Genome数据集[80]包含49个恶意软件家族的1260个样本,其中1083个是通过加入恶意负载重新打包的应用程序.CICAndMal数据集[81,82]包括42个恶意软件家族的426个恶意和5065个良性样本,样本使用软件的权限、API调用、网络流量、内存转储、权限、意图等特征表示.RmvDroid数据集[83]包括56个恶意软件家族的9133个样本,每个样本附带了描述、评级、下载数量等元数据以辅助恶意软件的识别.

5 问题与挑战

尽管基于机器学习的恶意软件识别研究已经取得了很大的进展,但仍然面临一些问题和挑战,本章对部分问题和挑战进行了列举和分析.

5.1 类别不平衡

在恶意软件识别场景中,类别不平衡是一个常见的问题.对于恶意软件检测任务,能够获取到的良性样本的数量往往远大于能够获取到的恶意样本的数量;对于恶意软件分类任务,各恶意软件类别的样本数量通常也存在偏斜,如MMCC数据集中Lollipop和Kelihos ver3两类的样本数量分别为2478、2942,而Simda类别仅有42个样本数据.类别不平衡会导致机器学习方法偏向于大类别,已有部分文献针对这一问题提出解决方案,例如Liu等人[38]提出了两种集成学习机制,通过从大类别样本中抽取与小类别样本数目相同的若干子集,与小类别样本共同训练多个弱分类器集成进行输出.此方法仅适用于二分类,而对于恶意软件识别,多分类任务更易受到类别不平衡的影响.Kim等人[70]提出的tGAN模型通过生成的方式对所有类别的数据进行增强,采用集成的方式进行多分类,但GAN模型在样本生成时稳定性较差.Yue等人[72]采用加权softmax损失对CNN进行微调,对不同数目的类别赋予不同的损失权值,但加权损失只能在一定程度上缓和类别不平衡的影响.总体来看,如何处理恶意软件识别中的数据不平衡问题仍然是一个需要深入探讨的问题.

5.2 主动识别方法

随着基于机器学习的恶意软件识别技术持续发展,各类反识别技术也不断出现.恶意软件的编写者能够根据机器学习模型的特性设计相应的策略,使恶意软件能够规避模型的检测.例如,陈等人[84]和Hu等人[85]分别根据基于字节码图像和API特征的恶意软件识别模型的原理特性,设计了一种生成对抗网络来生成恶意对抗样本,能够成功避开黑盒识别;Grosse等人[86]仅对不影响恶意功能的特征进行更改,以生成保留其恶意功能的对抗样本.此外,有监督的机器学习模型一般基于训练数据构建,对于未知恶意软件的泛化性往往不高.针对上述两种情况,通常需要再根据反检测技术和新型恶意软件的特性重新构建识别模型,以被动的形式应对.如何基于演化学习、对抗生成、终身学习等理论和方法建立能够自进化的主动式恶意软件识别模型,也是值得进一步深入探讨的方向.

5.3 模型轻量化

随着5G、无线传感、物联网等技术的发展,人类社会即将迎来万物互联的时代,无处不在的智能终端将融入人们生活的方方面面.然而,许多智能终端在设计时并未考虑安全问题,因而安全防护能力普遍较差,非常容易受恶意软件的侵害.而受限于计算能力和资源,大部分基于恶意软件识别模型无法在智能终端上运行.目前的一种解决方案是将智能终端的数据进行汇聚,在高性能的服务端或云端分析并完成恶意软件识别,但这种方式的实时性较差.基于知识蒸馏、模型剪枝等方法协同软件的特殊表示研究恶意软件识别模型的轻量化,在保持识别性能的条件下使其适合在智能终端等算力和资源有限的设备上运行,对于万物互联时代的网络安全有重要意义.

5.4 模型可解释性

尽管基于机器学习的恶意软件检测模型表现出了较好的性能,但是模型的黑盒特性使预测结果不具有良好的可解释性,因而不利于分析人员理解复杂恶意软件的构成和运行机理.Jeon等人[49]尝试使用网络隐藏层的平均激活值定位恶意软件中恶意的操作码片段,可以提供一定的解释信息,但仅是面向整个组合架构的决策过程,并未涵盖单个深度模型内部机理解释.如何有效提升基于机器学习的恶意软件识别模型的可解释性,以帮助分析人员更好的剖析恶意软件的作用机制,也是一个亟需进一步研究的方向.

6 总 结

目前,机器学习模型和方法已被广泛应用到恶意代码识别任务中,能够缓解传统基于签名和启发式规则的方法泛化性差、误报率高等问题.本文梳理和综述了近年来基于机器学习的恶意软件识别相关研究,分别从特征表示、特征选择和降维等方面阐述了早期基于特征工程的识别方法,并归纳和分析了近期出现的基于RNN、CNN和GNN等深度神经网络的特征学习类识别方法.此外,对于目前已公开的恶意软件数据集,本文也进行了汇总.通过分析该领域的国内外研究现状,本文指出未来尚需解决类别不平衡、主动识别方法、模型轻量化和模型可解释性等问题和挑战.随着机器学习及深度学习技术的飞速发展,基于机器学习的恶意软件识别在性能和效率将得到进一步提升.

猜你喜欢

降维调用神经网络
混动成为降维打击的实力 东风风神皓极
Helicobacter pylori-induced inflammation masks the underlying presence of low-grade dysplasia on gastric lesions
降维打击
核电项目物项调用管理的应用研究
神经网络抑制无线通信干扰探究
系统虚拟化环境下客户机系统调用信息捕获与分析①
基于神经网络的中小学生情感分析
基于神经网络的拉矫机控制模型建立
一种改进的稀疏保持投影算法在高光谱数据降维中的应用
基于支持向量机回归和RBF神经网络的PID整定