APP下载

基于卷积神经网络的Android恶意应用检测方法

2018-08-16桐金昊徐根炜周金岭

信息安全研究 2018年8期
关键词:准确度分类器卷积

郗 桐金 昊徐根炜周金岭

1(中国科学院信息工程研究所 北京 100089)2(信息安全共性技术国家工程研究中心 北京 100080)(xitong@iie.ac.cn)

随着Android移动智能终端的普及,Android应用市场迅猛发展.但与此同时,Android恶意应用的数量也呈现了爆炸式的增长,给正常的Android应用生态环境造成了巨大的破坏,也给Android终端用户带来了一系列经济损失和信息泄露的风险.工信部中国信息通信研究院发布的《2017年中国手机安全生态报告》显示,2017年上半年,360互联网安全中心共截获Android平台新增恶意程序样本483.9万个,平均每天截获新增恶意应用近2.3万个[1].Sophos等信息安全企业在报告中指出,Android平台恶意应用的数量在过去4年呈现稳步增长的趋势.2013年只有50多万的恶意应用程序,到2015年这一数字已经上升到了大约250万,再到2017年,这个数字已经高达近350万[2].针对Android恶意应用的检测研究关乎个人切身利益甚至国家的信息安全,具有较大的研究意义.

Android恶意应用检测方法大体可以分为2个步骤:第1步从待检测的Android应用程序中提取能够区分良性应用与恶意应用的应用特征;第2步根据第1步提取的特征,对Android应用进行判别分类.根据应用特征的获取方式不同,可以将Android恶意应用检测方法分为动态检测方法和静态检测方法.动态检测是指在Android虚拟机中通过自动化测试工具自动运行Android应用程序,通过观察其执行流程与信息流动路径等信息,判断其是否为恶意应用.动态检测能够较好地应对代码混淆、加密等隐藏恶意行为的方法,但是其检测效率极低,运行一个应用花费的时间往往是几分钟甚至几十分钟,且应用执行路径无法保证完全覆盖,有较大的可能性漏检恶意代码片段,因此其检测准确率也不尽人意.与动态检测技术不同,静态检测技术并不需要运行应用程序,而是通过反编译等手段获得Android应用的源代码,从代码中提取恶意行为特征,然后交给分类器判断应用是否为恶意应用.通过总结以往的研究成果,研究人员通常将Android应用申请的权限以及调用的应用程序接口(application programming interface, API)序列等信息作为特征,并通过分类器进行分类识别.静态检测技术消耗的资源较少,分析效率较高.从代码中能够更深层次地挖掘恶意行为特征,因此相较动态检测方法,其具有更高的检测准确度.

从应用程序中提取特征后,需要对这些特征进行分析以判定其安全性.因为机器学习算法能够从大量的数据中学习有意义的信息,研究者提出利用机器学习算法从应用程序中提取分类特征,从而判断其安全性的技术方案.深度学习作为机器学习的分支,从2006年开始受到学术界的广泛关注,已经成为互联网大数据和人工智能的一个研究热潮.区别于传统的浅层学习,深度学习强调了模型结构的深度,通常有5层、6层、甚至10多层的隐层节点;同时,深度学习明确突出了特征学习的重要性,通过逐层特征变换,将样本在原空间的特征表示变换到一个新特征空间,从而使分类或预测更加容易.

基于此,本文提出了一种基于深度学习的Android恶意应用检测方法.与以往检测方法不同的是,本方法简化了人工特征选择部分,直接将最能完整反映应用特征的Opcode操作码作为模型的输入,并采用卷积神经网络模型作为特征选择、提取、分类模型,从而能够有效地减少因为人工特征选择给样本信息量带来的破坏.实验结果表明,相比传统方法,本方法能够获得更高的分类准确度,具有较高的可行性和可操作性.

1 相关工作

根据选择的分类器种类,可以将Android恶意应用检测方法分为基于规则匹配的检测方法、基于传统机器学习分类器的检测方法以及基于神经网络的检测方法.

