一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于多模态神经网络的安卓恶意应用程序识别方法

2022-05-18 02:50:07 来源:中国专利 TAG:


1.本发明属于网络安全技术领域,特别涉及一种安卓恶意应用程序识别方法,可用于对恶意应用程序的检测和识别。


背景技术:

2.安卓android系统是目前移动终端上搭载的最为流行、使用最为广泛的移动操作系统,2021年android操作系统占据的智能手机市场超过80%。随着android应用的蓬勃发展,恶意软件也在迅速兴起,在种类繁多的android应用软件中充斥着大量的恶意软件。android恶意软件不仅对用户个人隐私信息造成了严重威胁,甚至会危害国家信息安全。随着其攻击技术的日趋成熟,android恶意软件越来越难以检测。因此,如何有效地识别android恶意应用程序是目前急需解决的问题。
3.如今,随着深度学习的飞速发展,深度学习方法被大量地应用到android恶意软件识别当中,基本思想是建立一个基于提取特征的分类系统,对未知的应用进行检测并识别其类型。在android恶意软件识别方面,深度学习的方法精度高,而且可以实现自动化检测,其在安全领域越来越被人认为是强大且有效的工具。
4.中南大学在其申请号为cn202110628306.1的专利文献中提出一种可解释的基于图嵌入的android恶意软件自动检测方法。该方法从函数调用图的角度出发,挖掘函数调用图中函数节点对应的敏感api序列,以敏感api序列作为特征对基于注意力机制的神经网络进行训练,使用训练好地神经网络实现恶意软件的识别和检测。该方法由于只以单一的敏感api序列作为识别恶意程序的特征,因而无法准确地对恶意应用程序进行识别。
5.杭州电子科技大学在其申请号为cn202011387081.7的专利文献中提出一种android恶意软件检测方法。该方法将应用程序的权限和api调用序列特征分别作为随机森林和卷积神经网络模型的输入,对随机森林和卷积神经网络模型分别进行训练,将两个模型分别训练好之后,再将二者的预测结果进行线性结合计算最终的预测结果。该方法由于对两个模型分别进行训练,故无法对应用程序的两种特征进行有效的耦合,因而降低恶意应用程序的识别精度,造成对恶意应用程序的误报和漏报问题。


技术实现要素:

6.本发明的目的在于针对上述现有技术的不足,提出一种基于多模态神经网络的安卓恶意应用程序识别方法,以对应用程序的不同特征进行有效融合,精确识别恶意程序的恶意行为,提高对恶意应用程序的检测精度。
7.本发明的技术思路是:通过构建应用程序的抽象流图,并提取应用程序的关键调用路径,以充分反映应用程序的语义和结构特征;通过使用抽象流图和关键调用路径两种不同的特征训练多模态神经网络,以有效融合应用程序的不同特征,减少因不同特征之间的相关性而产生的冗余信息,实现对恶意应用程序的准确识别。
8.根据上述思路,本发明的实现方案包括如下:
9.1)从相关样本库和国内外主流应用市场下载恶意和良性的安卓android应用软件样本,其中良性样本和恶意样本所占比例为1∶1,每种类型的样本数量均不少于a个,a为大于等于1的正整数;
10.2)构建一个与android应用程序恶意行为和漏洞有关的关键应用程序接口api列表;
11.3)生成所有软件样本的调用跟踪图;
12.3a)对(1)中的android应用软件样本进行反编译处理,将反编译后的结果作为修改后的intellidroid工具输入,使其能输出以一个应用程序入口点为源的所有调用路径,作为调用跟踪图的一个子图;
13.3b)通过ic3工具提取android应用软件样本的组件间交互icc信息,获取其中通过intent进行组件间交互icc的函数及与该函数进行交互的组件,据此将不同子图中通过intent进行组件通信的节点连接起来,生成整个android应用软件样本的调用跟踪图;
14.4)根据关键api列表和调用跟踪图生成所有软件样本的关键调用路径:
15.对于一个软件样本的调用跟踪图,从其入口点开始进行深度优先遍历,在遍历过程中判断遍历得到的函数是否属于关键api列表体现android漏洞或恶意行为的函数:
16.若是,则顺序记录遍历过程中得到的所有函数,生成一条关键调用路径;
17.若不是,则继续遍历,直至对调用跟踪图的所有入口点完成深度优先遍历;
18.5)生成所有软件样本的抽象流图;
19.5a)对调用跟踪图的节点进行分割生成抽象流图的节点;
20.5b)将4)中关键调用路径入口点中的第一个节点和关键应用程序接口api的最后一个节点抽象为关键边的起点和终点,生成关键边,并从调用跟踪图中提取intent发送边、邻边、icc边、隐式邻边,再获取这5种边的反向边,将这10种边添加到抽象流图中,作为抽象流图的边集,并删去抽象流图中没有边连接的孤立节点;
21.5c)从android官网上获取所有操作码opcode的集合,并将其中的opcode编码为数字,获取操作码opcode的全局字典,根据opcode字典为所有节点添加标签,通过对边类型进行one-hot编码为边添加标签,构成抽象流图;
22.6)生成4)的关键调用路径的操作码opcode序列,并对其进行分割和编码,得到向量化的关键调用路径;
23.7)将软件样本的抽象流图作为多模态神经网络子网络图神经网络gnn的输入,将软件样本的关键调用路径的操作码opcode序列作为多模态神经网络子网络长短期记忆网络lstm的输入,使用反向传播算法和梯度下降法对多模态神经网络整体进行训练,得到训练好的多模态神经网络;
24.8)对未知安全性的android应用程序,采用与3)-5)的相同方法,生成待检测应用程序的抽象流图,采用6)方法生成该应用程序向量化的关键调用路径,并将二者输入到训练好的多模态神经网络中,输出待分类应用程序的良性和恶意概率,取概率最大的结果为最终的判别类型,完成对恶意程序的识别。
25.本发明与现有技术相比,具有以下优点:
26.第一,本发明通过构建android应用程序的抽象流图和完整的关键调用路径,提取和抽象了应用程序的敏感api调用行为及程序的组件间交互icc信息,可以更加准确地描述
恶意程序的行为特征,对良性应用程序和恶意应用程序具有更高度的区分性。
27.第二,本发明通过使用应用程序的抽象流图和关键调用序列两种不同的特征对多模态神经网络进行训练,得到两种特征中最具差异性的信息,可以减少因不同特征之间的相关性而产生的冗余信息,同时由于对两种不同的特征进行有效的耦合,进一步提高了对恶意程序的识别精度。
附图说明
28.图1为本发明的实现流程图;
29.图2为本发明中生成跟踪调用图的子流程图;
30.图3为本发明中生成抽象流图的子流程图;
31.图4为本发明中生成的抽象流图示意图;
32.图5为本发明中对调用路径向量化的子流程图。
具体实施方式
33.下面结合附图对本发明的实施例作进一步详细描述。
34.参照图1,本发明的实现步骤如下:
35.步骤1,下载和收集良性和恶意的android应用程序样本。
36.从相关样本库和国内外主流应用市场下载恶意和良性的android应用软件样本,其中良性样本和恶意样本所占比例为1:1。
37.本实施例是从公开网站收集良性android应用程序共9873个,从cicinvesandmal数据集、drebin数据集、droidanalytics数据集、virusshare样本库收集恶意android应用程序共9873个。
38.步骤2,构建一个与android应用程序恶意行为和漏洞有关的关键api列表。
39.2.1)利用网络爬虫技术,从cve官网和exploit database网站上爬取有关描述android漏洞的语句,并从stack overflow网站中收集易受攻击的android代码样本,建立描述android漏洞的语句库:malicious_lib={v1,v2,...,vi,...,vn},其中,vi为用来描述第i个android漏洞的描述语句,1≤i≤n,n为描述android漏洞的语句总数;
40.2.2)对malicious_lib进行文本挖掘,从中提取出关键词,计算关键词的词频-逆文档频率p,用于评估一个词对于一个文件集或一个语料库中的重要程度,其计算如下:
41.2.2.1)计算vi中特定关键词的词频:其中,h为该关键词在描述语句vi中出现的次数,s为语句vi中所包含的总词数;
42.2.2.2)计算vi中特定关键词的逆文档频率:其中,b为包含特定关键词的语句总数;
43.2.2.3)根据词频tf和逆文档频率idf计算vi中特定词汇的词频-逆文档频率p:
44.p=tf*idf,其中*表示乘法;
45.2.3)通过2.2)的过程,计算除java关键词、内置类型以及变量名的其他关键词的词频-逆文档频率p,并将这些词汇的词频-逆文档频率p按照从大到小排序,最终收集和排
序10782个关键词;
46.2.4)选取排名前的150个关键词,这些排名靠前的关键词具有良好的android应用程序类别区分能力,通过这些关键词对官方在线文档和现成工具中的应用程序接口api列表进行搜索,从中找出所有包含关键词的api,最终得到与android漏洞和恶意行为关联的关键api列表,该列表包含的关键api共632个。
47.步骤3,对步骤1中所有软件样本生成其调用跟踪图。
48.参照图2,本步骤的具体实现如下:
49.3.1)对intellidroid工具进行修改,并使用修改后的intellidroid工具生成调用跟踪图的子图:
50.对android应用程序包apk文件进行反编译处理,将反编译后的结果作为intellidroid工具的输入,由于intellidroid工具输出的文件中只包括一条调用路径的入口点和最终的敏感api调用,因而需要对intellidroid工具进行修改,使其能输出以一个应用程序入口点为源的所有完整调用路径,作为调用跟踪图的一个子图;
51.3.2)通过ic3工具提取android应用程序的组件间交互icc信息,获取其中通过intent进行组件间交互icc的函数及与该函数进行交互的组件,将组件间交互icc的函数作为icc交互边的起点,将该组件在启动时执行的oncreate函数作为icc交互边的终点,通过icc交互边将不同子图中通过intent进行组件通信的节点连接起来,生成整个android应用程序的调用跟踪图。
52.步骤4,根据关键api列表和调用跟踪图生成所有软件样本的关键调用路径:
53.4.1)对一个软件样本的调用跟踪图,从其调用跟踪图的入口点开始进行深度优先遍历,在遍历过程中判断遍历得到的函数是否属于关键api列表:
54.若是,则顺序记录遍历过程中得到的所有函数,生成一条关键调用路径;
55.若不是,则继续遍历,直至对该调用跟踪图的所有入口点完成深度优先遍历;
56.4.2)重复上述过程,直至对所有软件样本调用跟踪图完成深度优先遍历,得到所有软件样本的关键调用路径。
57.步骤5,生成所有软件样本的抽象流图。
58.参照图3,本步骤的具体实现如下:
59.5.1)对上述调用跟踪图的节点进行分割,生成抽象流图的节点;
60.5.1.1)借助androguard库对android应用程序反编译,得到该应用程序中每个函数的操作码,可以获得调用跟踪图节点对应的操作码opcode;
61.5.1.2)在调用跟踪图的节点内部判断操作码opcode是否调用了用户自定义函数或发送intent的应用程序接口api:
62.若是,则在调用处对该函数的opcode进行分割,将分割后得到的opcode序列作为抽象流图的节点;
63.若没有调用,则不进行分割;
64.5.2)根据步骤3中调用跟踪图和步骤4中关键调用路径获得抽象流图的边集:
65.5.2.1)将关键调用路径入口点中的第一个节点和关键应用程序接口api的最后一个节点抽象为关键边的起点和终点,生成关键边;
66.5.2.2)从调用跟踪图入口点的第一个节点起进行深度优先遍历,将入口点的第一
个节点作为intent发送边的起点,若在遍历过程发现以调用发送intent的api为结尾的节点,则停止遍历,并将该节点作为intent发送边的终点,生成intent发送边;若在遍历过程没有发现,则继续遍历,直至对调用跟踪图的所有入口点完成遍历;
67.5.2.3)判断抽象流图的节点是否从同一个调用跟踪图的节点分割得到:
68.若是,则使用有向边将这些顺序相邻的抽象流图节点连接起来,将这种边称为邻边;
69.若否,则不进行连接;
70.5.2.4)将android应用程序包apk文件作为ic3的输入,获取ic3输出的结果,提取其中通过intent进行组件间通信icc的函数及与该函数进行交互的组件,将该函数中以调用发送intent的api为结尾的节点作为抽象流图中icc边的起点,将该组件启动时执行的oncreate函数的第一个节点作为icc边的终点,生成icc边;
71.5.2.5)将上述生成的一条intent发送边的起点作为隐式邻边的起点,若抽象流图中的一个节点同时满足:与该intent发送边的起点在同一组件内;在该intent发送边的起点之后被执行;调用了接收intent的应用程序接口api这三个条件,则将这种节点作为隐式邻边的终点,生成隐式邻边;
72.图4为一个示例程序的抽象流图,其包含上述五种不同的边,其中边上标注

