CN111859380A - Android App漏洞的零误报检测方法 - Google Patents
Android App漏洞的零误报检测方法 Download PDFInfo
- Publication number
- CN111859380A CN111859380A CN201910338043.3A CN201910338043A CN111859380A CN 111859380 A CN111859380 A CN 111859380A CN 201910338043 A CN201910338043 A CN 201910338043A CN 111859380 A CN111859380 A CN 111859380A
- Authority
- CN
- China
- Prior art keywords
- vulnerability
- app
- target
- function
- android
- 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.)
- Pending
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 27
- 238000012360 testing method Methods 0.000 claims abstract description 36
- 230000003068 static effect Effects 0.000 claims abstract description 16
- 238000005516 engineering process Methods 0.000 claims abstract description 8
- 238000000605 extraction Methods 0.000 claims abstract description 5
- 238000001914 filtration Methods 0.000 claims abstract description 4
- 230000000694 effects Effects 0.000 claims abstract description 3
- 230000006870 function Effects 0.000 claims description 57
- 238000000034 method Methods 0.000 claims description 30
- 238000003780 insertion Methods 0.000 claims description 5
- 230000037431 insertion Effects 0.000 claims description 5
- 238000012795 verification Methods 0.000 claims description 4
- 238000004458 analytical method Methods 0.000 abstract description 23
- 230000006399 behavior Effects 0.000 description 9
- 238000005206 flow analysis Methods 0.000 description 5
- 238000011161 development Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 201000004569 Blindness Diseases 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000005314 correlation function Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000004880 explosion Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 239000000523 sample Substances 0.000 description 1
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/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
-
- 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/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Virology (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
一种AndroidApp漏洞的零误报检测方法,其包括如下步骤:步骤1)分析AndroidApp漏洞的经验知识(如漏洞攻击路径,CVE报告等),总结检测和触发漏洞的综合描述;步骤2)App特征提取,静态搜索漏洞属性以及构造测试用例和触发器需要用到的字段值;步骤3)采用符号执行探索路径约束,过滤步骤2)中无效的字段值;步骤4)动态生成测试用例和触发器,并触发目标App;步骤5)对目标App的入口函数和目标函数进行动态二进制插桩;步骤6)如果目标函数的行为与漏洞行为匹配,则判定漏洞存在。本发明通过分析漏洞的经验知识总结出检测和触发漏洞的信息,同时结合静态分析、符号执行和动态二进制插桩技术对漏洞进行检测和验证,实现了零误报的检测效果。
Description
技术领域
本发明涉及一种Android App漏洞的零误报检测方法,主要应用于Android App的漏洞检测***开发中。
背景技术
静态分析技术:简称静态分析或静态检测,是一种白盒测试技术。这种检测技术,不需要在***运行时进行,而只是通过对应用程序的源代码进行词法分析、语法分析、数据流分析等操作,根据各项分析结果来检测目标应用的源代码是否规范、应用程序是否存在安全威胁以及应用程序的可靠性和可维护性是否达到一定的标准等等。较为常用的静态代码分析技术包括:词法分析和语法分析、控制流分析和数据流分析等等。静态代码分析技术的一大优点是,它不需要运行应用程序,只要有程序源代码即可对该应用程序进行检测。然而,在不运行程序的情况下,依靠单纯的代码分析,会产生较高的误报率,无法证明漏洞真实存在,最终影响漏洞检测的准确性。
动态分析技术:在不改变源代码或者在源代码不可见的情况下对已经在运行的目标应用程序进行自动化检测的一种漏洞检测技术。这种分析技术主要是通过改变应用程序的运行环境来完成的。动态分析技术主要是通过构造非法输入数据或者构造具有攻击目的的用户输入数据,对目标应用***进行调试运行,然后根据目标***的运行结果来判断被检测***是否存在安全漏洞威胁。动态分析技术的优点是准确性较高,缺点是运行效率较低。这种技术之所以效率低下,是因为动态分析只能分别对应用程序的各个功能模块进行单独的扫描检测,而不能将其作为整个***来进行统一扫描。
符号执行技术:符号执行是一种对程序变量进行精确计算的技术。符号执行采用抽象符号代替程序变量,并模拟程序执行。最终所有程序变量都是由符号组成的表达式构成,再通过约束求解引擎对其进行求解,获得深度语义信息。符号执行能够在复杂的数据依赖关系中发现变量之间本质的约束关系,比污点传播分析精度高,这种精确的数据流分析能帮助理解程序的内在逻辑;在模拟程序运行的过程中,符号执行还会精确记录执行路径上所有的约束条件,可以提高控制流分析中路径可达性问题判定的精确性。符号执行的劣势在于:执行路径空间***问题难以解决;需要功能强大的符号计算***支撑,对硬件计算能力要求较高;符号执行很难处理循环或者递归,因为很多时候对结束条件的取值的判定并不总能得到精确解;符号执行对基础数据类型较为有效,对于复杂结构的数据类型(比如数组等)处理难度较高。
动态二进制插桩技术:动态二进制插桩是在运行的程序中的特定位置附加指令的技术,它并不修改二进制文件本身,而是在运行时修改映射到进程地址空间的内存映像。它的优势在于,不需要目标程序做任何准备工作(如重新编译或重新链接等);静态插桩难以区分二进制码中的代码和数据,动态插桩可以很容易做到。动态插桩的不足是:插桩的开销发生在程序运行时,使程序的执行变得很慢;而且动态插桩更难实现———重写运行时的可执行代码并不容易,在附加指令的同时要避免对程序本身执行的干扰。
现有的大部分Android App漏洞检测工具使用静态分析和动态分析技术,静态分析工具无法在运行状态下验证漏洞,存在很高的误报率;动态分析工具能够验证漏洞,但生成的测试用例盲目性较大,运行效率低。
发明内容
鉴于上述原因,本发明的主要目的是提供一种Android App漏洞的零误报检测方法。该方法针对特定漏洞类型生成有效的测试用例和触发器,通过动态触发目标App来验证漏洞是否存在,从而实现零误报且高效的漏洞检测效果。
为实现上述目的,本发明采取以下技术方案:一种结合静态分析,符号执行和动态二进制插桩的Android App漏洞检测方法,该方法包括以下步骤:
步骤1)分析Android App漏洞的经验知识(如漏洞攻击路径,CVE报告等),总结检测和触发漏洞的综合描述;
步骤2)App特征提取,静态搜索漏洞属性以及构造测试用例和触发器需要用到的字段值;
步骤3)采用符号执行探索路径约束,过滤步骤2)中无效的字段值;
步骤4)动态生成测试用例和触发器,并触发目标App;
步骤5)对目标App的入口函数和目标函数进行插桩;
步骤6)如果目标函数的行为与漏洞行为匹配,则判定漏洞存在。
本发明与现有技术相比的优点在于:本发明结合静态分析和动态分析,在漏洞检测的基础上进行漏洞验证,提高漏洞检测的准确率,解决了现有漏洞检测方法误报率高的问题。除此之外,本发明采用符号执行来指导测试用例生成,减少无效测试用例的数量,提高了漏洞检测的效率。
附图说明
图1为本发明方法的流程图
图2为本发明符号执行模块架构图
图3为本发明动态二进制插桩模块架构图
具体实施方式
如图1所示,本发明的实现步骤如下:
1.分析Android App漏洞的经验知识,总结检测和触发漏洞的综合描述
本发明通过分析漏洞的攻击路径,CVE报告,Android开发文档等漏洞的经验知识,总结检测和触发漏洞的综合描述,全方位的描述该漏洞类型。总结的信息包括:(1)组件,即Android App中存在漏洞的对象;(2)属性,即产生漏洞的必要条件;(3)入口函数,可由开发者重写并接受外部输入的属于(1)的函数集合;(4)目标函数,能够触发漏洞的函数集合。它们通常是一些执行安全敏感操作的***函数,如访问本地资源或远程资源;(5)相关函数,与目标函数存在数据流关系的函数集合;(6)测试用例模板,即传给目标App入口函数的参数形式;和(7)触发器模板,即发送测试用例给目标App,调用目标App入口函数的代码逻辑。
2.App特征提取,静态搜索漏洞属性以及构造测试用例和触发器需要用到的字段值
本发明首先对目标App进行反编译,获得AndroidManifest.xml文件和smali代码。在反编译得到的文件中进行漏洞属性的检测,若存在则将目标App作为潜在漏洞App对象,等待后续的动态验证。根据测试用例模板和触发器模板,本发明静态搜索需要用到的字段值,如AndroidManifest.xml文件中的包名和组件名,以及smali文件中相关函数的参数。同时,构建控制流图和函数调用图,便于后续步骤的使用。
3.采用符号执行探索路径约束,过滤步骤2)中无效的字段值
本发明针对每一个入口函数和目标函数对会生成函数调用图和控制流图,然后利用符号在该路径上进行探索。符号执行的对象为smali代码,本发明通过模拟相关AndroidAPI和smali指令,实现从漏洞的入口函数到目标函数之间的路径探索和约束收集。符号执行模块包含四个组件:状态保存器,状态搜索器,模拟器和求解器。状态保存器保留执行过程中的所有执行状态。其中状态即smali方法的执行路径,包含执行信息,例如符号值,路径约束,程序计数器寄存器和其他变量。状态搜索器负责调度状态并选择要执行的状态。对于选定的状态,模拟器模拟执行状态中的指令。求解器用来检查状态的约束是否可解。如果状态可解,则相应的路径可达。这时,模拟器复制一个新状态并将其添加到状态保存器。在探索入口函数和目标函数之间的路径之后,模块将返回路径约束和解。根据其约束和解,本发明能够过滤掉无效的测试用例字段值,减少无效测试用例的数量,提高测试用例的有效性。
4.动态生成测试用例和触发器,并触发目标App。
本发明通过枚举测试用例的各个字段值,使用排列组合方法填充在测试用例模板中,对每一个入口函数和目标函数对生成一组相关的测试用例。同样,本发明通过将测试用例填充到触发器模板中,针对每一类漏洞实例化一个触发器。通过动态运行触发器,可以将测试用例发送到目标App,实现触发目标App中入口函数的目的。
5.对目标App的入口函数和目标函数进行动态二进制插桩
本发明使用插桩器进行动态二进制插桩。插桩器有两个主要部分:插桩器客户端和插桩器服务端。在插桩器客户端中,我们制定入口函数和目标函数的插桩策略。首先需要提供包名和类名来定位方法。此外,由于存在函数重载的情况,本发明制定了基于参数的策略来区分重载方法。最后,本发明实现插桩逻辑来修改入口函数的参数并从目标函数中获取行为信息。插桩器客户端将该插桩策略提供给插桩器服务端。在插桩器服务端中,本发明在native层采用inline hook机制,在Java层采用Java反射hook机制。在插桩策略的基础上,插桩器服务端进行探针部署,实现对入口函数插桩更改传入的测试用例,对目标函数插桩动态追踪函数的行为。获取目标函数的行为后,插桩器服务端将其传输到插桩器客户端。
6.判定漏洞,生成报告
为了验证漏洞,本发明根据漏洞定制了漏洞判定规则。一方面,如果目标应用程序满足漏洞属性,则被视为具有漏洞的候选者。另一方面,通过动态二进制插桩获得的目标函数行为,包括调用栈,接收的参数和返回值,如果函数行为和漏洞行为相匹配,则说明漏洞验证成功,证明漏洞真实存在,生成漏洞报告。
Claims (7)
1.一种Android App漏洞的零误报检测方法,其特征在于如下步骤:
步骤1)分析Android App漏洞的经验知识(如漏洞攻击路径,CVE报告等),总结检测和触发漏洞的综合描述;
步骤2)App特征提取,静态搜索漏洞属性以及构造测试用例和触发器需要用到的字段值;
步骤3)采用符号执行探索路径约束,过滤步骤2)中无效的字段值;
步骤4)动态生成测试用例和触发器,并触发目标App;
步骤5)对目标App的入口函数和目标函数进行插桩;
步骤6)如果目标函数的行为与漏洞行为匹配,则判定漏洞存在。
2.根据权利要求1所述的Android App漏洞的零误报检测方法,其特征在于步骤1)分析Android App漏洞的经验知识(如漏洞攻击路径,CVE报告等),总结检测和触发漏洞的综合描述;通过对Android App漏洞的攻击路径等进行全面的分析,总结出组件、属性、入口函数、目标函数、相关函数、以及测试用例模板和触发器模板(漏洞触发App模板),形式化地描述该漏洞产生的条件和触发条件。
3.根据权利要求1所述的Android App漏洞的零误报检测方法,其特征在于步骤2)App特征提取,静态搜索漏洞属性以及构造测试用例和触发器需要用到的字段值;通过对目标App进行反编译,获得AndroidManifest.xml文件和smali代码;在反编译得到的文件中检测是否存在漏洞属性,若存在则搜索测试用例和触发器需要用到的字段值;同时,构建控制流图和函数调用图,便于后续步骤的使用。
4.根据权利要求1所述的Android App漏洞的零误报检测方法,其特征在于步骤3)采用符号执行探索路径约束,过滤步骤2)中无效的字段值;通过对smali代码进行符号执行,模拟相关Android API和smali指令,实现从入口函数到目标函数之间的路径探索和约束收集,从而过滤掉无效的测试用例字段值,减少无效测试用例的数量,提高测试用例的有效性。
5.根据权利要求1所述的Android App漏洞的零误报检测方法,其特征在于步骤4)动态生成测试用例和触发器,并触发目标App;本发明针对每一个入口函数和目标函数对会生成一组相关的测试用例,并针对每一类漏洞生成一个触发器;通过动态运行触发器,可以将测试用例发送到目标App,实现触发目标App中入口函数的目的。
6.根据权利要求1所述的Android App漏洞的零误报检测方法,其特征在于步骤5)对目标App的入口函数和目标函数进行插桩;使用动态二进制插桩技术对目标App的入口函数和目标函数进行插桩,通过插桩入口函数实现更改传入的测试用例,通过插桩目标函数实现函数行为的动态追踪。
7.根据权利要求1所述的Android App漏洞的零误报检测方法,其特征在于步骤6)如果目标函数的行为与漏洞行为匹配,则判定漏洞存在;根据漏洞总结出判定规则,如果通过插桩追踪到的函数行为和漏洞行为相匹配,则说明漏洞验证成功,证明漏洞真实存在,实现零误报的漏洞检测效果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910338043.3A CN111859380A (zh) | 2019-04-25 | 2019-04-25 | Android App漏洞的零误报检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910338043.3A CN111859380A (zh) | 2019-04-25 | 2019-04-25 | Android App漏洞的零误报检测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111859380A true CN111859380A (zh) | 2020-10-30 |
Family
ID=72951299
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910338043.3A Pending CN111859380A (zh) | 2019-04-25 | 2019-04-25 | Android App漏洞的零误报检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111859380A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112560045A (zh) * | 2020-12-11 | 2021-03-26 | 腾讯科技(深圳)有限公司 | 应用程序漏洞检测方法、装置、计算机设备和存储介质 |
CN112819336A (zh) * | 2021-02-03 | 2021-05-18 | 国家电网有限公司 | 一种基于电力监控***网络威胁的量化方法及*** |
CN113157590A (zh) * | 2021-05-20 | 2021-07-23 | 中国工商银行股份有限公司 | 测试案例生成方法及装置 |
CN114968826A (zh) * | 2022-07-28 | 2022-08-30 | 深圳开源互联网安全技术有限公司 | 应用程序漏洞修复验证方法及*** |
CN115277069A (zh) * | 2022-06-17 | 2022-11-01 | 江苏通付盾信息安全技术有限公司 | 应用软件网络安全的检测平台和方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104598383A (zh) * | 2015-02-06 | 2015-05-06 | 中国科学院软件研究所 | 一种基于模式的动态漏洞挖掘集成***和方法 |
CN104732152A (zh) * | 2015-04-07 | 2015-06-24 | 南京大学 | 基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法 |
CN107832619A (zh) * | 2017-10-10 | 2018-03-23 | 电子科技大学 | Android平台下应用程序漏洞自动化挖掘***及方法 |
WO2018101575A1 (ko) * | 2016-11-29 | 2018-06-07 | 한국전력공사 | 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치 및 그 방법 |
CN108845944A (zh) * | 2018-06-28 | 2018-11-20 | 中国人民解放军国防科技大学 | 一种结合符号执行提高软件模糊测试效率的方法 |
-
2019
- 2019-04-25 CN CN201910338043.3A patent/CN111859380A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104598383A (zh) * | 2015-02-06 | 2015-05-06 | 中国科学院软件研究所 | 一种基于模式的动态漏洞挖掘集成***和方法 |
CN104732152A (zh) * | 2015-04-07 | 2015-06-24 | 南京大学 | 基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法 |
WO2018101575A1 (ko) * | 2016-11-29 | 2018-06-07 | 한국전력공사 | 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치 및 그 방법 |
CN107832619A (zh) * | 2017-10-10 | 2018-03-23 | 电子科技大学 | Android平台下应用程序漏洞自动化挖掘***及方法 |
CN108845944A (zh) * | 2018-06-28 | 2018-11-20 | 中国人民解放军国防科技大学 | 一种结合符号执行提高软件模糊测试效率的方法 |
Non-Patent Citations (2)
Title |
---|
蔡军;邹鹏;熊达鹏;何骏;: "结合静态分析与动态符号执行的软件漏洞检测方法", 计算机工程与科学, no. 12, 15 December 2016 (2016-12-15), pages 2537 - 2541 * |
邢玉凤;: "二进制代码的漏洞挖掘技术研究", 计算机测量与控制, no. 12, 25 December 2014 (2014-12-25), pages 4111 - 4113 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112560045A (zh) * | 2020-12-11 | 2021-03-26 | 腾讯科技(深圳)有限公司 | 应用程序漏洞检测方法、装置、计算机设备和存储介质 |
CN112819336A (zh) * | 2021-02-03 | 2021-05-18 | 国家电网有限公司 | 一种基于电力监控***网络威胁的量化方法及*** |
CN112819336B (zh) * | 2021-02-03 | 2023-12-15 | 国家电网有限公司 | 一种基于电力监控***网络威胁的量化方法及*** |
CN113157590A (zh) * | 2021-05-20 | 2021-07-23 | 中国工商银行股份有限公司 | 测试案例生成方法及装置 |
CN115277069A (zh) * | 2022-06-17 | 2022-11-01 | 江苏通付盾信息安全技术有限公司 | 应用软件网络安全的检测平台和方法 |
CN114968826A (zh) * | 2022-07-28 | 2022-08-30 | 深圳开源互联网安全技术有限公司 | 应用程序漏洞修复验证方法及*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Godefroid | Fuzzing: Hack, art, and science | |
Carmony et al. | Extract Me If You Can: Abusing PDF Parsers in Malware Detectors. | |
Godefroid et al. | Automating software testing using program analysis | |
Artzi et al. | Finding bugs in dynamic web applications | |
Martin et al. | Finding application errors and security flaws using PQL: a program query language | |
Saxena et al. | Loop-extended symbolic execution on binary programs | |
US8578342B2 (en) | Fault detection and localization in dynamic software applications requiring user inputs and persistent states | |
US8943478B2 (en) | Fault detection and localization in dynamic software applications | |
CN111859380A (zh) | Android App漏洞的零误报检测方法 | |
Mohammadi et al. | Detecting cross-site scripting vulnerabilities through automated unit testing | |
US20110016456A1 (en) | Generating additional user inputs for fault detection and localization in dynamic software applications | |
Bai et al. | Towards model checking android applications | |
US20240121261A1 (en) | Automated Security Analysis of Software Libraries | |
Kim et al. | Software vulnerability detection methodology combined with static and dynamic analysis | |
He et al. | Sofi: Reflection-augmented fuzzing for javascript engines | |
Fratantonio et al. | Shellzer: a tool for the dynamic analysis of malicious shellcode | |
Wang et al. | A combinatorial approach to detecting buffer overflow vulnerabilities | |
Pérez et al. | Lapse+ static analysis security software: Vulnerabilities detection in java ee applications | |
Fell | A review of fuzzing tools and methods | |
Calvagna et al. | Automated conformance testing of Java virtual machines | |
Kim et al. | {FuzzOrigin}: Detecting {UXSS} vulnerabilities in browsers through origin fuzzing | |
Lopes | Discovering vulnerabilities in webassembly with code property graphs | |
Duraibi et al. | A Survey of Symbolic Execution Tools. | |
Wu et al. | Crafting intents to detect icc vulnerabilities of android apps | |
David et al. | From source code to crash test-cases through software testing automation |
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 |