基于多特征融合的安卓恶意应用程序检测方法和系统与流程

文档序号:11262110阅读:289来源:国知局
基于多特征融合的安卓恶意应用程序检测方法和系统与流程

本发明涉及网络安全技术领域,尤其涉及一种基于多特征融合的安卓恶意应用程序检测方法和系统。



背景技术:

随着智能手机的热销,手机上网越来越流行,移动互联时代的爆发更是带动智能手机趋于全能化,伴随手机用户爆炸增长、手机上网愈加便利而来的是,手机安全隐患越来越多、问题越来越突出,移动智能手机在为用户创造便利的同时也为手机恶意代码攻击带来了新的发展方向。手机中存储的大量用户个人隐私数据以及移动互联网络潜在的巨大经济利益使得黑客和恶意软件制造者将智能手机作为新的攻击目标。

但由于android的系统特性,无法像pc端那样内置功能完善的防病毒软件,且应用市场中没有严格的审查机制,应用程序在正式发布之前不需经过google公司或任何一方的严格审査,导致应用市场中存在大量恶意应用。如何对恶意应用进行有效的检测与分析不仅是研究热点也是研究难点。

目前,各种分析方法主要集中在静态分析和动态分析两个大方向,等人通过解决juli(java字节码静态分析工具)不能分析安卓中由xml文件映射生成的类等问题,改进了julia使其适用于dvm(dalvikvirtualmachine)字节码的分析,首次将静态分析用于了android程序的分析。kuiluo针对隐私窃取类的恶意代码提出了字节码转换器,用于将dvm字节码转换为java字节码,并将生成的java字节码输入indus(java代码静态分析及切片工具)进行分析,使得使用indus分析android程序成为可能。steffendienst等首先使用dex2jar工具将dvm字节码转换为java字节码,然后再通过findbugs(java字节码漏洞静态分析器)的控制流图(cfg)遍历功能,实现了intent对象中的直接依赖和功能依赖的统计。

2014年gorla等人提出了chabada检测方法,该方法只依赖于良性样本作为训练集构建训练模型来进行恶意应用的检测。2014年,杨欢等人提出了一种综合考虑android多类行为特征的三层混合系综算法thea(triplehybridensemblealgrithm)用于检测android未知恶意应用。2015年,刘阳等人利用随机森林和神经网络算法对大规模的数据样本的特征集进行恶意检测,提出了一个利用机器学习算法对android恶意代码进行检测的方案对apk文件釆用静态分析,提取出所需特征属性。最后输入分类算法,对恶意应用进行检测。这些方法利用的大规模的数据样本,能比较准确的检测出安卓恶意代码,但由于数据量大,特征维数过多,所以运行效率较低。

现有的研究面临多维特征融合和深度分析处理的问题。首先,恶意代码分类存在特征维度多、单个特征的维度高的特点。在恶意代码的特征向量提取过程中,由于特征可以从文件实体、文件反汇编等多个方面提取,而基于单一特征进行分类又往往具有片面性,需要从不同的角度来融合表达恶意代码样本的特征,从而形成具有更好的抗混淆特性和抗干扰特性的特征向量。对多维特征的综合分析和深度处理,逐渐成为恶意代码分类的一种新趋势。其次,在恶意代码分类的实际过程中,存在某些家族样本数量相对比较少的特点,由此造成样本数量不平衡的问题。例如trojan.win32.downloader等家族样本数量非常庞大,而regin、flame等高级威胁样本的数量却又非常稀少,往往不会超过100个。这些特点都为恶意代码的分类技术带来新的挑战。

基于多个维度的特征进行分类学习,需要对这些特征进行融合和深度处理。为了解决恶意代码稀有样本家族的高维特征分析问题,本发明借鉴现有的海量文本检索中的文本处理方法,利用simhash方法的局部敏感特性,提出一种适用于恶意代码分类的高维特征融合方法,进行特征融合与深度处理,以达到较好的时间性能和分类准确率。



技术实现要素:

有鉴于此,本发明提供了一种基于多特征融合的安卓恶意应用程序检测方法和系统,能够解决恶意代码稀有样本家族的高维特征分析问题。

