一种Android恶意软件检测方法技术

技术编号:27656854 阅读:7 留言:0更新日期:2021-03-12 14:19
本发明专利技术公开了一种结合权限和API调用序列特征的Android恶意软件检测方法。本发明专利技术提出分别采用随机森林和卷积神经网络模型训练分类器,最后通过线性结合的方法计算最终的预测结果。本发明专利技术利用词嵌入技术(Skip‑gram)表示每个API,在降低表示向量维度的同时保留了API之间的语义信息,使得CNN模型可以捕获丰富的n‑gram特征;分别训练了两个分类器,并使用线性组合的方法综合得到最后的预测结果能够提高恶意软件检测的准确性。

【技术实现步骤摘要】
一种Android恶意软件检测方法
本专利技术涉及Android平台上恶意代码检测研究领域,尤其涉及一种结合权限和API调用序列特征的Android恶意软件检测方法。
技术介绍
近些年来,随着移动设备的快速发展,移动应用软件在人们生活和工作中起到了越来越重要的作用。通常,用户期望使用的应用是安全的、可靠的,然而在种类繁多的应用软件中充斥着大量的恶意软件,不断威胁着用户的信息安全。恶意软件(俗称“流氓软件”)是指在未明确提示用户或未经用户许可的情况下,在用户计算机或其他终端上安装运行,侵犯用户合法权益的软件。在2017年第一季度,GDATA研究人员发现了大约750,000个新的恶意软件。同样地,卡巴斯基官方报告显示,在2020年第一季度已检测出1,152,662个恶意软件安装包,同比上一年新增171,669个。因此,对于恶意软件的有效检测是恶意代码检测研究领域中的重要研究问题。通常来说,恶意软件检测技术主要可以分为静态检测和动态检测这两类技术。静态检测技术是指在不运行代码的情况下,利用反编译技术,和代码控制流图分析、数据流分析等方法对软件代码进行检测。该方法具有安全性高、检测速度快、代码覆盖率高等优点,但检测的准确度较低。动态检测技术是指通过运行代码,并记录代码运行过程中的一系列程序行为,如函数调用顺序、文件访问、网络使用等等,并利用这些信息对软件代码进行检测。与静态检测技术相比,该方法优势在于检测恶意软件的准确度较高,但存在代码覆盖率低、检测效率低等缺点。
技术实现思路
为了克服现有技术的不足,本专利技术提供一种结合权限和API调用序列特征的Android恶意软件检测方法,可有效解决上述问题。本专利技术具体采用的技术方案如下:步骤(1)给定n个Android应用软件安装包(apk)集合A=(A1,A2,…An),将其中每个apk表示成Ai=<apkId,mainfest,dex,lable>,i=1,2…n,其中apkId表示apk编号,mainfest表示apk中的清单文件(包含应用程序的配置信息),dex表示apk中的.dex后缀文件(包含应用程序中所有的代码),label表示apk的类别,即恶意的或非恶意的。步骤(2)对每个apk进行特征抽取。首先,从mainfest文件中抽取所有的请求的权限信息,记作permission=<per1,per2,…perk>,其中k表示该apk请求权限的个数;然后,利用Androguard逆向工程工具反编译dex文件,识别每个指令代码并抽取所有的API调用序列,记作sequence=<API1,API2,…APIm>,每个API表示成APIj=<packageName,className,functionName>,j=1,2,…m,其中packageName表示该API的包名,className表示该API的类名,functionName表示该API的函数名。通过特征抽取后,每个apk可以进一步表示为Ai=<apkId,permission,sequence,lable>,i=1,2…n。步骤(3)对于permission和sequence进行预处理。根据官方文档定义的权限列表,过滤permission中第三方或自定义的权限;通过识别API中的packageName,过滤sequence中非官方的API。经过预处理后,每个apk可以表示为Ai=<apkId,prePermission,preSequence,lable>,i=1,2…n。步骤(4)对权限特征进行向量化表示。首先将数据集中所有样本(一个apk文件代表一个样本)请求的不同权限,构建一个权限字典;然后利用one-hot编码方法将prePermission用向量形式表示,记作Vp=[x1,x2,…xc],其中c表示字典的大小,xi代表字典中的第i个权限,xi=0表示该prePermission中不包含该权限,xi=1则表示该prePermission中包含该权限。步骤(5)对API调用序列特征进行向量化表示。将每个API看作不同的单词,一个API序列则可以看作一个句子,因此在本专利技术中,参考了自然语言处理中的词嵌入技术,对每个API进行表示。首先合并集合A上所有的preSequence,生成一个语料库Q=(preSequence1,preSequence2,…preSequencen)。然后利用Word2Vec中的Skip-gram模型对Q中的单词进行训练,得到每个API的向量表示VAPI=[v1,v2,…vd],其中d代表向量的维度。步骤(6)数据集划分。将数据集划分为十折,其中九折作为训练集ξtrain,剩下一折作为测试集ξtest。步骤(7)利用随机森林(RandomForest,RF)模型训练一个基于权限的分类器MRF。随机森林算法会生成多颗决策树,并对数据进行分类预测,最后通过投票给出最后的分类结果,具体步骤如下:7-1,设置模型参数:Numberoftrees(决策树的数量)和LeafMin(最小的叶子节点数量);7-2,将训练集ζtrain所有权限的向量表示Vp输入到RF模型;7-3,有放回的随机抽样(bagging)生成每棵树的训练数据,未被抽取的样本形成OOB数据集;7-4,在每棵决策树分裂节点时,计算不同划分属性下的信息增益,选择最佳的分裂属性,进行划分,重复该过程直到不能够再分裂为止;7-5,将OOB数据集输入计算决策树集合中,根据其分类的正确率,以此作为每棵决策树的权重,生成随机森林模型MRF,即分类器模型MRF7-6,将测试集ξtest输入到模型MRF中,得到每个apk的预测结果RRF。步骤(8)利用卷积神经网络(ConvolutionalNeuralNetworks,CNN)模型训练一个基于API调用序列的分类器MCNN,具体步骤如下:8-1,设置模型参数:Numberoftheconvolutionfilters(卷积核的数量)、Convolutionfiltersizes(卷积核大小)、Numberofepochs(CNN训练的迭代次数)、Batchsize(批量大小)、Embeddingsize(词向量维度)和Dropoutrate;8-2,将训练集ξtrain所有API的向量表示VAPI输入到CNN模型;8-3,对于训练集ξtrain中数据,首先利用三个不同尺寸的卷积核执行卷积操作,然后对每个卷积结果进行最大池化1-Max操作,输出O1,O2,O3;8-4,先对O1,O2,O3进行展平操作,转化为一维的向量,再输入到全连接层;在全连接层到输出层中采用激活函数Softmax,输出分类结果Cp;8-5,卷积神经网络模型通过损失函数Loss计算分类结果Cp和真实值Ct之间的损失,即Cp和Ct之间差值,不断优化模型中的参数;8-6,本文档来自技高网...

