首页> 中国专利> 基于动态行为依赖图的Android恶意软件分类方法

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

摘要

本发明涉及一种基于动态行为依赖图的Android恶意软件分类方法。其步骤包括:通过自定义的Dalvik虚拟机运行APP,提取框架层接口调用行为和行为间的依赖关系等动态行为信息;根据动态行为信息构建相应的动态行为依赖图;优化动态行为依赖图,并将行为依赖图划分成子图;从由不同族的Android恶意软件组成的集合中提取相似的子图结构,将其作为基本特征;根据基本特征,对由已知的恶意软件和正常软件组成的训练集进行模型训练,得到分类器;通过分类器,对未知的APP进行归类判断;对该方法进行验证和评估。本发明通过图的编辑距离来衡量行为子图的相似性,以此来寻找基本特征,具有良好的灵活性和可扩展性。

著录项

  • 公开/公告号CN105653956A

    专利类型发明专利

  • 公开/公告日2016-06-08

    原文格式PDF

  • 申请/专利权人 中国科学院信息工程研究所;

    申请/专利号CN201610119003.6

  • 申请日2016-03-02

  • 分类号G06F21/56(20130101);G06F21/53(20130101);

  • 代理机构北京君尚知识产权代理事务所(普通合伙);

  • 代理人邱晓锋

  • 地址 100093 北京市海淀区闵庄路甲89号

  • 入库时间 2023-12-18 15:42:25

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-01-25

    授权

    授权

  • 2016-07-06

    实质审查的生效 IPC(主分类):G06F21/56 申请日:20160302

    实质审查的生效

  • 2016-06-08

    公开

    公开

说明书

技术领域

本发明属于网络安全技术领域,具体涉及一种基于动态行为依赖图的Android恶意软件 分类方法。

背景技术

随着Android系统的流行,越来越多的应用软件被用户下载安装。根据Google官方数据, 每个月有超过15亿的APP从GooglePlay应用市场中被下载。在这巨大的利益的驱动下,攻 击者开发出大量的Android恶意软件并上传到网上或者第三方的应用市场进行破坏或牟利。 如McAfee实验室的报告所描述,他们2015年第一季度便检测出了110万移动恶意软件。这 些恶意软件严重威胁Android系统平台的安全。

为了保护Android系统的安全和抵御恶意软件的攻击,研究者已经提出一系列的静态分 析方法和动态分析方法。静态分析法通常是在不执行应用软件的情况下对其进行反编译,采 用控制流分析、数据流分析和语义分析等技术从APK文件、配置文件以及解析生成的文件中 提取特征。进一步地,根据这些特征对Android恶意软件进行检测或分类。虽然静态分析法 能够快速高效的进行检测,但是易受到代码混淆和多态变化技术的影响。比如对APK进行加 密后,静态分析法将无法反编译程序,进而无法从源码或解析生成的文件中提取有效信息。 再如采用java反射机制的APK,将在运行时动态获取类的信息以及动态调用对象的方法,这 给静态构造控制流等信息带来了很大的困难。这些因素限制的静态分析法在一些场景下的使 用。

而动态分析法在一定程度上可以弥补静态分析法的不足,它一般通过运行代码来监测系 统调用、网络特征、文件或内存修改以及信息处理等行为等对Android恶意软件的检测或分 类。针对Android恶意软件,当前的动态技术主要针对敏感数据的传播进行管控,防止隐私 泄露。或者直接根据关键的接口调用行为进行简单的恶意评估,如区分恶意或者正常的软件, 不能有效的确定具体的恶意软件类型。此外,也有利用动态分析法提取恶意软件线程级的API 行为序列进行分析,但是该方法会受到划分线程行为或记录独立API等技术的攻击。针对这 些不足,研究能够基于动态行为、抵抗多种攻击、高准确率的恶意Android软件分类方法能 够有效帮助安全厂商和工作者对恶意软件进行分析。

