CN105589807B - 一种应用程序间组件能力泄露动态检测方法和系统 - Google Patents
一种应用程序间组件能力泄露动态检测方法和系统 Download PDFInfo
- Publication number
- CN105589807B CN105589807B CN201510964190.3A CN201510964190A CN105589807B CN 105589807 B CN105589807 B CN 105589807B CN 201510964190 A CN201510964190 A CN 201510964190A CN 105589807 B CN105589807 B CN 105589807B
- Authority
- CN
- China
- Prior art keywords
- component
- call chain
- communication
- android
- thread
- 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
-
- 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/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- 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/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Telephonic Communication Services (AREA)
Abstract
本发明涉及一种应用程序间组件能力泄露动态检测方法和系统。该方法包括:1)设置Android应用程序的调用链初始信息;2)扩展Android Binder通信机制,在不同进程之间传递线程级调用链并对其进行扩展;3)扩展组件间通信监控机制,捕获组件间通信信息,并根据线程级调用链获取组件级调用链;4)根据组件调用链追踪Android的跨应用程序通信,在执行敏感操作时,获取当前线程的线程级调用链及组件级调用链,并根据调用链分析组件间通信是否发生组件能力泄露。本发明能够检测跨应用程序通信中存在的组件能力泄露问题,并通过对权限机制进行加强阻止跨应用程序导致的组件通信能力泄露。
Description
技术领域
本发明属于移动平台访问控制技术领域,具体涉及一种应用程序间组件能力漏洞的动态检测方法和系统。
背景技术
随着移动终端设备的发展,智能手机已经成为人们日常生活中必不可少的一部分。根据IDC 2015年8月份发布的世界范围内智能手机系统的市场份额报告显示,自2012年以来,Android操作系统一直以绝对优势的市场占有率位列榜首,其中,2015年第二季度,Android的市场占有率为82.8%。作为当前最流行的智能终端操作系统,Android安全形势日益严峻。由于Android应用程序开发的低门槛性,使得Android应用程序数量迅速增长。根据AppBrain统计的数据显示,截止2015年11月,Google Play应用市场上有效的应用已经超过180万个。除了Google的官方应用市场,国内第三方应用市场也得到蓬勃发展,比达咨询发布的《2015年5月中国第三方安卓应用商店市场研究报告》显示,截止2015年5月,国内第三方应用市场以80.0%的市场份额占据主导地位。然而,国内第三方应用市场安全审查力度不足,导致应用市场上存在大量恶意、漏洞的应用程序。除此之外,Android作为开源的操作系统,不同厂商在Google发布Android新版本后会进行不同的定制,从而引入一些系统漏洞,且Android碎片化严重,导致系统漏洞无法及时修复。在巨大的利益驱动下,恶意厂商或团队会利用系统及应用程序中存在的漏洞,执行恶意操作,严重威胁着Android手机用户的隐私、财产等安全。
Android应用程序由组件组成,应用程序之间的通信主要通过组件间通信来实现。尽管Android系统设计了权限机制来保护Android系统的敏感资源和功能,由于应用程中漏洞的存在以及Android权限机制本身存在的缺陷,使得没有权限的应用程序可以利用组件漏洞来获取敏感信息,执行敏感操作,从而导致组件能力发生泄露。针对组件能力泄露,研究者已提出部分应对策略,如静态审查应用程序中存在的漏洞。由于Android是基事件驱动的系统,并且频繁使用组件间通信,静态分析的方法无法捕获所有的数据流和控制流,而且Android运行时包含大量Android应用程序正常运行所需要的代码库,静态分析很难兼顾准确性与效率。此外,目前大部分基于静态分析方法的检测工具针对单个应用程序进行分析,而现实中的很多安全威胁是由应用程序之间的交互引入的,已有的静态分析方法无法检测。与此同时,一些研究人员提出了基于策略的强制访问控制系统,根据策略匹配,来控制应用程序间的通信,尽管研究人员努力提出详尽的策略来控制组件间通信,也会存在误报的情况,导致正常的应用程序通信被阻止,使应用程序崩溃等。
发明内容
针对Android应用程序间组件能力泄露,本发明提出了一种通过追踪跨应用程序通信来动态检测应用程序组件能力漏洞的方法及系统。通过对Android Binder通信机制以及组件通信监控机制的扩展,准确定位执行敏感操作的源组件,根据基于上下文信息的组件调用链,判断组件间通信是否发生能力泄露,并对权限检查机制进行扩展,实时控制应用程序间组件能力泄露导致的非法敏感操作。
本发明的检测应用程序组件能力漏洞的方法及系统,通过对Android系统的扩展,记录并传播跨程序通信的线程级调用链,利用线程级调用链及组件间通信信息,获取组件级调用链,根据组件级调用链以及细粒度策略,判断组件间通信是否发生能力泄露。通过对权限机制进行扩展,实时控制应用程序间组件能力泄露导致的非法敏感操作。
具体来说,本发明采用的技术方案如下:
一种应用程序间组件能力泄露动态检测方法,其步骤包括:
1)设置Android应用程序线程级调用链初始信息;
2)扩展Android Binder通信机制,在不同进程之间传递线程级调用链并对其进行扩展;
3)扩展组件间通信监控机制,捕获组件间通信信息,并根据步骤2)得到的线程级调用链获取组件级调用链;
4)根据步骤3)得到的组件调用链,追踪Android的跨应用程序通信,在执行敏感操作时,获取当前线程的线程级调用链及组件级调用链,并根据调用链分析组件间通信是否发生组件能力泄露。
进一步的,还包括步骤5),该步骤扩展Android权限检查机制,根据步骤4)得到的分析结果,实时控制组件能力泄露导致的非法敏感操作。
进一步的,步骤1)在组件间通信函数被启动时,开始追踪应用程序的通信,包括应用程序内组件通信和应用程序间组件通信。
进一步的,步骤2)扩展Android Binder通信机制,将调用链信息添加到Binder通信数据结构中并进行传输,从而追踪跨程序通信;在Binder驱动进行数据解析时,根据目标线程的信息进行扩展,即扩展应用程序间通信的线程级调用链。
进一步的,步骤3)根据线程级调用链获取组件级调用链的方法是:在系统服务ActivityManagerService进行目标组件解析时,记录组件间调用信息,并根据当前进程的线程级调用链ID,查找是否保存与该ID相匹配的组件调用信息,若没有,则将调用和被调用组件的信息保存在ActivityManagerService中,否则,则将被调用组件加入到已有的组件信息中。
进一步的,步骤4)中利用扩展的系统API,获取当前线程的调用链,分析当前调用链中包含的应用程序,传递的Intent,以及应用程序的权限集,判断是否发生组件能力泄露。
进一步的,步骤5)中扩展Android权限机制,包括扩展Framework权限机制及扩展Linux权限机制,在对敏感操作进行权限检查时,根据步骤4)的分析结果,实时控制组件能力泄露导致的非法敏感操作。
一种采用上述方法的应用程序间组件能力泄露动态检测系统,其包括:
调用链初始化模块,用于在组件间通信函数启动时,记录调用链;
Binder通信监控模块,用于监控Android中所有通过Binder机制进行的进程间通信,获取应用程序间通信的线程级调用链;
组件间通信监控模块,用于监控应用程序内以及应用程序间的组件间通信,生成组件级调用链;
调用链分析模块,在执行敏感操作时,通过基于上下文信息的调用链,分析程序间通信,判断当前组件的敏感操作是否属于正常行为,若不是,分析是否发生组件能力泄露。
进一步的,还包括权限机制加强模块,用于扩展Android权限机制,根据调用链分析模块做出决策,当发生组件通信能力泄露时,拒绝对敏感资源的访问。
本发明的优点和积极效果如下:
本发明通过修改Android Binder机制、组件间通信监控机制以及权限检查机制,追踪应用程序之间的通信,找到触发当前敏感操作的源信息,准确定位执行敏感操作的源组件,根据基于上下文信息的组件调用链,判断组件间通信是否发生能力泄露,在运行时动态监控,实时阻止组件间通信中发生的能力泄露。同时,利用运行时监控的方法,不仅可以追踪单个应用程序内的组件间通信,还可以追踪应用程序之间的组件间通信,从而检测跨应用程序通信中存在的组件能力泄露问题,并进一步对权限机制进行加强,阻止跨应用程序导致的组件通信能力泄露。
附图说明
图1是本发明的一种应用程序间组件能力泄露动态监测系统的模块组成示意图。
具体实施方式
下面通过具体实例和附图,对本发明做进一步说明。
如图1所示,一种应用程序间组件能力泄露实时检控系统,其步骤包括:
1、调用链初始化模块
Android应用程序包含4大组件Activity,Service,Content Provider,BroadcastReceiver,应用程间通信主要是通过组件间通信进行的。Android提供了触发组件间通信的函数,即ICC函数,启动Activity的含有startActivity、startActivityForResult等,启动Service组件的函数有startService、bindService等,调用Content Provider的函数有query、insert、delete等,启动Broadcast Receiver的函数sendBroadcast等。本发明修改这些组件间通信函数,在组件间通信被触发时,为当前线程的调用链设置当初始信息,以及设置调用链ID作为调用链的唯一标识。
为了保证源信息的准确性,在设置调用链时,首先检查当前线程是否存在调用链,若存在,则说明当前组件并不是源组件,不需要设置调用链。调用链初始信息包括调用应用程序的用户ID(UID)、进程ID(PID)、线程ID(TID)以及调用组件信息。通过调用扩展的系统API,调用系统服务中的getChainId函数,设置当前现成的调用链ID。
2、Binder通信监控模块
组件间通信(ICC)是通过Android Binder机制实现的,本发明扩展了Binder通信机制,主要包括Framework层的Binder、libbinder.so以及内核层Binder驱动。
在与Binder驱动交互时,将当前线程的调用链作为Binder数据的一部分进行传输;在Binder驱动中,当目标线程对Binder数据进行读取时,扩展当前现成的调用链,将目标线程的TID,线程所属进程的PID以及进程对应的UID信息添加到调用链中,从而传播并扩展线程调用链,获得参与通信的所有线程信息。
进一步,为了保证线程调用的准确传输,需要对Android线程通信机制进行扩展,可以对Android系统的Looper、Handler、Message类进行扩展,使线程调用链在线程通信过程中顺利传输。
3、组件间通信监控模块
系统服务ActivityManagerService是Android核心服务之一,负责所有组件的调度管理,在组件间通信过程中,ActivityManagerService会对目标组件进行解析,并检查当前组件是否有权限调用目标组件。本发明扩展了系统服务ActivityManagerService及相关代码,通过持续监控,捕获应用程序内及应用程序间通信的组件信息,得到基于上下文信息的组件级调用链,从而追踪跨应用程序通信,检测应用程序间组件能力泄露。
具体过程为:当发生组件间通信时,根据当前进程的线程级调用链ID,查找系统服务ActivityManagerService中是否保存与该线程调用链相匹配的组件调用信息;若没有与该线程调用链ID相匹配的组件调用信息,则将调用和被调用组件的详细信息保存在ActivityManagerService中;若存在相配的组件调用信息,则将被调用组件加入到已有的组件信息中;按此方式,对组件调用链进行不断扩展。
4、调用链分析模块
本发明扩展了系统API,增加了获取当前线程的线程调用链及组件调用链的API。在执行敏感操作时,通过API获取当前线程的调用链进行分析。调用链分析主要包括两部分,应用级分析和组件级分析。应用级分析具体是指分析调用链中包含的应用程序。本发明针对的是应用程序间的通信,调用链中可能包含两个或者更多的应用程序,当应用程序B执行敏感操作时,若存在A->B的调用信息,则检查应用程序A是否包含执行敏感操作的权限,如果没有对应权限,则说明发生能力泄露。如果拥有相应权限,则进行组件级分析,通过分析组件调用链中的源组件,如源组件是否是第三方广告组件等,找到可能存在的组件能力泄露的调用链。
5、权限机制加强模块
为了保护手机上的敏感数据(如联系人,短信,图片等)及敏感功能(如拍照,上网,GPS等),Android设计了基于权限的管理机制,以及基于Linux内核的用户访问控制策略,通过权限限制应用程序对敏感数据集敏感功能的访问。而Android权限机制无法阻止应用程序通信过程中导致的组件能力泄露。为了在运行时实时阻止应用程序间通信的组件能力泄露,本发明扩展了Android权限机制,包括Framework权限机制及Linux权限机制。
Framework层的权限机制加强主要通过扩展Android权限检查函数,主要包括PackageManagerService系统服务中的CheckPermission和CheckUidPermission函数,以及ActivityManagerService系统服务中的CheckUriPermission和checkGrantUriPermission函数。在执行权限检查函数时,利用调用链分析,实时控制组件对敏感资源的访问。Linux层的权限机制加强主要扩展了与敏感权限相关的系统调用,如与Internet相关的系统调用Connect,通过JNI执行Framework层的权限检查,并根据调用链控制敏感资源的访问。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。
Claims (9)
1.一种应用程序间组件能力泄露动态检测方法,其特征在于,包括如下步骤:
1)设置Android应用程序的调用链初始信息;
2)扩展Android Binder通信机制,在不同进程之间传递线程级调用链并对其进行扩展;
3)扩展组件间通信监控机制,捕获组件间通信信息,并根据步骤2)得到的线程级调用链获取组件级调用链,方法为:
3-1)在系统服务ActivityManagerService进行目标组件解析时,记录组件间调用信息;
3-2)根据当前进程的线程级调用链ID,查找是否保存与该ID相匹配的组件调用信息,若没有,则将调用和被调用组件的信息保存在ActivityManagerService中,否则,则将被调用组件加入到已有的组件信息中;
3-3)持续监控系统服务ActivityManagerService,不断扩展组件级调用链;
4)根据步骤3)得到的组件调用链,追踪Android的跨应用程序通信,在执行敏感操作时,获取当前线程的线程级调用链及组件级调用链,并根据调用链分析组件间通信是否发生组件能力泄露。
2.如权利要求1所述的方法,其特征在于,还包括步骤5),该步骤扩展Android权限机制,根据步骤4)得到的分析结果,实时控制组件能力泄露导致的非法敏感操作。
3.如权利要求1或2所述的方法,其特征在于,步骤1)在组件间通信函数被启动时,开始追踪应用程序的通信,包括应用程序内组件通信和应用程序间组件通信。
4.如权利要求1或2所述的方法,其特征在于,步骤2)扩展Android Binder通信机制,将调用链信息添加到Binder通信数据结构中并进行传输,从而追踪跨程序通信,在Binder驱动进行数据解析时,根据目标线程的信息进行扩展,即扩展应用程序间通信的线程级调用链。
5.如权利要求1或2所述的方法,其特征在于:步骤4)通过利用扩展的系统API,获取当前线程的调用链,分析当前调用链中包含的应用程序,传递的Intent,以及应用程序的权限集,判断是否发生组件能力泄露。
6.如权利要求2所述的方法,其特征在于:步骤5)中扩展Android权限机制,包括扩展Framework权限机制及扩展Linux权限机制,在对敏感操作进行权限检查时,根据步骤4)的分析结果,实时控制组件能力泄露导致的非法敏感操作。
7.一种采用权利要求1所述方法的应用程序间组件能力泄露动态检测系统,其特征在于,包括:
调用链初始化模块,用于在组件间通信函数启动时,记录调用链;
Binder通信监控模块,用于监控Android中所有通过Binder机制进行的进程间通信,获取应用程序间通信的线程级调用链;
组件间通信监控模块,用于监控应用程序内以及应用程序间的组件间通信,生成组件级调用链;
调用链分析模块,根据基于上下文信息的组件级调用链追踪程序间通信,在执行敏感操作时,分析程序间通信,判断当前组件的敏感操作是否属于正常行为,若不是,分析是否发生组件能力泄露。
8.如权利要求7所述的系统,其特征在于:还包括权限机制加强模块,用于扩展Android权限机制,根据调用链分析模块做出的决策,当发生组件通信能力泄露时,拒绝对敏感资源的访问。
9.如权利要求8所述的系统,其特征在于:所述扩展Android权限机制,包括扩展Framework权限机制及扩展Linux权限机制。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510964190.3A CN105589807B (zh) | 2015-12-21 | 2015-12-21 | 一种应用程序间组件能力泄露动态检测方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510964190.3A CN105589807B (zh) | 2015-12-21 | 2015-12-21 | 一种应用程序间组件能力泄露动态检测方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105589807A CN105589807A (zh) | 2016-05-18 |
CN105589807B true CN105589807B (zh) | 2018-05-11 |
Family
ID=55929405
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510964190.3A Active CN105589807B (zh) | 2015-12-21 | 2015-12-21 | 一种应用程序间组件能力泄露动态检测方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105589807B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107103240B (zh) * | 2017-04-20 | 2020-02-11 | 中国科学院信息工程研究所 | 一种基于上下文信息的Android组件间隐私泄露行为识别方法及系统 |
CN108021459B (zh) * | 2017-12-01 | 2022-03-04 | 麒麟合盛网络技术股份有限公司 | 跨进程发送打点日志的方法及装置 |
CN108875356B (zh) * | 2018-05-29 | 2020-12-01 | 杭州滚马网络有限公司 | 一种数据访问方法、终端及计算机可读存储介质 |
CN110865848B (zh) * | 2018-08-21 | 2024-03-29 | 深圳市优必选科技有限公司 | 组件拦截方法及终端设备 |
CN110221928B (zh) * | 2019-06-11 | 2021-06-04 | Oppo广东移动通信有限公司 | 信息记录方法、装置、终端及存储介质 |
CN111090880B (zh) * | 2019-12-16 | 2023-04-11 | 中山大学 | 一种拦截利用摄像头漏洞窃取用户隐私行为的方法及系统 |
CN112199647A (zh) * | 2020-12-07 | 2021-01-08 | 江苏东大集成电路系统工程技术有限公司 | 一种Android跨应用资源访问安全加固方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104102880A (zh) * | 2014-06-30 | 2014-10-15 | 华中科技大学 | 一种检测Android权限提升攻击的应用程序重写方法和系统 |
CN104298602A (zh) * | 2014-10-27 | 2015-01-21 | 北京神州绿盟信息安全科技股份有限公司 | 一种调试应用程序的方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003228499A (ja) * | 2002-02-04 | 2003-08-15 | Toshiba Corp | 構成要素分類方法、実装多重度評価方法、実装多重コード抽出方法、同時変更対象箇所抽出方法、クラス階層再構成方法、およびプログラム |
-
2015
- 2015-12-21 CN CN201510964190.3A patent/CN105589807B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104102880A (zh) * | 2014-06-30 | 2014-10-15 | 华中科技大学 | 一种检测Android权限提升攻击的应用程序重写方法和系统 |
CN104298602A (zh) * | 2014-10-27 | 2015-01-21 | 北京神州绿盟信息安全科技股份有限公司 | 一种调试应用程序的方法及装置 |
Non-Patent Citations (1)
Title |
---|
一种恶意代码特征选取和建模方法;李盟等;《计算机应用与软件》;20150831;第32卷(第8期);第266-271页 * |
Also Published As
Publication number | Publication date |
---|---|
CN105589807A (zh) | 2016-05-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105589807B (zh) | 一种应用程序间组件能力泄露动态检测方法和系统 | |
CN104766012B (zh) | 基于动态污点追踪的数据安全动态检测方法及系统 | |
Laperdrix et al. | FPRandom: Randomizing core browser objects to break advanced device fingerprinting techniques | |
CN109117250B (zh) | 一种模拟器识别方法、识别设备及计算机可读介质 | |
CN103593605B (zh) | 一种基于权限使用行为的安卓平台应用程序动态分析系统 | |
CN103309808B (zh) | 基于标签的安卓用户隐私泄露黑盒检测方法及系统 | |
CN104462973B (zh) | 移动终端中应用程序的动态恶意行为检测系统及方法 | |
CN109002721A (zh) | 一种信息安全漏洞的挖掘分析方法 | |
CN103699480B (zh) | 一种基于java的web动态安全漏洞检测方法 | |
CN109145603A (zh) | 一种基于信息流的Android隐私泄露行为检测方法和技术 | |
CN108133139A (zh) | 一种基于多运行环境行为比对的安卓恶意应用检测系统 | |
CN104392177A (zh) | 基于安卓平台的病毒取证系统及其方法 | |
CN103020527B (zh) | 主动拦截恶意程序的方法、装置、系统 | |
CN106570399B (zh) | 一种跨App组件间隐私泄露的检测方法 | |
CN107832619A (zh) | Android平台下应用程序漏洞自动化挖掘系统及方法 | |
CN105956474A (zh) | Android平台软件异常行为检测系统 | |
CN105550594A (zh) | 安卓应用文件的安全性检测方法 | |
CN103996007A (zh) | Android应用权限泄露漏洞的测试方法及系统 | |
CN105631326A (zh) | 敏感信息安全保护方法和装置 | |
CN107103240B (zh) | 一种基于上下文信息的Android组件间隐私泄露行为识别方法及系统 | |
CN107330345A (zh) | 一种检测隐私数据泄露的方法和装置 | |
CN109344624A (zh) | 基于云端协作的渗透测试方法、平台、设备及存储介质 | |
CN109948338B (zh) | 基于静态分析的安卓应用敏感路径触发方法 | |
CN105791261A (zh) | 一种跨站脚本攻击的检测方法和检测设备 | |
CN104639387B (zh) | 一种用户网络行为跟踪方法及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |