APP下载

基于CNN和LSTM混合的Android恶意应用检测*

2018-09-29邱卫东连慧娟

通信技术 2018年9期
关键词:应用程序指令卷积

王 聪,邱卫东,唐 鹏,连慧娟

(上海交通大学,上海 200240)

0 引 言

2017年度CVE Details报告显示,Android系统以842个漏洞位居产品漏洞数量榜首,与2016年523个相比,增长了61.0%。

手机应用程序已经成为人们日常生活中用来使用各种各样服务的重要手段,包括网上购物、访问私人邮箱、使用手机银行等一系列对安全非常敏感的行为。最新的统计数据显示,基于Android平台的恶意软件占据了移动端恶意软件的97%。例如,IMEI、联系人、信息等用户的私人数据和其他应用的私有数据都是攻击者的主要目标。这是由于Android系统的开放性和应用开发者本身对安全机制的不熟悉造成的。恶意攻击者常常利用这些疏漏,编写恶意应用程序,威胁移动用户的隐私安全。

近年来,面对应用市场上数量级越来越大的Android恶意应用,单纯依靠特征码匹配、人工审核已经很难满足恶意应用的检测需求。相当一部分的研究人员和从业者开始着力于使用新兴的机器学习和深度学习来替代传统的恶意应用的检测方法。当然,业界已有许多研究进展和实验成果。

基于动态和静态的方法检测收集Android应用程序中的人工组合设计的特征训练的方法,已经被广泛研究和应用。Arp等人[1]把从Android的manifest.xml文件中提取应用程序请求的权限、硬件访问情况、从反编译后的代码提取所有API的调用情况、具体使用的权限、包含的外部网络地址等特征组合,使用SVM机器学习模型进行分类,取得了很好的分类效果。Sharma[2]利用类似的特征进行不同组合,采用朴素贝叶斯和k近邻分类器进行了类似实验。但是,随着深度学习技术的兴起,研究人员开始尝试使用深度学习的方法来对传统的机器学习方法进行替换。Pascanu等人[3]开始使用多层感知机(Multi-layer Perceptron,简称MLP)模型对恶意应用进行分类,并且与传统的机器学习相比,得到了良好的提升效果。在广泛应用于图像处理文本处理的卷积神经网络(Convolutional Neural Networks,简称CNN)模型被提出后,Mclaughlin等人[4]有感于自然语言处理(Natural Language Processing,简称NLP)的文本处理方式,把反编译后的汇编代码当做传统意义上的文本作为处理,以汇编代码的操作指令的类型数量作为一个字典进行训练,提出了一个多层卷机神经网络的模型。虽然最后的泛化能力有所局限,但是这种跨领域的转换思想非常新颖。

在实际的工程应用中,随着越来越多的良性应用程序请求权限越来越多,恶意应用程序也可以通过申请不需要的权限来伪装自己,达成与正常的应用程序拥有一样的权限。单纯基于申请的权限组合作为特征等方法,很难在实际检测中获得良好效果。因此,本文提取了一些新的应用程序特征,这些特征基于反编译后的Smali汇编代码的操作指令和程序动态运行时的行为和操作情况,从而可以更加真实可信地检测恶意应用程序。

1 理论基础

1.1 Android的静态反编译特征

应用程序的静态反编译特征提取主要包括对其本身的反编译和对反编译后的操作指令的序列进行提取。

首先介绍Android的反编译过程。Android应用程序通常以apk文件进行发布、下载及安装。本质上,它是一个压缩文件,文件内容主要包括AndroidManifest.xml文件、dex文件以及相关的资源文件。其中,在Android操作系统上可执行代码放在dex文件中。

本文主要分析借助dex反编译后的汇编代码文件来对应用程序是否是恶意的来进行判断。具体操作过程中,首先通过BakSmali程序进行反编译dex文件来获得多个Smali文件,其文件格式如图1所示。然后,合并Smali文件,去除具体的操作数部分,只留下操作指令序列。

图1 常见smali代码

Smali代码中每一行前面都会有一个操作指令,如空指令、数据操作指令、跳转指令等。本文尝试通过应用程序的指令操作模式作为特征训练,从代码的层面对恶意应用程序进行识别分类。

这些操作指令通过统计后共有218种,且以0代表某段指令的开始,255代表某段指令的结束,建立了一个字典。最终,把这些操作指令序列交给卷积神经网络进行训练。

1.2 Android的动态运行特征

Android恶意应用程序从行为上来说,可以包括钓鱼劫持、木马、恶意广告、绑定下载等众多类型。这些程序都是在Android恶意应用程序运行后,自发性地在后台运行,或者欺骗用户完成自己的目的。因此,本文希望能够通过对Android应用程序模拟运行后的行为和操作进行记录,把应用程序的行为模式进行分类训练。