发明内容

本发明的目的在于提供一种能够同时基于Android恶意软件动态行为与行为语义关联的 恶意软件分类方法,抵御多种存在的代码攻击方法,如代码加密攻击,线程划分攻击,垃圾 代码注入攻击。

本方法的主要内容是:Android软件首先在一个特殊的执行沙盒中被执行,用于提取它们 的动态执行行为信息。基于这些信息,每一个Android软件被模型化为一个动态行为依赖图 (DynamicBehaviorDependencyGraph,DBDG)。在图中,不仅包含Android应用软件的行为, 也包括行为之间的依赖。这些图信息将进一步被划分和优化。最终,同一族恶意软件的行为 图被搜集,用于机器学习模型的训练和分类未知的Android恶意软件。

本发明的基于动态行为依赖图的Android恶意软件分类方法,其具体步骤如下:

1)动态行为信息提取:在沙盒中执行Android应用并提取其动态行为信息,包括框架层 接口调用行为和行为间的依赖关系;

2)构建行为依赖图:根据提取的动态行为信息,将Android应用模型化为行为依赖图;

3)优化并划分行为依赖图:将构建的行为依赖图进行优化,然后将行为依赖图划分为更 小尺寸的行为子图,每个Android应用被表示为一个行为子图集合;

4)特征的自动提取:从已知的Android恶意软件族中分别挑选多个样本进行第1)-3) 步操作,并从得到的所有行为子图中通过图匹配技术挑选部分行为子图作为特征;

5)模型训练:对已知的Android恶意应用族样本和正常Android应用样本分别进行第1) -3)步操作,得到一系列的行为子图集合,然后通过比较第4)步选择的行为子图特征,将每 一个Android应用表示为一个特征向量,进行模型训练;

6)分类未知APP:将未知的Android应用首先进行第1)-3)步操作,并与第4)步选 择的行为子图特征进行比较,表示为一个特征向量;该特征向量输入到基于步骤5)训练的 模型,实现对未知Android应用的分类。

进一步地,步骤1)所述的动态行为信息提取过程为:修改Android应用执行的Dalvik 虚拟机,掌管应用Java代码指令的解释过程;通过分析函数调用指令,输出Android系统框 架层调用行为;通过分析Dalvik虚拟机中的Java对象(Object)创建、修改等指令过程,输 出框架层接口调用行为间的数据依赖。

进一步地,步骤2)所述的行为依赖图构建是根据步骤1)提取到的框架层接口调用行为 和行为间的依赖关系,将其抽象为一个有向图,图中的节点是指APP整个生命周期间调用的 接口函数,边是指函数节点之间的数据依赖关系。

进一步地,步骤3)所述的优化行为依赖图的过程为:首先,预先从恶意软件和正常软 件中选择关键函数,关键函数的选取原则是在恶意软件中函数出现的频率高于在正常软件中 出现的频率;然后,合并行为依赖图中的重复节点并去除行为依赖图中的冗余边。

进一步地,步骤3)划分行为依赖图的过程为:首先,在行为依赖图找到所有的叶子节 点(出度为0);然后,递归针对每一个叶子节点寻找其所有的祖先节点;最后,每个叶子节 点和它的祖先节点构成一个行为子图。

进一步地,步骤4)中特征的自动提取方法为:当同一个行为子图至少同时出现在同一 族的两个恶意Android应用样本中时,它将被挑选作为一个子图特征。

进一步地,在步骤4)中,同一个行为子图的定义为:当两个子图相似度(相同的节点和 相同的边)达到一定程度时,即认为两个行为子图是同一子图。

进一步地,步骤5)中模型训练方法为:一个Android应用根据其是否包含步骤4)中选 择的特征,被表示为一个由0和1组成的特征向量;已知类型的恶意应用和正常应用的特征 向量由支持向量机(SVM)进行训练。

