基于逆向符号执行的应用权限泄漏检测方法及系统的制作方法

文档序号:6636366阅读:291来源:国知局
基于逆向符号执行的应用权限泄漏检测方法及系统的制作方法
【专利摘要】本发明涉及一种基于逆向符号执行的应用权限泄漏检测方法及系统,所述方法包括:S1、构建待检测应用的控制流图;S2、通过应用程序编程接口API与预设权限的映射关系,在所述控制流图上标记可能泄露权限的节点;S3、以所述可能泄露权限的节点为起点,通过逆向的符号执行遍历所述控制流图,寻找从所述起点到程序入口点的所有路径,从所述起点到所述程序入口的所有路径即为可能泄露权限的路径。该方法使用逆向的符号执行的方式,只需要遍历从敏感应用程序编程接口API调用点到程序入口点之间的所有可能路径,避免遍历与权限泄露无关的路径,从而提高了检测效率。
【专利说明】基于逆向符号执行的应用权限泄漏检测方法及系统

【技术领域】
[0001]本发明涉及移动信息安全【技术领域】,尤其涉及一种基于逆向符号执行的应用权限泄漏检测方法及系统。

【背景技术】
[0002]Android应用的安全性已经成为威胁产业发展的严峻问题。每天,软件商店和病毒工具厂商每天都能收到上百甚至上千个可疑的恶意应用样本。如何对这些恶意应用进行快速、准确的分析,确定其是否存在威胁以及威胁的严重程度,是安全分析专家的核心工作之一。安全专家对恶意软件进行细致的人工动态分析是一个有效的手段,但是人工动态分析需要耗费大量的人力和时间,其检测效率很低。


【发明内容】

[0003]基于上述问题,本发明提供一种基于逆向符号执行的应用权限泄漏检测方法及系统,通过使用逆向的符号执行的方式,只需要遍历从敏感应用程序编程接口 API调用点到程序入口点之间的所有可能路径,避免遍历与权限泄露无关的路径,从而提高了检测效率。
[0004]根据上述目的,本发明提供了一种基于逆向符号执行的应用权限泄漏检测方法,所述方法包括:
[0005]S1、构建待检测应用的控制流图;
[0006]S2、通过API与预设权限的映射关系,在所述控制流图上标记可能泄露权限的节占.
[0007]S3、以所述可能泄露权限的节点为起点,通过逆向的符号执行遍历所述控制流图,寻找从所述起点到程序入口点的所有路径,从所述起点到所述程序入口的所有路径即为可能泄露权限的路径。
[0008]其中,所述方法还包括:
[0009]对遍历所述控制流图得到的所有路径的约束条件进行求解,得到所有可能泄露权限的路径的输入条件。
[0010]在对遍历所述控制流图得到的路径的约束条件的求解时,当任一条路径的约束条件无解时,则排除该路径。
[0011]其中,所述方法还包括:
[0012]根据所述可能泄露权限的路径、对应约束条件和输入条件,生成针对所述待检测应用的权限泄露风险报告。
[0013]其中,所述步骤S3具体包括:
[0014]S31,以标记的所述可能泄露权限的节点为起点,设定约束条件通过逆向的符号执行遍历所述控制流图;
[0015]S32,当在遍历过程中遇到分支节点时,对所述分支节点的各个分支分别设定约束条件进行遍历;
[0016]S33,重复步骤S32,直至遍历到所述程序入口,从所述起点到所述程序入口点的所有路径即为可能泄露权限的路径。
[0017]其中,所所述步骤S32还包括:
[0018]当在遍历时发现对所述预设权限的检查语句的调用时,则结束该路径的遍历。
[0019]其中,所述控制流图为过程间控制流图。
[0020]根据本发明的另一个方面,提供一种基于逆向符号执行的应用权限泄漏检测系统,其特征在于,所述系统包括:
[0021]控制流图构建单元,用于构建待检测应用的控制流图;
[0022]可能泄露权限标记单元,用于通过API与预设权限的映射关系,在所述控制流图上标记可能泄露权限的节点;
[0023]控制流图遍历单元,用于以所述可能泄露权限的节点为起点,通过逆向的符号执行遍历所述控制流图,寻找从所述起点到程序入口点的所有路径,所述从所述起点到所述程序入口的所有路径即为可能泄露权限的路径。
[0024]其中,所述系统还包括:
[0025]约束条件求解单元,用于对遍历所述控制流图得到的所有路径的约束条件进行求解,得到所有可能泄露权限的路径的输入条件。
[0026]其中,所述系统还包括:
[0027]权限泄露风险报告单元,用于根据所述可能泄露权限的路径、对应约束条件和输入条件,生成针对所述待检测应用的权限泄露风险报告。
[0028]本发明所述的基于逆向符号执行的应用权限泄漏检测方法及系统,通过使用逆向的符号执行的方式,只需要遍历从敏感API调用点到程序入口点之间的所有可能路径,避免遍历与权限泄露无关的路径,从而避免全局性的正向执行的开销,提高了检测效率。

