一种Apk安全风险自动化静态审计系统以及方法与流程

文档序号:12824505阅读:244来源:国知局
一种Apk安全风险自动化静态审计系统以及方法与流程

本发明涉及移动信息安全技术领域,特别涉及一种apk安全风险自动化静态审计系统以及方法。



背景技术:

随着移动互联网的发展,移动终端安全也越来越受到关注。特别是android系统的快速发展,使得android平台逐渐成为了世界上第一大的移动终端平台,产品覆盖了机顶盒、手机、平板,以及各种智能终端,从各个角度影响着人们的生活。而且这些智能终端的功能越发的强大,包括了语音通话、数据业务、nfc近场通讯等。android智能终端已经深入的进入到了我们每个人的生活中,支付类服务、生活类服务、地图类服务、娱乐类服务、个人信息类服务等等。在这种情况下,app应用程序的使用者日益增加,与此同时,app开发者运营商和android手机用户所面临的安全问题日益增加。一方面由于android应用程序开发者水平参差不齐,开发者并没有统一的编码规范要求,开发者本身的安全意识相对薄弱,以及开发者会有意无意滥用权限;另一方面,由于一些不法分子故意利用、制造不安全的app应用程序,部分恶意代码还会通过利用厂商开发的系统应用的漏洞获取高权限,进一步危害用户的隐私安全,因此对android源码和app应用程序等这些应用程序的安全审计行为越来越重要。

现有技术中,主要有以下两种方式来对基于android的应用程序进行审计:

一种是通过人工审计,主要基于有经验的开发人员的代码走读和单元测试来发现源代码逻辑安全性、审计违反程序规范的源代码,测试人员人工的渗透测试来发现程序错误,安全漏洞。人工代码审计的方法人工成本高、效率低,而且依赖于开发和测试人员水平的高低,应用程序的质量难以把控。

另一种是收集系统日志和app应用程序的运行日志,或者对反编译日志信息进行还原,得到原始日志信息;将原始日志信息和运行日志信息统一输出,得到最终日志信息;根据审计日志信息白名单对最终日志信息进行过滤,确定待审计的日志信息;利用所述待审计的日志信息进行android应用的审计。例如,公开号为cn105653943a的专利提供的一种android应用的日志审计方法。这种审查方式一方面需要依赖操作系统日志模块和app运行日志,日志信息量大,冗余信息过多,因此还需对日志进行大量且复杂的分析工作,才能正确地分析出app的恶意行为,该方法也对代码的规范性无法审计。另一方面需要先运行或者模拟运行app一段相对较长的时间,收集足够多的日志才能更全面的审计app的行为,在运行阶段才能发现app的安全问题,存在着审计系统审计粒度不够精细,审计的安全性和灵活性等方面存在不足的问题。



技术实现要素:

针对以上问题,本发明专利目的在于设计了一种apk安全风险自动化静态审计系统以及方法,可以快速、有效地对应用程序进行安全审计分析,具有很强的实用性。

本发明具体的技术方案如下:

一种apk安全风险自动化静态审计方法,包括如下步骤:

步骤s101,反编译出apk的androidmanifest.xml、classes.dex和资源文件,读取其dalvik字节码和androidmanifest.xml文件,以所述androidmanifest.xml文件作为函数入口解析所有的函数调用指令并生成基本函数调用图;

步骤s102,将apk中使用到的具有异步性质的调用函数、生命周期相关的函数的android库都加入所述基本函数调用图中,得到扩展函数调用图;

步骤s103,对所述扩展函数调用图中的代码路径进行过滤,得到包含可能污点数据传播行为的可疑路径集合;

步骤s104,污点分析器对可疑路径集合中每条可疑路径函数的字节码指令进行模拟执行,基于内存对象模型进行污点分析,并准确的检测污点数据信息以及污点数据传播行为。

具体的,本发明所述基于内存对象模型进行污点分析,进一步包括:

当污点分析器遇到包含未知值的未知条件分支时,引入模糊规则来进行控制流的决策,将未知条件分支分为未知值分支、无限循环分支和无限递归分支三种模式并分别进行处理。

具体的,本发明所述将未知条件分支分为未知值分支、无限循环分支和无限递归分支三种模式并分别进行处理,具体包括:

未知值分支重建上下文环境,恢复到已知分支状态;

