基于动态行为依赖图的Android恶意软件分类方法

文档序号:9888033阅读:416来源:国知局
基于动态行为依赖图的Android恶意软件分类方法
【技术领域】
[0001]本发明属于网络安全技术领域,具体涉及一种基于动态行为依赖图的Android恶意软件分类方法。
【背景技术】
[0002]随着Android系统的流行,越来越多的应用软件被用户下载安装。根据Google官方数据,每个月有超过15亿的APP从Google Play应用市场中被下载。在这巨大的利益的驱动下,攻击者开发出大量的Android恶意软件并上传到网上或者第三方的应用市场进行破坏或牟利。如McAfee实验室的报告所描述,他们2015年第一季度便检测出了 110万移动恶意软件。这些恶意软件严重威胁Android系统平台的安全。
[0003]为了保护Android系统的安全和抵御恶意软件的攻击,研究者已经提出一系列的静态分析方法和动态分析方法。静态分析法通常是在不执行应用软件的情况下对其进行反编译,采用控制流分析、数据流分析和语义分析等技术从APK文件、配置文件以及解析生成的文件中提取特征。进一步地,根据这些特征对Android恶意软件进行检测或分类。虽然静态分析法能够快速高效的进行检测,但是易受到代码混淆和多态变化技术的影响。比如对APK进行加密后,静态分析法将无法反编译程序,进而无法从源码或解析生成的文件中提取有效信息。再如采用java反射机制的APK,将在运行时动态获取类的信息以及动态调用对象的方法,这给静态构造控制流等信息带来了很大的困难。这些因素限制的静态分析法在一些场景下的使用。
[0004]而动态分析法在一定程度上可以弥补静态分析法的不足,它一般通过运行代码来监测系统调用、网络特征、文件或内存修改以及信息处理等行为等对Android恶意软件的检测或分类。针对Android恶意软件,当前的动态技术主要针对敏感数据的传播进行管控,防止隐私泄露。或者直接根据关键的接口调用行为进行简单的恶意评估,如区分恶意或者正常的软件,不能有效的确定具体的恶意软件类型。此外,也有利用动态分析法提取恶意软件线程级的API行为序列进行分析,但是该方法会受到划分线程行为或记录独立API等技术的攻击。针对这些不足,研究能够基于动态行为、抵抗多种攻击、高准确率的恶意Android软件分类方法能够有效帮助安全厂商和工作者对恶意软件进行分析。

【发明内容】

