CN109933988B - 一种Android应用隐私泄露漏洞检测方法 - Google Patents
一种Android应用隐私泄露漏洞检测方法 Download PDFInfo
- Publication number
- CN109933988B CN109933988B CN201910088200.XA CN201910088200A CN109933988B CN 109933988 B CN109933988 B CN 109933988B CN 201910088200 A CN201910088200 A CN 201910088200A CN 109933988 B CN109933988 B CN 109933988B
- Authority
- CN
- China
- Prior art keywords
- component
- application
- ccp
- icc
- data
- 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
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Storage Device Security (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种Android应用隐私泄露漏洞检测方法,使用显式intent调用以及使用隐式intent设置的action、data、category属性查找并匹配所有目标接收组件,不仅能检测出同一个应用内组件间显式intent通信造成的隐私泄露问题,还能检测出不同应用间组件通信造成的,尤其是使用了隐式intent导致的隐私泄露问题。
Description
技术领域
本发明涉及Android查漏的技术领域,尤其涉及到一种Android应用隐私泄露漏洞检测方法。
背景技术
在目前的Android隐私泄露漏洞检测方法中,静态污点分析是最常用且最有效的方法。首先对android应用进行反编译,获取其源代码或是中间代码,并通过识别代码中存在的源点(source)与锚点(sink)来判断是否进行下一步的检测操作,这里的源点与锚点的确定因检测问题而异。如检测应用中的隐私泄露问题,则这里设置源点为获取敏感数据的API,如getDeviceId()函数;而锚点则为将敏感数据发送到该应用之外的操作,如发送短信sendtextmessage()函数。在确定源锚点之后,即可使用静态污点分析检测是否存在一条从源点到锚点的路径,若存在则可判定该应用有隐私泄露问题。
Android应用由4类基本组件构成,包括Activity(活动),Service(服务),Broadcast receiver(广播接收器),content provider(内容提供器)。Intent是Android应用组件间通信(ICC)的主要媒介,通过startactivity(intent),startservice(intent)等ICC方法可以启动Activity、Service,或者可以向Broadcastreceiver发送广播消息。
Intent包含显式和隐式两种。显式Intent指定了接收组件,因此Intent会发送到某个指定的组件;而隐式Intent的接收组件是满足条件的所有组件,即可以有多个接收组件,由android系统确定哪个应用可以接收该Intent。
通常对Android应用隐私泄露漏洞的检测,一般在同一个组件内进行(源点和锚点在同一组件之内);而对于组件间通信造成的隐私泄露问题(源锚点在不同组件当中),目前也局限于同一个应用内组件间检测[1],且是对使用显式Intent所确定的目标接收组件检测,对跨应用间的隐私泄露问题与使用隐式intent造成的隐私泄露问题研究较少。
[1]L Li,P Mcdaniel,A Bartel,TF Bissyande,J Klein,et al.IccTA:Detecting Inter-Component Privacy Leaks in Android Apps.IEEE/ACM IEEEInternational Conference on Software Engineering.2015,1:280-291
发明内容
本发明的目的在于克服现有技术的不足,提出一种Android应用隐私泄露漏洞检测方法。本方法使用显式intent调用以及使用隐式intent设置的action、data、category属性查找并匹配所有目标接收组件,从而不仅能检测出同一个应用内组件间显式intent通信造成的隐私泄露问题,还能检测出不同应用间组件通信造成的,尤其是使用了隐式intent导致的隐私泄露问题。
为实现上述目的,本发明所提供的技术方案为:
一种Android应用隐私泄露漏洞检测方法,包括以下步骤:
S1:对APK进行逆向分析获取信息;
S2:对逆向分析获取的信息判断应用的组件是否存在源函数和ICC方法,若存在,则进行步骤S3,否则不存在隐私泄露风险,处理下一个应用;
S3:构建CCP、CCLink以及CFG;
S4:进行污点标记与传播;
S5:判断锚函数中的参数是否包含了污点数据,若是,则判断包含源函数的组件到包含锚函数的组件之间存在一条隐私数据泄露的路径,即可断定从源函数到锚函数之间所涉及的所有组件存在数据泄露的漏洞。
进一步地,所述步骤S1包括解析配置文件、代码反编译分析两个部分;具体过程如下:
S1-1:将apk解压后获取其中的manifest.xml文件并通过使用AXMLprint2.jar提取内容;
S1-2:将APK文件进行反编译,获取应用中的dex文件,然后将android应用反编译为java源代码,并在该代码基础上提取应用组件中有关数据,包括ICC方法、入口点、getintent()方法与接收intent并提取其中数据以及动态注册broadcast receiver的相关信息。
进一步地,所述步骤S1-1中,除了获取清单文件里应用的包名及其组件的基本信息外,还包括应用安全相关的属性,包括应用的权限属性permission与use-permission、组件的exported属性与意图过滤器intent-filter属性。
进一步地,所述步骤S3中,构建CCP的具体过程如下:
首先查找应用组件所有的icc方法,若查找到,则将根据该方法参数输入CCP构造器,使其自动生成匹配目标组件的结果,把发送组件、调用的ICC方法及其参数和匹配到的目标组件存入到CCP表中;
对于动态注册广播,CCP构造器不能有效匹配其结果的情况下,查找应用源代码并解析registerreciver()方法中的第一参数获取接收组件将其添加到与发送组件、ICC方法及其参数相同的对应CCP表中;
若应用没有使用ICC方法,则该应用没有组件间通信安全问题。
进一步地,所述步骤S3中,构建CCLink的具体过程如下:
首先遍历CCP表,并按照以下规则构建CCLink:
如果找到两组CCP均来自同一应用,且存在该两组CCP中其中一组的目标组件与另一组中的发送组件为同一组件,则通过它们的共同组件连接起来;
如果CCP的目标组件与发送组件不是来自同一应用,但其目标组件与另一组CCP的发送组件为同一组件,也通过它们的共同组件连接起来;
对发送组件与目标组件不在同一应用内的CCP直接生成CCLink;
考虑到组件调用的无穷性,规定一条CCLink包含的组件若来自不同的应用,则应用个数不超过三个。
进一步地,所述步骤S3中,构建CFG(控制流图)的具体过程如下:
首先找到CClink涉及的每个组件的入口方法,即activity的oncreate()、onstart(),service的onstartcommand(),broadcastreceiver的onreceiver(),从这些入口方法开始处构建组件内控制流图;在遇到ICC方法时,根据得到的CCP结果找到对应接收组件的入口方法并连接起来生成组件间控制流图,最后将组件内CFG和组件间CFG合并形成完整的控制流图。
进一步地,所述步骤S4中污点标记与传播的具体过程为:在步骤S3构建的CFG基础上,扫描所有语句,找到锚函数,若找到,则把步骤S2找到的源函数产生的对应数据标记为污点,然后进行污点数据传播过程。
进一步地,所述传播过程包括组件内与组件间污点传播;
组件内污点传播根据污点跟踪规则对污点进行传播;
组件间污点传播首先确定接收组件的入口方法,如果为oncreate()或者为onstart(),则将intent数据的污点信息传递给getintent();如果是onreceive()、Onbind()、onstartcommand()则传递给相应的方法参数。
与现有技术相比,本方案原理和优点如下:
本方案使用显式intent调用以及使用隐式intent设置的action、data、category属性查找并匹配所有目标接收组件,不仅能检测出同一个应用内组件间显式intent通信造成的隐私泄露问题,还能检测出不同应用间组件通信造成的,尤其是使用了隐式intent导致的隐私泄露问题。
附图说明
图1为本发明一种Android应用隐私泄露漏洞检测方法的整体流程图;
图2为本发明一种Android应用隐私泄露漏洞检测方法的原理图。
具体实施方式
下面结合具体实施例对本发明作进一步说明:
参见图1和2所示,本实施例所述的一种Android应用隐私泄露漏洞检测方法,包括以下步骤:
S1:对APK进行逆向分析获取信息,包括解析配置文件、代码反编译分析两个部分;具体为:
S1-1:将apk解压后获取其中的manifest.xml文件并通过使用AXMLprint2.jar提取内容;
除了获取清单文件里应用的包名及其组件的基本信息外,还包括应用安全相关的属性,包括应用的权限属性permission与use-permission、组件的exported属性与意图过滤器intent-filter属性。
S1-2:将APK文件进行反编译,获取应用中的dex文件,然后将android应用反编译为java源代码,并在该代码基础上提取应用组件中有关数据,包括ICC方法、入口点、getintent()方法与接收intent并提取其中数据以及动态注册broadcast receiver的相关信息。
S2:对逆向分析获取的信息判断应用的组件是否存在源函数和ICC方法,若存在,则进行步骤S3,否则不存在隐私泄露风险,处理下一个应用;
S3:构建CCP、CCLink以及CFG;
其中,构建CCP的具体过程如下:
首先查找应用组件所有的icc方法,若查找到,则将根据该方法参数输入CCP构造器,使其自动生成匹配目标组件的结果,把发送组件、调用的ICC方法及其参数和匹配到的目标组件存入到CCP表中;
对于动态注册广播,CCP构造器不能有效匹配其结果的情况下,查找应用源代码并解析registerreciver()方法中的第一参数获取接收组件将其添加到与发送组件、ICC方法及其参数相同的对应CCP表中;
若应用没有使用ICC方法,则该应用没有组件间通信安全问题。
构建CCLink的具体过程如下:
首先遍历CCP表,并按照以下规则构建CCLink:
如果找到两组CCP均来自同一应用,且存在该两组CCP中其中一组的目标组件与另一组中的发送组件为同一组件,则通过它们的共同组件连接起来;
如果CCP的目标组件与发送组件不是来自同一应用,但其目标组件与另一组CCP的发送组件为同一组件,也通过它们的共同组件连接起来;
对发送组件与目标组件不在同一应用内的CCP直接生成CCLink;
考虑到组件调用的无穷性,规定一条CCLink包含的组件若来自不同的应用,则应用个数不超过三个。
构建CFG的具体过程如下:
首先找到CClink涉及的每个组件的入口方法,即activity的oncreate()、onstart(),service的onstartcommand(),broadcastreceiver的onreceiver(),从这些入口方法开始处构建组件内控制流图;在遇到ICC方法时,根据得到的CCP结果找到对应接收组件的入口方法并连接起来生成组件间控制流图,最后将组件内CFG和组件间CFG合并形成完整的控制流图。
S4:在步骤S3构建的CFG基础上,扫描所有语句,找到锚函数,若找到,则把步骤S2找到的源函数产生的对应数据标记为污点,然后进行污点数据传播过程;
其中,传播过程包括组件内与组件间污点传播;
组件内污点传播根据污点跟踪规则对污点进行传播;
组件间污点传播首先确定接收组件的入口方法,如果为oncreate()或者为onstart(),则将intent数据的污点信息传递给getintent();如果是onreceive()、Onbind()、onstartcommand()则传递给相应的方法参数。
S5:最后进行漏洞检测,即判断锚函数中的参数是否包含了污点数据,若是,则判断包含源函数的组件到包含锚函数的组件之间存在一条隐私数据泄露的路径,即可断定从源函数到锚函数之间所涉及的所有组件存在数据泄露的漏洞。
以上所述之实施例子只为本发明之较佳实施例,并非以此限制本发明的实施范围,故凡依本发明之形状、原理所作的变化,均应涵盖在本发明的保护范围内。
Claims (5)
1.一种Android应用隐私泄露漏洞检测方法,其特征在于,包括以下步骤:
步骤S1:对APK进行逆向分析获取信息;
步骤S2:对逆向分析获取的信息判断应用的组件是否存在源函数和ICC方法,若存在,则进行步骤S3,否则不存在隐私泄露风险,处理下一个应用;
步骤S3:构建CCP、CCLink以及CFG;
步骤S4:进行污点标记与传播;
步骤S5:判断锚函数中的参数是否包含了污点数据,若是,则判断包含源函数的组件到包含锚函数的组件之间存在一条隐私数据泄露的路径,即可断定从源函数到锚函数之间所涉及的所有组件存在数据泄露的漏洞;
所述步骤S3中,构建CCP的具体过程如下:
首先查找应用组件所有的ICC方法,若查找到,则将该方法参数输入CCP构造器,使其自动生成匹配目标组件的结果,把发送组件、调用的ICC方法及其参数和匹配到的目标组件存入到CCP表中;
对于动态注册广播,CCP构造器不能有效匹配其结果的情况下,查找应用源代码,并解析registerreciver0方法中的第一参数,以获取接收组件,并将接收组件添加到与发送组件、ICC方法及ICC方法的参数相同的对应CCP表中;
若应用没有使用ICC方法,则该应用没有组件间通信安全问题;
所述步骤S3中,构建CCLink的具体过程如下:
首先遍历CCP表,并按照以下规则构建CCLink:
1)如果找到两组CCP均来自同一应用,且存在该两组CCP中其中一组的目标组件与另一组中的发送组件为同一组件,则通过它们的共同组件连接起来;
2)如果CCP的目标组件与发送组件不是来自同一应用,但其目标组件与另一组CCP的发送组件为同一组件,也通过它们的共同组件连接起来;
3)对发送组件与目标组件不在同一应用内的CCP直接生成CCLink;
4)考虑到组件调用的无穷性,规定一条CCLink包含的组件若来自不同的应用,则应用个数不超过三个;
所述步骤S3中,构建CFG的具体过程如下:
首先找到CClink涉及的每个组件的入口方法,即activity的oncreate()、onstart(),service的onstartcommand(),broadcastreceiver的onreceiver(),从这些入口方法开始处构建组件内控制流图;在遇到ICC方法时,根据得到的CCP结果找到对应接收组件的入口方法并连接起来生成组件间控制流图,最后将组件内控制流图和组件间控制流图合并形成完整的控制流图。
2.根据权利要求1所述的一种Android应用隐私泄露漏洞检测方法,其特征在于,所述步骤S1包括解析配置文件、代码反编译分析两个部分;具体过程如下:
步骤S1-1:将APK解压后获取其中的manifest.xml文件并通过使用AXMLprint2.jar提取内容;
步骤S1-2:将APK文件进行反编译,获取应用中的dex文件,然后将android应用反编译为java源代码,并在该代码基础上提取应用组件中有关数据,包括ICC方法、入口点、getintent()方法与接收intent并提取其中数据以及动态注册broadcast receiver的相关信息。
3.根据权利要求2所述的一种Android应用隐私泄露漏洞检测方法,其特征在于,所述步骤S1-1中,除了获取清单文件里应用的包名及其组件的基本信息外,还包括应用安全相关的属性,包括应用的权限属性permission与use-permission、组件的exported属性与意图过滤器intent-filter属性。
4.根据权利要求1所述的一种Android应用隐私泄露漏洞检测方法,其特征在于,所述步骤S4中污点标记与传播的具体过程为:在步骤S3构建的CFG基础上,扫描所有语句,找到锚函数,若找到,则把步骤S2找到的源函数产生的对应数据标记为污点,然后进行污点数据传播过程。
5.根据权利要求4所述的一种Android应用隐私泄露漏洞检测方法,其特征在于,所述传播过程包括组件内与组件间污点传播;
组件内污点传播根据污点跟踪规则对污点进行传播;
组件间污点传播首先确定接收组件的入口方法,如果为oncreate()或者为onstart(),则将intent数据的污点信息传递给getintent();如果是onreceive()、Onbind()、onstartcommand()则传递给相应的方法参数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910088200.XA CN109933988B (zh) | 2019-01-29 | 2019-01-29 | 一种Android应用隐私泄露漏洞检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910088200.XA CN109933988B (zh) | 2019-01-29 | 2019-01-29 | 一种Android应用隐私泄露漏洞检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109933988A CN109933988A (zh) | 2019-06-25 |
CN109933988B true CN109933988B (zh) | 2023-07-25 |
Family
ID=66985331
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910088200.XA Active CN109933988B (zh) | 2019-01-29 | 2019-01-29 | 一种Android应用隐私泄露漏洞检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109933988B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110443043B (zh) * | 2019-07-31 | 2021-11-19 | 北京奇艺世纪科技有限公司 | 一种对安卓应用程序的漏洞检测方法以及设备 |
CN112115472A (zh) * | 2020-08-12 | 2020-12-22 | 北京智融云河科技有限公司 | 一种面向数据管控的智能合约代码检查方法和系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106570399A (zh) * | 2016-09-30 | 2017-04-19 | 西北大学 | 一种跨App组件间隐私泄露的检测方法 |
CN109145603A (zh) * | 2018-07-09 | 2019-01-04 | 四川大学 | 一种基于信息流的Android隐私泄露行为检测方法和技术 |
-
2019
- 2019-01-29 CN CN201910088200.XA patent/CN109933988B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106570399A (zh) * | 2016-09-30 | 2017-04-19 | 西北大学 | 一种跨App组件间隐私泄露的检测方法 |
CN109145603A (zh) * | 2018-07-09 | 2019-01-04 | 四川大学 | 一种基于信息流的Android隐私泄露行为检测方法和技术 |
Non-Patent Citations (9)
Title |
---|
Analyzing inter-application communication in Android;E Chin et al.;《International Conference on Mobile Systems》;20110628;第239-252页 * |
Android应用程序的组件间通信行为检测;马川等;《小型微型计算机系统》;20180115(第01期);第168-174页 * |
Android应用程序隐私数据泄露检测;蒋煦等;《浙江大学学报(工学版)》;20161215(第12期);第2357-2370页 * |
Android组件间通信的安全缺陷静态检测方法;傅建明等;《华中科技大学学报(自然科学版)》;20140110;第266-271页 * |
Detecting Inter-Component Privacy Leaks in Android Apps;L Li et al.;《IEEE/ACM IEEE International Conference on Software Engineering》;20151230;第280-291页 * |
Security vulnerability detection technology based on mobile communication;Ling jie et al.;《International conference on computer science and communication engineering(CSCE)》;20151225;第974-980页 * |
一种Android平台恶意软件静态检测方法;秦中元等;《东南大学学报(自然科学版)》;20131120(第06期);第32-37页 * |
基于静态污点分析的Android应用Intent注入漏洞检测方法;王允超等;《计算机科学》;20160915(第09期);第198-202页 * |
第4讲 Android APP隐私泄露检测技术研究进展;颜慧颖等;《军事通信技术》;20170325(第01期);第99-106页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109933988A (zh) | 2019-06-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106203113B (zh) | 安卓应用文件的隐私泄露监控方法 | |
CN112906010B (zh) | 一种自动化攻击测试方法及基于此的自动化安全测试方法 | |
CN101593253A (zh) | 一种恶意程序判断方法及装置 | |
CN102789502B (zh) | 网站的扫描方法和装置 | |
CN106570399B (zh) | 一种跨App组件间隐私泄露的检测方法 | |
US10853483B2 (en) | Identification device, identification method, and identification program | |
CN112906011B (zh) | 漏洞发现方法、测试方法、安全测试方法及相关装置、平台 | |
JP2007241906A (ja) | Webアプリケーション脆弱性動的検査方法およびシステム | |
CN109933988B (zh) | 一种Android应用隐私泄露漏洞检测方法 | |
CN105447388B (zh) | 一种基于权重的安卓恶意代码检测系统及方法 | |
CN104182681B (zh) | 基于hook的iOS系统关键行为检测装置和方法 | |
CN110096433B (zh) | 一种iOS平台上获取加密数据的方法 | |
CN109409093B (zh) | 一种系统漏洞扫描调度方法 | |
CN109948338B (zh) | 基于静态分析的安卓应用敏感路径触发方法 | |
CN112818352B (zh) | 数据库的检测方法及装置、存储介质及电子装置 | |
US9779239B2 (en) | Detection of malicious software behavior using signature-based static analysis | |
CN114091028B (zh) | 一种基于数据流的Android应用信息泄露检测方法 | |
WO2021243555A1 (zh) | 一种快应用检测方法、装置、设备及存储介质 | |
US20230267228A1 (en) | Detection method and apparatus, and non-transitory computer readable storage medium | |
CN115296895B (zh) | 请求响应方法、装置、存储介质及电子设备 | |
Ma et al. | Communication-based attacks detection in android applications | |
CN114077737A (zh) | 基于污点分析的Android组件间通信数据流检测方法 | |
CN110691357B (zh) | 基于Intent通信行为语义图的安卓应用间隐信道检测方法 | |
Chen | A static detection of inter-component communication vulnerability in android application | |
KR101256463B1 (ko) | 악성 코드 검사 장치 및 방법 |
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 |