基于敏感调用路径的Android恶意软件检测方法与流程

文档序号:17539415发布日期:2019-04-29 14:23阅读:171来源:国知局
基于敏感调用路径的Android恶意软件检测方法与流程

本发明属于信息安全技术领域,特别涉及一种android恶意软件检测方法,可用于移动终端的自动化检测和android应用市场的审查和分析。



背景技术:

android系统是目前移动终端上搭载的最为流行,使用最为广泛的移动操作系统。随着android应用深刻融合人类生活,恶意软件也在兴起。根据mcafeelabs2018年3月份最新发布的威胁报告,截止2017年年底移动恶意软件的总数量已经将近2500万个,全球移动恶意软件的感染率超过了11%。用户一旦安装和感染了恶意程序,所有的隐私数据将面临着被窃取和操纵的风险,危害十分巨大。

android平台拥有海量的应用程序,要对每一个应用程序进行人工分析,判断是否为恶意软件,代价十分巨大导致难以实现,人工分析也存在大量的不确定性。使用机器学习的方法自动检测android应用的恶意行为,不仅快速而且高效。随着恶意软件的不断发现,训练模型也可以进一步优化,判断应用程序恶意性也将更为准确。但是,使用机器学习的关键是如何提取合适的特征,以及训练出合适的分类模型。特征的准确程度直接影响分类模型的精确性。现有方案通常将敏感api的使用集合或者权限使用集合作为恶意软件特征,存在粗粒度和精确性较低的问题。

专利申请号为201510282507.5的“基于权限的android恶意软件混合检测方法”,该方法是根据应用程序申请的权限去判定应用程序是善意应用,恶意应用,还是可疑应用。由于良性应用和恶意应用申请敏感的权限的界限不明确,会导致误报和漏检的问题。

专利申请号为201710139758.7的“一种高效的基于旋转森林的android恶意软件检测模型droiddet”,该模型提取的android恶意软件特征为涉及隐私的权限集合和api集合,以及相应的系统事件。但这些特征如果被android应用程序合理使用也会触发该方法中的过滤机制,特征的粒度不够细,准确性较低。



技术实现要素:

本发明的目的在于针对上述现有技术的不足,提出一种基于敏感调用路径的android恶意软件检测方法,以使特征粒度更细致,提高android恶意软件检测分析结果的准确率,降低误报和漏检的可能性。

本发明的技术思路是:从大量android应用软件中提取敏感调用路径,将敏感的调用路径作为新的恶意特征集合,采用合适的机器学习算法,训练准确的二元分类器,以达到准确分类良性软件和恶意软件的目标。

根据上述思路,本发明的技术发案包括如下:

1.基于敏感调用路径的android恶意软件检测方法,其特征在于,包括如下:

(1)从国内外主流应用市场和相关样本库下载收集恶意和良性的android应用软件样本,其中恶意样本和良性样本各占一半,每种样本数量均不小于b个,b为大于等于1的正整数;

(2)构建敏感目标接口api列表:

收集公开发表的android安全研究论文和分析报告,建立自然语言表示的android恶意行为知识库;

在android恶意行为知识库中,提取android恶意行为描述的关键词;

在android官方的开发文档中收集包含关键词的所有接口api,作为敏感目标接口api列表;

(3)使用静态分析工具对每个android应用软件样本进行逆向分析,提取出清单文件和java字节码文件;

(4)根据应用软件的清单文件和java字节码文件生成android应用软件的程序调用图;

(5)将敏感目标接口api列表输入到程序调用图中,经过迭代查找,将程序调用图的起点作为敏感调用路径的起点,将敏感目标接口api作为终点,生成包含多条敏感调用路径的集合;

(6)合并每个样本软件的敏感调用路径集合,去除重复的敏感调用路径之后,建立android系统敏感调用路径特征库,使用每个样本的敏感调用路径集合中的路径对特征库进行匹配:若路径出现在特征库中,则经特征库对应的路径记为1;反之,记为0,以生成0和1序列,作为每个样本的特征向量;