无限循环分支设定循环最大次数阀值p,当计数达到p时,跳出循环,继续执行后续字节码;

无限递归设定递归最大深度阀值q,当计数达到最大深度q时,中止递归,恢复后续字节码执行。

具体的,本发明所述方法还包括:

步骤s105,根据检测的污点数据信息以及污点数据传播行为结果,输出检测报告。

一种apk安全风险自动化静态审计系统,包括web应用服务器、文件服务器和审计服务器;其中:

所述web应用服务器用于用户登录以及将待测应用程序的apk文件发送给审计服务器;

所述文件服务器用于存储所述待测应用程序的apk文件;

所述审计服务器用于将所述web应用服务器发送来的apk文件进行解析,反编译出dalvik字节码和androidmanifest.xml文件,并以androidmanifest.xml文件作为函数入口解析所有的函数调用指令生成基本函数调用图;同时,将apk中使用到的具有异步性质的调用函数、生命周期相关的函数的android库都加入所述基本函数调用图中,得到扩展函数调用图;对所述扩展函数调用图中的代码路径进行过滤,得到包含可能污点数据传播行为的可疑路径集合;以及对所述可疑路径集合中每条可疑路径函数的字节码指令进行模拟执行,基于内存对象模型进行污点分析,并准确的检测污点数据信息以及污点数据传播行为。

具体的,本发明所述扩展函数调用图包含dalvik字节码执行中遇到的所有的显式和隐式的控制流以及所有的代码路径。

具体的,本发明所述审计服务器包括:

解析模块,用于对所述待测应用程序的apk文件进行解析,反编译出dalvik字节码和androidmanifest.xml文件;

函数调用图生成模块,用于以androidmanifest.xml文件作为函数入口解析所有函数调用指令生成基本函数调用图;同时,将apk中使用到的具有异步性质的调用函数、生命周期相关的函数的android库都加入所述基本函数调用图中,得到扩展函数调用图;

过滤模块,用于对所述扩展函数调用图中的代码路径进行过滤,得到包含可能污点数据传播行为的可疑路径集合;

污点分析模块,用于对所述可疑路径集合中每条可疑路径函数的字节码指令进行模拟执行,基于内存对象模型进行污点分析,并准确的检测污点数据信息以及污点数据传播行为。

具体的,本发明所述污点分析模块进一步包括:

当遇到包含未知值的未知条件分支时,引入模糊规则来进行控制流的决策,将未知条件分支分为未知值分支、无限循环分支和无限递归分支三种模式并分别进行处理。

具体的,本发明所述审计服务器还包括:

安全风险审计报告模块,用于根据检测的污点数据信息以及污点数据传播行为结果,输出检测报告。

本发明提供的应用程序自动化静态审计系统及方法与现有技术相比,可以快速、有效地对应用程序进行安全审计分析,一方面能够审计应用程序代码编写规范性、组件暴露漏洞、组件权限滥用、代码执行漏洞、密码算法误用、ssl绕过、弱加密、混淆代码、硬编码的密码、危险api的不当使用、sql注入、敏感信息/个人信息泄露、不安全的文件存储多方面的安全问题;另一方面,该系统能对应用程序代码进行深度扫描,审计发现程序员编写程序的不规范代码和对上述应用程序安全问题进行自审查,不仅能降低应用程序安全检测的工作量,还能更快更早的发现漏洞,并且不需要动态审计系统或者方法那样耗时,审查效率高,可以减轻工作量。

附图说明

以下参照附图对本发明实施例作进一步说明,其中:

图1是本发明一种apk安全风险自动化静态审计方法的流程图;

图2是本发明一种apk安全风险自动化静态审计系统的模块图;

图3是本发明一种apk安全风险自动化静态审计系统审计服务器的模块图。

具体实施方式

下面结合附图和具体实施例对本发明作进一步的详细说明。

本发明提出了一种apk安全风险自动化静态审计系统以及方法,该方法在flowdroid静态污点分析的基础上,flowdroid污点分析在处理对象域或数组的访问时,通过反向别名分析来处理对象和数组引用问题,时间复杂度上升到o(n2)。本方法在此基础上引入了内存对象模型和模糊分支分析,内存对象模型的引入,将处理对象域或数组的时间复杂度降为o(n),并且将异步调用函数、android应用程序生命周期相关的函数纳入审计范围,扩大对app的审计覆盖范围;模糊分支分析的引入解决了在污点路径过滤过程中遇到的未知值分支、无限循环分支和无限递归分支检测问题,提高了检测速度以及准确率。