[0005]本发明的目的在于提供一种能够同时基于Android恶意软件动态行为与行为语义关联的恶意软件分类方法,抵御多种存在的代码攻击方法,如代码加密攻击,线程划分攻击,垃圾代码注入攻击。
[0006]本方法的主要内容是=Android软件首先在一个特殊的执行沙盒中被执行,用于提取它们的动态执行行为信息。基于这些信息,每一个Android软件被模型化为一个动态行为依赖图(Dynamic Behav1r Dependency Graph,DBDG)。在图中,不仅包含Android应用软件的行为,也包括行为之间的依赖。这些图信息将进一步被划分和优化。最终,同一族恶意软件的行为图被搜集,用于机器学习模型的训练和分类未知的Android恶意软件。
[0007]本发明的基于动态行为依赖图的Android恶意软件分类方法,其具体步骤如下:
[0008]I)动态行为信息提取:在沙盒中执行Android应用并提取其动态行为信息,包括框架层接口调用行为和行为间的依赖关系;
[0009]2)构建行为依赖图:根据提取的动态行为信息,将Android应用模型化为行为依赖图;
[0010]3)优化并划分行为依赖图:将构建的行为依赖图进行优化,然后将行为依赖图划分为更小尺寸的行为子图,每个Android应用被表示为一个行为子图集合;
[0011]4)特征的自动提取:从已知的Android恶意软件族中分别挑选多个样本进行第I )-
3)步操作,并从得到的所有行为子图中通过图匹配技术挑选部分行为子图作为特征;
[0012]5)模型训练:对已知的Android恶意应用族样本和正常Android应用样本分别进行第1)-3)步操作,得到一系列的行为子图集合,然后通过比较第4)步选择的行为子图特征,将每一个Android应用表示为一个特征向量,进行模型训练;
[0013]6)分类未知APP:将未知的Android应用首先进行第1)-3)步操作,并与第4)步选择的行为子图特征进行比较,表示为一个特征向量;该特征向量输入到基于步骤5)训练的模型,实现对未知Android应用的分类。
[OOM]进一步地,步骤I)所述的动态行为信息提取过程为:修改Android应用执行的Dal vik虚拟机,掌管应用Java代码指令的解释过程;通过分析函数调用指令,输出Android系统框架层调用行为;通过分析Dalvik虚拟机中的Java对象(Object)创建、修改等指令过程,输出框架层接口调用行为间的数据依赖。
[0015]进一步地,步骤2)所述的行为依赖图构建是根据步骤I)提取到的框架层接口调用行为和行为间的依赖关系,将其抽象为一个有向图,图中的节点是指APP整个生命周期间调用的接口函数,边是指函数节点之间的数据依赖关系。
[0016]进一步地,步骤3)所述的优化行为依赖图的过程为:首先,预先从恶意软件和正常软件中选择关键函数,关键函数的选取原则是在恶意软件中函数出现的频率高于在正常软件中出现的频率;然后,合并行为依赖图中的重复节点并去除行为依赖图中的冗余边。
[0017]进一步地,步骤3)划分行为依赖图的过程为:首先,在行为依赖图找到所有的叶子节点(出度为0);然后,递归针对每一个叶子节点寻找其所有的祖先节点;最后,每个叶子节点和它的祖先节点构成一个行为子图。
[0018]进一步地,步骤4)中特征的自动提取方法为:当同一个行为子图至少同时出现在同一族的两个恶意Android应用样本中时,它将被挑选作为一个子图特征。
[0019]进一步地,在步骤4)中,同一个行为子图的定义为:当两个子图相似度(相同的节点和相同的边)达到一定程度时,即认为两个行为子图是同一子图。
[0020]进一步地,步骤5)中模型训练方法为:一个Android应用根据其是否包含步骤4)中选择的特征,被表示为一个由O和I组成的特征向量;已知类型的恶意应用和正常应用的特征向量由支持向量机(SVM)进行训练。
[0021]进一步地,步骤6)中Android应用的分类方法为:基于步骤5)生成的SVM模型,Android应用被判断是否为恶意软件,如果是,进一步输出恶意软件类型。
[0022]进一步地,上述方法还可包括步骤7),即验证与评估步骤,该步骤是利用步骤5)训练出的模型对现实环境中大量的APP进行测试和评估,并且模拟了三种攻击场景,如代码加密攻击,线程划分攻击,垃圾代码注入攻击,对该方法进行验证。
[0023]本发明还提供一种采用上述方法的基于动态行为依赖图的Android恶意软件分类系统,其包括:
[0024]Android应用执行沙盒模块:用于执行Android应用并提取其动态行为信息,包括框架层接口调用行为和行为间的依赖关系,然后根据动态信息构建动态行为依赖图;
[0025]行为依赖图处理模块:用于优化复杂的行为依赖图结构,并将行为依赖图划分成子图;
[0026]特征的自动提取模块:用于从恶意软件动态行为依赖图中提取相似的子图结构,将至少被两个恶意软件共同拥有的相似子图结构作为分类时的基本特征;
[0027]模型训练模块:用于训练含有恶意软件和正常软件集合的训练样本,生成分类器,用于对未知APP的分类;
[0028]未知APP分类模块:用于分类未知APP。
[0029]进一步地,还包括验证评估模块:用于进行测试和验证,并模拟一些攻击场景进行验证和评估。
[0030]本发明的优点和积极效果如下:
[0031]本发明通过一个自定义的Dalvik虚拟机运行APP,生成相应的动态行为依赖图,这种动态提取行为信息的方法可以克服静态分析法的不足;此外基于动态行为依赖图,通过图匹配技术进行聚类,自动提取相似的子图结构作为基本特征,使得特征选择具有很强的灵活性和扩展性;为有效快速地提取特征而进行的选择关键函数、重复点合并、冗余边删除以及将动态行为依赖图划分成子图等优化行为依赖图的操作,保证了本发明的性能;最后通过SVM对700多个APP进行了验证,具有很高的检测率,模拟的三种攻击场景也说明了本发明的有效性。
【附图说明】
[0032]图1是本发明的Android恶意程序分类方法的步骤流程图。
[0033]图2是Dalvik沙盒执行应用提取行为及行为依赖的基本过程图。
【具体实施方式】
[0034]下面通过具体实施例和附图,对本发明做进一步说明。
[0035]图1是本发明的Android恶意程序分类方法的步骤流程图,其中l(a)、l(b)、l(c)是Android应用训练样本的处理过程,2(a)、2(b)、2(c)是未知Android应用的处理过程。该方法具体包括如下步骤:
[0036]I)动态行为信息提取
[0037]图2是Dalvik沙盒执行Android应用,并提取行为及行为间依赖关系的基本过程图。Android应用首先在特别构造的执行沙盒中被执行,提取它的框架层接口调用行为和行为之间的依赖关系。在这个过程中,Dalvik虚拟机中的Java指令解释过程被掌管,当函数调用指令,如“invoke-*”被解释执行时,将首先判断是否为一个框架层接口调用行为。如果是,则该函数行为将被记录,其函数内的指令行为将进一步被分析,用于记录行为之间的依赖关系。
[0038]为了区分普通函数调用和框架层接口调用行为,本系统首先搜集了所有的系统框架层DEX函数库的文件指纹。当Dalvik虚拟机中发生函数调用,将同时检查调用函数和被调用函数。如果调用函数所在文件的指纹不属于系统函数库文件,且被调用函数所在文件的指纹属于系统函数库文件,则认为该函数调用过程为一次框架层接口调用行为,系统将为其分配一个唯一的
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1