进一步地,步骤6)中Android应用的分类方法为:基于步骤5)生成的SVM模型,Android 应用被判断是否为恶意软件,如果是,进一步输出恶意软件类型。

进一步地,上述方法还可包括步骤7),即验证与评估步骤,该步骤是利用步骤5)训练 出的模型对现实环境中大量的APP进行测试和评估,并且模拟了三种攻击场景,如代码加密 攻击,线程划分攻击,垃圾代码注入攻击,对该方法进行验证。

本发明还提供一种采用上述方法的基于动态行为依赖图的Android恶意软件分类系统, 其包括:

Android应用执行沙盒模块:用于执行Android应用并提取其动态行为信息,包括框架层 接口调用行为和行为间的依赖关系,然后根据动态信息构建动态行为依赖图;

行为依赖图处理模块:用于优化复杂的行为依赖图结构,并将行为依赖图划分成子图;

特征的自动提取模块:用于从恶意软件动态行为依赖图中提取相似的子图结构,将至少 被两个恶意软件共同拥有的相似子图结构作为分类时的基本特征;

模型训练模块:用于训练含有恶意软件和正常软件集合的训练样本,生成分类器,用于 对未知APP的分类;

未知APP分类模块:用于分类未知APP。

进一步地,还包括验证评估模块:用于进行测试和验证,并模拟一些攻击场景进行验证 和评估。

本发明的优点和积极效果如下:

本发明通过一个自定义的Dalvik虚拟机运行APP,生成相应的动态行为依赖图,这种动 态提取行为信息的方法可以克服静态分析法的不足;此外基于动态行为依赖图,通过图匹配 技术进行聚类,自动提取相似的子图结构作为基本特征,使得特征选择具有很强的灵活性和 扩展性;为有效快速地提取特征而进行的选择关键函数、重复点合并、冗余边删除以及将动 态行为依赖图划分成子图等优化行为依赖图的操作,保证了本发明的性能;最后通过SVM对 700多个APP进行了验证,具有很高的检测率,模拟的三种攻击场景也说明了本发明的有效 性。

附图说明

图1是本发明的Android恶意程序分类方法的步骤流程图。

图2是Dalvik沙盒执行应用提取行为及行为依赖的基本过程图。

具体实施方式

下面通过具体实施例和附图,对本发明做进一步说明。

图1是本发明的Android恶意程序分类方法的步骤流程图,其中1(a)、1(b)、1(c)是Android 应用训练样本的处理过程,2(a)、2(b)、2(c)是未知Android应用的处理过程。该方法具体包 括如下步骤:

1)动态行为信息提取

图2是Dalvik沙盒执行Android应用,并提取行为及行为间依赖关系的基本过程图。 Android应用首先在特别构造的执行沙盒中被执行,提取它的框架层接口调用行为和行为之间 的依赖关系。在这个过程中,Dalvik虚拟机中的Java指令解释过程被掌管,当函数调用指令, 如“invoke-*”被解释执行时,将首先判断是否为一个框架层接口调用行为。如果是,则该函 数行为将被记录,其函数内的指令行为将进一步被分析,用于记录行为之间的依赖关系。

为了区分普通函数调用和框架层接口调用行为,本系统首先搜集了所有的系统框架层 DEX函数库的文件指纹。当Dalvik虚拟机中发生函数调用,将同时检查调用函数和被调用函 数。如果调用函数所在文件的指纹不属于系统函数库文件,且被调用函数所在文件的指纹属 于系统函数库文件,则认为该函数调用过程为一次框架层接口调用行为,系统将为其分配一 个唯一的标识(BID)。