【技术保护点】
1.一种Android恶意软件检测方法,其特征在于包括如下步骤:/n步骤(1)给定n个Android应用软件安装包apk集合A=(A

【技术特征摘要】
1.一种Android恶意软件检测方法,其特征在于包括如下步骤:
步骤(1)给定n个Android应用软件安装包apk集合A=(A1,A2,…An);
将每个apk表示成Ai=<apkId,mainfest,dex,lable>,i=1,2…n;
其中apkId表示apk编号,mainfest表示apk中的清单文件,dex表示apk中的.dex后缀文件,label表示apk的类别,即恶意或非恶意;
步骤(2)对每个apk进行特征抽取
从mainfest文件中抽取所有的请求的权限信息,记作permission=<per1,per2,…perk>,其中k表示该apk请求权限的个数;
利用Androguard逆向工程工具反编译dex文件,识别每个指令代码并抽取所有的API调用序列,记作:
sequence=<API1,API2,…APIm>
每个API表示成:
APIj=<packageName,className,functionName>
其中packageName表示该API的包名,className表示该API的类名,functionName表示该API的函数名,j=1,2,…m;
通过特征抽取后,每个apk进一步表示为:
Ai=<apkId,permission,sequence,lable>,i=1,2…n;
步骤(3)对于permission和sequence进行预处理;
步骤(4)对权限特征进行向量化表示;
步骤(5)对API调用序列特征进行向量化表示;
步骤(6)数据集划分,将集合A分为训练集ξtrain和测试集ξtest;
步骤(7)利用随机森林模型训练一个基于权限的分类器MRF;
步骤(8)利用卷积神经网络模型训练一个基于API调用序列的分类器MCNN;
步骤(9)根据MRF和MCNN对测试集ξtest预测,得到相应的预测结果RRF和RCNN后,通过线性结合的方法计算最终的检测结果。


2.根据权利要求1所述的一种Android恶意软件检测方法,其特征在于步骤(3)具体如下:
根据官方文档定义的权限列表,过滤permission中第三方或自定义的权限;
通过识别API中的packageName,过滤sequence中非官方的API;
经过预处理后,每个apk表示为:
Ai=<apkId,prePermission,preSequence,lable>。


3.根据权利要求2所述的一种Android恶意软件检测方法,其特征在于步骤(4)具体如下:
将数据集中所有样本请求的不同权限构建成权限字典,其中一个apk文件代表一个样本;
利用one-hot编码方法将prePermission用向量形式表示,记作Vp=[x1,x2,…xc];
其中c表示字典...

【专利技术属性】
技术研发人员:俞东进俞海华陈信范旭麟
申请(专利权)人:杭州电子科技大学
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1