一种检测Android应用程序组件通信漏洞的方法技术

技术编号:14348246 阅读:136 留言:0更新日期:2017-01-04 18:55
本发明专利技术是一种检测Android应用程序组件通信漏洞的方法,属于计算机测试领域;包括:首先定制ROM并刷入测试机;然后检测某个待测应用程序中的暴露组件信息;根据每个暴露组件的Action和Category信息,同时结合Android推荐的Extras的key与value构造测试数据;写入Intent中进行第一次Fuzz测试,检测每个暴露组件的通信漏洞,同时记录系统日志;测试完后分析所有日志信息,提取出真实的Extras详细信息,根据真实Extras的key和value信息,再次为该待测应用程序重新构造测试数据,进行第二次Fuzz测试;通过分析第二次测试返回的数据和日志信息,生成检测报告;优点在于:属于动态方法无需对Android应用程序进行反编译,能够直接给出漏洞攻击的结果;通过两次的Fuzz测试,构造针对性数据,提高测试效果。

【技术实现步骤摘要】

本专利技术涉及计算机测试
,具体是一种检测Android(安卓系统)应用程序组件通信漏洞的方法。
技术介绍
随着互联网和经济的发展,移动设备越来越普及,随之各种各样的移动应用也越来越丰富。由于Android应用开发门槛较低,开发人员对移动安全没有足够的重视,以及GooglePlay对应用没有采取严格的安全审核等一系列原因,导致恶意应用越来越多。不仅Android用户面临前所未有的安全风险,Android应用开发者也面临着很大的挑战。Android应用程序组件通信是个非常薄弱的环节,比较容易被恶意应用和利用。目前关于Android应用程序组件通信漏洞的研究有一部分是通过静态分析的方法来实现。静态分析的方法是:利用逆向工程与源代码分析,对源代码进行静态的审计,来研究应用组件间通信存在的安全漏洞。例如ComDroid是通过Dedexer工具将应用程序进行逆向处理,并利用静态分析方法,分析可能存在的应用组件通信漏洞。静态分析方法虽然能够分析可能存在的安全漏洞,但是对于特定应用的实际攻击测试却不够深入,不能够直接给出被攻击时出现的结果。且目前很多的应用程序都会做加固和混淆,更重要的是很多组件通信漏洞只能在特定的环境下才会表现出来,所以利用静态方法分析Android应用程序组件通信漏洞局限性很大。除了静态分析方法,目前也有一些动态的研究。IntentFuzzer工具就是其中的代表,但是该工具只能实现对于Service和BroadcastReceiver的自动化检测,不能实现自动化检测Activity。而且该工具只能发送空消息,没有日志输出和分析。虽然JarJarBinks是针对IntentFuzzer的改进,可以构造随机的数据进行Fuzz测试,但是不能够针对特定的应用构造数据,只能够根据Android推荐的Extras项进行测试,并且测试过程不能实现完全自动化,需要人工干预。现有的动态方法,虽然能够给出一些攻击结果,但是多数不能够构建数据或者只能够根据Android推荐的Extras的key和value信息构造数据,不具有针对性。综上,现有的静态和动态监测方法还存在不能够完全实现自动化,需要人工干预,没有日志分析,不能够自动提取出漏洞详情,并且测试效率低下的缺点。
技术实现思路
本专利技术针对现有技术的不足之处,利用定制ROM结合动态Fuzz的方法进行检测,解决了现有静态方法和动态方法的不足,可以直接给出被攻击时出现的结果,并且能够针对性的构造数据,对应用程序进行组件通信的漏洞检测,具体是一种检测Android应用程序组件通信漏洞的方法。一种检测Android应用程序组件通信漏洞的方法,具体步骤包括:步骤一:定制ROM后将ROM刷入测试机;定制ROM具体为:修改Android源码Framework层的相关函数,将Extras的key和value绑定应用程序包名输出到日志中;相关函数包括Framework层Intent类和Activity类中的getIntent函数、getExtra函数、getStringExtra函数、getBooleanExtra函数、getCharExtra函数和putExtra函数等;步骤二、针对用户要检测的某个Android应用程序,在测试机上进行自动安装和启动;具体为:利用ADB工具安装APK程序到指定的Android设备,开启与Android端的Socket连接;并进行初始化工作,包括创建漏洞数据库和获取APK包名(PackageName)。漏洞数据库记载了常见的错误、错误描述信息和错误的解决办法等。步骤三、检测待测应用程序中组件暴露的风险,并记录暴露组件的详细信息;暴露组件的定义为:待测应用程序中某个组件的配置信息中,组件exported属性值为True或者该组件的配置中包含Intent-filter标签,则定义该组件为暴露组件;组件类型包括:Activity、Service和BroadcastReceiver;每个组件的配置信息均包括:组件名、组件exported属性值、Action和Category等信息;步骤四、针对每个暴露组件,根据该暴露组件配置信息中的Action和Category信息,同时结合Android推荐的Extras的key与value构造测试数据;步骤五、将构造好的测试数据写入Intent中,对该暴露组件进行Fuzz测试,检测暴露组件的通信漏洞,同时记录系统日志;写入Intent具体为:构造完当前暴露组件的测试数据后,利用Intent的putExtra函数将Android推荐的Extras的key与value数据加入到Intent中,利用setAction函数将Action信息加入Intent,利用addCategory函数将Category信息加入Intent;将测试数据写入Intent后,利用ComponentName类和Intent类的setComponent函数将待测应用程序包名(PackageName)和待测暴露组件的信息写入Intent,调用startActivityiForResult(Intent)函数、startService(Intent)函数和sendBroadcast(Intent)函数,对每个暴露组件进行Fuzz测试,并利用系统日志记录该暴露组件的运行状态和返回的数据。步骤六、依次对下一个暴露组件重复步骤四和步骤五进行测试,直至测完待测应用程序的所有暴露组件;步骤七、分析测试完该待测应用程序的所有日志信息,提取出该待测应用程序真实的Extras详细信息;Extras详细信息包括Extras的key、value、数据类型信息和具体的触发函数等。步骤八、根据真实Extras的key和value信息,结合每个暴露组件配置信息中的Action和Category信息,为该待测应用程序重新构造测试数据,并再次进行测试和记录系统日志;步骤九、通过分析第二次测试返回的数据和日志信息,生成检测报告;对日志分析过程为:通过应用程序的PID(进程号)过滤出属于该待测应用程序的日志信息,通过关键字“Exception”“Error”等提取出错误信息,然后与漏洞数据库中的数据进行匹配,从而得到包括风险结果和漏洞检测结果的检测报告;检测报告具体为:暴露组件可能出现的风险、漏洞的描述、漏洞的详情和解决办法等。与现有技术相比,本专利技术的优势在于:(1)一种检测Android应用程序组件通信漏洞的方法,在Android应用程序运行时检测漏洞,可以直接给出漏洞详情,相比静态方法有了很大改进。(2)一种检测Android应用程序组件通信漏洞的方法,通过定制ROM和两次的Fuzz测试,构造针对性的测试数据,大幅度的提高测试效果,相比现有的动态和静态方法都有比较大的改进。(3)一种检测Android应用程序组件通信漏洞的方法,完全实现了自动化测试,并且利用构建漏洞数据库实现了漏洞详情自动提取的功能,并且包含了动态的任务调度,可以同时开启多个测试任务,大大提高了测试效率。(4)一种检测Android应用程序组件通信漏洞的方法,属于动态方法无需对Android应用程序进行反编译,而且能够同时用于测试原生和非原生Android应用程序,提高了方法的应用场景。(5)一种检测A本文档来自技高网
...
一种检测Android应用程序组件通信漏洞的方法