a’的边为关键边,边上标注

b’的边为intent发送边,边上标注

e’的边为邻边,边上标注

c’的边为icc边,边上标注

d’的边为隐式邻边;该抽象流图中节点格式为“函数名_v_数字”,表示应用程序一个函数中的第几个节点;
73.5.2.6)获取上述这5种边对应的反向边,即关键边的反向边,intent发送边的反向边,邻边的反向边,icc边的反向边,隐式邻边的反向边,将这5种边及5种反向边共10种边作为抽象流图的边集,并删去所有节点中没有边连接的孤立节点;
74.5.3)对删去孤立节点后的所有节点和边添加标签构成抽象流图:
75.5.3.1)从android官网上获取所有操作码opcode的集合,其中共包含232个操作码,对这些操作码进行顺序编码,即将操作码集合的第一个操作码编码为1,将第二个操作码编码为2,依此类推,将所有opcode编码为数字;
76.5.3.2)根据上述编码后的opcode集合对每个节点的opcode序列进行编码,将节点中所有opcode对应的编码值作为节点的标签,由于节点中opcode数并不一致,生成的节点标签长度也不一致,对长度大于d的节点标签进行截断处理,对长度小于d的节点标签进行补齐处理,由于0不表示任何信息,因而用0将节点标签补齐,使节点标签长度一致;
77.5.3.3)通过对边的类型作one-hot编码生成边的标签,将上述10种边类型从1到10进行编号,边的标签为一个长度为10的向量,向量中只有边类型对应的位处为1,其余位都为0。
78.步骤6,将关键调用路径的opcode序列向量化。
79.在步骤5构建的抽象流图中,由于其关键边只抽象了步骤4中关键调用路径的起点和终点,忽略了关键调用路径中重要的时序信息,因此在本步骤中将完整的关键调用路径进行向量化,以提取对关键应用程序接口api的调用关系和关键调用路径中重要的时序信息。
80.参照图5,本步骤的具体实现如下:
81.6.1)对于一条关键调用路径,从入口点开始对这条路径函数中的每个节点进行判断,判断其是否以调用下一个函数为结尾:
82.若是,则进入下一个函数中;
83.若否,则将该节点的opcode添加到opcode序列中,并进入这个函数的下一个节点;
84.6.2)循环执行6.1),直至遍历完这条调用路径中的所有函数,得到一条关键调用路径的opcode序列;
85.6.3)由于关键调用路径的opcode序列长度有很大差别,为达到统一输入数据格式的目的,对关键调用路径的opcode序列采取分割策略使其数据格式统一,判断关键调用路径opcode序列长度是否大于分割长度length=100:
86.若是,则从末端起将关键调用路径的opcode序列分割为若干长度为length=100的序列,起始部分剩余的opcode序列将被舍弃;
87.若否,则保留这条关键调用路径的全部opcode;
88.6.4)利用opcode字典对分割后的opcode序列进行编码操作,将opcode序列的每个操作码替换为其对应的编号,得到向量化的opcode序列。
89.步骤7,根据所有样本的抽象流图和向量化的关键调用序列,使用反向传播算法和梯度下降法对多模态神经网络进行训练,得到训练好的多模态神经网络。
90.7.1)将良性android应用程序的抽象流图和向量化的关键调用路径标注为良性,将恶意android应用程序的抽象流图和向量化的关键调用路径标注为恶意,得到带标签的抽象流图和带标签的向量化的关键调用路径;
91.7.2)根据多模态神经网络对输入的特征能充分进行学习来设置多模态神经网络的最大训练次数e,对多模态神经网络参数随机初始化,将带标签的抽象流图输入到多模态神经网络的子网络图神经网络gnn中,将带标签的向量化的关键调用路径输入到多模态神经网络的子网络长短期记忆网络lstm中,本实施例设但不限于最大训练次数e=25;
92.7.3)子网络图神经网络gnn和子网络长短期记忆网络lstm分别输出一个对android应用程序的高级表示向量,将这两个子网络的向量表示进行前后拼接,作为一个全连接层的输入,全连接层的输出经过一个softmax层得到多模态神经网络的最终输出,即样本软件的良性概率和恶意概率;
93.7.4)取良性概率和恶意概率中两者较大的概率类别作为多模态神经网络对软件样本的预测结果,通过下式计算交叉熵损失l:
94.其中n为所有软件样本的个数,y(i)为第i个样本软件对应的标签,为多模态神经网络对第i个样本软件标签对应类别的预测概率;
95.7.5)根据反向传播算法由深到浅计算网络中所有参数的梯度值;
96.7.6)计算评价多模态神经网络性能的指标f1:
97.7.6.1)将多模态神经网络对样本软件的预测结果进行分类标记:
98.若多模态神经网络把原本的恶意软件预测为恶意,记为真正例tp;
99.若多模态神经网络把原本的良性软件预测为恶意,记为假正例fp;
100.若多模态神经网络把原本的恶意软件预测为良性,记为假负例fn;
101.7.6.2)根据tp,fp计算预测精确率:
102.7.6.3)根据tp,fn计算召回率:
103.7.6.4)根据精确率p和召回率r计算评价gnn网络性的指标:
[0104][0105]
7.7)沿着网络中参数梯度的反方向,对网络中的参数进行迭代更新,使损失函数逐渐减小;
[0106]
7.8)循环执行7.3)-7.7),直至达到最大的训练次数,从e次训练中选择评价指标f1最优的网络模型,作为训练好的多模态网络模型。
[0107]
步骤8,通过训练好的多模态神经网络对android应用程序进行分类。
[0108]
8.1)对未知安全性的android应用程序,通过步骤3至步骤5,生成待检测应用程序的抽象流图;
[0109]
8.2)采用与步骤6相同的方法生成该应用程序的向量化的关键调用路径,并将该向量化的关键调用路径和8.1)生成的抽象流图输入到训练好的多模态神经网络中,输出待分类应用程序的良性和恶意概率,取概率最大的结果为最终的判别类型,完成对恶意程序的识别。
[0110]
以上描述仅是本发明的一个具体实例,并未构成对本发明的任何限制,显然对于本领域的专业人员来说,在了解了本发明的内容和原理后,都可能在不背离本发明原理、结构的情况下,进行形式和细节上的各种修改和改变,但是这些基于本发明思想的修正和改变仍在本发明的权利要求保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献