为了解决上述技术问题,本发明是这样实现的:

一种基于多特征融合的安卓恶意应用程序检测方法,包括:

步骤一、对安卓应用样本进行反编译,获得反编译文件;

步骤二、从反编译文件中提取静态特征;通过在安卓模拟器中运行安卓应用样本提取动态特征;

步骤三、对静态特征和动态特征,使用局部敏感哈希算法的文本哈希映射部分进行特征映射,映射到低维特征空间,从而得到融合后的特征向量;

步骤四、基于融合后的特征向量,利用机器学习分类算法训练得到分类器,利用该分类器进行分类检测。

优选地,所述步骤1为:使用静态分析工具apktool对作为安卓应用样本的apk文件进行反编译,反编译后的文件包括androidmanifest.xml、smail文件、res目录、assets目录;

所述反编译为:用python的os.walk()函数遍历样本库文件夹,若发现apk文件则将该apk文件路径和输出路径组合,作为apktool反编译的输出路径;用apk文件路径、apktool输出路径组合apktool命令,加到命令列表;遍历完成后启用多个进程并行运行命令列表中的命令,输出反编译结果,这些命令将按照样本原来的分类路径输出到一个新的反编译文件夹中。

优选地,所述静态特征包括:权限和组件、函数调用和api调用特征、文件结构特征、脚本信息特征、字符串信息特征;其中,

提取权限和组件的方式为:通过解析androidmanifest.xml文件获得;

提取函数调用和api调用特征的提取方式为:提取函数调用时,针对每一个样本,查找出样本里的所有smali文件,然后对于每个smali文件用正则匹配方式匹配出所有函数调用,提取出来的函数调用特征建立n-gram特征序列;提取api调用时,对于每个smali文件匹配每个官网api对应的smali代码,提取出api调用特征;将函数调用和api调用两种特征组合,选取只包含api调用的函数调用序列,组合方法为遍历每种函数调用序列,若发现其中的某个函数调用也是api调用,则选取该特征,否则丢弃该特征;从而提取出所有带有api调用的函数调用序列特征;

提取文件结构特征的方式为:提取文件目录结构特征;

提取脚本信息特征的方式为:在样本中查找js脚本文件,作为脚本信息特征;

提取字符串信息特征的方式为:针对每一个样本,查找出样本里的所有smali文件,然后对于每个smali文件用正则匹配方式匹配出所有字符串信息作为提取字符串信息特征。

优选地,所述动态特征包括:系统调用特征、关键路径和数据访问特征、http请求特征以及恶意吸费特征;

其中,所述恶意吸费特征的提取方式为:记录程序的短信发送、电话拨打行为;如果拨打号码或短信发送号码不在移动通信运营商之列,则认为具有疑似恶意吸费行为,将这些行为记录作为恶意吸费特征。

优选地,所述局部敏感哈希算法为simhash算法;所述机器学习分类算法为梯度优化决策树gbdt算法。

优选地,步骤三在进行特征映射之前,进一步对除了权限和组件的其他特征进行特征筛选,筛选时,针对每个特征计算信息增益,继而获得信息增益率,根据信息增益率进行从大到小的特征排序,选取前k个特征进行所述特征映射;k为设定的筛选量;

特征a的信息增益率gainratio(s,a)的计算公式为:

其中,splitinformation(s,a)为作为惩罚项的分裂信息;gran(s,a)为特征a的信息增益。

本发明还提供了一种基于多特征融合的安卓恶意应用程序检测系统,包括反编译模块、静态分析模块、动态分析模块、特征融合模块和分类检测模块;

反编译模块,用于对安卓恶意应用样本进行反编译,获得反编译后的apk文件;

静态分析模块,用于从反编译后的apk文件中提取静态特征;

动态分析模块,用于通过在安卓模拟器中运行androidapk样本提取动态特征;

特征融合模块,用于对静态特征和动态特征,使用局部敏感哈希算法的文本哈希映射部分进行特征映射,映射到低维特征空间,从而得到融合后的特征向量;

分类检测模块,用于基于融合后的特征向量,利用机器学习分类算法训练得到分类器,利用该分类器进行分类检测。

