标识(BID)。
[0039]在框架层接口函数执行过程中,执行沙盒将进一步记录其中指令操作的数据依赖关系。本系统中对Java对象级的数据依赖进行了记录。如果在框架层接口函数执行过程中,一个Java对象被创建,本系统将为其分配同等大小的影子内存,影子内存用于记录Java对象中每一个域依赖关系。初始时,对象的影子内存将用对象创建时所处接口调用的BID填充;如果一个对象域数据被修改,该对象域的影子内存也将修改为当前指令所在接口调用行为BID;如果对象域中的数据被读取,则当前指令所在接口调用行为将与对象域影子内存中的BID建立依赖关系。当一个框架层接口调用函数完成,这些信息统一被输出。
[0040]2)构建行为依赖图
[0041]根据提取到的框架层接口调用行为和行为间的依赖关系,将Android应用模型化为行为依赖图。该图是一个有向图,图中的节点是指APP整个生命周期间调用的接口函数,边是指函数节点之间的数据依赖关系。
[0042]3)优化并划分行为依赖图
[0043]将构建的行为依赖图进行优化,然后将行为依赖图划分为更小尺寸的行为子图,每个APP被表不为一个行为子图集合。
[0044]根据动态行为信息构建的行为依赖图可能会很复杂,需要对该图进行优化处理:第一,预先在恶意软件和正常软件中计算函数的调用频率,如果一个函数在恶意软件中调用的频率高于在正常软件中调用的频率,则将其作为关键函数;此外一些无效的函数可能会掩盖掉关键行为的表现,因此需要排除这些无效的函数。这样有利于减少行为依赖图中节点的数目。第二,由于从APP中提取的行为依赖图可能含有重复节点和冗余边,可以将相互依赖的节点、依赖于同一节点的两个点合并成一个节点;对于依赖关系:A依赖于B,B依赖于C,则存在很大的概率推导出A依赖于C,如果存在A依赖于C,可以将该冗余边删除。
[0045]如果直接在动态行为依赖图中寻找公共子图,关键的恶意行为可能会被许多正常行为掩盖,为此可将行为依赖图图划分成子图。其划分过程为:首先,在行为依赖图找到所有的叶子节点(出度为O);然后,递归针对每一个叶子节点寻找其所有的祖先节点;最后,每个叶子节点和它的祖先节点构成一个行为子图。
[0046]4)特征的自动提取
[0047]从已知的Android恶意应用族中分别挑选多个样本进行上述步骤操作,从得到的所有行为子图中通过图匹配技术挑选部分子图结构作为基本特征。这里的图匹配技术是通过图的编辑距离来衡量两个子图的匹配程度的,即当两个子图相似度(相同的节点和相同的边)达到一定程度时,即认为两个行为子图是同一子图。假设有任意两个图A和B,它们的编辑距离是指,通过增加、删除、替换顶点或者边操作,将图A变换为图B所需的最小代价。
[0048]当一个行为子图至少同时出现在同一族的两个恶意应用样本中时,它将被挑选作为一个基本特征。
[0049]5)模型训练
[0050]对已知的Android恶意应用族样本和正常应用样本分别进行上述步骤1)-3)的操作,得到一系列的行为子图集合。进一步通过比较上述步骤4)所得到的基本特征,即对于一个APP,如果含有上述的基本特征,则将其记为I,反之将其记为O,从而可将每一个APP表示为一个O和I组成的特征向量,最后通过机器学习法支持向量机(SVM)对含恶意应用和正常应用的样本集进行模型训练,生成分类器。
[0051 ] 6)分类未知APP
[0052]未知的Android应用首先进行第1)-3)步操作,生成相应的子图集合,然后与第4步生成的基本特征(即行为子图)进行比较,可将该APP表示为一个O与I组成的特征向量。该特征向量输入到训练所得到的分类器中,实现对未知APP的分类。如果该APP被判定为恶意软件,则输出恶意软件所属类型。
[0053]7)验证与评估
[0054]为了验证该方法的有效性和实用性,对700多个真实环境中的APP进行了验证与评估。并模拟了三种攻击场景,如代码加密攻击,线程划分攻击,垃圾代码注入攻击,以此验证该方法对这三种攻击的防御性,模拟的这三种攻击场景证明了本发明方法的有效性。
[0055]以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。
【主权项】
1.一种基于动态行为依赖图的Android恶意软件分类方法,其步骤包括: 1)在沙盒中执行Android应用并提取其动态行为信息,包括框架层接口调用行为和行为间的依赖关系; 2)根据提取的动态行为信息,将Android应用模型化为行为依赖图; 3)将构建的行为依赖图进行优化,然后将行为依赖图划分为更小尺寸的行为子图,每个Android应用被表不为一个行为子图集合; 4)从已知的Android恶意软件族中分别挑选多个样本进行第1)-3)步操作,并从得到的所有行为子图中通过图匹配技术挑选部分行为子图作为特征; 5)对已知的Android恶意应用族样本和正常Android应用样本分别进行第I)-3)步操作,得到一系列的行为子图集,然后通过比较第4)步选择的基本特征,将每一个Android应用表示为一个特征向量,进行模型训练; 6)将未知的Androi d应用利用步骤5)训练所得的分类器,实现对未知Andro i d应用的分类。2.如权利要求1所述的方法,其特征在于,步骤I)在自定义的Da IV i k虚拟机中运行Android应用,得到其相应的动态行为信息,包括框架层接口调用行为和行为间的依赖关系,具体方法为: 1-1)在Dalvik虚拟机运行过程中,Java指令解释过程被掌管,当函数调用指令被解释执行时,判断是否为一个框架层接口调用行为,如果是,则函数内的指令行为进一步被分析,用于记录行为之间的依赖关系; 1-2)搜集所有的系统框架层DEX函数库的文件指纹,以便区分普通函数调用和框架层接口调用行为; 1-3)在框架层接口函数执行过程中,执行沙盒进一步记录其中指令操作的数据依赖关系O3.如权利要求1所述的方法,其特征在于,步骤2)所述行为依赖图是有向图,图中的节点是指APP整个生命周期间调用的接口函数,边是指函数节点之间的数据依赖关系。4.如权利要求1所述的方法,其特征在于,步骤3)对构建的行为依赖图进行优化和划分,具体过程如下: 3-1)选择关键函数,合并重复节点,删除冗余边,以优化复杂的行为依赖图; 3-2)将行为依赖图划分成子图,以使得关键的恶意行为不会被正常行为所掩盖。5.如权利要求4所述的方法,其特征在于,所述选择关键函数的方法为:预先在恶意软件和正常软件中计算函数的调用频率,如果一个函数在恶意软件中调用的频率高于在正常软件中调用的频率,则将其作为关键函数;所述合并重复节点的方法为:将相互依赖的节点、依赖于同一节点的两个点合并成一个节点;所述删除冗余边的方法为:对于依赖关系:A依赖于B,B依赖于C,则存在很大的概率推导出A依赖于C,如果存在A依赖于C,可以将该冗余边删除;所述的划分子图的步骤为:首先在行为依赖图找到所有的叶子节点;然后递归针对每一个叶子节点寻找其所有的祖先节点;最后,每个叶子节点和它的祖先节点构成一个行为子图。6.如权利要求1所述的方法,其特征在于,步骤4)中,当同一个行为子图至少同时出现在同一族的两个恶意Android应用样本中时,该行为子图被挑选作为一个子图特征;所述图匹配技术通过图的编辑距离来衡量两个子图的匹配程度,即当两个子图相似度达到一定程度时,即认为两个行为子图是同一子图。7.如权利要求1所述的方法,其特征在于,步骤5)对已知的Android恶意应用族样本和正常应用样本利用步骤1)-4)将每一个应用构建为一个O与I的特征向量,然后对这些特征向量利用支持向量机进行模型训练,生成分类器。8.如权利要求1所述的方法,其特征在于,步骤6)对未知的Android应用首先构建其相应的特征向量,然后利用生成的分类器进行分类。9.如权利要求1所述的方法,其特征在于,还包括步骤7)即验证与评估步骤,该步骤利用步骤5)训练出的模型对现实环境中大量APP进行测试和评估,并且模拟三种攻击场景进行验证,所述三种攻击场景包括:代码加密攻击,线程划分攻击,垃圾代码注入攻击。10.—种采用权利要求1所述方法的基于动态行为依赖图的Android恶意软件分类系统,其特征在于,包括: Android应用执行沙盒模块,用于执行Android应用并提取其动态行为信息,包括框架层接口调用行为和行为间的依赖关系,然后根据动态信息构建动态行为依赖图; 行为依赖图处理模块,用于优化复杂的行为依赖图结构,并将行为依赖图划分成子图; 特征的自动提取模块,用于从恶意软件动态行为依赖图中提取相似的子图结构,将至少被两个恶意软件共同拥有的相似子图结构作为分类时的基本特征; 模型训练模块,用于训练含有恶意软件和正常软件集合的训练样本,生成分类器,用于对未知APP的分类; 未知APP分类模块,用于利用模型训练模块所得的分类器,实现对未知Android应用的分类。
【专利摘要】本发明涉及一种基于动态行为依赖图的Android恶意软件分类方法。其步骤包括:通过自定义的Dalvik虚拟机运行APP,提取框架层接口调用行为和行为间的依赖关系等动态行为信息;根据动态行为信息构建相应的动态行为依赖图;优化动态行为依赖图,并将行为依赖图划分成子图;从由不同族的Android恶意软件组成的集合中提取相似的子图结构,将其作为基本特征;根据基本特征,对由已知的恶意软件和正常软件组成的训练集进行模型训练,得到分类器;通过分类器,对未知的APP进行归类判断;对该方法进行验证和评估。本发明通过图的编辑距离来衡量行为子图的相似性,以此来寻找基本特征,具有良好的灵活性和可扩展性。
【IPC分类】G06F21/56, G06F21/53
【公开号】CN105653956
【申请号】
【发明人】王蕊, 林子敏, 代朋纹, 张道娟, 武传坤, 操晓春
【申请人】中国科学院信息工程研究所
【公开日】2016年6月8日
【申请日】2016年3月2日