在框架层接口函数执行过程中,执行沙盒将进一步记录其中指令操作的数据依赖关系。 本系统中对Java对象级的数据依赖进行了记录。如果在框架层接口函数执行过程中,一个Java 对象被创建,本系统将为其分配同等大小的影子内存,影子内存用于记录Java对象中每一个 域依赖关系。初始时,对象的影子内存将用对象创建时所处接口调用的BID填充;如果一个 对象域数据被修改,该对象域的影子内存也将修改为当前指令所在接口调用行为BID;如果 对象域中的数据被读取,则当前指令所在接口调用行为将与对象域影子内存中的BID建立依 赖关系。当一个框架层接口调用函数完成,这些信息统一被输出。

2)构建行为依赖图

根据提取到的框架层接口调用行为和行为间的依赖关系,将Android应用模型化为行为 依赖图。该图是一个有向图,图中的节点是指APP整个生命周期间调用的接口函数,边是指 函数节点之间的数据依赖关系。

3)优化并划分行为依赖图

将构建的行为依赖图进行优化,然后将行为依赖图划分为更小尺寸的行为子图,每个APP 被表示为一个行为子图集合。

根据动态行为信息构建的行为依赖图可能会很复杂,需要对该图进行优化处理:第一, 预先在恶意软件和正常软件中计算函数的调用频率,如果一个函数在恶意软件中调用的频率 高于在正常软件中调用的频率,则将其作为关键函数;此外一些无效的函数可能会掩盖掉关 键行为的表现,因此需要排除这些无效的函数。这样有利于减少行为依赖图中节点的数目。 第二,由于从APP中提取的行为依赖图可能含有重复节点和冗余边,可以将相互依赖的节点、 依赖于同一节点的两个点合并成一个节点;对于依赖关系:A依赖于B,B依赖于C,则存 在很大的概率推导出A依赖于C,如果存在A依赖于C,可以将该冗余边删除。

如果直接在动态行为依赖图中寻找公共子图,关键的恶意行为可能会被许多正常行为掩 盖,为此可将行为依赖图图划分成子图。其划分过程为:首先,在行为依赖图找到所有的叶 子节点(出度为0);然后,递归针对每一个叶子节点寻找其所有的祖先节点;最后,每个叶 子节点和它的祖先节点构成一个行为子图。

4)特征的自动提取

从已知的Android恶意应用族中分别挑选多个样本进行上述步骤操作,从得到的所有行 为子图中通过图匹配技术挑选部分子图结构作为基本特征。这里的图匹配技术是通过图的编 辑距离来衡量两个子图的匹配程度的,即当两个子图相似度(相同的节点和相同的边)达到一 定程度时,即认为两个行为子图是同一子图。假设有任意两个图A和B,它们的编辑距离是 指,通过增加、删除、替换顶点或者边操作,将图A变换为图B所需的最小代价。

当一个行为子图至少同时出现在同一族的两个恶意应用样本中时,它将被挑选作为一个 基本特征。

5)模型训练

对已知的Android恶意应用族样本和正常应用样本分别进行上述步骤1)-3)的操作,得 到一系列的行为子图集合。进一步通过比较上述步骤4)所得到的基本特征,即对于一个APP, 如果含有上述的基本特征,则将其记为1,反之将其记为0,从而可将每一个APP表示为一 个0和1组成的特征向量,最后通过机器学习法支持向量机(SVM)对含恶意应用和正常应 用的样本集进行模型训练,生成分类器。

6)分类未知APP

未知的Android应用首先进行第1)-3)步操作,生成相应的子图集合,然后与第4步生 成的基本特征(即行为子图)进行比较,可将该APP表示为一个0与1组成的特征向量。该 特征向量输入到训练所得到的分类器中,实现对未知APP的分类。如果该APP被判定为恶 意软件,则输出恶意软件所属类型。

7)验证与评估

为了验证该方法的有效性和实用性,对700多个真实环境中的APP进行了验证与评估。 并模拟了三种攻击场景,如代码加密攻击,线程划分攻击,垃圾代码注入攻击,以此验证该 方法对这三种攻击的防御性,模拟的这三种攻击场景证明了本发明方法的有效性。

以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可 以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保 护范围应以权利要求书所述为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号