一种对android应用进行自动化安全检测的方法技术领域
本发明涉及信息安全领域,尤其涉及一种对android应用进行自动化安全检测的
方法。
背景技术
现有的代码审查计技术,需在开发环境配置或通过人工界面的方式进行审查,其
基于源码实现静态分析,使用方式的局限性较大。
另外,对于现有的安全测试工具,不能完成加壳应用检测,仅能通过交互界面的方
式进行人工分析,而人工分析的方式又不能对海量应用实现自动化安全测试分析。
发明内容
本发明针对现有技术的不足,提出的一种自动化的对android应用安全检测的方
法,该方法将代码审查与漏洞挖掘融合为一体,使得安全检测效率更高,使用范围也更加广
泛。
一种对android应用进行自动化安全检测的方法包括android应用自动化安全检
测的环境搭建和android应用自动化检测两部分;
所述android应用自动化安全检测的环境搭建包括如下步骤:
步骤一:针对常见android安全漏洞,建立漏洞规则库;
步骤二:修改android系统的dalvik虚拟机源代码形成定制android系统,所述定制
android系统主要获取加壳android应用的源码,即通过定制android系统完成android应用
的dex文件的拦截;
步骤三:搭建 findbugs的执行方式,包括封装接口,以及设置插件路径、字节码路径、
报告输出路径的配置信息;
所述android应用自动化检测包括如下步骤:
步骤一:获取待检测Android应用;
步骤二:采用反编译技术,获取待检测Android应用的AndroidManifest.xml清单文件
配置信息;
步骤三:针对待检测Android应用,再次修订漏洞规则库;
步骤四:基于ADB,将待检测Android应用安装至定制android系统中并运行,同时定制
android系统的dalvik虚拟机拦截待检测Android应用的dex文件;
步骤五:利用dex2jar工具将拦截的dex文件逆向生成classes.jar文件,并解压
classes.jar文件以生成java字节码;
步骤六:采用搭建的findbugs,基于建立的漏洞规则库,对生成的java字节码进行漏洞
检测;
步骤七:将定制Android系统拦截的dex文件与待检测Android应用自行解压生成的dex
文件进行比较;
如果定制Android系统拦截的dex文件与待检测Android应用自行解压生成的dex文件
信息一致,说明待检测Android应用未加壳,利用 androguard获取步骤六中的漏洞检测结
果方法体的java代码信息并进行展示;
如果定制Android系统拦截的dex文件与待检测Android应用自行解压生成的dex文件
信息不一致,说明待检测Android应用加壳,将待检测Android应用自行解压目录下的dex文
件替换为定制Android系统拦截的dex文件,重新打包待检测Android应用,利用
androguard获取步骤六中的漏洞检测结果方法体的java代码信息并进行展示。
进一步的,所述漏洞规则库包括常见安全漏洞及自定义安全漏洞。
进一步的,对于步骤六,如果findbugs使用漏洞规则库中的自定义安全漏洞匹配
到疑似安全漏洞,则对疑似安全漏洞采用逆向验证调用路径的方式,验证检测出的疑似安
全漏洞源代码片段是否有执行路径,如果有,则确认疑似安全漏洞为正式安全漏洞。
进一步的,所述逆向验证调用路径是指通过递归的方式逆向推理调用路径中根节
点所属类的类型;对于所述类型,具体包括如下两种情况:
如果所述类型为Activity组件,并且在Android清单文件中找到了Activity组件配置
信息,则说明Android应用程序中包含漏洞源代码的调用路径;
如果类型为Service、Broacast、Content Provider组件,在Android清单文件找到
Service、Broacast、Content Provider组件配置信息,并且扫描Activity组件中所有的方
法体调用信息,如匹配到显示启动Service、Broacast、Content Provider组件ApI信息或利
用组件配置的Action信息隐去启动的ApI信息, 则说明Android应用程序中包含漏洞源代
码的调用路径。
本发明所述技术方案的有益效果在于:本发明所述方法将代码审查与漏洞挖掘融
合为了一体, 可以对加壳应用进行安全检测;对Android应用检测时,无需人工对应用进行
反编译、调试、代码审查、渗透测试,利用本发明所述技术方案,可以实现高效快速的安全分
析;可以对海量应用实现自动化安全测试;帮助开发者定位到漏洞关键代码片段,方便开发
人员解决安全隐患,提高了开发者安全加固的效率。
具体实施方式
为了全面理解本发明,在以下详细描述中提到了诸多细节,但本领域技术人员应
该理解,本发明可以无需这些具体细节而实现。在其实施例中,不详细描述公知的方法、过
程和组件,以免不必要地使实施例模糊。
本发明所述的一种对android应用进行自动化安全检测的方法包括android应用
自动化安全检测的环境搭建和android应用自动化检测两部分;
所述android应用自动化安全检测的环境搭建包括如下步骤:
步骤一:针对常见android安全漏洞,建立漏洞规则库;
所述漏洞规则库包括常见安全漏洞及自定义安全漏洞。
步骤二:修改android系统的dalvik虚拟机源代码形成定制android系统,所述定
制android系统主要获取加壳android应用的源码,即通过定制android系统完成android应
用的dex文件的拦截。
所述定制android系统是对dalvik虚拟机源代码进行特定修改以达到获取加壳
android应用的源码的目的,其实现主要原理是由于android无论采用什么加固方式,应用
在执行时时,dex文件都需交给dalvik虚拟机解释执行。
需要特别说明的是,针对本发明所述dalvik虚拟机源代码的特定修改是现有的且
是公开的技术,且在网络上是开源代码。
步骤三:搭建 findbugs的执行方式,包括封装接口,以及设置插件路径、字节码路
径、报告输出路径的配置信息;
所述android应用自动化检测包括如下步骤:
步骤一:获取待检测Android应用。
步骤二:采用反编译技术,获取待检测Android应用的AndroidManifest.xml清单
文件配置信息。
步骤三:针对待检测Android应用,再次修订漏洞规则库,漏洞规则库的再次修订
主要是根据待检测Android应用属性进行调整。
步骤四:基于ADB,将待检测Android应用安装至定制android系统中并运行,同时
定制android系统的dalvik虚拟机拦截待检测Android应用的dex文件。
步骤五:利用dex2jar工具将拦截的dex文件逆向生成classes.jar文件,并解压
classes.jar文件以生成java字节码。
步骤六:采用搭建的findbugs,基于建立的漏洞规则库,对生成的java字节码进行
漏洞检测;
如果findbugs使用漏洞规则库中的自定义安全漏洞匹配到疑似安全漏洞,则对疑似安
全漏洞采用逆向验证调用路径的方式,验证检测出的疑似安全漏洞源代码片段是否有执行
路径,如果有,则确认疑似安全漏洞为正式安全漏洞。
所述逆向验证调用路径是指通过递归的方式逆向推理调用路径中根节点所属类
的类型;对于所述类型,具体包括如下两种情况:
如果所述类型为Activity组件,并且在Android清单文件中找到了Activity组件配置
信息,则说明Android应用程序中包含漏洞源代码的调用路径;
如果类型为Service、Broacast、Content Provider组件,在Android清单文件找到
Service、Broacast、Content Provider组件配置信息,并且扫描Activity组件中所有的方
法体调用信息,如匹配到显示启动Service、Broacast、Content Provider组件ApI信息或利
用组件配置的Action信息隐去启动的ApI信息, 则说明Android应用程序中包含漏洞源代
码的调用路径。
步骤七:将定制Android系统拦截的dex文件与待检测Android应用自行解压生成
的dex文件进行比较;
如果定制Android系统拦截的dex文件与待检测Android应用自行解压生成的dex文件
信息一致,说明待检测Android应用未加壳,利用 androguard获取步骤六中的漏洞检测结
果方法体的java代码信息并进行展示;
如果定制Android系统拦截的dex文件与待检测Android应用自行解压生成的dex文件
信息不一致,说明待检测Android应用加壳,将待检测Android应用自行解压目录下的dex文
件替换为定制Android系统拦截的dex文件,重新打包待检测Android应用,利用
androguard获取步骤六中的漏洞检测结果方法体的java代码信息并进行展示。
所述展示的信息包括findbugs基于漏洞规则库匹配到的代码缺陷信息、关键配置
信息、安全漏洞信息、及相关代码片段信息。
在实际应用过程中,获取待检测Android应用的方式通过WEB页面获取,或通过MQ
接口和基于分布式的文件系统获取待检测的应用。
以上对本发明所提供的一种对android应用进行自动化安全检测的方法进行了详
细介绍,本文中应用了实施例对本申请的原理及实施方式进行了阐述,以上实施例的说明
只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本
申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应
理解为对本申请的限制。