Android平台下应用程序漏洞自动化挖掘系统及方法与流程

文档序号:14008586阅读:214来源:国知局
Android平台下应用程序漏洞自动化挖掘系统及方法与流程
本发明属于软件分析
技术领域
,尤其涉及一种android平台下应用程序漏洞自动化挖掘系统及方法,主要包括静态分析与动态分析两个部分。
背景技术
:自2007年google公司正式对外发布android系统以来,由于其开源的特性受到了很多手机厂商的青睐,同时随着移动互联网市场的飞速增长,各式各样的基于android平台的应用程序在大众的视野中,而这些带给大众便利的应用程序却常常存在很大的安全隐患,恶意第三方常常会利用这些安全隐患进行攻击,给用户带来了很大的威胁。众所周知,传统的pc端的安全技术已经相对成熟,但是在移动互联网领域的安全技术却比较落后,传统的主机安全技术已然不能够有效保障移动领域的安全,android平台下的应用程序也面临严重的安全问题。针对android应用程序的漏洞挖掘技术方面,主要分为静态挖掘和动态挖掘两种方式,其中:静态分析方法是指不通过运行代码,直接针对高级语言编写的源程序或依据源码进行逆向得到的代码分析以发现漏洞的方法,由于源代码或逆向代码中包含完整的程序语义信息,因此通过源代码静态分析能够较为全面地遍历程序路径,发现更多的安全漏洞。静态分析主要包括污点数据追踪技术,可达路径分析技术,符号执行技术等。污点数据追踪是根据数据以来关系对程序进行分析,通常用于检测数据相关的漏洞,在文献《chex:staticallyvettingandroidappsforcomponenthijackingvulnerabilities》中,lu等人通过静态分析中的污点追踪技术实现了工具chex。可达路径分析关注控制流分析和控制流分析,主要用于检测功能泄露、隐私泄露漏洞等,在文献《permissionre-delegation:attacksanddefenses》中,felt等人提出了一个基于可达路径分析来检测android组件间通信机制中的权限重委派漏洞。符号执行技术是对程序变量进行精确计算的技术,才用抽象符号代替程序变量,并模拟程序执行,能够在复杂的数据依赖关系中发现变量之间本质的约束关系,在文献《symdroid:symbolicexecutionfordalvikbytecode》,jeon等人提出了一个针对dalvik字节码的符号执行框架symdroid。静态分析技术具有分析简单、易于理解的优点,但是静态分析技术通常都需要依据关键词的匹配,此外如果对程序没有足够精确的上下文分析及路径的可达性分析,甚至于存在漏洞的路径并没有触发,造成结果就是产生很高的误报率。动态分析是指在程序运行过程中,通过查看程序执行过程涉及到的变量、内存以及寄存器的值,或者通过构造特定的输入数据,根据程序执行的路径追踪输入数据在传播过程中的变化,最终获取程序的执行路径以及挖掘漏洞的目的。动态分析技术主要包括污点数据传播分析技术、fuzzing测试技术两种。污点数据传播分析时在定制的android沙箱中动态连续跟踪数据的流向,在文献《taintdroid:aninformation-flowtrackingsystemforrealtimeprivacymonitoringonsmartphones》中,enck等人基于android平台研究了污点数据追踪框架taintdroid。而fuzzing测试技术是通过不断生成大量畸形测试数据来测试程序的鲁棒性和安全,主要用于测试组件间通信机制等。相比于静态代码分析,动态分析具有较强的识别能力,代码覆盖率高,但是大多数android应用程序的代码与界面是紧密交互的,假如动态分析部分只是进行了简单的安装应用程序以及实现自动触发点击事件,很多情况下并不会覆盖应用程序全部功能,因此也就不可能触发某些应用执行路径,无法生成有效数据,最终引起漏报。传统的基于数据流的污点分析首先会获取source(敏感数据的获取点,获取的数据标记为污点),然后对每个entrypoint(包含source点的函数或一段代码)进行分析与追踪,最后检查sink点(数据的传出点,主要是对数据的存储、传输等操作)是否包含污点数据。android中的敏感数据主要由调用系统敏感数据的api函数获取得到,如getcallstate,getlinenumber等,传统的污点数据追踪分析技术仅仅适用于敏感信息获取的情况,在一些场景例如通信的双方使用明文传输,这就造成无法获取source点的问题,对于漏洞的分析会产生一定的误报。此外,传统的污点数据追踪技术在进行数据追踪时标记一个source数据就需要检查一个sink点,如果有多个source数据就需要分析多个sink点,这就造成了效率上的下降。技术实现要素:本发明的目的在于针对上述现有技术中,静态分析误报率高、动态测试中导致的性能开销大问题,提供一种android平台下的应用程序漏洞自动化挖掘系统,该技术结合静态分析与动态分析的思想,能够有效避免静态挖掘技术导致的误报,且结合静态分析产生的fuzzing测试用例,能够有效避免动态测试中导致的性能开销大问题,提高漏洞挖掘的准确率。为了达到上述目的,本发明采用如下技术方案:一种android平台下的应用程序漏洞自动化挖掘系统,应用程序漏洞自动化挖掘系统包括静态分析模块和动态分析模块,静态分析模块主要包括应用程序安装包apk反编译模块、android配置清单文件分析模块、控制流图构建模块、intent可达路径分析模块、污点数据追踪模块、api提取模块:应用程序安装包apk反编译模块:用于使用第三方工具对apk文件进行反编译得到易于分析的smali文件;android配置清单文件分析模块:用于针对androidmanifest.xml文件进行分析,提取权限、组件名称、组件注册属性信息;控制流图构建模块:用于对smali文件进行词法和语法分析,构建smali文件中执行逻辑的控制流图;intent可达路径分析模块:用于依据anroid配置清单文件分析模块和控制流图构建模块输出的信息分析组件间通信问题,确定intent的数据传递路径;污点数据追踪模块:用于依据控制流图构建模块构建的控制流图进行污点数据追踪,确定smali文件中存在的数据流;api提取模块:用于提取与漏洞相关的api;动态分析模块包括fuzzing测试用例构造模块、smali注入模块、运行目标程序监控输出模块、分析模块;fuzzing测试用例构造模块:用于依据静态分析模块的分析结果得到应用程序可能具有的漏洞特征,并将有效测试用例进行变异得到半有效测试用例,作为漏洞的触发点;smali注入模块:根据数据流确定smali代码插入位置,依据类型将fuzzing测试用例以smali代码的形式插入到samli文件中,然后进行回编译,重打包;运行目标程序监控输出模块:通过运行目标程序得到输出信息;分析模块:结合静态分析模块的分析结果、漏洞特征库及目标程序的输出信息得到应用程序的分析报告。所述的一种android平台下的应用程序漏洞自动化挖掘系统,还包括用户与系统交互界面。一种android平台下应用程序漏洞自动化挖掘方法,包括以下步骤:s1,获取需要交互的应用程序安装包apk文件,并对获取的apk文件进行反编译,得到smali文件;s2,在步骤s1的基础上,进行操作以下步骤:s21,分析android应用程序配置文件androidmanifest.xml,提取组件、权限相关信息;s22,依据smali语法进行smaili文件中执行逻辑的控制流图构建,得到smaili文件中执行逻辑的控制流图;s23,依据预设的漏洞因子提取关键api;s3,在操作s21、s22的基础上,利用污点数据追踪模块进行数据流反向追踪,得到程序的数据流,并针对组件间的通信问题分析intent的数据传递路径;然后,结合步骤s23得到应用程序的静态分析报告;s4,在步骤s3静态分析报告的基础上,分析有效测试用例,对有效测试用例进行变异得到半有效测试用例;s5,使用smali插桩技术将步骤s4中的半有效测试用例数据构造smali代码,然后进行代码插桩;s6,在步骤s5的基础上,运行目标程序,监控程序输出;s7,根据步骤s3静态分析报告及步骤s6程序输出的信息,最终确定应用程序中存在的漏洞信息。4.根据权利要求3所述的一种android平台下应用程序漏洞自动化挖掘方法,其特征在于,步骤s4中的半有效测试用例为预先设置的用例。所述的一种android平台下应用程序漏洞自动化挖掘方法,步骤s3中,反向追踪的步骤为:s31,标记污点数据,定位sink点,定位invoke指令中的参数寄存器,定位基本块;s32,以步骤s31中定位的当前基本块为中心,在基本块内向下扫描,建立如下矩阵:其中矩阵的行line代表当前invoke指令所在的行号,列v代表当前invoke指令基于的寄存器号,矩阵中的数据<line,vx>代表当前invoke指令所依赖的上一条指令所在的寄存器与行号;s33,依据步骤s31中获取的寄存器进行反向追踪:根据数据的依赖关系,分析各寄存器的数据;s34,在步骤s33的基础上得到数据的source点。所述的一种android平台下应用程序漏洞自动化挖掘方法,步骤s33中,针对不同的指令采取相应的操作;其中,对于标签指令,依据smaili文件中执行逻辑的控制流图得到的数据结构,定位基本块并依据索引链接到上一个基本块,然后分析相关寄存器的数据;对于数据移动指令,针对数据移动指令涉及的目的寄存器和源寄存器进行变换,对源寄存器和目的寄存器的数据转化进行分析。所述的一种android平台下应用程序漏洞自动化挖掘方法,所述数据移动指令包括数据操作指令、数组操作指令、数据运算指令。本发明技术同其他技术相比,其有益效果表现在:一、结合静态分析与动态分析,能有效避免静态分析产生的误报,依据静态分析的结果在动态分析能够避免动态分析导致的性能低下等问题。二、本系统无需程序的源代码,只需打包后的apk文件,且对apk文件反编译后的smali语法相比较与源程序的java语法更加简单,结构更加明朗且进行了一定的优化,能够避免源程序中存在的错误。三、在静态分析中依据smali构建的控制流图能够有效的分析程序中存在的控制流。四、静态分析中的污点数据反向追踪部分,因为是从数据的sink点着手,然后反向追踪,能够有效挖掘程序中存在的明文传输、存储漏洞等。附图说明图1是本发明的系统整体框架图;图2是显示intentapi参数提取原理图;图3是隐式intentapi参数提取原理图。具体实施方式本说明书中公开的所有特征,除了互相排斥的特征和/或步骤以外,均可以以任何方式组合。一种android平台下的应用程序漏洞自动化挖掘系统,,该系统设置于服务器上,应用程序漏洞自动化挖掘系统包括静态分析模块和动态分析模块,静态分析模块主要包括应用程序安装包apk反编译模块、android配置清单文件分析模块、控制流图构建模块、intent可达路径分析模块、污点数据追踪模块、api提取模块:应用程序安装包apk反编译模块:用于使用第三方工具对apk文件进行反编译得到易于分析的smali文件;android配置清单文件分析模块:用于针对androidmanifest.xml文件进行分析,提取权限、组件名称、组件注册属性信息;控制流图构建模块:用于对smali文件进行词法和语法分析,构建smali文件中执行逻辑的控制流图;intent可达路径分析模块:用于依据anroid配置清单文件分析模块和控制流图构建模块输出的信息分析组件间通信问题,确定intent的数据传递路径;污点数据追踪模块:用于依据控制流图构建模块构建的控制流图进行污点数据追踪,确定smali文件中存在的数据流;api提取模块:用于提取与漏洞相关的api;动态分析模块包括fuzzing测试用例构造模块、smali注入模块、运行目标程序监控输出模块、分析模块;fuzzing测试用例构造模块:用于依据静态分析模块的分析结果得到应用程序可能具有的漏洞特征,并将有效测试用例进行变异得到半有效测试用例,作为漏洞的触发点;smali注入模块:根据数据流确定smali代码插入位置,依据类型将fuzzing测试用例以smali代码的形式插入到samli文件中,然后进行回编译,重打包;运行目标程序监控输出模块:通过运行目标程序得到输出信息;分析模块:结合静态分析模块的分析结果、漏洞特征库及目标程序的输出信息得到应用程序的分析报告。所述的一种android平台下的应用程序漏洞自动化挖掘系统,还包括用户与系统交互界面。一种android平台下应用程序漏洞自动化挖掘方法,包括以下步骤:s1,获取需要交互的应用程序安装包apk文件,并对获取的apk文件进行反编译,得到smali文件;s2,在步骤s1的基础上,进行操作以下步骤:s21,分析android应用程序配置文件androidmanifest.xml,提取组件、权限等相关信息;s22,依据smali语法进行smaili文件中执行逻辑的控制流图构建,得到smaili文件中执行逻辑的控制流图;s23,依据预设的漏洞因子提取关键api;s3,在操作s21、s22的基础上,利用污点数据追踪模块进行数据流反向追踪,得到程序的数据流,并针对组件间的通信问题分析intent的数据传递路径;然后,结合步骤s23得到应用程序的静态分析报告;s4,在步骤s3静态分析报告的基础上,分析有效测试用例,对有效测试用例进行变异得到半有效测试用例;s5,使用smali插桩技术将步骤s4中的半有效测试用例数据构造smali代码,然后进行代码插桩;s6,在步骤s5的基础上,运行目标程序,监控程序输出;s7,根据步骤s3静态分析报告及步骤s6程序输出的信息,最终确定应用程序中存在的漏洞信息。4.根据权利要求3所述的一种android平台下应用程序漏洞自动化挖掘方法,其特征在于,步骤s4中的半有效测试用例为预先设置的用例。所述的一种android平台下应用程序漏洞自动化挖掘方法,步骤s3中,反向追踪的步骤为:s31,标记污点数据,定位sink点,定位invoke指令中的参数寄存器,定位基本块;s32,以步骤s31中定位的当前基本块为中心,在基本块内向下扫描,建立如下矩阵:其中矩阵的行line代表当前invoke指令所在的行号,列v代表当前invoke指令基于的寄存器号,矩阵中的数据<line,vx>代表当前invoke指令所依赖的上一条指令所在的寄存器与行号;s33,依据步骤s31中获取的寄存器进行反向追踪:根据数据的依赖关系,分析各寄存器的数据;s34,在步骤s33的基础上得到数据的source点。所述的一种android平台下应用程序漏洞自动化挖掘方法,步骤s33中,针对不同的指令采取相应的操作;其中,对于标签指令,依据smaili文件中执行逻辑的控制流图得到的数据结构,定位基本块并依据索引链接到上一个基本块,然后分析相关寄存器的数据;对于数据移动指令,针对数据移动指令涉及的目的寄存器和源寄存器进行变换,对源寄存器和目的寄存器的数据转化进行分析。所述的一种android平台下应用程序漏洞自动化挖掘方法,所述数据移动指令包括数据操作指令、数组操作指令、数据运算指令。下面结合图1、图2对本发明作详细说明。实施例下面将结合附图及具体实施方式对本发明作进一步的描述。本发明所述的android平台下的应用程序漏洞自动化挖掘系统部署在服务器上,android平台下的应用程序漏洞自动化挖掘系统包括以下几个模块,包括静态分析模块和动态分析模块,静态分析模块主要包括应用程序安装包apk反编译模块、android配置清单文件分析模块、控制流图构建模块、intent可达路径分析模块、污点数据追踪模块、api提取模块;动态分析模块包括fuzzing测试用例构造模块、smali注入模块、运行目标程序监控输出模块、分析模块;基于上述模块,使用该android平台下的应用程序漏洞自动化挖掘系统进行漏洞挖掘的步骤如下:一、用户提交需要交互的应用程序安装包apk文件至服务器:本系统提供交互界面,用户能够和系统交互,提交打包好的应用程序安装包文件即可,无需提供源代码;二、服务器端的应用程序安装包apk反编译模块对apk文件进行反编译得到smali文件夹及其他信息:使用第三方工具,如apktool等提供的api对应用程序进行反编译得到如下表1所示的文件列表。表4-2apk反编译后的各文件文件名或文件夹名描述androidmanifest.xml应用程序配置文件assets文件夹应用程序资源文件,如字体、声音等lib应用程序调用的动态链接库original应用程序签名和配置文件res应用程序使用到的资源目录smali文件夹应用程序反编译后的生成的代码文件apktool.yml应用程序反编译后的配置文件,用于进行重打包三、分析反编译后得到的androidmanifest.xml文件,主要是提取androidmanifest.xml文件组件、权限相关信息,依据androidmanifest.xml文件特有的xml结构进行匹配得到数据并存储。四、依据smali语法构建控制流,算法如下:1、初始化:若当前为初次生成控制流图,初始化生成构建控制流图的入口点entry,出口节点exsit,以及空节点cfg_node,设置entry的后继节点为cfg_node,并将当前cfg_node作为基本块。此外,设置label栈和goto栈为空。2、静态扫描smali代码,遇到不同指令进行与指令相对应的操作,指令与操作对应如下:goto_expr:(11)该语句存入当前基本块,然后结束当前基本块;(12)在label栈中查找该goto语句的目标标号:如果找到,设置当前基本块的索引链接到label标签所在的基本块;如果未找到,设置当前基本块的索引以及将goto语句的目标标号存入goto栈;(13)创建一个空节点作为当前块;其中,操作(11)、(12)、(13)同步进行;label_expr:(21)结束当前基本块,构建空基本块,并设置标签所在行为空基本块的的第一条语句;(222)将前一个基本块的索引指向上述构建的基本块;(23)在goto栈中查找label语句的标号:如果未找到,将当前基本块的索引及label标号存入label栈;如果找到,则设置找到的基本块的索引指向该基本块;其中,操作(21)、(22)、(23)顺序进行;if_type:(31)将条件所在行放入当前块,if后根据label_expr操作;(32)递归调用该控制流图构建算法构建if和else部分的控制流图,由于smali中没有else部分,以label表示else,因此构建的控制流图包含if语句后及跳转的标签后两部分,最后设置前一个基本块的索引指向构建的两个流图;(33)构建空基本块,并将if和label部分构建的控制流图中没有后向索引的基本块的索引指向空基本块;其中,操作(31)、(32)、(33)顺序进行;swtich_type:将各个条件放入不同的基本块,然后根据标签栈label_expr操作。try_catch_type:try_catch所在行放入当前块,然后根据标签栈label_expr进行操作。invoke_type:invoke指令标注,存入当前块。return:(1)return语句所在行存入当前基本块,然后结束当前基本块;(2)将该块的索引指向exit结点;其他语句:直接将该语句加入当前块;3、在构建的控制流图中没有后继索引的基本块指向exit所在的基本块。在静态分析阶段主要做以下几个操作:(1)分析androidmanifest.xml文件,主要是提取组件、权限相关信息(2)依据smali语法进行控制流图构建。(3)进行漏洞因子提取。将上述操作(1)、(2)结合做进一步分析,利用污点数据追踪模块得到程序的数据流,针对组件间的通信问题分析intent可达路径,再结合操作3得到应用程序的静态分析报告;五、依据控制流进行污点数据反向追踪,传统的基于数据流的污点分析首先会获取source(敏感数据的获取点,获取的数据标记为污点),然后对每个entrypoint(包含source点的函数或一段代码)进行分析与追踪,最后检查sink点(数据的传出点,主要是对数据的存储、传输等操作)是否包含污点数据。android中的敏感数据主要由调用系统敏感数据的api函数获取得到,如getcallstate,getlinenumber等,传统的污点数据追踪分析技术仅仅适用于敏感信息获取的情况,在一些场景例如通信的双方使用明文传输,这就造成无法获取source点的问题,对于漏洞的分析会产生一定的误报。此外,传统的污点数据追踪技术在进行数据追踪时标记一个source数据就需要检查一个sink点,如果有多个source数据就需要分析多个sink点,这就造成了效率上的下降。基于上述分析,本文提出了基于smali寄存器的污点数据反向追踪技术算法,依据smali语法特有的数据结构,依据数据的依赖关系,分析各寄存器的数据,从寄存器的角度进行数据流的反向追踪,大大细化了跟踪粒度。过程如下:1、标记污点数据定位sink点(数据的处理点,在本文中指漏洞相关的api),定位invoke指令中的参数寄存器,定位基本块;2、以当前基本块为中心,在基本块内向下扫描,建立如下矩阵:其中矩阵的行line代表当前invoke指令所在的行号,列v代表当前invoke指令基于的寄存器号,矩阵中的数据<line,vx>代表当前invoke指令所依赖的上一条指令所在的寄存器与行号。3、依据获取的寄存器进行反向追踪,即对entrypoint反向分析,在该过程中按照矩阵进行查询,此外需要针对不同的指令进行不同的操作:(1)标签指令:依据控制流图得到的数据结构,定位基本块并依据索引链接到上一个基本块,然后进行反向数据寄存器追踪;(2)数据移动指令:主要包括数据操作指令、数组操作指令、数据运算指令,针对此对目的寄存器和源寄存器进行变换,以此进行追踪;4、得到数据的source点,可能是某个系统api调用的结果,如getdeviceid()等,也可能是一些常量数据等。五、漏洞因子提取:在扫描smali代码过程中,定义漏洞因子为引起漏洞的相关api。六、intent可达路径分析,如下:(1)静态扫描android应用程序配置文件androidmanifest.xml文件时,提取各组件的名称、各组件对应的<intent-filter>标签内属性(<actionxxxx/>和<categoryxxxx/>等等)的值进行保存。(2)静态扫描samli代码得到控制流图的过程,针对intent的创建与传递的api重点分析,对于显式intent,获得其两个参数的值,即组件的全路径信息,具体如图2所示,对于隐式intent,查找参数action、category等信息的值,根据步骤一中保存的数据结构进行匹配,得到组件的路径,具体如上图3所述。当启动组件与目标组件信息确定后,通过构建一张组件通信方法与生命周期方法的映射表(如下表2)来实现组件间的控制流与数据流的连续性。表2组件间通信方法与生命周期映射表七、依据静态分析报告得到的数据流等信息,分析有效测试用例进行变异得到半有效测试用例,该半有效测试用例通常是预置的一些用例,部分如下表3所述:表3漏洞半有效测试用例八、使用smali插桩技术将半有效测试用例数据构造smali代码进行代码插桩,在插桩过程中需要修改寄存器的数量的值,在进行回编译的时候需要重新签名。九、进行fuzzing测试,监控程序输出,结合静态分析结果及漏洞特征库确定应用程序存在的漏洞。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1