(7)将恶意样本软件的特征向量标注为恶意,将良性的样本软件的特征向量标注为良性,用这些带标注的特征向量构成数据集;

(8)在数据集上,使用有监督的机器学习算法,训练分类器模型,并从数据集中随机选择部分数据对该分类器模型进行交叉验证,计算分类器模型的混淆矩阵m,准确率a,精确率p,召回率r,精确率和召回率的调和平均数f1这些指标;

(9)根据分类器模型评价指标,调整机器学习算法的参数,训练e次,e为大于等于1的正整数;选择e次训练中评价指标最优的分类器模型,作为训练好的分类器模型;

(10)对未知安全性的android应用程序经过(4)-(6)处理后,输入到(9)训练好的分类器模型中,检测出该应用是否为恶意软件。

本发明与现有技术相比,具有如下优点:

1)精度高:android应用软件是事件处理程序驱动的,本发明根据不同事件处理程序生成的程序调用图,能够表征应用软件的执行逻辑和功能单元,并通过从程序调用图中生成敏感调用路径,再现了恶意行为的执行路径及可能的触发方式,可以准确地识别android软件的恶意行为。

2)易扩展:本发明通过丰富和完善敏感目标接口api列表,对程序调用图进行深度挖掘,从而识别出android恶意软件更多的恶意特征,可以实现对未知android应用软件的检测。

3)智能化:本发明克服了现有工具提取的恶意软件特征不够准确的局限性,将敏感调用路径作为新的特征,对大量的android恶意软件样本采用合适机器学习算法,训练出准确的二元分类器模型,提高了android恶意软件的智能化检测程度。

附图说明

图1是本发明的实现总流程图;

图2是本发明中对android应用软件进行逆向分析的子流程图;

图3是本发明中生成android应用软件程序调用图的子流程图;

图4是本发明中生成敏感调用路径集合的子流程图;

图5是本发明中训练android恶意软件检测分类器的子流程图。

具体实施方式

以下结合附图对本发明作进一步详细描述。

参照图1,本发明的实现步骤如下:

步骤1,收集恶意和良性的android应用软件样本。

从国内外主流应用市场和公开的数据集下载收集已知恶意和良性的android应用软件样本,其中恶意样本和良性样本各占一半,每种样本数量均不小于b个,b为大于等于1的正整数;

本实施例是从googleplay,drebin数据集,virusshare样本库下载和收集android恶意软件16300个,android良性软件16300个。

步骤2,构建敏感目标接口api列表。

敏感目标接口api列表,是指一系列在android系统中具有恶意行为倾向的敏感目标接口api集合,包括位置信息,短消息,联系人数据,网络请求,系统调用和反射机制的接口api,构建如下:

2.1)收集公开发表的android安全研究论文和分析报告,建立自然语言表示的android恶意行为知识库base,该知识库base是由android恶意行为描述语句组成的集合{d1,d2,…,dn},其中,d1,d2,…,dn表示收集到的第n条描述语句;

2.2)提取知识库base中描述android恶意行为的关键词:

现有的关键词提取技术包括:基于词频-逆文档频率算法的关键词抽取,基于文本排序算法的关键词抽取、基word2vec词聚类算法的关键词抽取,以及多种算法相融合的关键词抽取。本实施例采用但不限于词频-逆文档频率算法,计算描述语句dn中每个目标单词的词频-逆文档频率p,其实现如下:

2.2a)计算描述语句dn中目标单词的词频tf:

其中,x表示该单词在dn中出现的总次数,l表示描述语句dn的总词数;

2.2b)计算描述语句dn中目标单词的逆文档频率idf,:

其中,n表示知识库base中描述语句d的总个数;m表示目标单词的描述语句数量;

2.2c)计算dn中的目标单词的词频-逆文档频率p:

p=tf·idf;

2.2d)对所有目标单词的词频-逆文档频率p按照从大到小排序,最大的前k个词汇,即为知识库中描述android恶意行为的关键词,k为大于等于1的正整数。

2.3)在android官方的开发文档中收集包含关键词的所有接口api,构建敏感目标接口api列表;