请参阅图1,本实施例具体包括如下步骤:

步骤s101,反编译出apk的androidmanifest.xml、classes.dex和资源文件,读取其dalvik字节码和androidmanifest.xml文件,以所述androidmanifest.xml文件作为函数入口解析所有的函数调用指令并生成基本函数调用图。

具体的,首先注册用户登录到审计系统,上传待审计应用程序的apk文件或者zip文件,然后审计系统将根据各审计服务器的任务量动态分配审计任务,在任务多时,以便负载均衡各审计服务器的任务。

审计服务器接收到审计任务后,将自动开始审计apk文件或者zip文件。服务器获取待测应用程序的apk文件或者zip文件并进行解析,调用解析模块,反编译出dalvik字节码androidmanifest.xml文件、classes.dex文件和资源文件,然后从中提取出权限列表和组件信息、smali文件和java文件等。由于开发人员使用的android应用开发工具不同,资源文件的目录结构略有不同,但不影响本系统对android应用程序的审计结果。

然后,读取应用程序的dalvik字节码和androidmanifest.xml文件,以androidmanifest.xml作为函数入口,根据其中每个函数中包含的调用指令生成一个基本函数调用图。

步骤s102,将apk中使用到的具有异步性质的调用函数、生命周期相关的函数的android库都加入所述基本函数调用图中,得到扩展函数调用图。

具体的,将android库提供的具有异步函数调用性质的函数、生命周期相关的函数,都加入了基本函数调用图,得到扩展函数调用图。在扩展函数调用图中包含了dalvik字节码执行中遇到的所有显式和隐式的控制流,从而扩展了敏感信息泄漏行为(即污点数据传播行为)审计检测覆盖范围。

污点数据传播行为包含一个源api(src)、一个目标api(target)和一个将src返回的信息传入target的代码路径path,这种可能包含污点数据传播行为的代码路径就是可疑路径。本方法针对android应用程序的安全审计,就是分析出污点数据传播行为中的代码路径。

扩展函数调用图中包含了所有的代码路径,当然包括可疑路径,在实际的android应用程序中,存在安全问题相关的代码路径一般只占整个程序的很小一部分,只需着重审计分析与污点数据传播行为相关的代码路径。

步骤s103,对所述扩展函数调用图中的代码路径进行过滤,得到包含可能污点数据传播行为的可疑路径集合。

具体的,采用轻量级的api分析进行可疑路径集的选取。污点数据传播行为就是对扩展函数调用图中的代码路径过滤,先选取一个包含可疑路径的集合,每条可疑路径都由一个或多个函数组成,每个函数中都包含一组dalvik字节码指令。每条可疑路径包含了所有直接或间接地调用了源api(src)到目标api(target)的代码路径path,轻量级的api分析可以大幅减少代码路径分析而不改变分析结果。可疑路径的集合还需进一步分析得到准确的污点数据传播路径。

步骤s104,污点分析器对可疑路径集合中每条可疑路径函数的字节码指令进行模拟执行,构造出每条可疑路径函数的字节码指令的内存对象模型,基于内存对象模型进行污点分析,并准确的检测污点数据信息以及污点数据传播行为。

具体的,基于内存对象模型进行污点分析。污点分析器对可疑路径集合中每条可疑路径函数的字节码指令进行模拟执行。在执行过程中,先为每一条可疑的代码路径创建上下文,并将对象的类型信息加入到内存中,这样能对目标代码路径中的全局状态和局部状态中的内存对象的信息进行有效的表示,从而构造出每条可疑路径函数的字节码指令的内存对象模型。内存对象中的污点状态可以进行传播,任何对包含污点状态的对象进行运算所派生出的对象也将包含同样的污点状态。

基于内存对象模型进行污点分析具体过程如下:

(a)首先,将内存对象模型加载到污点分析器中,对目标代码路径中的全局状态和局部状态中的内存对象的信息进行有效的表示;然后,污点分析器基于一系列执行规则对目标函数中的字节码进行执行,当遇到未知值而无法分析时,进入模糊分析模式。

(b)污点分析器遇到包含未知值的未知条件分支时,引入模糊规则来进行控制流的决策,由软件安全代码分析器遍历ast语法树,寻找并获取其中包括if-else、while、do-while、for、switch的控制语句。将未知条件分支分为三种:未知值分支、无限循环和无限递归。

(c)对未知条件分支的3种情况分别处理:未知值分支重建上下文环境,恢复到已知分支状态;无限循环分支设定循环最大次数阀值p,当计数达到p时,跳出循环,继续执行后续字节码;无限递归设定递归最大深度阀值q,当计数达到最大深度q时,中止递归,恢复后续字节码执行。

(d)污点分析器有效地表示已知值、未知值和内存对象的污点数据信息,并准确检测污点数据以及污点数据传播行为。

步骤s105,根据检测的污点数据信息以及污点数据传播行为结果,输出检测报告。

具体的,污点分析器在检测污点数据以及污点数据传播行为后,调用安全风险审计模块(xhtml2pdf)生成pdf检测报告。

基于上述方法,本发明一种apk安全风险自动化静态审计系统,由于审计系统在应用程序安装之前进行静态审计分析,不会引入运行时的开销或影响用户在应用程序安装后的使用。该系统单个样本的平均审计分析时间为数十秒,由于该系统可以配置多台审计分析服务器,能同时对多个样本进行审计分析。

请参阅图2,包括web应用服务器、文件服务器和审计服务器;

首先,用户登录到静态审计web应用服务系统,并通过web应用服务系统将apk文件或者zip压缩文件上传到文件服务器。其次,web应用服务系统自动将审计任务和该任务所需的apk文件或者zip压缩文件均衡分发到审计服务器,因为审计服务器可以部署多台,可以实现审计任务的负载均衡。最后,审计服务器自动执行审计任务,并将结果返回到web应用服务系统。其中:

所述web应用服务器用于用户登录以及将待测应用程序的apk文件或者zip文件发送给审计服务器;所述文件服务器用于存储所述待测应用程序的apk文件或者zip文件;

所述审计服务器用于将所述web应用服务器发送来的apk文件进行解析,反编译出dalvik字节码和androidmanifest.xml文件,并以androidmanifest.xml文件作为函数入口解析所有的函数调用指令生成基本函数调用图;同时,将apk中使用到的具有异步性质的调用函数、生命周期相关的函数的android库都加入所述基本函数调用图中,得到扩展函数调用图;对所述扩展函数调用图中的代码路径进行过滤,得到包含可能污点数据传播行为的可疑路径集合;以及对所述可疑路径集合中每条可疑路径函数的字节码指令进行模拟执行,基于内存对象模型进行污点分析,并准确的检测污点数据信息以及污点数据传播行为。

具体的,本发明所述扩展函数调用图包含dalvik字节码执行中遇到的所有的显式和隐式的控制流以及所有的代码路径。

具体的,请参阅图3,本发明所述审计服务器包括:

解析模块,用于对所述待测应用程序的apk文件或者zip文件进行解析,反编译出dalvik字节码和androidmanifest.xml文件;

函数调用图生成模块,用于以androidmanifest.xml文件作为函数入口解析所有函数调用指令生成基本函数调用图;同时,将apk中使用到的具有异步性质的调用函数、生命周期相关的函数的android库都加入所述基本函数调用图中,得到扩展函数调用图;

过滤模块,用于对所述扩展函数调用图中的代码路径进行过滤,得到包含可能污点数据传播行为的可疑路径集合;

污点分析模块,用于对所述可疑路径集合中每条可疑路径函数的字节码指令进行模拟执行,构造出每条可疑路径函数的字节码指令的内存对象模型,并准确的检测污点数据信息以及污点数据传播行为。

具体的,本发明所述污点分析模块进一步包括:

当遇到包含未知值的未知条件分支时,引入模糊规则来进行控制流的决策,将未知条件分支分为未知值分支、无限循环分支和无限递归分支三种模式并分别进行处理。

具体的,本发明所述审计服务器还包括:

安全风险审计报告模块,用于根据检测的污点数据信息以及污点数据传播行为结果,输出检测报告。

以上所述本发明的具体实施方式,并不构成对本发明保护范围的限定。任何根据本发明的技术构思所做出的各种其他相应的改变与变形,均应包含在本发明权利要求的保护范围内。

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