优选地,所述静态特征包括:权限和组件、函数调用和api调用特征、文件结构特征、脚本信息特征、字符串信息特征;所述动态特征包括:系统调用特征、关键路径和数据访问特征、http请求特征以及恶意吸费特征。

优选地,静态分析模块提取函数调用和api调用特征后,进一步将函数调用和api调用两种特征组合,选取只包含api调用的函数调用序列,组合方法为遍历每种函数调用序列,若发现其中的某个函数调用也是api调用,则选取该特征,否则丢弃该特征;从而提取出所有带有api调用的函数调用序列特征作为静态特征;

所述特征融合模块在进行特征融合之前,进一步对除了权限和组件之外的其他特征进行筛选;筛选时,对每一个特征计算信息增益,继而获得信息增益率,根据信息增益率进行从大到小的特征排序,选取前k个特征作为筛选结果,然后再对筛选结果中的特征进行特征映射;其中,k为设定的筛选量。

优选地,特征融合模块采用的局部敏感哈希算法为simhash算法;分类检测模块采用的机器学习分类算法为gbdt算法;

所述反编译模块使用静态分析工具apktool对作为恶意安卓应用样本的apk文件进行反编译,反编译后的文件包括androidmanifest.xml、smail文件、res目录、assets目录;

所述反编译为:用python的os.walk()函数遍历文件夹,若发现apk文件则用该文件的目录和输出目录组成一个apktool的命令,加入命令队列;遍历完成后启用多个进程并行运行命令反编译样本,这些命令会按照样本原来的相对分类好的路径输出到一个新的反编译文件夹中。

有益效果:

(1)本发明使用了动态特征和静态特征结合的方式,弥补了单种特征的缺点,使得检测准确度有所提高。

(2)本发明针对安卓恶意应用的行为特点出发,筛选出了最有用的特征,使得该特征能够更清晰的反映恶意应用与良性应用的区别。

(3)由于本发明采用了动态特征和静态特征的结合,因此特征维度必然很大,本发明采用局部敏感哈希算法进行降维,不仅降维,而且实现了融合,从而解决恶意代码稀有样本家族的高维特征分析问题。

此外,本发明在安卓特征提取时,能从一个安卓样本中的androidmanifest文件中提取出的权限和组件特征量较少,而系统调用较之多一些,可能达到上百个,最多的函数调用能达到上千个,所以直接将这些特征融合,很有可能权限和组件特征就被淹没了,针对这个问题,本发明首先将函数调用中没有api调用的部分剔除,组合了函数调用特征和api调用特征,减少了自定义函数的干扰。然后对特征量较大的特征(除权限和组件的其他特征)使用信息增益进行特征的筛选,取出信息量较大的特征,去除作用较少的特征。最后再用simhash融合特征,这样就达到了选取了最有用的特征并高效融合处理的目的。

(4)为了防止过拟合,本发明还使用了dgbt分类算法。该算法适合混合数据类型的自然处理,预测力强,并有健壮的输出空间。融合后的特征输入分类算法最终达到分类的目的。

附图说明

图1为本发明安卓恶意样本检测系统的工作流程图。

图2为本发明akptool反编译各类安卓样本流程图。

图3为本发明提取函数api调用序列的流程图。

图4为simhash特征融合方法的示意图。

具体实施方式

下面结合附图并举实施例,对本发明进行详细描述。

本发明提出了一种基于多特征融合的安卓恶意应用程序检测方案,其基本思想是:对安卓恶意应用样本进行反编译,获得反编译后的apk文件;从反编译后的apk文件中提取静态特征;通过在安卓模拟器中运行apk文件提取动态特征;对静态特征和动态特征,使用局部敏感哈希算法的文本哈希算法部分进行特征映射,映射到低维特征空间,从而得到融合后的特征向量;最后基于融合后的特征向量,利用机器学习分类算法训练得到分类器;利用该分类器分类检测安卓恶意应用。

为了实现上述方案,本发明提供了一种基于多特征融合的安卓恶意应用程序检测系统,包括预处理模块、反编译模块、静态分析模块、动态分析模块、特征融合模块和分类检测模块,整体流程结构如图1所示。下面对每个模块的功能进行详细描述。