【专利附图】

【附图说明】
[0029]通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中:
[0030]图1示出了本发明的基于逆向符号执行的应用权限泄漏检测方法的流程图。
[0031]图2示出了本发明的基于逆向符号执行的应用权限泄漏检测系统的结构框图。

【具体实施方式】
[0032]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0033]图1示出了本发明的基于逆向符号执行的应用权限泄漏检测方法的流程图。
[0034]参照图1,本发明的基于逆向符号执行的应用权限泄漏检测方法的过程具体包括:
[0035]S1、构建待检测应用的控制流图;通过对待检测应用的二进制字节码进行解析,通过字节码分析,构建待检测应用的过程间控制流图。和过程内的控制流图不同,过程间控制流图需要在调用函数的控制流图中添加函数调用节点和函数返回结点,并将这两个节点和被调函数的入口和出口分别连接起来。
[0036]此外,对于Android应用程序来说,应用程序大量的调用了 Android的应用框架API,而应用程序框架在完成一些库函数的工作后,又会回调被分析应用的相关代码。这样,在控制流图上,从应用调用框架API到应用代码被回调的过程中,其实存在隐式的控制流关系。对于Android应用的事件驱动特性,这种隐式的控制流调用非常普遍。
[0037]因此,在生成的过程间控制流图中显示的添加这些控制依赖关系,例如线程的启动,事件的监听和回调,异步消息,Intent等相关代码对应的控制流图节点都需要添加相应的控制流边。
[0038]S2、通过API与预设权限的映射关系,在所述控制流图上标记可能泄露权限的节点。
[0039]本发明的实施例中对应用代码进行快速扫描,通过API及其对应权限的映射表,找到对敏感权限的相关API调用点,并在控制流图上的相应结点进行标记。这些结点也是下一步逆向符号执行的起点。同时,本实施例解析Android应用中的Manifest, xml文件,找到程序的所有入口点,并在控制流图上对其进行标注。
[0040]S3、以所述可能泄露权限的节点为起点,通过逆向的符号执行遍历所述控制流图,寻找从所述起点到程序入口点的所有路径,所述从所述起点到所述程序入口的所有路径即为可能泄露权限的路径。
[0041]步骤S3的具体过程包括:
[0042]以标记的节点即敏感API调用点为起点,进行逆向的符号执行,其执行过程是一个对控制流图遍历并对节点语句进行解释执行的过程。
[0043]逆向的符号执行是和程序执行相反的方向遍历控制流图,对于控制流图中遍历到的节点,取出其对应的语句进行解析。整个解析的过程为每个变量维护了一个的符号表达式。对每个语句进行解析的时候,需要根据不同的操作运算符的逻辑,对操作数变量对应的符号表达式进行相应的逻辑运算,并算出被赋值变量所对应的符号表达式。
[0044]在逆序遍历的过程中,解析到一个新的语句时,对于作为操作数的变量,用其符号表达式进行替换。当遇到分支语句后,会产生不同的路径,将不同分支所对应的路径条件作为对应变量的约束条件,并添加到相应路径的约束条件集合中。
[0045]另外,对于循环的goto语句,由于理论上可能存在无限的循环,所以我们会给出一个对循环探索的上限。
[0046]最终,逆向符号执行遍历到控制流图中程序入口点语句所对应的结点,一条路径则符号执行完毕。
[0047]此外,当一条路径在遍历过程中发现对相应权限检查语句的调用时,则该路径可以直接停止遍历,因为对相应权限的泄漏可以被权限检查避免。
[0048]通过上述过程,当所有路径符号执行完毕后,就可以得到可能泄漏权限的所有路径及其对应的约束条件集合。
[0049]将每个路径所对应的约束条件集合输入给约束求解器,如果求解器有解,则找到了一条权限泄漏的路径及其对应的输入变量的条件集合。否则,排除该路径。这样,最终得到针对设定权限的所有泄漏权限路径及其对应的输入条件。
[0050]最后,可以根据得到的可能泄露权限的路径、对应约束条件和输入条件,生成针对该待检测应用的权限泄露风险报告。
[0051]本发明的另一实施例中,提供了一种逆向符号执行的应用权限泄漏检测系统。
[0052]图2示出了本发明的基于逆向符号执行的应用权限泄漏检测系统的结构框图。
[0053]参照图2,本发明的实施例的基于逆向符号执行的应用权限泄漏检测系统包括:
[0054]控制流图构建单元10,用于构建待检测应用的控制流图;
[0055]可能泄露权限标记单元20,用于通过API与预设权限的映射关系,在所述控制流图上标记可能泄露权限的节点;
[0056]控制流图遍历单元30,用于以所述可能泄露权限的节点为起点,通过逆向的符号执行遍历所述控制流图,寻找从所述起点到程序入口点的所有路径,从所述起点到所述程序入口的所有路径即为可能泄露权限的路径。
[0057]在本发明的另一个实施例中,基于逆向符号执行的应用权限泄漏检测系统还可以包括:
[0058]约束条件求解单元40,用于对遍历所述控制流图得到的所有路径的约束条件进行求解,得到所有可能泄露权限的路径的输入条件。
[0059]权限泄露风险报告单元50,用于根据所述可能泄露权限的路径、对应约束条件和输入条件,生成针对所述待检测应用的权限泄露风险报告。
[0060]本发明所述的基于逆向符号执行的应用权限泄漏检测方法及系统,通过使用逆向的符号执行的方式,只需要遍历从敏感API调用点到程序入口点之间的所有可能路径,避免遍历与权限泄露无关的路径,从而避免全局性的正向执行的开销,提高了检测效率。
[0061]虽然结合附图描述了本发明的实施方式,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
【权利要求】
1.一种基于逆向符号执行的应用权限泄漏检测方法,其特征在于,所述方法包括: 51、构建待检测应用的控制流图; 52、通过应用程序编程接口API与预设权限的映射关系,在所述控制流图上标记可能泄露权限的节点; 53、以所述可能泄露权限的节点为起点,通过逆向的符号执行遍历所述控制流图,寻找从所述起点到程序入口点的所有路径,从所述起点到所述程序入口的所有路径即为可能泄露权限的路径。
2.根据权利要求1所述的基于逆向符号执行的应用权限泄漏检测方法,其特征在于,所述方法还包括: 对遍历所述控制流图得到的所有路径的约束条件进行求解,得到所有可能泄露权限的路径的输入条件。
3.根据权利要求2所述的基于逆向符号执行的应用权限泄漏检测方法,其特征在于,所述方法还包括: 在对遍历所述控制流图得到的路径的约束条件的求解时,当任一条路径的约束条件无解时,则排除该路径。
4.根据权利要求1所述的基于逆向符号执行的应用权限泄漏检测方法,其特征在于,所述方法还包括: 根据所述可能泄露权限的路径、对应约束条件和输入条件,生成针对所述待检测应用的权限泄露风险报告。
5.根据权利要求1所述的基于逆向符号执行的应用权限泄漏检测方法,其特征在于,所述步骤S3具体包括: S31,以标记的所述可能泄露权限的节点为起点,设定约束条件通过逆向的符号执行遍历所述控制流图; S32,当在遍历过程中遇到分支节点时,对所述分支节点的各个分支分别设定约束条件进行遍历; S33,重复步骤S32,直至遍历到所述程序入口,从所述起点到所述程序入口点的所有路径即为可能泄露权限的路径。
6.根据权利要求1所述的基于逆向符号执行的应用权限泄漏检测方法,其特征在于,所所述步骤S32还包括: 当在遍历时发现对所述预设权限的检查语句的调用时,则结束该路径的遍历。
7.根据权利要求1所述的基于逆向符号执行的应用权限泄漏检测方法,其特征在于,所述控制流图为过程间控制流图。
8.一种基于逆向符号执行的应用权限泄漏检测系统,其特征在于,所述系统包括: 控制流图构建单元,用于构建待检测应用的控制流图; 可能泄露权限标记单元,用于通过应用程序编程接口 API与预设权限的映射关系,在所述控制流图上标记可能泄露权限的节点; 控制流图遍历单元,用于以所述可能泄露权限的节点为起点,通过逆向的符号执行遍历所述控制流图,寻找从所述起点到程序入口点的所有路径,所述从所述起点到所述程序入口的所有路径即为可能泄露权限的路径。
9.根据权利要求8所述的基于逆向符号执行的应用权限泄漏检测系统,其特征在于,所述系统还包括: 约束条件求解单元,用于对遍历所述控制流图得到的所有路径的约束条件进行求解,得到所有可能泄露权限的路径的输入条件。
10.根据权利要求8所述的基于逆向符号执行的应用权限泄漏检测系统,其特征在于,所述系统还包括: 权限泄露风险报告单元,用于根据所述可能泄露权限的路径、对应约束条件和输入条件,生成针对所述待检测应用的权限泄露风险报告。
【文档编号】G06F21/57GK104462984SQ201410706922
【公开日】2015年3月25日 申请日期:2014年11月27日 优先权日:2014年11月27日
【发明者】姜博, 陈鹏, 高小鹏, 吴煜, 龙翔, 万寒 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1