Android应用漏洞检测方法及系统的制作方法

文档序号:6546833阅读:190来源:国知局
Android应用漏洞检测方法及系统的制作方法
【专利摘要】本发明提供一种Android应用漏洞检测方法,包括:步骤一、通过分析待检测Android应用的Content?Provider接口特征,判断其是否可能存在隐私泄露漏洞;步骤二、如果可能存在,针对可能存在隐私泄露漏洞的待检测Android应用,通过对Android系统中相关API函数的监控,对待检测Android应用的公开可访问URI进行SQL注入漏洞测试和路径遍历漏洞测试,检测被动数据泄露安全风险。本发明还提供一种Android应用漏洞检测系统。上述方法和系统能够基于动态测试执行效果来快速发现Android应用中确定存在的隐私泄露和数据污染漏洞,并且避免误报,为大规模发现Android应用中隐私泄露与数据污染类安全漏洞提供了有力支持。
【专利说明】 Android应用漏洞检测方法及系统
【技术领域】
[0001]本发明涉及计算机程序的漏洞检测技术,尤其涉及一种Android(安卓操作系统)上的应用漏洞检测方法及系统。
【背景技术】
[0002]目前,随着互联网和智能手机在人类社会的日益普及,移动安全问题和安全隐患也随之愈发严重。针对智能手机的病毒、木马等恶意程序发展迅速,在移动终端上植入恶意代码进行网络犯罪的事件呈增长趋势,移动终端的用户正在面临前所未有的安全风险。Android平台是目前最流行的智能移动终端平台,其中存在的安全风险最为引人关注。
[0003]Content Provider是在Android操作系统中封装的一套结构化本地数据组件(通常是以SQLite数据库的形式),然后提供必要的封装机制来访问和控制数据。默认情况下,Content Provider接口是开放的,Android应用可以通过这个组件互相沟通。与ContentProvider相关的安全隐患包括隐私泄露漏洞和数据污染漏洞。
[0004]已有一些静态分析的方法来检测Android应用程序的隐私泄露和数据污染漏洞。这些方法主要对Android应用程序反编译后的Dalvik (Google公司设计用于Android平台的Java虚拟机)字节码或Java源代码进行静态分析,在静态代码中查找可能导致相关类型漏洞的特征。
[0005]静态分析主要采用构造控制流图(以下简称CFG)技术,另外结合一些静态污点分析或数据流分析的技术以提高检测的准确率。例如:(I)Woodpecker首先通过对Android应用程序反编译后的Dalvik字节码建立控制流图来确定可能的执行路径,然后采用数据流分析技术对以上结果作进一步精简得到可能触发权限泄露的路径集。(2)DiOidChecker对Android应用程序反编译后的Java源代码静态分析,首先从Manifest文件中提取疑似权限泄露的Android组件列表,然后从每个组件对应的Java程序入口开始构造CFG,同时结合静态污点分析技术,定位导致权限泄露的系统调用点。(3) ContentScope针对Android应用中的隐私泄露与数据污染漏洞,对反编译后的Java源代码进行静态分析,生成函数调用图和程序控制流图,从而识别出从Content Provider接口至SQLite数据库操作API函数的程序执行流,确定出存在漏洞的应用。
[0006]但是,对Java源代码的静态分析在很大程度上依赖于Java反编译工具的准确性和完整性,目前的技术无法保证无损地将Android应用程序包反编译到Java源代码级,这在一定程度上影响权限泄露静态分析技术的准确性。其次,众所周知,Java是一种支持继承和多态的高级语言。现有的静态分析方法采用的静态污点分析和数据流分析技术无法考虑Java的多态这一动态特征,也会在一定程度上增加漏洞检测的误报率。除此之外,现有的静态分析技术检测出的疑似漏洞并不能可以真正实现有效的攻击,有待手工方法做进一步验证,面对大量的Android应用程序,手工验证耗时耗力。
[0007]面对当前大量的Android应用,从保护用户隐私和手机系统安全性的角度,都非常有必要设计出一种更加有效和自动化的Android应用隐私泄露与数据污染漏洞检测方 法,来解决Android应用安全测试的难题。

【发明内容】

[0008]本发明要解决的技术问题是提出一种Android应用漏洞检测方法及系统,快速检测出Android应用中存在的隐私泄露或数据污染安全漏洞。
[0009]根据本发明一个方面,提供一种Android应用漏洞检测方法,包括:步骤一、通过分析待检测Android应用的Content Provider接口特征,判断其是否可能存在隐私泄露漏洞;步骤二、如果可能存在,针对可能存在隐私泄露漏洞的待检测Android应用,通过对Android系统中相关API函数的监控,对待检测Android应用的公开可访问URI进行SQL注入漏洞测试和路径遍历漏洞测试,检测被动数据泄露安全风险。
[0010]可选的,在步骤一之前还包括:从Android应用商店或官方网站下载待检测Android应用;在检测环境中批量安装待检测Android应用。
[0011]可选的,步骤一进一步包括:解析AndroidManifest.xml文件,查找是否存在Content Provider标签;如果存在,解析Content Provider标签的属性信息;检测exported属性,是否设置为暴露;如果exported设置为暴露,检测Content Provider声明的权限信息,当声明的权限信息中设置了 permission,那么没有授权就不可访问,不存在隐私泄露问题,也不存在数据污染问题;当设置了 readPermission,就只能在有权限时可读,不存在隐私泄露问题,但可能存在数据污染;当设置了 writePermission,就只能在有权限时可写,不存在数据污染问题,但可能存在隐私泄露。
[0012]可选的,步骤二进一步包括:对运行待检测应用的Android系统框架进行监控代码的插桩,监控Content Provider与SQLite数据库操作的数据查询API函数;生成SQL注入测试用例,调用待检测应用的Content Provider接口执行测试用例,检测是否存在SQL注入漏洞;如果存在,通过执行测试用例,获取URI的数据查询游标(Cursors),通过游标遍历出数据表的列名和内容;获取存在SQL注入漏洞的结果集。
[0013]可选的,步骤二进一步包括:检测是否可以通过URI的基本路径往上层层遍历到Android的各项目录下,抓取含有用户隐私的危险数据文件;如果存在,获取存在基本路径遍历漏洞的结果集。
[0014]根据本发明另一个方面,提供一种Android应用漏洞检测方法,包括:步骤一、通过分析待检测Android应用的Content Provider接口特征,判断其是否可能存在数据污染漏洞;步骤二、通过对运行待检测应用SQLite数据表结构获取,构造数据修改SQL注入语句,检测主动数据污染安全风险。
[0015]可选的,步骤二进一步包括:对运行待检测应用的Android系统进行监控代码插桩,监控Content Provider与SQLite数据库操作的数据修改API函数;对可以进行访问的URI地址进行Query语句的遍历,以确认表字段信息和表内容;根据表字段信息,并判断出表字段的数据类型,准备假数据,构建符合表字段类型的Insert语句,完成插入数据的工作;判断数据是否插入成功主要采取两种方法:其一是对比前后遍历URI数据的变化,其二是通过监控手工更改系统Log语句的打印,来验证SQLite内部是否真正执行该条SQL语句;如果插入成功,将前面插入的数据进行删除操作;将最后的结果记录Log日志中,基于Log日志中是否存有成功进行插入、删除操作的记录,来确定是否存在数据污染漏洞。[0016]根据本发明又一个方面,提供一种Android应用漏洞检测系统,包括:候选应用判断单元,适于通过分析待检测Android应用的Content Provider接口特征,判断该候选Android应用/待测试Android应用是否可能存在数据污染漏洞和/或隐私泄露漏洞;漏洞检测控制器,与候选应用判断单元连接,适于根据安全漏洞检测策略,为可能存在数据污染漏洞和/或隐私泄露漏洞的待测试应用生成动态测试用例;动态测试代理程序,与漏洞检测控制器连接,适于调用待检测应用的Content Provider接口执行测试用例,并反馈执行结果给漏洞检测控制器;其中,执行结果包括应用在执行测试用例时对系统数据查询和数据修改API函数的调用情况与返回结果等;和插桩行为监控器,与漏洞检测控制器连接,位于运行待检测应用的Android系统框架层中,适于通过代码插桩技术,监控ContentProvider与SQLite数据库操作的数据修改和/或数据查询API函数,并反馈监控结果给漏洞检测控制器。
[0017]与现有技术相比,本发明的优点在于:
[0018](I)现有静态分析技术只能检测出可疑漏洞,存在一定的误报率,需要人工进行进一步的验证和筛选,且不一定能成功触发漏洞危害效果。本发明至少一个实施例中提供的方法和系统能够基于动态测试执行效果来发现Android应用中确定存在的隐私泄露和数据污染漏洞,避免误报。
[0019](2)本发明至少一个实施例中提供的方法和系统充分利用了 Android系统框架开源的特性,通过在框架层与Content Provider与SQLite数据库操作相关的API函数中插桩监控代码,结合动态测试数据的生成,提出了一种基于动态注入测试的漏洞检测方法,从而快速有效地发现Android应用中确定存在的安全漏洞。
[0020](3)本发明至少一个实施例中提供的方法和系统为大规模发现Android应用中隐私泄露与数据污染类安全漏洞提供了有力支持。
【专利附图】