【技术保护点】
一种检测Android应用程序组件通信漏洞的方法,其特征在于,具体步骤如下:步骤一:定制ROM后将ROM刷入测试机;定制ROM具体为:修改Android源码Framework层的相关函数,将Extras的key和value绑定应用程序包名输出到日志中;步骤二、针对用户要检测的某个Android应用程序,在测试机上进行自动安装和启动;步骤三、检测待测应用程序中组件暴露的风险,并记录暴露组件的详细信息;暴露组件的定义为:待测应用程序中某个组件的配置信息中,组件exported属性值为True或者该组件的配置中包含Intent‑filter标签,则定义该组件为暴露组件;步骤四、针对每个暴露组件,根据该暴露组件配置信息中的Action和Category信息,同时结合Android推荐的Extras的key与value构造测试数据;步骤五、将构造好的测试数据写入Intent中,对该暴露组件进行Fuzz测试,检测暴露组件的通信漏洞,同时记录系统日志;写入Intent具体为:构造完当前暴露组件的测试数据后,利用Intent的putExtra函数将Android推荐的Extras的key与value数据加入到Intent中,利用setAction函数将Action信息加入Intent,利用addCategory函数将Category信息加入Intent;将测试数据写入Intent后,利用ComponentName类和Intent类的setComponent函数将待测应用程序包名(Package Name)和待测暴露组件的信息写入Intent,调用startActivityiForResult(Intent)函数、startService(Intent)函数和sendBroadcast(Intent)函数,对每个暴露组件进行Fuzz测试,并利用系统日志记录该暴露组件的运行状态和返回的数据;步骤六、依次对下一个暴露组件重复步骤四和步骤五进行测试,直至测完待测应用程序的所有暴露组件;步骤七、分析测试完该待测应用程序的所有日志信息,提取出该待测应用程序真实的Extras详细信息;Extras详细信息包括:Extras的key、value、数据类型信息和具体的触发函数;步骤八、根据真实Extras的key和value信息,结合每个暴露组件配置信息中的Action和Category信息,为该待测应用程序重新构造测试数据,并再次进行测试和记录系统日志;步骤九、通过分析第二次测试返回的数据和日志信息,生成检测报告。...