在具体实现过程中,在开源软件Droidbox的基础上,修改了一部分监控目标和记录的内容进行实现。Droidbox是基于TaintDroid[5]的Android应用沙箱,可以在应用程序框架级别借助底层的hook技术进行动态的污点分析,同时监控应用程序本身的行为,如是否进行了网络访问,是否存在信息的泄露,是否进行了文件访问等。

上述收集的应用程序行为和操作是具有时序性的,因此在下文中将用作循环神经网络的输入,具体包括文件的读写、网络的传送和加密过程的调用。

1.3 神经网络的选择

近年来,神经网络特有的非线性适应性信息处理能力,克服了传统人工智能方法对于直觉如模式、语音识别、非结构化信息处理方面的缺陷,得到了飞速发展。由它为基础衍生的卷积神经网络,在图像处理等多个方面取得了良好的效果。循环神经网络也在处理具有顺序或者时序关系的特征方面,比起传统的机器学习获得了明显提升。

本文提取静态反编译代码中的操作指令序列特征,与传统的热门领域NLP具有相似性。Android的操作指令序列可以看做是一个字典大小为255的语言集的文本。但是,这个文本具有非常强的局部关联性,这是由操作指令堆叠形成的特性。另外,在应用程序实际运行过程中的代码调用和生成过程中,相关函数的局部操作指令序列在这个文本上体现的距离可能相当远,因为逻辑上调用的函数在源代码中的距离并非固定。面对如此远距离的关联性,单纯使用基于循环神经网络的网络模型很难得到一个很好的训练效果。因此,本文在实验中采用卷积神经网络,对这种局部的联系性进行放大提取后做一个整体池化,然后在后续的模型中进行整合训练。

本文提取的Android应用程序运行时的行为和操作,可以将其视为应用程序在启动后进行的具有时序关系的序列。基于循环神经网络的模型对此有非常好的训练效果。长短期记忆网络(Long Short-Term Memory,简称LSTM)是一种时间递归神经网络,适用于处理和预测时间序列中间间隔和延迟相对较长的重要时间序列,对于具有时序性的运行行为和操作很适用。

2 网络模型部分

2.1 卷积神经网络部分

Android应用程序的汇编代码可以看成是操作指令的序列,可以尝试使用文本分类、情感分析的网络模型对其进行处理。在Kim Y[6]提出的TextCNN的网络模型和Zhang Y[7]等人提出的CNN做情感分析的网络模型基础上,修改其网络模型结构,对Android应用程序的恶意行为进行分析。

本文中的卷积神经网络的输入是静态反编译特征序列,具体的表现形式是0~255的数字序列,分别代表操作指令的256大小的映射字典D。

首先是对输入的操作指令序列进行one-hot编码,然后输入神经网络,整个模型如图2所示。

图2 卷积神经网络结构

第一层是Embedding层。这个设计源自NLP的处理方式,将one-hot编码的操作指令序列从稀疏的高维度进行降维,并训练词向量之间的空间关系。实质上就是一个权值矩阵,具体的值随着训练过程进行更新。具体地,相当于将输入的256维降低到8维。

第二层是卷积层,主要功能和内容是对输入的矩阵进行卷积操作。具体的窗口大小设定为8×8,步长为1,滤波器的个数为64个。最终,得到一个长度为64的1维特征。在这一层进行操作,类似于n-gram算法的设计概念。这个卷积层是将前后8个相邻的操作指令进行组合提取,因为操作指令局部的前后关系非常强,这一卷积操作能够对局部的指令特征进行组合。

第三层是池化层。池化层的功能与图像处理中池化层的作用不同,这个池化层做的是1-max pooling,记录64个1维的特征向量的各自唯一最大值,并将结果连接起来形成一个64维的特征。这里采用的是1-max pooling而不是mean pooling等池化操作,是由进行试验时的分类效果决定的。

这样得到了64个维度的特征。这个特征的维度由滤波器的个数决定,与其他参数无关。因此,滤波器的个数可以看成是一个关键的超级参数,在本文中设定为64。

如果单独利用此卷积神经网络进行分类训练,对64维度的特征后面接入一个全连接层和softmax层,即可进行分类预测。

2.2 循环神经网络部分

本文构建的循环神经网络包括六个部分:输入层、embedding层、LSTM隐层、全连接层、softmax层和输出层。

循环神经网络的输入特征,具体内容是收集Android应用程序运行前30 s内记录到的应用程序的前100个操作序列。如果应用程序的操作序列不足100个,进行补0操作。

对这些操作序列同样做one-hot编码后,embedding层进行维度变换,交给一个两层的LSTM神经网络进行训练。每一层神经网络的神经元的数量是64个,最终取最后一个时序输出的64维特征。