基于规则匹配的检测方法是目前比较成熟的检测方法,通常应用在各大信息安全公司.其方法是通过人工选择或者借助较为简单的机器辅助方式,建立一个较为完整的恶意应用库,将待检测的样本与恶意应用库中的样本进行比较,如果待检样本存在于恶意应用库则判定其为恶意应用,反之则判定其为良性应用.其具有检测效率高、误报率低的优点,但是需要较多的人力、物力来建立与维护恶意样本库,且对新型的恶意应用以及恶意应用变种反应迟缓,无法作出迅速识别.

随着机器学习的发展,有的研究人员尝试采用机器学习的方法对提取到的特征进行分类.截至目前,研究人员已采用支持向量机(support vector machine, SVM)、朴素贝叶斯(Naive Bayesian, NB)、决策树(decision tree, DT)等主流的机器学习方法对提取的特征进行分类,并取得了不错的分类效果.2015年,Cen等人[3]提取应用申请的权限以及API调用函数作为分类特征,使用信息增益法和卡方校验法作为特征选择方法,通过SVM,DT等分类器进行分类,最终得到95.13%的分类准确度,验证了特征选择有利于提高分类器的分类准确度.Samra等人[4]获取了网络上18 174个恶意应用和电子市场的188 389个良性应用作为分析对象,使用反编译之后的字节序列作为特征,使用k-means分类算法进行分类,最终得到71%的准确度以及71%的召回率.

随着硬件计算能力的迅速提高以及单位计算成本的下降,神经网络逐渐被应用到恶意应用检测领域.目前已有研究人员使用卷积神经网络(convolutional neural network, CNN)、深度置信网络(deep belief network, DBN)等模型替代传统的机器学习方法.2016年,Yuan等人[5]首次将深度学习算法应用于Android恶意应用检测,提出一种新型的恶意应用检测方法.该方法首先提取应用程序的权限和API调用等特征,然后将特征数据处理后输入深度信念网络中进行训练得到最终的检测模型,检测准确度高达96.3%.2017年,Wang等人[6]提出了基于深度学习算法DBN的Android恶意应用检测方法.该方法能够提取Android应用程序的权限和API函数作为特征,并采用DBN对特征进行分析.实验结果表明,隐藏层数为2层时,能够取得最高的准确度93.96%,优于基于SVM分类器的检测性能.同年,Nix[7]采用卷积神经网络检测Android应用程序,并构建深度学习分类器,取得了高达99.4%的正确率.但是其测试样本量较少,只对几个恶意家族的样本进行训练与测试,而针对其他恶意家族的样本没有详细的说明.尽管如此,这些研究均表明,相比传统的机器学习方法,深度学习模型由于能够更深层次地挖掘特征的内部信息,在特征选择方法相同的条件下具有更高的分类准确度.

通过对以往研究进行总结分析,本文发现,在图像识别领域应用较广的卷积神经网络在恶意应用检测领域也具有较好的检测效果.原因在于卷积神经网络能够较好地提取上下文信息,而Android应用代码具有较为明显的空间、时间局限性,能够发挥卷积神经网络的优势.因此相比于其他的深度学习模型,卷积神经网络具有更高的分类准确度.

2 Android恶意应用检测基础

2.1 Android恶意应用特征

当前应用广泛的Android应用特征通常包括应用申请的权限、调用的API序列、数据流向图和应用消耗的电量等信息,其中权限和API序列是研究人员最常用的2种特征.

2.1.1权限

Android恶意应用要想实现恶意行为(比如窃取用户信息或发送付费短信)必须调用系统接口,此时就必须申请相应的权限,比如发送付费短信就必须申请SEND_SMS等权限.这些恶意行为必须申请的权限被称为敏感权限.通常情况下,恶意应用会申请较多的敏感权限,也正是因为这样,敏感权限可以作为Android恶意应用检测的一个常用特征.本文根据前人的研究成果,总结出常用的10种敏感权限,如表1所示.根据应用是否申请以上的敏感权限或组合,可以作为判断Android应用程序是否为恶意应用的衡量标准.

表1 常用的10种敏感权限

2.1.2API调用序列

除了敏感权限,应用程序调用的API序列也可以用于Android恶意应用检测.恶意应用想要完成相应的功能必须通过调用操作系统的API实现.因此研究人员可以根据应用程序调用的API序列推算出该应用程序完成了什么类型的操作,比如是否泄露了敏感信息等行为.

目前针对API的研究主要分为2种方法:一种是将完整的API序列通过n-gram或API调用子树的形式分割成多个API子序列,然后分析子序列中相邻API之间的上下文关系.应用程序想要完成某个恶意行为必须连续调用多个API才可以完成,因此这种结合上下文的检测方法相比于单独分析应用程序是否调用过某个API,可以提高恶意应用的检测准确度.另一种方法是借鉴了信息安全中的污点传播技术.研究人员提前从所有API中选择可以向外传递数据信息的API作为终端节点,将敏感数据标记为污点,跟踪数据的流向,如果敏感数据流向这些终端节点,则可认为敏感数据流向了智能终端之外的设备,该应用存在泄露敏感数据的可能.这种方法对恶意泄露用户私密信息、发送付费短信等恶意应用较为有效,但是针对那些没有数据流流出的恶意应用,比如勒索程序、以损坏智能设备为目的的木马病毒等恶意应用效果并不明显.

2.1.3Opcode操作码

Opcode操作码是一种介于高级语言与机器语言之间的指令,是谷歌公司设计的一种虚拟机指令,可以通过反编译Android应用程序得到.相比于API调用序列,Opcode操作码可以从底层解释应用程序的行为,每一条指令都指向寄存器的操作.由于其划分程度更加细致,因此比API调用序列能够显示出Android应用程序更多的行为特征.基于此,本文将Opcode操作码作为主要的分析对象.与之前研究人员使用Opcode操作码作为分析对象的检测方法不同,本文没有使用n-gram等方法对原始的操作码序列进行切分,而是将全部的操作码序列作为模型输入,利用卷积神经网络自动提取更深层的特征.因此相较于以往的方法,本方法具有更高的分类准确度.

2.2 卷积神经网络

卷积神经网络是受到猫视觉皮层电生理研究的启发而提出的一种人工神经元网络模型.它是一种多层前馈神经网络,主要应用在图像视频、自然语言处理等领域,并取得非常不错的效果.卷积神经网络由卷积层和池化层构成,卷积层相当于建立多个滤波器,每个滤波器是一个2维特征平面,通过滤波器和输入向量作卷积运算,能够提取到输入向量的一种特征,每个特征平面由多个神经元组成.池化层的输入一般为卷积层的输出,根据池化的方式不同可以分为最大池化、平均池化等,池化层可以降低参数的数量,使得训练速度得到提高,同时也可以起到降低特征图的维度,避免过拟合的效果.当经过多个卷积层之后,特征基本被提取出来,这时卷积层的末端连接一个全连接层和一个Softmax分类器,完成最后的预测任务.以往的研究成果表明,卷积网络的深度越深隐藏层数越多,就能够提取越多的抽象特征,最终的分类准确度也越高.但是,随着网络层数增多,训练模型消耗的计算资源以及时间都将大幅度提高.因此,选择一种较为适中的卷积网络层数也是本文需要研究的一个方面.

3 实验方法与结果分析

3.1 实验方法

本方法首先使用反编译工具对Android应用程序反编译,得到Opcode操作码;然后对Opcode操作码进行预处理,并将处理之后的操作码映射到向量空间;再将空间向量作为卷积神经网络的输入,实现神经网络的学习和分类.其流程图如图1所示:

图1 实验流程图

3.1.1实验环境

本文使用的实验样本包括以下2个部分:1)从VirusTotal等Android恶意应用库下载的6 351个Android恶意应用,标记为恶意样本;2)从豌豆荚等常用Android应用市场上下载的5 996个Android应用,标记为良性样本.将这些实验样本按照4∶1的比例划分为样本训练集和测试集.本文使用反编译工具apktool以及dex2Jar将实验样本反编译为Opcode操作码形式,将其作为实验的主要分析对象.

然后,本文在TensorFlow框架下完成基于卷积神经网络的分类器的训练和预测分类的任务.TensorFlow是谷歌公司发布的一款基于数据流图计算的开源人工智能学习系统,其支持卷积神经网络(convolutional neural network, CNN)、循环神经网络(recurrent neural network, RNN)、长短期记忆网络(long short-term memory, LSTM)等在图像、音频、自然语言处理领域应用较广的深度神经网络模型.并提供了一系列的实用接口供用户调用,用户可以方便快捷地创建、训练、测试模型,提高研究效率.

3.1.2Opcode操作码预处理

反编译出的原始Opcode操作码形式比较多样,据统计,经过反编译环节产生的Opcode操作码总共有1万余种形式(包含大量噪声、冗余).如果将原始Opcode操作码直接作为输入训练神经网络会造成矩阵稀疏的问题,严重降低训练效率.更为重要的是,卷积神经网络无法有效挖掘其中的隐藏特征,不利于模型分类的准确度.因此,对原始Opcode操作码进行预处理十分必要.

根据粒度的不同,可以将Opcode操作码划分为6类、24类和256类.本文根据不同的划分方法,对Opcode操作码进行预处理,并将其分别输入到卷积神经网络中训练.实验结果表明,当操作码划分为256类时,分类准确度最高,具体实验结果在3.2节中详细说明.这也在一定程度上说明将操作码划分得越精细,卷积神经网络越能够挖掘其内部的细微特征,得到的分类器准确度也会越高.但是当操作码划分颗粒度过小时,反而会影响特征提取部分的性能,造成分类准确度下降.

3.1.3操作码向量空间

由于卷积神经网络的输入为空间矩阵形式,因此还需要将操作码从字节形式映射为空间向量形式.本文首先建立一个操作码字典,为每一个操作码赋予一个唯一的编号,然后通过词向量转换工具wordtovector,将操作码转换成词向量的形式.本文使用的词向量长度为8,即将每一个操作码映射为一个8维的空间向量.假设样本应用由N个操作码组成,则可将该样本应用转换成总长度为8×N的空间向量.由于各个样本的操作码数量不等,这里采用填充的方法保证样本向量的长度相同.首先,设置规范长度L,如果样本的空间向量长度小于L,则在空间向量的末端添加0,直至向量长度达到L;如果样本的空间向量长度大于L,则截断L之后的向量,保留前长度为L的空间向量作为样本的空间向量.通过统计不同应用样本的空间向量长度,本文以训练样本的平均长度作为规范长度,L的值设置为250 000.然后将样本的一维空间向量转换成500×500的2维矩阵的形式,作为卷积神经网络的输入部分,转换过程如图2所示:

3.1.4卷积神经网络训练

本文使用卷积神经网络作为特征提取和分类模型,卷积层和池化层的不同排列方式都会影响最终的分类效果.本文使用不同层数的卷积神经网络作为实验模型,验证卷积层数对分类准确度的影响.借鉴卷积神经网络在图像处理领域的应用,本文在卷积神经网络的末端使用全连接层和Softmax分类器进行分类.

本文在TensorFlow框架下建立卷积神经网络计算图,将长度为L的样本空间向量作为模型输入,顺序进入卷积层、池化层、卷积层、池化层、全连接层,最后使用Softmax分类器对样本进行分类.由于样本数量很大,如果在训练过程中每一次迭代过程都使用全部的样本进行训练,时间复杂度将特别大,因此,我们随机选取50个样本作为一次迭代的训练样本,总共迭代次数为500,模型如图3所示:

图3 卷积神经网络模型图

3.2 实验结果分析

3.2.1分类器性能评估

本文使用机器学习领域流行的混淆矩阵作为分类器分类性能的评估方法.混淆矩阵是一种特定的矩阵,用来呈现算法性能的可视化效果,通常用于监督学习.其每一列代表实际的类别,每一行代表预测的类别.混淆矩阵的形式如表2所示:

表2 混淆矩阵