(1)预处理模块

预处理模块用于解压apk压缩文件,搜集安卓应用样本,这些样本包括恶意的和良性的。因为搜集到的最初的样本集都是许多压缩包,每个压缩包下都有几个apk样本,所以对所有的样本压缩文件解压,提取apk样本文件,并过滤不需要的其他文件。

(2)反编译模块

反编译模块对搜集的安卓应用样本进行反编译,获得反编译文件。

具体来说,反编译模块使用静态分析工具apktool对作为样本的apk文件进行反编译,反编译后的文件包括androidmanifest.xml、smail文件、res目录、assets目录。

反编译的流程如图2。因为不同样本属于不同分类或家族,处于不同文件夹下,所以需要深度遍历文件夹,查找apk文件样本,用python的os.walk()函数遍历文件夹,若发现apk文件则将该apk文件路径和输出路径组合,作为apktool反编译的输出路径;用apk文件路径、apktool输出路径组合apktool命令,加到命令列表。遍历完成后启用多个进程并行运行命令列表中的命令,输出反编译结果。这些命令会按照样本原来的相对分类好的路径输出到一个新的反编译文件夹。采用这种方式大大提高了处理速度。

(3)静态分析模块

静态分析模块从反编译文件中提取静态特征。具体来说,该静态分析模块自动化分析反编译后的apk文件目录,提取apk文件中的特征,称为静态特征,这些静态特征包括权限和组件、函数调用和api调用特征、文件结构特征、脚本信息特征、字符串信息特征。其中,

权限和组件(活动,服务,内容提供器)特征的提取方式为:通过解析androidmanifest.xml文件获得。解析方法为利用python的xml.dom.minidom包解析xml标签,获取uses-permission、activity、services、contentprovider标签信息。

提取函数调用和api调用特征。提取方法如图3,首先用python的os.walk()函数遍历反编译后的文件夹下的每个样本,针对每一个apk样本(因为样本反编译后的后缀没有变,还是.apk,只是这时变成了反编译的文件夹,判断方法为如果后缀为.apk的文件夹即为一个样本单位),查找出样本里的所有smali文件。然后对于每个smali文件,提取函数调用时,针对每一行用正则匹配方式匹配出所有函数调用,提取出来的函数调用特征建立n-gram特征序列。n-gram只是将一串数据转化为n-gram向量形式,只是简单地统计n-gram中元素出现的频次,并不能从实质上代表应用程序的恶意行为,仅反映了在恶意程序中出现的元素并没有在非恶意程序中出现。为了更好地区分和描述恶意行为特征,本发明还提取了api调用序列并与之组合,提取方法为对于每个smali文件,匹配每个官网api对应的smali代码,提取出api调用特征。因为函数调用特征有上千个,而许多函数是开发者自己定义的,和恶意行为并没有多大直接关联,而真正的恶意代码的行为肯定是在函数调用序列中调用了某些敏感api,例如hipposms的样本,其发送短信的函数调用序列为oncreate()->sendmsms->sendtextmessage,而其中的sendmsms既属于函数调用也属于api调用。所以本发明将函数调用和api调用两种特征组合,选取只包含api调用的函数调用序列,组合方法为遍历每种函数调用序列,若发现其中的某个函数调用也是api调用,则选取该特征,否则丢弃该特征。这样就提取出了所有带有api调用的函数调用序列特征。

文件结构特征。提取文件目录结构特征。有些恶意样本所包含的包名是相同的,甚至该包内层的文件结构及内容也很类似,对于这种样本,我们有理由的相信这他们是“同源”的,甚至可能出自同样的作者之手,所以本发明提取文件结构特征作为待融合特征。

脚本信息特征。某些安卓应用在运行过程中会执行恶意脚本,所以脚本信息可以作为一种特征,提取方法为在样本中查找js脚本文件,将找到的文件作为特征。

字符串信息特征。安卓应用中的字符串可能包含网络http请求信息和一些关键数据,提取方法为针对每一个样本,查找出样本里的所有smali文件,然后对于每个smali文件用正则匹配方式匹配出所有字符串信息作为特征。