本实施例构建的敏感目标接口api列表共有631个敏感接口api。

步骤3,对android应用软件进行逆向分析。

使用逆向工具从android程序包中提取和反编译出清单文件和java字节码文件,现有的android逆向工具包括但不限于androguard,apktool,dare,enjarify,dedexer。,本实施例使用apktool和dare工具。

参照图2,本步骤的具体实现如下:

3.1)使用逆向工具apktool对应用软件进行解压,生成两个文件:第一个文件是androidmanifest.xml,它是android应用软件配置的清单文件;第二个文件是classes.dex,它是java源代码编译后产生的运行在dalvik虚拟机上的字节码文件;

3.2)使用反编译工具dare将classes.dex文件反编译为java字节码文件。

步骤4,根据步骤3得到的清单文件和java字节码文件,生成android应用软件的程序调用图。

参照图3,本步骤的具体实现如下:

4.1)解析目标代码,将步骤3中得到的所有字节码文件打成jar架包,作为分析的目标代码,使用程序分析工具shriketoolkit将jar架包解析为jvm格式的代码,将解析得到的每个class对象表示为<类,方法集合>的格式;

4.2)对于每个class对象,将<类,方法集合>表示为一组<源实例值,目标实例有序集>,其中源实例值是指由类和方法集合中的每个方法逐一组成的调用实例,每个调用实例记作“类名/方法名”的格式。目标实例有序集由一系列的调用实例组成,对于源实例值对应的方法体字节码进行顺序查找,当发现调用了其他某个调用实例对应的方法时,将该调用实例加入目标实例有序集。最终,<源实例值,目标实例有序集>表示源实例值对应的方法依次调用了目标实例有序集中的各实例值对应的方法。若目标实例有序集为空,表示该源实例值对应的方法没有调用其他方法;

4.3)解析class文件类的层级结构,java虚拟机中,所有的类加载器形成以祖先类加载器为根、以应用程序类加载器为叶的树结构,祖先类加载器用于加载java标准库代码,应用程序类加载器用于加载应用程序代码,对于所有class对象,将每个class对象依次自根向叶委托给类加载器树上的不同类加载器,直到找到能加载该class对象的加载器,作为该class对象的层级,从而获得class对象的层级关系;

4.4)从步骤3中提取的清单文件中获得组件的类型和名称,遍历获得的java字节码,提取该组件的事件处理方法,该事件处理方法包括组件的生命周期方法、事件监听器的接口方法,其具体实现如下:

4.4a)从清单文件中获得组件类型和名称,其中组件包括activity,service,contentprovider,broadcastreceiver,以及通过intentfilter隐式匹配启动的其他组件,隐式匹配是指在不确切的知道要打开哪个组件的情况下,android系统通过action、data、category匹配到的组件;

4.4b)根据4.4a)获得的组件类型和名称,遍历java字节码,从中查找类型和名称相匹配的组件,并提取该组件事件处理方法,该事件处理方法,是指组件的生命周期方法和事件监听器的接口方法,其中事件监听器通过ontouchlistener等接口负责监听组件发生的事件,响应该事件入口方法即为事件监听器的接口方法;

4.5)将事件处理方法中组件的生命周期方法标记为起始入口方法;

4.6)将标记的起始入口方法作为实例值的起点,根据<源实例值,目标实例有序集>二元组集合所表示的实例值之间的调用关系和class文件类层级关系,反复查找,记录所有的调用关系,将实例值代表的实例方法作为节点,<源实例值,目标实例有序集>二元组所描述的源实例与目标实例的关系作为边,生成部分程序调用图;

4.7)由于android程序的回调机制,为了迭代生成完整的调用图,需从4.5)标记起始入口方法之后,遍历java字节码,搜索回调监听器的实例,将被重写的事件监听器的接口方法标记为另一部分入口方法,从该入口方法开始重复4.6),完善部分程序调用图;

