CN107832619B - Android平台下应用程序漏洞自动化挖掘系统及方法 - Google Patents
Android平台下应用程序漏洞自动化挖掘系统及方法 Download PDFInfo
- Publication number
- CN107832619B CN107832619B CN201710937566.0A CN201710937566A CN107832619B CN 107832619 B CN107832619 B CN 107832619B CN 201710937566 A CN201710937566 A CN 201710937566A CN 107832619 B CN107832619 B CN 107832619B
- Authority
- CN
- China
- Prior art keywords
- data
- module
- application program
- file
- analysis module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3612—Software analysis for verifying properties of programs by runtime analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Computing Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种Android平台下应用程序漏洞自动化挖掘系统及方法,属于软件分析技术领域,主要分为应用程序静态分析模块、应用程序动态分析模块两个部分,静态分析模块主要是针对应用程序安装包apk文件进行控制流与数据流分析,提取组件权限等属性信息,并针对应用程序中的组件间通信问题进行可达路径分析,动态分析是首先依据静态分析的结果构造Fuzzing测试用例数据,然后对反编译后的Smali文件进行Smali代码插桩,然后运行应用程序,得到输出信息,结合静态分析的结果最终得到应用程序存在的漏洞。本发明能够自动挖掘应用程序可能存在的漏洞,具有一定的弹性,解决了人工挖掘耗时的问题,同时结合静态与动态分析能够大大提升准确度。
Description
技术领域
本发明属于软件分析技术领域,尤其涉及一种Android平台下应用程序漏洞自动化挖掘系统及方法,主要包括静态分析与动态分析两个部分。
背景技术
自2007年Google公司正式对外发布Android系统以来,由于其开源的特性受到了很多手机厂商的青睐,同时随着移动互联网市场的飞速增长,各式各样的基于Android平台的应用程序在大众的视野中,而这些带给大众便利的应用程序却常常存在很大的安全隐患,恶意第三方常常会利用这些安全隐患进行攻击,给用户带来了很大的威胁。众所周知,传统的PC端的安全技术已经相对成熟,但是在移动互联网领域的安全技术却比较落后,传统的主机安全技术已然不能够有效保障移动领域的安全,Android平台下的应用程序也面临严重的安全问题。
针对Android应用程序的漏洞挖掘技术方面,主要分为静态挖掘和动态挖掘两种方式,其中:
静态分析方法是指不通过运行代码,直接针对高级语言编写的源程序或依据源码进行逆向得到的代码分析以发现漏洞的方法,由于源代码或逆向代码中包含完整的程序语义信息,因此通过源代码静态分析能够较为全面地遍历程序路径,发现更多的安全漏洞。静态分析主要包括污点数据追踪技术,可达路径分析技术,符号执行技术等。污点数据追踪是根据数据以来关系对程序进行分析,通常用于检测数据相关的漏洞,在文献《CHEX:statically vetting Android apps for component hijacking vulnerabilities》中,Lu等人通过静态分析中的污点追踪技术实现了工具CHEX。可达路径分析关注控制流分析和控制流分析,主要用于检测功能泄露、隐私泄露漏洞等,在文献《Permission re-delegation:attacks and defenses》中,Felt等人提出了一个基于可达路径分析来检测Android组件间通信机制中的权限重委派漏洞。符号执行技术是对程序变量进行精确计算的技术,才用抽象符号代替程序变量,并模拟程序执行,能够在复杂的数据依赖关系中发现变量之间本质的约束关系,在文献《SymDroid:Symbolic Execution for Dalvik Bytecode》,Jeon等人提出了一个针对Dalvik字节码的符号执行框架SymDroid。静态分析技术具有分析简单、易于理解的优点,但是静态分析技术通常都需要依据关键词的匹配,此外如果对程序没有足够精确的上下文分析及路径的可达性分析,甚至于存在漏洞的路径并没有触发,造成结果就是产生很高的误报率。
动态分析是指在程序运行过程中,通过查看程序执行过程涉及到的变量、内存以及寄存器的值,或者通过构造特定的输入数据,根据程序执行的路径追踪输入数据在传播过程中的变化,最终获取程序的执行路径以及挖掘漏洞的目的。动态分析技术主要包括污点数据传播分析技术、Fuzzing测试技术两种。污点数据传播分析时在定制的Android沙箱中动态连续跟踪数据的流向,在文献《TaintDroid:An Information-Flow TrackingSystem for Realtime Privacy Monitoring on Smartphones》中,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程序输出的信息,最终确定应用程序中存在的漏洞信息。
进一步,步骤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是显示Intent API参数提取原理图;
图3是隐式Intent API参数提取原理图。
具体实施方式
本说明书中公开的所有特征,除了互相排斥的特征和/或步骤以外,均可以以任何方式组合。
一种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程序输出的信息,最终确定应用程序中存在的漏洞信息。
步骤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-2 APK反编译后的各文件
文件名或文件夹名 | 描述 |
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)结束当前基本块,构建空基本块,并设置标签所在行为空基本块的的第一条语句;
(22)将前一个基本块的索引指向上述构建的基本块;
(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>标签内属性(<action xxxx/>和<categoryxxxx/>等等)的值进行保存。
(2)静态扫描samli代码得到控制流图的过程,针对Intent的创建与传递的API重点分析,对于显式Intent,获得其两个参数的值,即组件的全路径信息,具体如图2所示,对于隐式Intent,查找参数action、category等信息的值,根据步骤一中保存的数据结构进行匹配,得到组件的路径,具体如上图3所述。
当启动组件与目标组件信息确定后,通过构建一张组件通信方法与生命周期方法的映射表(如下表2)来实现组件间的控制流与数据流的连续性。
表2组件间通信方法与生命周期映射表
七、依据静态分析报告得到的数据流等信息,分析有效测试用例进行变异得到半有效测试用例,该半有效测试用例通常是预置的一些用例,部分如下表3所述:
表3漏洞半有效测试用例
八、使用Smali插桩技术将半有效测试用例数据构造Smali代码进行代码插桩,在插桩过程中需要修改寄存器的数量的值,在进行回编译的时候需要重新签名。
九、进行Fuzzing测试,监控程序输出,结合静态分析结果及漏洞特征库确定应用程序存在的漏洞。
Claims (7)
1.一种Android平台下应用程序漏洞自动化挖掘系统,其特征在于,应用程序漏洞自动化挖掘系统包括静态分析模块和动态分析模块,静态分析模块包括:
应用程序安装包APK反编译模块:用于使用第三方工具对APK文件进行反编译得到易于分析的Smali文件;
Android配置清单文件分析模块:用于针对AndroidManifest.xml文件进行分析,提取权限、组件名称、组件注册属性信息;
控制流图构建模块:用于对Smali文件进行词法和语法分析,构建Smali文件中执行逻辑的控制流图;
Intent可达路径分析模块:用于依据Anroid配置清单文件分析模块和控制流图构建模块输出的信息分析组件间通信问题,确定Intent的数据传递路径;
污点数据追踪模块:用于依据控制流图构建模块构建的控制流图进行污点数据追踪,确定Smali文件中存在的数据流;
API提取模块:用于提取与漏洞相关的API;
动态分析模块包括:
Fuzzing测试用例构造模块:用于依据静态分析模块的分析结果得到应用程序可能具有的漏洞特征,并将有效测试用例进行变异得到半有效测试用例,作为漏洞的触发点;
Smali注入模块:根据数据流确定Smali代码插入位置,依据类型将Fuzzing测试用例以Smali代码的形式插入到Samli文件中,然后进行回编译,重打包;
运行目标程序监控输出模块:通过运行目标程序得到输出信息;
分析模块:结合静态分析模块的分析结果、漏洞特征库及目标程序的输出信息得到应用程序的分析报告。
2.根据权利要求1所述的一种Android平台下应用程序漏洞自动化挖掘系统,其特征在于,还包括用户与系统交互界面。
3.一种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中的半有效测试用例为预先设置的用例。
5.根据权利要求3所述的一种Android平台下应用程序漏洞自动化挖掘方法,其特征在于,步骤S3中,反向追踪的步骤为:
S31,标记污点数据,定位sink点,定位Invoke指令中的参数寄存器,定位基本块;
S32,以步骤S31中定位的当前基本块为中心,在基本块内向下扫描,建立如下矩阵,
其中矩阵的行line代表当前invoke指令所在的行号,列v代表当前invoke指令基于的寄存器号,矩阵中的数据<line,vx>代表当前invoke指令所依赖的上一条指令所在的寄存器与行号;
S33,依据步骤S31中获取的寄存器进行反向追踪:根据数据的依赖关系,分析各寄存器的数据;
S34,在步骤S33的基础上得到数据的source点。
6.根据权利要求5所述的一种Android平台下应用程序漏洞自动化挖掘方法,其特征在于,
步骤S33中,针对不同的指令采取相应的操作;
其中,对于标签指令,依据smaili文件中执行逻辑的控制流图得到的数据结构,定位基本块并依据索引链接到上一个基本块,然后分析相关寄存器的数据;
对于数据移动指令,针对数据移动指令涉及的目的寄存器和源寄存器进行变换,对源寄存器和目的寄存器的数据转化进行分析。
7.根据权利要求6所述的一种Android平台下应用程序漏洞自动化挖掘方法,其特征在于,所述数据移动指令包括数据操作指令、数组操作指令、数据运算指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710937566.0A CN107832619B (zh) | 2017-10-10 | 2017-10-10 | Android平台下应用程序漏洞自动化挖掘系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710937566.0A CN107832619B (zh) | 2017-10-10 | 2017-10-10 | Android平台下应用程序漏洞自动化挖掘系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107832619A CN107832619A (zh) | 2018-03-23 |
CN107832619B true CN107832619B (zh) | 2020-12-15 |
Family
ID=61647654
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710937566.0A Active CN107832619B (zh) | 2017-10-10 | 2017-10-10 | Android平台下应用程序漏洞自动化挖掘系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107832619B (zh) |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11741238B2 (en) * | 2017-11-27 | 2023-08-29 | Lacework, Inc. | Dynamically generating monitoring tools for software applications |
CN108762752B (zh) * | 2018-04-02 | 2019-07-12 | 北京大学 | 一种结合动态和静态代码分析技术的安卓应用程序功能类图生成方法和装置 |
CN108875375B (zh) * | 2018-04-26 | 2022-10-18 | 南京大学 | 一种面向安卓系统隐私泄漏检测的动态特性信息提取方法 |
CN108647520B (zh) * | 2018-05-15 | 2020-05-29 | 浙江大学 | 一种基于脆弱性学习的智能模糊测试方法与系统 |
CN108874675A (zh) * | 2018-06-25 | 2018-11-23 | 中国电子技术标准化研究院 | 一种基于字段分类的fuzzing测试用例生成方法 |
CN109145603A (zh) * | 2018-07-09 | 2019-01-04 | 四川大学 | 一种基于信息流的Android隐私泄露行为检测方法和技术 |
CN109002721B (zh) * | 2018-07-12 | 2022-04-08 | 南方电网科学研究院有限责任公司 | 一种信息安全漏洞的挖掘分析方法 |
CN109308415B (zh) * | 2018-09-21 | 2021-11-19 | 四川大学 | 一种面向二进制的导向性模糊测试方法与系统 |
CN109597767B (zh) * | 2018-12-19 | 2021-11-12 | 中国人民解放军国防科技大学 | 一种基于遗传变异的模糊测试用例生成方法及系统 |
CN110096431A (zh) * | 2019-03-19 | 2019-08-06 | 深圳壹账通智能科技有限公司 | 页面权限测试方法、装置、计算机设备及存储介质 |
CN110135165B (zh) * | 2019-04-12 | 2023-06-09 | 江苏大学 | 一种动态化的分级多粒度模糊测试漏洞挖掘方法 |
CN111859380B (zh) * | 2019-04-25 | 2024-10-11 | 北京九州正安科技有限公司 | Android App漏洞的零误报检测方法 |
CN110362970A (zh) * | 2019-07-23 | 2019-10-22 | 北京智游网安科技有限公司 | 一种防止应用程序反编译的方法、存储介质及终端设备 |
CN111382437A (zh) * | 2020-03-03 | 2020-07-07 | 思客云(北京)软件技术有限公司 | 基于配置分析引擎的缺陷检测方法、设备和计算机可读存储介质 |
CN111428238B (zh) * | 2020-03-17 | 2023-11-07 | 成都国信安信息产业基地有限公司 | 一种基于安卓组件拒绝服务测试方法、检测终端及介质 |
CN111596926B (zh) * | 2020-04-14 | 2023-02-07 | 中国人民解放军战略支援部队信息工程大学 | 数据取证分析方法、装置及电子设备 |
CN111353146B (zh) * | 2020-05-25 | 2020-08-25 | 腾讯科技(深圳)有限公司 | 应用程序敏感权限的检测方法、装置、设备和存储介质 |
CN113746886A (zh) * | 2020-05-29 | 2021-12-03 | 北京沃东天骏信息技术有限公司 | 用于apk文件的分析方法及装置 |
CN111737150B (zh) * | 2020-07-24 | 2023-09-15 | 江西师范大学 | 面向Java EE程序SQLIA漏洞的污点分析和验证方法及装置 |
CN114077728B (zh) * | 2020-08-12 | 2023-05-02 | 电子科技大学 | 基于静态检测的Android应用生物认证安全性方法 |
CN113779437A (zh) * | 2020-09-23 | 2021-12-10 | 北京沃东天骏信息技术有限公司 | 隐私检测方法及装置、计算机可存储介质 |
CN112560045A (zh) * | 2020-12-11 | 2021-03-26 | 腾讯科技(深圳)有限公司 | 应用程序漏洞检测方法、装置、计算机设备和存储介质 |
CN112947929B (zh) * | 2021-01-28 | 2023-11-24 | 抖音视界有限公司 | 应用程序安装包的构建方法、装置、计算机设备和介质 |
CN112765603B (zh) * | 2021-01-28 | 2022-04-05 | 电子科技大学 | 一种结合系统日志与起源图的异常溯源方法 |
CN112965747B (zh) * | 2021-03-30 | 2023-06-23 | 建信金融科技有限责任公司 | 挖掘代码漏洞的方法、装置、设备和计算机可读介质 |
CN113626823B (zh) * | 2021-06-29 | 2023-06-27 | 中国科学院信息工程研究所 | 一种基于可达性分析的组件间交互威胁检测方法及装置 |
CN113468534B (zh) * | 2021-09-01 | 2022-02-11 | 北京邮电大学 | 针对安卓应用程序的漏洞检测方法及相关装置 |
CN114416520B (zh) * | 2021-12-08 | 2024-09-13 | 中国人民解放军战略支援部队信息工程大学 | 一种面向Windows程序图形界面绕过的模糊测试方法及装置 |
CN114077737A (zh) * | 2022-01-19 | 2022-02-22 | 南京明博互联网安全创新研究院有限公司 | 基于污点分析的Android组件间通信数据流检测方法 |
CN115859292B (zh) * | 2023-02-20 | 2023-05-09 | 卓望数码技术(深圳)有限公司 | 一种涉诈app检测系统和判定方法以及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104484607A (zh) * | 2014-12-16 | 2015-04-01 | 上海交通大学 | Android应用程序安全性测试的通用方法及系统 |
CN105608383A (zh) * | 2015-12-22 | 2016-05-25 | 工业和信息化部电子第五研究所 | ActiveX控件漏洞测试方法及系统 |
CN106650452A (zh) * | 2016-12-30 | 2017-05-10 | 北京工业大学 | 一种Android系统内置应用漏洞挖掘方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9384354B2 (en) * | 2013-02-20 | 2016-07-05 | International Business Machines Corporation | Rule matching in the presence of languages with no types or as an adjunct to current analyses for security vulnerability analysis |
-
2017
- 2017-10-10 CN CN201710937566.0A patent/CN107832619B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104484607A (zh) * | 2014-12-16 | 2015-04-01 | 上海交通大学 | Android应用程序安全性测试的通用方法及系统 |
CN105608383A (zh) * | 2015-12-22 | 2016-05-25 | 工业和信息化部电子第五研究所 | ActiveX控件漏洞测试方法及系统 |
CN106650452A (zh) * | 2016-12-30 | 2017-05-10 | 北京工业大学 | 一种Android系统内置应用漏洞挖掘方法 |
Non-Patent Citations (1)
Title |
---|
Android安全漏洞挖掘技术综述;张玉清等;《计算机研究与发展》;20151231;第52卷(第10期);第2167-2177页 * |
Also Published As
Publication number | Publication date |
---|---|
CN107832619A (zh) | 2018-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107832619B (zh) | Android平台下应用程序漏洞自动化挖掘系统及方法 | |
Salis et al. | Pycg: Practical call graph generation in python | |
Sen et al. | Jalangi: A selective record-replay and dynamic analysis framework for JavaScript | |
Yamaguchi et al. | Automatic inference of search patterns for taint-style vulnerabilities | |
David et al. | BINSEC/SE: A dynamic symbolic execution toolkit for binary-level analysis | |
Lin et al. | Automated forensic analysis of mobile applications on Android devices | |
Tang et al. | A novel hybrid method to analyze security vulnerabilities in android applications | |
Liao et al. | SmartDagger: a bytecode-based static analysis approach for detecting cross-contract vulnerability | |
US10084819B1 (en) | System for detecting source code security flaws through analysis of code history | |
Zhang et al. | Ripple: Reflection analysis for android apps in incomplete information environments | |
CN111859380B (zh) | Android App漏洞的零误报检测方法 | |
CN109271789B (zh) | 恶意进程检测方法、装置、电子设备及存储介质 | |
CN104134039A (zh) | 病毒查杀方法、客户端、服务器以及病毒查杀系统 | |
Arzt et al. | The soot-based toolchain for analyzing android apps | |
CN109522235B (zh) | 一种针对安卓动态加载的隐私泄露检测的方法 | |
CN115270131A (zh) | 一种Java反序列化漏洞检测方法及系统 | |
CN101901184B (zh) | 检查应用程序漏洞的方法、装置和系统 | |
Kang et al. | Scaling javascript abstract interpretation to detect and exploit node. js taint-style vulnerability | |
CN111709026A (zh) | 静态安全检测方法、装置、计算机设备和存储介质 | |
Zhong et al. | Scalable compositional static taint analysis for sensitive data tracing on industrial micro-services | |
Jahanshahi et al. | Minimalist: Semi-automated Debloating of {PHP} Web Applications through Static Analysis | |
Yang et al. | Compatibility issue detection for Android apps based on path-sensitive semantic analysis | |
Bohluli et al. | Detecting privacy leaks in android apps using inter-component information flow control analysis | |
Tiwari et al. | Demand-driven Information Flow Analysis of WebView in Android Hybrid Apps | |
CN111796832B (zh) | 热补丁文件生成方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |