基于API依赖关系图的安卓恶意代码检测方法与流程

文档序号:12720928阅读:760来源:国知局
基于API依赖关系图的安卓恶意代码检测方法与流程

本发明涉及移动安全的研究领域,特别涉及安卓恶意代码检测方法,利用语义认知的加权API依赖关系图对安卓恶意代码进行安全检测。



背景技术:

苹果、谷歌移动应用市场的App数量超过250万,下载量远超过800亿次。正是移动应用市场发展太迅速,暴露出诸多安全问题。卡巴斯基实验室(Kaspersky)表示,98.05%的恶意软件将目标瞄准了Android。这样需要我们投入越来越多的成本去对新型恶意软件进行人工分析。因此研发自动分析恶意代码的方法具有非常巨大的吸引力。

现有恶意代码自动检测和分类方法分为两大类:基于签名和基于机器学习。基于签名的方法要在字节码和API调用中找到特定模式,这样很容易被字节码级别的转换攻击所逃避。基于机器学习的方法从应用程序行为(例如许可请求和关键API调用)中提取特性和使用标准机器学习算法去执行二进制分类。因为所提取的特性是基于程序语法而不是程序语义,所以这种检测也容易被逃避。

为了解决恶意代码逃避自动检测问题,目前技术是将程序语义提炼成图形来表示,例如控制流图、数据依赖图和权限事件图。根据人工制作的规格说明去检查软件的相应图形,从而实现恶意代码检测。然而这些检测软件趋向于根据给定的规格说明去寻找精确的匹配代码,因此可能被恶意代码的多态性所逃避。

因此本领域致力开发一种能有效对抗字节码转换攻击和零日攻击的恶意代码检测方法,并应用在安卓应用市场上。



技术实现要素:

本发明的主要目的在于克服现有技术的缺点与不足,提供一种基于API依赖关系图的安卓恶意代码检测方法。

根据本发明的一个方面,提供了一种基于API依赖关系并具有权值的图形作为程序语义的方法。首先我们发现函数API的入口点,然后安全相关的调用参数进行分析,通过程序流程图发现API之间的关系,构建API依赖关系并具有权值的图形。

根据本发明的一个方面,我们这些图形储存在数据库中,每个图形代表着程序语义。然后在给定某个软件的情况下,利用基于聚合的索引,在这数据库中找到与该软件相应关系图最相似的方法。

建立正常代码和恶意代码的图形数据库(分别为NormalDB和MalwareDB),异常检测采用和正常应用的图形数据库NormalDB的图形相比较,如果该数据库有API图形是跟给定软件的关系图的相似度分数wgmaxdw(G,G',α)大于设定的阈值ξ,即可判断该软件是恶意代码。然后再将给定软件的API关系图与恶意代码的图形数据库MalwareDB中图形相比较,在比较中建立相似度的特性矢量,如果在特性矢量中存在相似度分数wgmaxdw(G,G',α)大于ξ的元素,即可判断与数据库中这个元素相应的恶意代码是同类病毒家庭。

为了达到上述目的,本发明采用以下技术方案:

本发明一种基于API依赖关系图的安卓恶意代码检测方法,用于审核软件开发者提交的安卓应用软件,检测软件是否带有恶意行为,该方法包括下述步骤:

S1、对应用软件的语义进行分析,生成API依赖关系图;

S2、在数据库中使用基于聚合的索引方法对给定的API依赖关系图进行相似度查询,存在正常代码和恶意代码的API依赖关系图API-DRG数据库,在API-DRG数据库中查询与给定的图最相似的依赖关系图,使用基于聚合的索引方法去提高查询效率和可扩展性,每个聚合由与API-DRG数据库中API相关联的位矢量组成,位矢量表示该API所在的软件包是否出现在该依赖关系图中,将给定软件的位矢量和聚合里的矢量相比较,找到相应的索引,从而查询到与给定软件相匹配的依赖关系图;

S3、通过数据库NormalDB和MalwareDB分别完成异常检测和签名检测,然后完成恶意代码检测与分类,利用异常检测去探测该软件是否是恶意软件;如果该软件是恶意软件,使用签名检测去确定该恶意软件的病毒类型。

作为优选的技术方案,步骤S1中,对应用软件的语义进行分析的具体方法为:

结合JAVA分析工具Soot框架,使用静态分析方法,执行图形生成程序,将安卓软件的字节码转换为相应的API依赖关系图API-DRG,该分析过程包括分析API的调用,利用上下文感知、数据流感知和模块间的数据流的分析方法,获得API调用引用参数和调用返回值,提取常量参数,确定API调用之间的数据依赖关系。

作为优选的技术方案,还包括基类的调用入口发现步骤,通过递归回溯的算法确定基类的调用入口,具体过程如下:任意选择一个调用,递归回溯分析它与前一个调用存在的依赖关系,直至发现一个不被其它API调用的入口,这即是唯一一个该类的入口。

作为优选的技术方案,所述API依赖关系图由一些拥有依赖关系的API组成,在依赖关系图中,API作为点、API之间的依赖关系为边,而对于边的标记分为两类,一种是由API原型、入口点、常量系统组成;第二种是涉及安卓安全级别的权重。

作为优选的技术方案,步骤S2中,还包括将两个依赖关系图的相似度进行量化,计算图形相似度,图形相似度是这个图形转变另外一个图形的成本,即为了变成另外一个图形,删除旧的点和新建点的成本,而这个成本被称为带权重图形的编辑距离,以下有两个公式得出两张图之间转变成:

公式一:

公式一中,wgdist(G,G',α)为图形G转变至图形G’的最小成本,α是统一计算权重的函数,V和V’分别是两个图形的顶点,VI和VD分别是在图形G新增的边和在图形G删除的边;

公式二:

公式二中,wgmaxdw(G,G',α)为图形G和G’之间转变的最大编辑成本,φ为空图。

作为优选的技术方案,步骤S2中,还包括API依赖关系图中关键API的选择,因为为每个API分配权重和进行相似性匹配是不现实的,所以需选择与系统安全相关的关键API,为了能发现这些API,采用概念学习方式,通过恶意代码的正面样本集合和正常代码的反面样本集合出现的频率来决定关键API标记,所选的API将对恶意代码更加敏感。

作为优选的技术方案,步骤S2中,还包括API依赖关系图中API的权重分配能自动化,为了最优化给API自动分配权重,将API-DRG中同类型的图形相似度与不同类型的图形相似度之间的差值最大化,此时的权重矢量即是最优化的权重分配,通过以下公式求得最佳权重矢量:

当v是关键API顶点时,1≤α(v)≤δ;否则α(v)=1;

公式中α是权重函数,δ是最大的权重值;

结合上面公式,通过使用局部择优的算法,通过循环计算该公式,求得最佳的权重矢量。

作为优选的技术方案,步骤S3中,所述异常检测具体为:

首先建立正常代码的API-DRG数据库NormalDB,然后将要检测的软件的依赖关系图与数据库NormalDB中图形比较,查询数据库中是否存在跟它相似的图形,如果数据库中不存在一个图形与要检测软件的图形的相似度分数wgmaxdw(G,G',α)等于或大于设置的阈值ξ,即判定该软件异常。

作为优选的技术方案,所述签名检测具体为:

从安卓恶意软件Genome项目中提取里面恶意软件的API-DRG,建立恶意代码的API-DRG数据库MalwareDB,然后去除数据库MalwareDB中相似度高的图形,保证数据库中每个图形具有自己的独特性,并分别代表不同类恶意软件,给定一个恶意软件样本,为其生成API-DRG图形,然后在上面说的恶意代码数据库MalwareDB中查询是否存在相似的图形,将给定的API-DRG图形与数据库MalwareDB中所有图形比较,形成相应的相似度系数wgmaxdw(G,G',α),将这些系数输入到特性矢量中,已知样本代码的特性矢量,对应着恶意代码种类标签,这样分类器能将样本和不同种类恶意代码相匹配,最后对恶意代码进行分类。

作为优选的技术方案,采用恶意代码分类器进行或Bayes算法来对恶意软件进行分类。

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

1、本发明不再像传统的检测方法和工具一样通过分析代码的序列特征或者行为特征作检测,而是基于API依赖关系图,通过图形相似度匹配进行异常检测和分类检测,提高了检测和分类的准确性。

2、本发明降低了传统检测方法中更新特征代码库的成本,易于生成变种恶意代码的依赖关系图库,基于聚合的索引方法能对新型或未知的恶意代码作出快速检测报告和分类,有效应对恶意代码的演变、传播。

附图说明

图1是本发明检测方法的部署图。

图2是图基于由权重和API依赖关系图对安卓恶意代码进行检测和分类的流程图。

具体实施方式

下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。

实施例

如图1所示,基于带权重的API依赖关系图对安卓恶意代码进行分类的语义认知方法而设计的软件,该软件用于安卓应用市场的提交审核上,检测软件开发者提交的软件是否带有恶意行为。

当开发者向安卓应用市场提交手机应用时,安卓市场会将该软件转交给在线检测服务器,在线检测服务器检测结束后,将相关安全报告发给安卓市场,报告会提到该安卓应用是否具有恶意行为。如果有恶意行为,则提及该恶意行为属于哪种类型的恶意行为。而在线检测服务器后台还有具有建造图形数据库API-DRG和签名检测分类器训练功能的服务器,它向在线检测服务器更新API-DRG数据库和签名检测分类器。

如图2所示,基于由权重和API依赖关系图对安卓恶意代码进行分类的语义认知方法的检测软件工作流程分为三部分:

(1)根据对应用软件的语义分析,生成API依赖关系图API-DRG。结合JAVA分析工具Soot框架,使用静态分析方法,执行图形生成程序,将安卓软件的字节码转换为相应的API依赖关系图API-DRG。该分析方法包括API调用的入口发现,上下文感知、数据流感知和模块间的数据流的分析方法,这些方法定位API调用引用参数和调用返回值,提取常量参数,决定API调用之间的数据依赖关系。

API调用的入口发现要求找出基类的调用方法。在程序分析的过程中,我们会发现有很多API调用入口基类的调用方法,通过递归回溯的算法确定基类的调用入口,具体过程如下:任意选择一个调用,递归回溯分析它与前一个调用存在的依赖关系,直至发现一个不被其它API调用的入口,这即是唯一一个该类的入口。

使用加权与API依赖关系图(API-DRG)由一些拥有数据依赖关系的API调用操作组成。在依赖关系图中,API作为点、API之间的依赖关系为边。而对于边,它具有两类标签,一种是由API原型、入口点、常量系统组成;第二种是涉及安卓安全级别的权重。

(2)使用基于聚合的索引方法对依赖关系图进行相似度查询。

在生成正常代码和恶意代码的API依赖关系图数据库后,我们在API-DRG数据库中查询与给定的图最相似的依赖关系图。,我们使用基于聚合的索引方法去提高查询效率和可扩展性。每个聚合由与API-DRG中API相关联的位矢量组成,位矢量表示该API所在的软件包是否出现在该依赖关系图中。我们将给定软件的位矢量和聚合的矢量相比较,很快就找到相应的索引,从而查询到与给定软件匹配的依赖关系图。

(3)给定一个软件,为其生成API-DRG图形,然后在上面说的数据库中查询相似的图形。在与数据库中所有图形比较中,形成相应的相似度系数,将这些系数输入到特性矢量中。已知恶意代码样本的特性矢量对应着恶意代码种类标签,这样让分类器能理解不同种类恶意代码的独特性。

(4)通过正常代码和恶意代码的数据库分别完成异常检测和签名检测。利用异常检测去探测该软件是否是恶意软件。如果该软件是恶意软件,使用签名检测去确定该恶意软件的病毒类型。

使用异常检测去检测安卓软件是否存在恶意行为。首先建立正常软件的API-DRG数据库,然后将要检测的软件与数据库中图形比较,判断是否存在跟它相似的图形,如果数据库中不存在一个图形与要检测软件的图形的相似度分数wgmaxdw(G,G',α)等于或大于设置的阈值ξ,即该软件存在异常。

对于签名检测,首先我们从安卓恶意软件Genome项目中提取里面恶意软件的API-DRG,建立恶意代码的API-DRG数据库,然后去除数据库中相似度高的图形,保证数据库中每个图形具有自己的独特性和不同恶意软件家族的代表性。给定一个恶意软件,通过上面第(3)步所说求出该软件的特性矢量,最后使用这个特性矢量对该软件进行分类。

上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

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