4.8)对生成的程序调用图加边:从4.1)中记录的类中查找intents,threads,executors,ipcs,rpcs,asynctask类,并对这些类的入口方法进行标记,重复4.6),即将上述类的程序调用图添加至部分程序调用图中,完成了加边的过程,生成了准确的程序调用图。

步骤5,根据步骤2构建的敏感目标接口api列表和步骤4生成的程序调用图,生成敏感调用路径集合。

参照图4,本步骤的具体实现如下:

5.1)将敏感目标接口api列表输入到生成的程序调用图中,生成从程序调用图的入口方法到敏感目标接口api的敏感调用路径,即敏感调用路径的起点是程序调用图的入口方法,终点是敏感目标接口api;

5.2)去除每个样本软件重复的敏感调用路径,生成包含多条敏感调用路径的集合y,y={敏感调用路径1,敏感调用路径2,敏感调用路径3,…}。

步骤6,训练android恶意软件检测分类器。

参照图5,本步骤的具体实现如下:

6.1)对步骤1收集的所有android应用软件样本,执行步骤3-步骤5的处理,每个样本均生成敏感调用路径集合;

6.2)合并每个样本软件的敏感调用路径集合,去除重复的敏感调用路径之后,建立android系统敏感调用路径特征库,使用每个敏感调用路径集合中的路径对特征库进行匹配:若路径出现在特征库中,则经特征库对应的路径记为1;反之,记为0,以生成0和1序列,作为每个样本的特征向量;

6.3)将恶意样本软件的特征向量标注为恶意,将良性的样本软件的特征向量标注为良性,用这些带标注的特征向量构成数据集;

6.4)在数据集上,使用有监督的机器学习算法,训练分类器模型,并从数据集中随机选择部分数据对该分类器模型进行交叉验证,计算分类器模型的指标参数:

6.4a)将分类器对原本样本软件的预测结果进行分类标记:

将分类器把原本的恶意软件预测为恶意的样本记为真正例tp;

将分类器把原本的良性软件预测为恶意的样本记为假正例fp;

将分类器把原本的恶意软件预测为良性的样本记为假负例fn;

将分类器把原先的良性软件预测为良性的样本记为真负例tn;

6.4b)根据(6.4a)的分类标记,计算如下各指标参数:

混淆矩阵:

准确率:

精确率:

召回率:

精确率和召回率的调和平均数:

6.5)根据6.4b)的指标参数,调整机器学习算法的参数,训练分类器模型;

本步骤可用于训练android恶意软件检测分类器的机器学习算法包括但不限于k-近邻算法,支持向量机算法,朴素贝叶斯算法,logistic回归算法,以及adaboost,gbdt,xgboost,随机森林算法等集成算法。

本实施例使用随机森林算法,其具体实现是:根据6.4b)的模型评价指标,调整随机森林算法的参数,参数包括划分的最大特征数,决策树最大深度,内部节点再划分所需最小样本数,叶子节点最少样本数,叶子节点最小的样本权重,最大叶子节点数,节点划分最小不纯度。继续训练e次,e为大于等于1的正整数,选择e次训练中评价指标最优的分类器模型。本实施例最终选择的训练好的分类器,在测试数据集上的准确率达到98.9%。

步骤7,利用分类器模型检测android应用软件是否为恶意软件。

对未知安全性的android应用软件经过步骤3处理,得到清单文件和java字节码文件;

将清单文件和字节码文件经过步骤4处理,生成应用软件的程序调用图;

将程序调用图和步骤2构建的敏感目标接口api列表经过步骤5处理,生成该应用软件的敏感调用路径集合;

将敏感调用路径集合经过6.2)的处理,生成该应用软件的特征向量;

将特征向量输入到经过6.5)训练的分类器模型中,即可检测出该应用是否为android恶意软件。

以上描述仅是本发明的一个具体实例,并未构成对本发明的任何限制,显然对于本领域的专业人员来说,在了解了本发明的内容和原理后,都可能在不背离本发明原理、结构的情况下,进行形式和细节上的各种修改和改变,但是这些基于本发明思想的修正和改变仍在本发明的权利要求保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1