其中TP(true positives)表示被正确识别为恶意应用的恶意应用数;TN(true negatives)表示被正确识别为安全应用的安全应用数;FP(false positives)表示被错误识别为恶意应用的安全应用数;False Negatives(FN)表示被错误识别为安全应用的恶意应用数.由混淆矩阵可以计算得到以下的分类器评估参数:

3.2.2Opcode操作码多粒度划分实验结果分析

在本节中,本文验证不同粒度的Opcode操作码对最终分类准确度的影响.我们分别将Opcode操作码划归为6类、24类以及256类,并将其映射到空间向量,使用相同的卷积神经网络模型训练样本,得到的分类准确度如图4所示.由图4可知,将原始Opcode操作码划分为6类时,分类的准确度为80.46%,将原始Opcode操作码划分为24类时,分类准确度为92.16%,将原始Opcode操作码划分为256类时,分类准确度为94.12%,而不对原始Opcode操作码进行划分时,分类准确度仅为70.12%.

图4 Opcode操作码多粒度划分分类效果图

从图4我们可以看出,Opcode操作码划分得越细致,卷积神经网络获得的信息量越多,分类准确度也有一定程度的提升.而当Opcode的划分过于细致时,分类器虽然能够获取更多的信息量,但是由于输入数据变得异常稀疏,特征提取的难度也变得更大,分类的准确度反而降低.

3.2.3卷积神经网络深度对分类准确度的影响

在本节中,我们参考卷积神经网络在图像识别领域的应用,选取了几种卷积网络模型进行实验.首先是单卷积层、单池化层的卷积神经网络.这种网络模型的优点是训练参数少,训练速度快,但同时网络没有深度挖掘输入的内部特征,因此分类准确度低.然后,我们使用卷积层、池化层、卷积层、池化层的神经网络,相比于第1种模型,这种模型加深了卷积网络的深度,因此在分类准确度上有了较大程度的提高.最后我们使用卷积层、卷积层、池化层、卷积层、池化层这种网络深度更深的模型进行训练,具体的分类准确度如图5所示:

图5 卷积神经网络不同层数分类效果图

由图5可知,当使用单卷积层时分类的准确度为81.10%;当使用2层卷积层时,分类的准确度为94.12%;当使用3层卷积层时,分类的准确度为94.03%,与使用2层卷积层的分类准确度大致相同,但是时间消耗大幅度提升.因此结合准确性和计算代价2方面进行权衡,本文最终选取2层卷积层的卷积神经网络作为目标模型.

4 结 论

本文提出了一种基于卷积神经网络的Android恶意应用检测方法.首先,通过对Android应用程序进行反编译,提取其Opcode操作码;然后,在预处理环节,本文使用不同的细粒度对操作码进行合并操作,并探讨了不同粒度对分类准确度的影响;最后,在模型训练阶段,本文探讨了不同深度的卷积网络对分类准确度的影响.本文提出的方法简化了人工处理Opcode操作码的工作,通过直接将操作码向量输入到神经网络模型,由网络自动挖掘其中特征,最终准确度达到94.12%,说明该方法能够学习到更好的分类特征,具备一定的先进性.

下一步工作将从以下几个方面展开:首先,由于应用样本的大小存在较大程度的差异,本文使用填充的方法以保持样本向量长度的一致,这种操作导致很多长度较长的大样本被人为截断,损失了一定的信息量,会对分类的准确度造成一定的影响;其次,在研究过程中发现,某些良性应用实现的功能与恶意应用实现的功能极度相似,比如自动发送短信以及获取联系人信息等功能,极易使分类器产生误判,这也是今后需要研究解决的问题.

猜你喜欢

准确度分类器卷积
基于3D-Winograd的快速卷积算法设计及FPGA实现
从滤波器理解卷积
幕墙用挂件安装准确度控制技术
基于傅里叶域卷积表示的目标跟踪算法
BP-GA光照分类器在车道线识别中的应用
加权空-谱与最近邻分类器相结合的高光谱图像分类
结合模糊(C+P)均值聚类和SP-V-支持向量机的TSK分类器
动态汽车衡准确度等级的现实意义
基于LLE降维和BP_Adaboost分类器的GIS局部放电模式识别
一种基于卷积神经网络的性别识别方法