然后将64维的特征进行常规全连接层和softmax层处理,随后对应用程序的预测分类结果进行输出。

该部分的网络结构如图3所示。

图3 循环神经网络结构

2.3 混合模型

最终的混合模型是把卷积神经网络和LSTM网络在进入全连接层前输出结果,各为64个维度的特征concat后成为128维的特征,然后接入全连接网络,softmax分类输出预测分类结果。神经网络结构最终的架构如图4所示。

图4 混合网络结构

3 实验

3.1 数据集的建立及来源

本文中的数据集包含了正负样本。其中,正样本来源于GooglePlay市场,是借助爬虫抓取下载建立的。样本集中的负样本是公开的收集恶意程序Virusshare网站(https://virusshare.com/)中的Android恶意样本集。去除一些无法进行反编译以及在Android模拟器上运行失败的无效样本后,用于本次试验的恶意样本和正样本的数量最终都取为3 600个。

3.2 特征的收集

卷积神经网络部分的操作指令序列,借助BakSmali程序对应用程序进行反编译,遍历所有的Smali文件,映射成操作指令对应的0~255数字序列进行存储。需要说明的是,该过程能够较快完成。

循环神经网络部分的应用程序动态调用特征收集方面,借助python编写了一个脚本程序。在对每个样本进行收集前,在建立Android模拟器(emulator)时重新加载一次Android操作系统的system.img,并且添加指令-wipe-data,保证前后样本不会产生干扰。然后,调用droidbox收集Android应用程序前30 s指定的敏感操作序列并记录。该过程需要至少30 s的应用程序运行时间,用来收集行为和操作。

3.3 模型测试结果

实验利用TensorFlow编程实现,采用的梯度下降优化算法是Adam。在64 GB内存的Tesla M40显卡的服务器上进行100个epoch的3个部分模型的训练测试,结果如表1所示。

表1 各个网络部分的实验结果

从实验结果可以看出,使用应用程序动态运行时收集到的特征训练的LSTM神经网络,在恶意软件识别精度上表现良好,这源自恶意应用程序大量调用敏感文件读写和网络的操作可能性原因高于正常的应用程序。卷积神经网络部分将应用程序的汇编代码的操作序列当成自然语言的文本进行处理分类,其在卷积神经网络的特征提取后得到了良好的分类效果。

3.4 模型对比及分析

由于Android应用程序恶意应用程序检测领域没有固定的广为使用的数据样本集,多为各自收集整理的样本集,因此本文希望通过复现其他网络模型在本样本集上的分类效果,来对比本模型的有效性。Mclaughlin N等人提出的恶意软件检测架构DCNN,采用了多层卷积神经网络对特征序列进行卷积训练。本文的卷积神经网络部分使用的特征和处理方法与其类似。复现其模型在本数据集上的实验结果与原论文中的实验结果,如表2所示。

表2 在本数据集上的验证结果

在本数据集下,对比DCNN与本文的两种模型实验结果,可以得出以下结论:DCNN网络中的卷积部分选用了两层卷积层,对第一层卷积神经网络的输出再次进行卷积操作,在实验结果上与本文的单层卷积网络的性能对比,在准确率上有所提升,但是在查全率上有所降低。本文的CNN部分希望的是保留较高的查全率,提升整体模型的效果。因此,最终只采用了一层卷积神经网络层。通过与DCNN的对比试验也可以看出,卷积神经网络对基于汇编操作指令序列的特征具有良好的查全率表现,但是单纯通过加深卷积层的层数并没有对分类效果产生显著提升。结合LSTM神经网络部分的特征后,会显著提升整体的分类效果。

4 结 语

本文提出的基于Android应用程序的汇编操作指令序列和动态运行时的行为和操作序列,搭建了基于卷积神经网络和长短期记忆网络的混合模型,对比独立的神经网络模块的实验效果,得到明显提升,能够从多方面对一个应用程序的恶意性进行判别。此外,它在搜集的恶意样本库和GooglePlay样本集上取得了非常好的分类效果,证明了本文提出模型的可行性和有效性。与独立的处理模块相比,混合后的模型具有更加全面的特征收集和更好的分类效果,为Android的恶意应用程序的检测和分类提供了一种有效的分类方法,可在日常的Android应用程序检测中加以应用。

猜你喜欢

应用程序指令卷积
基于3D-Winograd的快速卷积算法设计及FPGA实现
《单一形状固定循环指令G90车外圆仿真》教案设计
卷积神经网络的分析与设计
删除Win10中自带的应用程序
从滤波器理解卷积
谷歌禁止加密货币应用程序
基于傅里叶域卷积表示的目标跟踪算法
中断与跳转操作对指令串的影响
一种基于滑窗的余度指令判别算法
MAC指令推动制冷剂行业发展