(4)动态分析模块

静态分析的优点是快速、高效。但是难以应对代码混淆和多态变形技术。同时,静态分析难以识别漏洞利用攻击。因为漏洞利用攻击的分析和定位需要具体的漏洞运行环境。所以本发明采用动态和静态分析结合的方法。动态分析模块在安卓模拟器中运行android应用程序。提取系统调用特征、关键路径访问特征、http请求特征和恶意吸费特征。

系统调用特征。安卓动态运行过程中也会执行一些系统调用,这些调用可能包含敏感的数据和api,这里将这些系统调用记录并作为特征。

关键路径访问特征。android系统基于linux内核,同样存在一些敏感路径,恶意代码可以调用该敏感路径目录下的系统程序执行命令。以root漏洞gingermaster为例,其在恶意行为执行过程中会调用chmod、mount更改文件权限、挂载文件等命令,所以关键路径访问可以作为一种特征。

http请求特征。有的恶意软件会在运行过程中会发送http请求包。例如geinimi恶意样本会从www.widifu.corn:8080获取控制命令,因此可以分析http请求并提取特征。在解析http请求提取的属性中,根据经验,请求内容、path和cookie是恶意特征最重要的体现部位,所以应该进行更深入的特征提取,提取出http请求特征后再对其用正则匹配提取这几种属性的特征。

恶意吸费特征。安卓恶意吸费行为主要通过发短信和打电话来完成。虽然这些行为都会申请特定的权限,但不是所有申请了发短信和打电话的应用都是恶意应用,所以记录程序的短信发送、电话拨打行为。如果号码不在移动运营商之列,如10086、10000等,则认为可能具有恶意吸费行为,将这些行为记录作为一种特征,对前面的静态特征的权限部分可能产生的误查起到了补偿和相互配合的作用。

(5)特征融合模块

特征融合模块主要对前文提取出的大量特征做筛选和融合,包括筛选部分和融合部分,其中筛选部分主要用来过滤不需要的特征,主要用到了信息增益方法。

信息增益是是一种用数学来度量信息的方法。用信息增益的方法来进行特征选择的核心思想是:重要性的衡量标准就是看特征能够为分类系统带来多少信息,带来的信息越多,该特征越重要。这样只需要计算特征集中所有特征的信息增益值,根据其信息增益值的大小就可以得到所有特征的重要程度。对样本集s,其中的一个特征a的信息增益可以由公式1计算。这里的样本为前文的每个apk样本,而特征a属于从样本集中提取出来的所有静态特征或者动态特征中的一个。

其中,entropy(s)为样本集合s的熵,在中,value(a)是特征a所有可能取值的集合,sv为特征a的取值为v的所有样本的子集,表示用特征a对样本分类之后样本集合s熵的期望值。样本集合s熵entropy(s)的计算方式如式2所示。与entropy(s)的计算方式类似,可以计算出entropy(sv)的值。

其中,pi=|si|/|s|表示任意一条样本属于类别i的概率,si为样本集中类别为i的样本数目,|s|为样本总数。对分类系统来说,类别i是变量,它可能的取值为1<=i<=n,而每一个类别出现的概率是pi,因此n就是类别的总数,在判断恶意或者良性时,n取值为2。

信息增益是针对一个一个的特征而言的,就是看一个特征a,系统有它和没它的时候信息量各是多少,两者的差值就是这个特征给系统带来的信息量,即增益。系统含有特征a的时候信息量用公式2计算,不含有特征a的信息量即为两者的差值即为a的信息增益。

信息增益能够有效的度量属性的区分度,但是其存在一个内在偏置,就是偏袒具有较多取值的属性。这个内在的偏执可以采用信息增益率的方式来取消,信息增益率在信息增益的基础上做了一些改进,通过增加一个分裂信息(splitinformation)的惩罚项来平衡属性分裂数据的深度和广度。信息增益率的计算方式如公式3、4所示,公式4中,样本集中的数据按照特征a的取值划分成了n个子集,|si|为第i个子集的样本数目,|s|为样本总数:

针对前文静态分析和动态分析提取出来的每个特征计算信息增益率后,进行排序,然后选取前k个特征进行后续的融合;其中,k为设定的筛选量,例如可以选取总量的50%。

融合部分对静态分析模块和动态分析模块提取出的各种种类的特征,使用局部敏感哈希算法的文本哈希映射部分进行特征映射,映射到低维特征空间,从而得到融合后的特征向量。其中,局部敏感哈希算法可以为simhash算法,也可以是minhash算法。

simhash是google用来处理海量文本去重的算法,可以计算两个文本的相似度,将数据降维到hash数字,使计算量变小,速度加快,适合维度高的样本在特征深度处理阶段。simhash分为两个部分,文本哈希和相似度计算,本发明利用simhash的文本哈希算法部分来进行特征映射和降维,对上述提取的特征进行特征元素的映射,映射到低维特征空间,从而得到最终融合后的特征向量。其中特征深度处理和融合算法如下。

①输入:筛选后的特征向量集,包括静态和动态特征向量和特征向量的权重,组成特征/权重对(feature,weight),其中权重通过统计次数确定。

②将特征/权重对(feature,weight)映射到哈希/权重对(hash(feature),weight),即对于每个特征(feature)映射到哈希特征(hash(feature)),生成图中的(hash,weight)对,此时假设hash生成的位数bits_count=6(如图4);

③对哈希/权重对(hash(feature),weight)进行位的纵向累加,如果该位是1,则+weight,如果是0,则-weight,最后生成bits_count个数字,如图所示是[13,108,-22,-5,-32,55],这里产生的值和hash函数所用的算法相关。

④对最后的数字进行0和1的映射,[13,108,-22,-5,-32,55]->110001,根据获得的数字序列按照正1负0的原则得到特征深度处理和融合后的特征向量。

本发明在安卓特征提取时,能从一个安卓样本中的androidmanifest文件中提取出的权限和组件特征量较少,而系统调用较之多一些,可能达到上百个,最多的函数调用能达到上千个,所以直接将这些特征融合,很有可能权限和组件特征就被淹没了,针对这个问题,本发明首先将函数调用中没有api调用的部分剔除,组合了函数调用特征和api调用特征,减少了自定义函数的干扰。然后对特征量较大的特征(除权限和组件的其他特征)使用信息增益进行特征的筛选,取出信息量较大的特征,去除作用较少的特征。最后再用simhash融合特征,这样就达到了选取了最有用的特征并高效融合处理的目的。

(6)分类检测模块

分类检测模块基于融合后的特征向量,利用机器学习分类算法训练得到分类器;利用该分类器分类检测安卓恶意应用。

本发明使用gbdt(gradientboostingdecisiontree)梯度优化决策树算法来分类检测安卓恶意应用,gbdt是一种迭代的决策树算法,又叫mart(multipleadditiveregressiontree),该算法由多棵决策树组成,所有树的结论累加起来做最终答案。它在被提出之初就和svm一起被认为是泛化能力(generalization)较强的算法。近些年更因为被用于搜索排序的机器学习模型而引起大家关注。该算法由多棵决策树组成,所有树的结论累加起来做最终答案。适合混合数据类型的自然处理,预测力强,有健壮的输出空间,并且能防止过拟合。

在本发明一优选实施例中,将获得的融合后的特征向量随机分开,其中将80%数据用做训练集样本,剩余20%的良性样本和恶意样本组成测试集样本。分类检测模块使用gbdt(梯度优化决策树分类算法)算法,针对训练集样本中每个样本的特征维度,构建多棵决策回归树并迭代累加,使算法的损失函数在梯度方向上逐步递减,最终得到一个优秀的模型,并用模型对测试集应用进行测试,检测应用的恶意代码,得出测试结果。在实际分类时,采用前面的模块获得待分类样本的融合特征,然后输入到模型中,从而获得是否为恶意样本、为哪类恶意样本的结果。

本发明能够分析已有的安卓样本,提取多维度的不同种类的安卓恶意样本特征库,并针对未知的安卓应用,检测出其是否为恶意样本,属于哪种恶意样本。

综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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