欧阳立, 芦天亮, 暴雨轩, 李 默
(中国人民公安大学警务信息工程与网络安全学院, 北京 100076)
来自CVE Details网站的数据显示,2019年Android平台上的CVE漏洞新增721个,总数已达到2 563个,增长速度迅猛。而随着Android平台移动终端市场份额的不断增加,这些漏洞所带来的的安全隐患正在威胁越来越多的移动终端用户。并且,移动终端已经成为人们日常生活中越来越重要的工具,包括移动支付、即时通讯、网上购物等诸多涉及个人隐私和个人财产的行为都在移动终端上进行。这些都对Android应用软件的安全性提出了更高的要求。
由于Android平台的开源性,以及开发者在开发过程中对安全机制的轻视,近些年Android应用市场的Android恶意软件呈指数级别增长。Android恶意软件的恶意行为一般包括吸费、消耗流量、泄露用户隐私、捆绑下载、钓鱼劫持等,威胁用户的隐私和财产安全。
面对越来越多的Android恶意软件的出现,曾经只依靠人工审核、特征码匹配的检测方式已经难以满足如今的检测需求。许多学者和研究人员通过机器学习算法来对Android应用软件进行批量检测,并取得了相关研究成果。而随着深度学习浪潮的兴起和计算机算力的提升,越来越多的研究人员开始利用深度学习模型检测Android应用软件。本文提出了基于深度置信网络(Deep Belief Network,DBN)[1]和门控循环单元网络(Gate Recurrent Unit,GRU)[2]混合的Android恶意软件检测模型,在实验中获得了良好的实验结果。
国内外学者通过传统机器学习算法检测Android应用软件并已有许多研究成果。Arp和Spreitzenbarth等人[3]在当时动态检测技术和资源有限的情况下,通过广泛收集静态特征,采用支持向量机(Support Vector Machines,SVM)对应用软件进行检测和分类,对可疑的应用软件进行评分,用以警示用户。Peiravian和Zhu[4]利用权限和API调用作为主要特征,并重点研究了重打包应用软件的检测问题,采用了SVM、J48等多种分类器进行分类。Garcia等人[5]则将研究重点放在研究应用软件的混淆技术和检测算法的抗混淆能力的提升上,采用抗混淆能力强的小规模特征集,提出RevealDroid检测模型,实现精准而快速地检测。
近些年随着深度学习的兴起,越来越多的研究人员开始通过深度学习模型进行Android恶意软件检测。Yuan等人[6]在前人研究的基础上,收集动态和静态特征集,通过深度学习模型检测Android应用软件,并且对于恶意软件和正常软件的特征差异做了较为充分的研究,挖掘恶意软件的关联规则。Ganesh等人[7]则基于卷积神经网络(Convolutional Neural Network,CNN),将权限特征进行编码整理成矩阵,进而当做灰度图像加以处理,该方法在数据处理方式上新颖,也具有较高的检测准确度。
随着Android应用软件日益多样化,越来越多的正常应用软件申请更多的权限,恶意应用软件也可通过混淆等方式伪装自己,正常应用和恶意应用的差别越来越小,仅靠单一的静态特征,如权限特征已经难以达到良好的检测效果,因此,丰富特征集成为大势所趋。
一些研究学者也通过模型混合吸收各种模型的优点,提高检测准确率[8,9]。本文通过提取静态特征和动态特征的方式,多样化特征集,并提出深度置信网络和门控循环单元网络混合的Android恶意软件检测模型,可以更加有效地检测Android应用软件。
对于Android应用软件的特征,主要从动态和静态两方面提取,如图1所示。
图1 Android应用软件的特征提取
静态特征分为两类,一类是权限特征,另一类是API特征。对于Android应用软件而言,开发者都将其开发的Android应用软件打包成Apk文件,用户将Apk文件下载安装后使用。将Apk文件通过Apktool反编译后,可获得Android Manifest.xml和classes.dex等文件。Android Manifest.xml是应用软件的清单文件,从中可以获取应用软件的相关权限,将是否有重要权限作为权限特征的取值依据,“有”取值为1,“无”取值为0,因此,权限特征为二值特征;利用反汇编工具将classes.dex文件反汇编为Smali文件,搜集Smali文件中的敏感API调用,获得API特征,根据敏感API调用次数为API特征取值,因此,API特征是离散特征。将权限特征的个数与API特征个数相加,总共得到179个静态特征。
动态特征是Android应用软件运行时的行为特征,如,读写操作、应用请求、加解密操作、网络数据传输等,并且动态特征在时间上具有相关性,将动态特征向量作为循环神经网络的初始输入,通过循环神经网络能较好地拟合Android应用软件的动态行为。收集记录动态特征的工具是Droidbox,Droidbox是基于TaintDroid的一个分析Android应用软件的动态分析工具,通过hook技术监控系统API,记录应用软件启动后若干时间之内的动态行为。本文确定将13种应用软件行为作为动态特征,包括:网络数据传输、通话请求、发送短信、文件读写操作等。由于根据动态行为的次数确定动态特征的取值,因此动态特征是离散特征。
在提取动态特征和静态特征后,由于并不是所有特征均为二值特征,因此需要对离散特征进行编码,使其转化为二值特征。编码方式采用one-hot编码,将特征转化为对应的特征列,如,将取值为0、1、2、3的离散特征编码为0001、0010、0100、1000二值特征列。对于值域过宽的离散特征,如果按照one-hot编码会导致特征矩阵稀疏化,如,取值在[0,1 000]的特征值,编码后会产生维数为1 000的特征列,在之后组成特征向量时会造成极大的特征向量,影响学习效果。因此,对于这种情况首先对其值域进行细分类,降低one-hot编码后的特征维度。经过one-hot编码后,所有的静态特征和动态特征都转化为二值特征,将所有的静态特征组合成静态特征向量,所有的动态特征组合成动态特征向量,分别作为之后深度学习模型的初始输入。
由于Android应用软件的静态特征和动态特征的不同特性,本文提出了基于深度置信网络(Deep Belief Network,DBN)和门控循环单元网络(Gate Recurrent Unit,GRU)混合的Android恶意软件检测模型。静态特征由于其特征之间相对独立,空间关联性不强,数量适中,经过one-hot编码后可以组合为静态特征向量,每个维度的取值为0或1,适合采用深度置信网络学习处理。动态特征相互之间具有时序关联性,而循环神经网络(Recurrent Neural Network,RNN)处理顺序或时序相关特征有其特有优势,能很好地处理具有时序变化的特征。GRU作为被广泛使用的一种特殊的循环神经网络,相比普通的RNN模型,GRU能够在更长的时间序列中有更好的表现,并且相对于其他RNN模型参数更少,训练难度更低,在很大程度上能够提高训练效率。
动态特征向量和静态特征向量分别经过DBN和GRU训练,将输出向量分别输出到全连接层,之后再进入Softmax层。Softmax是如今最常用的多分类器之一,Softmax函数将多个神经元的输出映射到(0,1)区间,以类似概率的形式进行分类,并输出分类结果,如图2所示。
图2 Android恶意软件检测框架
深度置信网络由多个受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)自下而上堆叠而成。DBN网络首先进行预训练,先将权值矩阵初始化,采用贪心算法初始化权值,使之达到局部最优。预训练采用无监督方式,自下而上优化权值矩阵,如图3所示。
图3 DBN网络结构
之后采用反向传播算法(Back Propagation algorithm,BP算法)有监督地训练DBN网络。在Softmax层使用交叉熵损失函数,在优化算法方面采用梯度下降法,求得权值矩阵对于损失函数的偏导,更新权值矩阵,实现有监督地训练DBN网络。
采用门控循环单元网络,处理具有时序关联性的动态特征。相比于一般的循环神经网络模型,GRU能够在更长的时间操作序列中有更好的表现,并且相对于其他RNN模型参数更少,训练难度更低,在很大程度上能够提高训练效率,单个GRU如图4所示,GRU网络由多个图5所示的单个GRU串联而成,xt为输入,Yt为输出,ht为单元的隐状态。
图4 GRU结构
xt为当前单元的输入,ht-1为上一个单元输出并传递到本单元的隐状态(hidden state),这个隐状态包含了之前单元的相关信息。结合xt和ht-1,GRU会得到当前隐藏单元的输出Yt,并作为隐状态ht传递给下一个单元,其中Yt和ht数值上相同。多个GRU单元串联成GRU网络,如图5所示。
图5 GRU网络
在反向传播阶段,同样在Softmax层使用交叉熵损失函数,在优化算法方面采用梯度下降法,迭代更新参数矩阵,和DBN不同的是,参数矩阵由所有GRU模块共享,这也体现了GRU模型“循环反馈”的思想。
本文收集了10 000个正常样本作为正常样本集,这10 000个样本均来自Google应用市场,从25类应用软件中选出,每一类应用软件选择400个。恶意样本集主要来自Drebin数据集和VirusShare数据集,从Drebin数据集中选择了1 000个恶意样本,从VirusShare数据集中选择了2 000个恶意样本,总共3 000个恶意样本构成恶意样本集。
将基于DBN和GRU混合的Android恶意软件检测模型进行实验,并将实验结果同传统机器学习模型的最优检测效果进行比较,实验结果如表2所示。实验结果表明,基于DBN和GRU混合的Android恶意软件检测模型的实验结果优于传统的机器学习算法。
表2 不同机器学习算法检测结果
对于本文中的基于DBN和GRU混合的Android恶意软件检测模型,可以将两个深度学习模块分开,单独训练并测试其实验效果,结果如表3所示。实验结果表明,DBN模块和GRU模块分别检测时,其效果均不如混合模型,这说明将DBN和GRU混合后的混合模型能最大程度优化检测效果。
表3 混合模型和单独模块检测结果比较
从恶意样本集和正常样本集中分别取出100个样本进行重打包,重打包的过程十分简单,在不更改任何功能的情况下,对应用软件进行解压和重新组装,这样重打包后应用软件的MD5或SHA哈希值将与原始值不同。然后,采用市场上主流的杀毒软件和本文提出的DBN+GRU混合模型进行检测,结果如图6所示。可以看到,大多数杀毒软件对重新打包的应用软件的检测准确率都大幅下降。这些结果表明,这些杀毒软件大多数都可能采用基于签名的方法来检测Android恶意软件,该方法采用黑名单机制,通过对待检测的应用软件哈希值和其收集到的恶意软件的哈希值进行比对,从而确定是否为恶意软件。而本文提出的DBN+GRU混合模型的检测结果并不受应用软件重打包的影响,因为重打包并不影响其提取特征和训练学习特征的过程,这也是该混合模型的在检测Android应用软件的一大优势。
图6 对重打包应用的检测结果
本文通过提取Android应用软件的静态特征和动态特征,使用DBN和GRU混合的深度学习模型,对提取的特征进行学习,设计实现了一种基于DBN和GRU混合模型的Android恶意软件检测方法。对比传统的机器学习算法和单独的深度学习模型,该混合模型的检测和分类效果更好,能够在将来的Android恶意软件中加以应用。
该研究还有以下不足,在以后的研究工作中需要继续改进。一是样本数量尤其是恶意样本不够广泛,得到的恶意软件特征的代表性仍不强,需要不断丰富恶意样本集中的样本种类和数量;二是特征的抗混淆能力不强,在如今恶意软件普遍使用混淆技术提升抗检测能力的情况下,需要提升特征集的抗混淆能力。