【技术特征摘要】
1.一种检测Android应用程序组件通信漏洞的方法,其特征在于,具体步骤如下:步骤一:定制ROM后将ROM刷入测试机;定制ROM具体为:修改Android源码Framework层的相关函数,将Extras的key和value绑定应用程序包名输出到日志中;步骤二、针对用户要检测的某个Android应用程序,在测试机上进行自动安装和启动;步骤三、检测待测应用程序中组件暴露的风险,并记录暴露组件的详细信息;暴露组件的定义为:待测应用程序中某个组件的配置信息中,组件exported属性值为True或者该组件的配置中包含Intent-filter标签,则定义该组件为暴露组件;步骤四、针对每个暴露组件,根据该暴露组件配置信息中的Action和Category信息,同时结合Android推荐的Extras的key与value构造测试数据;步骤五、将构造好的测试数据写入Intent中,对该暴露组件进行Fuzz测试,检测暴露组件的通信漏洞,同时记录系统日志;写入Intent具体为:构造完当前暴露组件的测试数据后,利用Intent的putExtra函数将Android推荐的Extras的key与value数据加入到Intent中,利用setAction函数将Action信息加入Intent,利用addCategory函数将Category信息加入Intent;将测试数据写入Intent后,利用ComponentName类和Intent类的setComponent函数将待测应用程序包名(PackageName)和待测暴露组件的信息写入Intent,调用startActivityiForResult(Intent)函数、startService(Intent)函数和sendBroadcast(Intent)函数,对每个暴露组件进行Fuzz测试,并利用系统日志记录该暴露组件的运行状态和返回的数据;步骤六、依次对下一个暴露组件重复步骤四和步骤五进行测试,直至测完待测应用程序的所有暴露组件;步骤七、分析测试完该待测应用程序的所有日志信息,提取出该待测应用程序真...

【专利技术属性】
技术研发人员:张华涂腾飞宋洪基李文敏温巧燕
申请(专利权)人:北京邮电大学
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1