【附图说明】
[0021]图1是根据本发明一个实施例提供的Android应用漏洞检测方法的方法流程图;
[0022]图2是根据本发明另一个实施例提供的Android应用漏洞检测方法的步骤SlO的流程图;
[0023]图3是根据本发明另一个实施例提供的Android应用漏洞检测方法的步骤S20的流程图;
[0024]图4是根据本发明另一个实施例提供的Android应用漏洞检测方法的步骤S40的流程图;
[0025]图5是根据本发明另一个实施例提供的Android应用漏洞检测系统的系统结构示意图;
[0026]图6是根据本发明另一个实施例提供的Android应用漏洞检测系统的工作过程流程图。
【具体实施方式】
[0027]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0028]术语定义:
[0029]
【权利要求】
1.一种Android应用漏洞检测方法,包括: 步骤一、通过分析待检测Android应用的Content Provider接口特征,判断其是否可能存在隐私泄露漏洞; 步骤二、如果可能存在,针对可能存在隐私泄露漏洞的待检测Android应用,通过对Android系统中相关API函数的监控,对待检测Android应用的公开可访问URI进行SQL注入漏洞测试和路径遍历漏洞测试,检测被动数据泄露安全风险。
2.根据权利要求1所述的Android应用漏洞检测方法,其中,在步骤一之前还包括: 从Android应用商店或官方网站下载待检测Android应用; 在检测环境中批量安装待检测Android应用。
3.根据权利要求1所述的Android应用漏洞检测方法,其中,步骤一进一步包括: 解析AndroidManifest.xml文件,查找是否存在Content Provider标签; 如果存在,解析Content Provider标签的属性信息; 检测exported属性 ,是否设置为暴露; 如果exported设置为暴露,检测Content Provider声明的权限信息,当声明的权限信息中设置了 permission,那么没有授权就不可访问,不存在隐私泄露问题,也不存在数据污染问题;当设置了 readPermission,就只能在有权限时可读,不存在隐私泄露问题,但可能存在数据污染;当设置了 writePermission,就只能在有权限时可写,不存在数据污染问题,但可能存在隐私泄露。
4.根据权利要求1所述的Android应用漏洞检测方法,其中,步骤二进一步包括: 对运行待检测应用的Android系统框架进行监控代码的插桩,监控Content Provider与SQLite数据库操作的数据查询API函数; 生成SQL注入测试用例,调用待检测应用的Content Provider接口执行测试用例,检测是否存在SQL注入漏洞; 如果存在,通过执行测试用例,获取URI的数据查询游标(Cursors),通过游标遍历出数据表的列名和内容; 获取存在SQL注入漏洞的结果集。
5.根据权利要求4所述的Android应用漏洞检测方法,其中,步骤二进一步包括: 检测是否可以通过URI的基本路径往上层层遍历到Android的各项目录下,抓取含有用户隐私的危险数据文件; 如果存在,获取存在基本路径遍历漏洞的结果集。
6.根据权利要求1所述的Android应用漏洞检测方法,其中,在步骤二之后还包括: 通过评估分析,确认被动数据泄露安全风险是否涉及用户隐私泄露。
7.—种Android应用漏洞检测方法,包括: 步骤一、通过分析待检测Android应用的Content Provider接口特征,判断其是否可能存在数据污染漏洞; 步骤二、通过对运行待检测应用SQLite数据表结构获取,构造数据修改SQL注入语句,检测主动数据污染安全风险。
8.根据权利要求7所述的Android应用漏洞检测方法,其中,步骤二进一步包括: 对运行待检测应用的Android系统进行监控代码插桩,监控Content Provider与SQLite数据库操作的数据修改API函数; 对可以进行访问的URI地址进行Query语句的遍历,以确认表字段信息和表内容;根据表字段信息,并判断出表字段的数据类型,准备假数据,构建符合表字段类型的Insert语句,完成插入数据的工作; 判断数据是否插入成功主要采取两种方法:其一是对比前后遍历URI数据的变化,其二是通过监控手工更改系统Log语句的打印,来验证SQLite内部是否真正执行该条SQL语句; 如果插入成功,将前面插入的数据进行删除操作; 将最后的结果记录Log日志中,基于Log日志中是否存有成功进行插入、删除操作的记录,来确定是否存在数据污染漏洞。
9.根据权利要求7所述的Android应用漏洞检测方法,其中,在步骤一之前还包括: 从Android应用商店或官方网站下载待检测Android应用; 在检测环境中批量安装待检测Android应用。
10.根据权利要求7所述的Android应用漏洞检测方法,其中,在步骤二之后,还包括: 通过评估分析,确认主动数据污染安全风险是否涉及敏感数据污染。
11.一种Android应用漏洞检测系统,包括: 候选应用判断单元,适于通过分析待检测Android应用的Content Provider接口特征,判断该候选Android应用/待测试Android应用是否可能存在数据污染漏洞和/或隐私泄露漏洞; 漏洞检测控制器,与候选应用判断单元连接,适于根据安全漏洞检测策略,为可能存在数据污染漏洞和/或隐私泄露漏洞的待测试应用生成动态测试用例; 动态测试代理程序,与漏洞检测控制器连接,适于调用待检测应用的ContentProvider接口执行测试用例,并反馈执行结果给漏洞检测控制器;其中,执行结果包括应用在执行测试用例时对系统数据查询和数据修改API函数的调用情况与返回结果等; 插桩行为监控器,与漏洞检测控制器连接,位于运行待检测应用的Android系统框架层中,适于通过代码插桩技术,监控Content Provider与SQLite数据库操作的数据修改和/或数据查询API函数,并反馈监控结果给漏洞检测控制器。
【文档编号】G06F21/57GK103984900SQ201410210154
【公开日】2014年8月13日 申请日期:2014年5月19日 优先权日:2014年5月19日
【发明者】李康, 诸葛建伟, 魏克, 杨坤, 段海新 申请人:南京赛宁信息技术有限公司, 清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1