CN103593605B - 一种基于权限使用行为的安卓平台应用程序动态分析*** - Google Patents
一种基于权限使用行为的安卓平台应用程序动态分析*** Download PDFInfo
- Publication number
- CN103593605B CN103593605B CN201310506289.XA CN201310506289A CN103593605B CN 103593605 B CN103593605 B CN 103593605B CN 201310506289 A CN201310506289 A CN 201310506289A CN 103593605 B CN103593605 B CN 103593605B
- Authority
- CN
- China
- Prior art keywords
- authority
- application program
- application
- explicit
- 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.)
- Active
Links
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/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/53—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Abstract
本发明属于安卓平台应用安全分析技术领域,具体为一种基于权限使用行为的安卓平台应用程序动态分析***。该***包括:核心的显式权限使用点识别器和隐式权限使用点追踪器,辅助的应用程序驱动器和行为分析器;显式权限使用点识别器和隐式权限使用点追踪器基于安卓权限实施***;显式权限使用点识别器完整记录应用程序运行时的显式权限使用点,隐私权限使用点追踪器追踪应用程序运行时的隐式权限使用点。本发明可以完全识别应用程序运行时的所有权限使用点和与之相关联的权限信息,从而对应用程序内部权限使用行为进行刻画。
Description
技术领域
本发明属于安卓平台应用安全分析技术领域,具体涉及一种动态分析安卓应用程序权限使用行为的***。
背景技术
在安卓操作***中,一个应用程序在安装时会请求一系列的权限。这些权限请求一旦在安装时被授权,根据目前的安卓安全机制,不能再对应用程序的权限配置进行修改。大量的恶意软件因此在安卓平台上肆虐。不单是恶意软件会包含不合理行为,甚至连一些正常的软件也可能包含潜在的恶意行为,比如隐私泄露。
防止这些不合理行为的一个主要技术就是对安卓应用程序进行行为分析。传统的分析技术主要是通过检测程序执行流来重构程序行为。这些传统技术的主要理论支持是:因为***调用捕获了程序和底层***之间交互的本质特征,所以能利用***调用来描绘程序行为。但是由于安卓***具有一些和传统***不同的固有特征,当上述方法实施在安卓***上时,结果并不理想。安卓***有以下这些特征:
安卓框架层管理大部分***敏感资源。安卓操作***核心是一个建立在Linux内核之上的框架层。在安卓中,应用程序并不是通过***调用来直接与内核交互。相反,安卓***中的大部分资源都是由安卓框架层通过权限的方式来管理和保护的,因此应用程序和***的交互(如获取联系人信息,访问通话记录等)发生在更高的语义层。使用***调用的方式来研究应用程序和安卓***之间的互动,会失去安卓操作***中特有的语义信息,因此分析出的程序行为在精度和质量上都会有所缺失。
安卓进程间通讯采用了 Binder 机制( IPC )。安卓***的***服务运行在独立的进程。***为此提供了方便的IPC机制来增强***和程序间的通信。这种基于Binder机制的IPC方法在安卓***中被广泛使用,这也给传统的基于***调用的分析技术带来了很大难题。首先,传统解决方案仅仅监测程序和Binder驱动之间的通信,而监测出的通讯信息隐藏了程序的实际操作。其次,IPC机制的使用将单一程序的流式执行结构变成了多个进程间通讯的链式结构,这使得攻击传统的基于***调用的分析技术更加容易。
安卓***采用事件驱动模型。例如当应用程序期望在手机的地理位置信息改变时能接收到通知,这个程序仅仅需要对此事件注册一个回调函数即可。当安卓***通过设备的定位装置察觉到地理位置改变这一事件时,***会通过调用所有已注册过的回调函数来通知这些对此事件感兴趣的程序。这种通过***传递的异步资源访问方式和传统的通过程序请求——***直接返回的同步资源访问方式有很大不同。在这种异步资源传递方式种,程序注册的回调函数是程序代码(非***代码),因此它们无法被***调用拦截。这导致传统的行为分析技术会失去这些重要的程序行为的。
基于上述分析,针对安卓应用程序敏感资源使用行为的分析技术是非常有必要的。
发明内容
本发明的目的是为安全专家提供一种基于权限使用行为分析安卓平台应用程序的动态分析***。该***能在程序运行时动态地识别并记录应用程序对敏感资源的显式使用点,追踪和记录应用程序内部对敏感资源的隐式使用点;根据这两种权限使用点,描述应用程序权限使用行为。
本发明通过对现有技术进行调研,发现它们主要是通过***调用的方式来描绘程序内部行为,但是当这些技术运用到安卓***新型的安全模型上时,都存在问题。如上文技术背景中所述,传统技术并不适合检测安卓***细粒度的权限行为。比如,访问受安卓框架层所保护的***资源,通过IPC与***服务进行的交互以及对受权限保护的事件进行响应。这些传统的技术并没有完全考虑到安卓***特有的基于权限的隔离机制,而安卓的这些特点对于理解程序的内部行为起着非常重要的作用。
本发明的核心是设计显式权限使用点识别器和隐式权限使用点追踪器。显式权限使用点来识别应用程序对敏感***资源的请求,隐式权限使用点用来追踪敏感***资源在程序内被的使用情况。本发明同时也设计了其他另外两个模块,用来协助核心模块的运行,这两个辅助模块是应用程序驱动器和行为分析器。
本发明设计的基于权限使用行为分析安卓平台应用程序的动态分析***,其整体架构如附图1所示。包括:核心的显式权限使用点识别器和隐式权限使用点追踪器,和辅助的应用程序驱动器和行为分析器;显式权限使用点识别器和隐式权限使用点追踪器设置在安卓权限实施***;本发明动态分析***的执行流程如下:
应用程序驱动器加载样本应用程序,分析样本应用程序,并在按本发明要求修改过的安卓***沙箱中运行应用程序;样本程序在运行过程中,通过应用程序编程接口请求***资源;
显式权限使用点识别器将识别应用程序对敏感***资源的请求,并且将资源请求的相关信息生成日志文件;应用程序在获取***敏感资源后有自己特殊的利用方式,不管是何种利用方式,隐式权限使用点追踪器都将追踪资源在应用程序内部的使用方式,并且将资源使用的相关信息生成日志文件;
应用程序驱动器和行为分析器为辅助模块。前者用来自动运行应用程序,后者用来日志文件进行分析生成应用程序的权限使用行为图。
下面对各个模块作进一步描述:
1. 显式权限使用点识别器
安卓***与Windows、Linux等传统桌面***在资源保护方面稍有差异。如附图2所示,对安卓***而言,除了底层Linux内核提供***敏感资源外,安卓框架层也提供敏感资源。作为智能手机操作***,安卓***由其构建在Linux内核之上的安卓框架(各种***服务)提供移动设备特有的敏感资源,如通讯录,通话记录,短信,地理位置信息等。而***底层的Linux内核主要保护网络访问,***文件等敏感资源。安卓***给应用程序提供了相应的编程接口来访问所有这些敏感资源。应用程序只要具备相应的权限就能获取相应的资源。
显式权限使用点表示这样一种行为:在程序的运行过程中,程序请求***敏感资源的行为。显式权限使用点的关键特征包含两点:1,它是程序内部一个调用安卓***接口的函数调用点,2,在调用期间发生了权限检查。
为了保证最终构建出的权限使用行为图的正确性和精确性,本发明的显式权限使用点识别器必须具有两个特点:1,能识别应用程序内部所有对受权限保护的安卓***编程接口的调用;2,识别器必须能获取被调用接口在执行期间所发生的权限检查的准确信息。
首先,显式权限使用点识别器将识别应用程序——***边界。应用程序——***边界是应用程序代码和***代码之间的边界。通过识别应用程序——***边界,显式权限使用点识别器能监听程序所有和***交互的接口;然后通过监听在接口执行期间是否发生了安卓***的权限检查,如果发生了权限检查事件,那么将相关的权限信息和应用程序的这次接口调用相绑定起来,这样***就识别了此处显式权限使用点。因为显式权限使用点识别器能识别所有的应用程序——***边界,所以显式权限使用点识别器能准确识别所有的显式权限使用点。
根据本发明对显式权限使用点的定义,本发明设计了一个便捷有效的识别显式权限使用点的识别器。
显式
权限使用点识别步骤为:
首先,所述显式权限使用点识别器识别应用程序——***边界,通过识别应用程序——***边界,拦截程序所有与***交互的函数调用;然后,监听在此函数调用期间安卓权限实施***发生的权限检查事件,并且将确切的权限检查信息从***传递回应用程序层;如果此次函数调用发生权限检查,则判断为显式权限使用点;
由此,显式权限使用点识别器就能完全识别所有的显式权限使用点并获取相关的确切的权限检查信息。
识别应用程序——***边界,即应用程序——***边界在每一次函数调用之前都被检查这次函数调用的调用者是否为应用程序并且被调用者是否为***程序;由于几乎所有的安卓应用程序都是由Java语言编写,并且运行在Dalvik虚拟机之上,故改进Dalvik虚拟机执行模块,使得它能监视程序的所有方法调用;改进后的Dalvik虚拟机通过检查代码的类加载器,以区分代码是属于应用程序还是属于***;
将权限信息从***传递到应用程序层,其中,安卓的权限机制由两部分加强:安卓***服务和底层Linux内核;根据不同的权限增强技术,将安卓权限分为:内核权限和框架层权限;对框架层权限和内核权限采用不同的的方式传递权限信息;
(1)内核权限检查信息传递方式
由于内核权限增强机制通过gid隔离机制来实现,修改gid隔离机制,使得Linux内核将被检查的gid存储到内核线程专用存储区中;由于gid与权限的一一映射关系,故可在应用程序层通过从内核线程专用存储区中读取gid来确认被检查的权限信息;
(2)框架层权限检查信息传递方式
框架层权限检查信息发生在***进程中;本发明通过扩展Binder通讯协议使得Binder不仅能传递函数调用参数和返回值,而且能同时够传递在IPC过程中的发生的权限检查信息;当权限检查最终在ActivityManagerService完成时,本发明扩展了权限检查逻辑 ,使得其在保留原本功能的基础上能将权限检查信息传递给Binder驱动,再由扩展后的Binder驱动,将权限检查信息传递到应用程序层。
如图4所示,以应用程序获取最新的地理位置信息与获取地理位置信息提供者两次***交互为例。情况1,当应用程序调用接口getLastLocation()时,在此接口执行期间,安卓***检查了该应用程序是否具有ACCESS_FINE_LOCATION权限。显式权限使用点识别器检测到所有这些信息,将权限检查信息返回到应用程序层。应用程序函数调用上下文(App.getLastLocation())与权限信息ACCESS_FINE_LOCATION结合在一次,成为一个显式权限使用点。情况2,当应用程序调用接口getLocationProviders()时,***没有发生权限检查,所以这次接口调用是一次普通的调用,这个函数调用上下文并不是一次显式权限使用点。
2. 隐式权限使用点追踪器
隐式权限使用点追踪器,用以追踪应用程序所获取的***敏感资源在程序内部的具体使用方式。
隐式权限使用点表示应用程序所获取的***敏感资源在程序内部被使用的代码节点。本发明将此种代码地点的粒度设定为函数调用。
安卓***特殊的编程模型使得识别程序内部的资源传递点变得十分困难。在安卓应用程序中,回调函数被广泛的使用。通过回调函数,程序能很方便的监听***事件,如地理位置改变,手机状态改变,网络状态改变等事件。在安卓***中,一共有三种注册回调函数的方式:BroadcastReceiver,PendingIntent和Listener。BroadcastReceiver是安卓应用程序编程模型所定义的四大组件之一。PendingIntent是一种能代表它的创建者从一个单独的进程返回的特殊Intent。根据PendingIntent被初始化的方式,它能被发送给Activity,Service和BroadcastReceiver。Listener是一种特殊的由远程调用触发的用来处理回调函数的Java类。
通常情况下,BroadcastReceiver都是在应用程序的配置文件中被声明,并且在应用程序安装时被注册到***中。除此之外,安卓也提供动态注册BroadcastReceiver的应用程序编程接口。PendingIntent和Listener都是通过特定的应用程序编程接口注册。因为回调函数仅仅占了安卓***提供的应用程序编程接口中的小部分,所以本发明采用了通过监听可能注册回调函数的编程接口来识别资源传递点的策略。
仅仅能识别应用程序内部的资源传送点是不够的,因为每个程序对这些都有自己独特的组合方式,自己特殊的程序逻辑。这使得识别隐式权限使用点非常困难。本发明采用了一种动态污点标记技术。该技术能捕获应用程序内部对敏感资源的使用。传统的污点标记技术并不能直接被使用,因为本发明需用根据权限信息给权限使用点动态打上污点标识。
该动态污点标记方法阐述如下:
首先,本发明给每个显式权限使用点赋予一个唯一的污点标识,该污点标识表示了该权限使用点所请求的资源。本发明的污点标识是一个32位整数。标识(32位整数)的每一位代表一个唯一的显式权限使用点。污点标识的分配是上下文相关的。换言之,具有相同函数调用上下文并且使用了同样权限的显式权限使用点,会被分配相同的污点标识。
当一个显式权限使用点被分配到一个污点标识后,它所对应的由应用程序所请求得到的***敏感资源也需要被标记该污点标识。对于每个显式权限使用点,其污点标识的自动标记发生在对应的资源传递点。对于注册回调函数的应用程序编程接口,本发明使用包装方法将这些回调函数包装起来,以便于根据回调函数的具体类型给被传递的敏感资源标记污点标识。因此通过回调函数传递的资源将被自动被标记污点标识与其关联。对于其他种类的应用程序编程接口,本发明将根据接口的方法签名自动地给相关的资源标记污点标识:1,显式权限使用点处的应用程序编程接口的返回值将被自动标记上相应的污点标识;2,因为Java是一种面向对象语言,一个实例的状态可能被其实例方法所修改,因此,对于实例方法,本发明也将给调用此实例方法的实例标记相应的污点标识。
上文提出的动态污点标记方法能动态的追踪***敏感数据在应用程序内部使用的数据流。在识别***敏感资源在程序内部的数据流之后,隐式权限使用点追踪器就能识别隐式权限使用点。识别的粒度对于隐式权限使用点识别器的质量和效率是至关重要的。这种粒度可以是在指令层,但是以一条条单独的指令来刻画一个有意义的行为图过于细粒度化。因此,本发明最终决定在函数调用层次上识别隐式权限使用点。本发明截获了所有在Dalvik虚拟机中的函数调用,然后为每一个函数调用计算一个污点标识。一个函数调用的污点标识是通过传递给它的参数的污点标识通过或运算得到。如果该污点标识非零,这次函数调用就是由该污点标识所标识的一个隐式权限使用点。
在识别资源传递点和执行基于权限的动态污点标记技术之后,本发明的隐式权限使用点追踪器就能保证在具有准确权限信息的前提下,追踪到所有的隐式权限使用点。
3. 应用程序驱动器
辅助模块应用程序驱动器主要用于分析应用程序组件构成并且动态运行应用程序。应用程序驱动器还能在应用程序运行期间向应用程序注入伪造的事件,以期触发应用程序更多的内部逻辑。
和传统的应用程序不一样,运行在安卓***上的应用程序并没有类似于main()函数这种启动应用程序的统一入口。相反,安卓应用程序由4大组件组成,这四大组件为:Activity,Service,ContentProvider和BroadCastReceiver。其中Activity用来提供与用户交互的界面,每个Activity都可以被单独启动。Service组件作为一种在后台运行的服务,不提供与用户交互的界面,也可以被单独启动。因此应用程序驱动器通过分析AndroidManifest.xml文件抽取出该应用程序的所有Activity和Service组件,并且单独运行每个组件一段时间(由具体的硬件设备决定)。此外,安卓应用程序作为移动平台***的应用程序与用户有很强的交互性,如用户可以通过点击、手势、拖动等方式与应用程序交互。为此,应用程序驱动器使用了Monkey工具来自动化模拟用户的操作。BroadcastReceiver主要用来接受应用程序感兴趣的事件,通过向安卓***注册其感兴趣的事件,安卓***就能在对应的事件发生时通知BroadcastReceiver,而BroadcastReceiver启动以后就可以执行自己的代码逻辑。应用程序驱动器会在运行应用程序时向其注入伪造事件,用以触发应用程序接收这些事件的BroadcastReceiver组件的内部逻辑。
4. 行为分析器
辅助模块行为分析器,能将核心技术在运行时所记录的日志文件进行分析,生成对分析员友好的应用程序权限使用行为图。
在程序的运行期间,权限使用分析模块(显式权限使用点识别器和隐式权限使用点追踪器)能识别并追踪应用程序的权限使用行为(显式∕隐式权限使用点)并且将其写入到日志文件中。本发明实现了一个行为分析器,用来离线分析此日志文件,并自动生成权限使用行为图,以提供更进一步分析。
行为分析器首先从日志文件中识别出所有的显式权限使用点。对于每一个显式权限使用点,行为分析器进一步收集所有使用到该权限的隐式权限使用点。判断一个隐式权限使用点是否使用到特定显式权限使用点所对应的敏感资源的方法为:检查隐式权限使用点的污点标识对应的二进制位是否为1。行为分析器根据这些隐式权限使用点的时间顺序来决定它们之间的父子关系(即在图中的节点顺序)。通过上述方法,行为分析器便可以生成应用程序的权限使用行为图(初始图)。
由上述方法得到初始图将被进一步优化。因为安卓***采用了一种细粒度的权限保护方式,本发明通过对恶意程序样本进行分析,发现恶意程序通常同时使用若多个权限来完成其恶意行为,所以本发明将遍历初始图并且将使用到两个以上权限的权限使用点相连接起来形成一个新的权限使用图。这种包含了多个权限的权限使用行为图能协助分析员快速地发现应用程序内同时使用多种权限的代码节点,这种节点对于分析一个应用程序的行为起着重要作用。其次,对于仅仅使用了一个权限的权限使用行为图,除非这个权限是一些高危权限,比如SEND_SMS(发送短信)等,行为分析器将自动丢弃。
最终的权限使用行为图描述了应用程序内部对这些权限的使用行为。分析员可以通过权限使用行为图来检查应用程序的内部逻辑,并由此来分析可疑的行为、验证程序逻辑等。
附图说明
图1为本发明的整体架构图。
图2为安卓***的权限增强机制示意图。
图3为安卓***权限详细说明图。
图4为本发明显式权限使用点识别器工作原理示例图。
图5为本发明对某应用程序进行分析得出的权限使用行为图。
具体实施方式
本发明设计了一个应用程序驱动器,该驱动器能自动加载安卓应用程序,并且自动运行被分析的安卓应用程序。应用程序驱动器使得本发明的核心技术能自动化地对应用程序进行分析。本发明同时设计了一个行为分析器,该分析器能以对分析员友好的方式将本发明核心技术所分析得到的权限使用点绘制成权限使用行为图,以便安全专家更容易地对应用程序进行分析。此外,由于本发明对权限检查的识别实现在安卓权限实施***内,而显式权限使用点识别器需要在应用程序层获取权限检查信息来决定一个***调用是否属于显式权限使用点。本章节介绍了识别应用程序——***边界的算法和将权限检查信息从***层传递到应用程序层的一种实施方式。
一、辅助模块:应用程序驱动器
应用程序驱动器模块用以自动运行应用程序。
和传统的应用程序不一样,运行在安卓***上的应用程序并没有类似于main()函数这种启动应用程序的统一入口。相反,安卓应用程序由4大组件组成,这四大组件为:Activity,Service,ContentProvider和BroadCastReceiver。其中Activity用来提供与用户交互的界面,每个Activity都可以被单独启动;Service组件作为一种在后台运行的服务,不提供与用户交互的界面,也可以被单独启动;BroadcastReceiver主要用来接受应用程序感兴趣的事件,通过向安卓***注册其感兴趣的事件,安卓***就能在对应的事件发生时通知BroadcastReceiver,而BroadcastReceiver启动以后就可以执行自己的代码逻辑。ContentProvider是应用程序内部数据库。
因为本发明的核心技术(显式权限使用点识别器和隐式权限使用点追踪器)是在应用程序运行时动态的分析、追踪并记录应用程序的权限使用行为,所以应用程序驱动器的职责就是动态的运行应用程序,并且尝试触发应用程序的各种内部逻辑。这使得本分明所提供的***能自动化地分析应用程序。
如上文所述,Activity和Service组件都可以单独被运行,换言之,这两种组件都有可能是程序的入口。依据安卓应用程序的编程规范,一个应用程序将使用到的所有Activity和Service组件都必须在其AndroidManifest.xml文件中申明。因此应用程序驱动器通过分析AndroidManifest.xml文件抽取出该应用程序的所有Activity和Service组件,并且单独运行每个组件一段时间。这个运行的时间片由具体的硬件设备决定。BroadcastReceiver是由一些特定事件触发,如收到短信,地理位置改变,连接到网络等。应用程序驱动器会在运行应用程序时向其注入伪造事件,用以触发应用程序接收这些事件的BroadcastReceiver组件的内部逻辑。此外,安卓应用程序作为移动平台***的应用程序与用户有很强的交互性,如用户可以通过点击、手势、拖动等方式与应用程序交互。为此,应用程序驱动器使用了Monkey工具来自动化模拟用户的操作。
二、识别应用程序——***边界的一种算法
在执行每一次函数调用之前,都应该检查此次函数调用的调用者是否为应用程序并且被调用者为***程序。这种识别应用程序——***边界的算法应该是高效的,否则它会给本发明的显式权限使用点识别器带来很高的时间开销。因为几乎所有的安卓应用程序都是由Java语言编写,并且运行在Dalvik虚拟机之上。通过对安卓***Dalvik虚拟机的深入研究,我们发现,***代码与应用程序代码由不同的类加载器加载,通过检查代码的类加载器,就可以区分代码是属于应用程序还是属于***。此算法简单有效。因此我们扩展了Dalvik虚拟机,使得其能监视所有的函数调用,并且通过上述算法来判断此次函数调用是否为应用程序向***发起的函数调用。
三、将权限信息从***传递到应用程序的一种算法
如图3所示,安卓的权限保护机制由两部分实施:安卓***服务和底层Linux内核。根据不同的权限增强技术,本发明将安卓权限分为:内核权限和框架层权限。
对两种权限采用不同的检查方式:
1、框架层权限检查方式。
当一个应用程序尝试获取由安卓***服务所保护的敏感资源(如联系人,地理位置信息)时,将发生框架层权限检查。如图3所示,应用程序(甲)尝试通过调用LocationManagerService的接口来获取当前的地理位置信息。LocationManagerService首先调用ActivityManagerService的通用权限检查接口检查应用程序(甲)是否被授予了ACCESS_FINE_LOCATION权限。除了来自***自身的权限请求被立即允许之外,其他的权限检查最终将发送给PackageManagerService进行裁决。最后PackageManagerService通过查询每个应用程序对应的权限表,判断应用程序是否具有该权限。LocationManagerService通过权限检查结果判断是应该接受还是拒绝来自应用程序(甲)的请求。
2、内核权限检查方式。
保护文件***和网络的权限增强***由Linux内核负责。如图3所示应用程序请求访问这些资源时,Linux内核将会检查程序是否具备相应的权限。在安卓***中,每个受内核保护的权限被赋予了一个唯一的gid。Linux内核通过检查应用程序是否具有该gid来确定应用程序是否具有该权限。
根据权限检查机制的不同,本发明针对框架层权限和内核权限采用不同的传递权限信息的方法:
1、传递框架层权限信息。
如图3所示,框架层权限检查信息发生在***进程中,应用程序层对***服务所检查的权限信息毫不知情。因为安卓程序通过Binder对象来调用***服务的远程接口,并且调用的返回值也是通过Binder对象传递到应用程序层,所以自动的将权限检查信息传递到应用程序层是很困难的。因此本发明通过扩展Binder通讯协议使得Binder不仅能传递函数调用参数和返回值,而且能同时够传递在IPC过程中的发生的权限检查信息。当权限检查最终在ActivityManagerService完成时,本发明扩展了权限检查逻辑 ,使得其在保留原本功能的基础上能将权限检查信息传递给Binder驱动,再由扩展后的Binder驱动,将权限检查信息传递到应用程序层。通过上述方式,显式权限使用点识别器就能在应用程序层获取权限检查信息。
2、传递内核权限信息。
由于内核权限增强机制是通过gid隔离机制来实现,因此本发明基于gid隔离机制,使得Linux内核将被检查的gid存储到内核线程专用存储区中。由于gid与权限的一一映射关系,以此应用程序可以通过gid来确认被检查的权限信息。因此,本发明通过获取内核线程专用存储区中的gid信息就能获取在Linux内核发生的权限检查信息。
四、辅助模块:行为分析器
行为分析器将权限使用点生成权限使用行为图。
在程序的运行期间,权限使用分析模块(显式权限使用点识别器和隐式权限使用点追踪器)能识别并追踪应用程序的权限使用行为(显式/隐式权限使用点)并且将其写入到日志文件中。本发明实现了一个行为分析器,用来离线分析此日志文件,并自动生成权限使用行为图,以提供更进一步分析。
行为分析器首先从日志文件中识别所有的显式权限使用点。对于每一个显式权限使用点,行为分析器进一步收集所有使用到该权限的隐式权限使用点。判断一个隐式权限使用点是否使用到特定显式权限使用点所对应的敏感资源的方法为:检查隐式权限使用点的污点标识对应的二进制位是否为1。行为分析器根据这些隐式权限使用点的时间顺序来决定它们之间的父子关系(即在图中的节点顺序)。通过上述方法,行为分析器便可以生成应用程序的权限使用行为图(初始图)。
由上诉方法得到初始图将被进一步优化。因为安卓***采用了一种细粒度的权限保护方式,本发明通过对恶意程序样本进行分析,发现恶意程序通常同时使用若多个权限来完成其恶意行为,所以本发明将遍历初始图并且将使用到两个以上权限的权限使用点相连接起来形成一个新的权限使用图。这种包含了多个权限的权限使用行为图能协助分析员快速地发现应用程序内同时使用多种权限的代码节点,这种节点对于分析一个应用程序的行为起着重要作用。其次,对于仅仅使用了一个权限的权限使用行为图,除非这个权限是一些高危权限,比如SEND_SMS(发送短信)等,行为分析器将自动丢弃。
附图5是本发明的行为分析器对某应用程序进行动态分析后得到的权限使用行为图的一部分。该应用程序名为TapSnake,是一款通过伪装成传统电子游戏(贪吃蛇)使得其可以在用户不知晓的情况下追踪用户地理位置信息的恶意软件。在安装该软件时,软件会申请INTERNET和ACCESS_FNIE_LOCATION权限。用户可能会在考虑到这两个权限是第三方广告插件普遍会申请的权限而同意安装。但是对普通用户而言,他们无从知晓应用程序利用这些权限进行了何种操作。然而本发明抽取出的权限行为表示图(图5)可以清晰的表示出该软件申请该两权限后是如何进行使用的。我们可以发现TapSnake首先将向***注册监听地理位置改变事件的回调函数(net.maxicom.android.snake.LocationListener)。当发生地理位置改变事件时,安卓***将通过调用onLocationChanged函数来异步传递最新的地理信息。当TapSnake获取到地理位置信息以后,将进一步进行一些字符串操作,将位置信息编码进一个URL。编码后的URL传递给AbstractHttpClient的execute()方法。此方法被调用时,用户的地理位置信息将被发送到指定的恶意软件服务器(http://gpsdatapoints.appspot.com)。
Claims (4)
1.一种基于权限使用行为分析安卓平台应用程序的动态分析***,其特征在于包括:显式权限使用点识别器和隐式权限使用点追踪器,显式权限使用点识别器和隐式权限使用点追踪器设置在安卓权限实施***;其中:
显式权限使用点识别器将识别应用程序对敏感***资源的请求,并且将资源请求的相关信息生成日志文件;应用程序在获取***敏感资源后有自己特殊的使用方式,不管是何种使用方式,隐式权限使用点追踪器将追踪资源在应用程序内部的使用方式,并且将资源使用的相关信息生成日志文件;
所述显式权限使用点识别器,用于识别应用程序内部所有对受权限保护的安卓***编程接口的调用,并获取被调用接口在执行期间所发生的权限检查的准确信息;显式权限使用点识别器的识别步骤为:
首先,所述显式权限使用点识别器识别应用程序——***边界,通过识别应用程序——***边界,拦截程序所有与***交互的函数调用;然后,监听在此函数调用期间安卓权限实施***发生的权限检查事件,并且将确切的权限检查信息传递回应用程序层;如果此次函数调用发生权限检查,则判断为显式权限使用点。
2.根据权利要求1所述的动态分析***,其特征在于还包括辅助的应用程序驱动器和行为分析器;
应用程序驱动器加载样本应用程序,分析样本应用程序,并在按要求修改过的安卓***沙箱中运行应用程序;样本程序在运行过程中,通过应用程序编程接口请求***资源;
行为分析器对日志文件进行分析生成应用程序的权限使用行为图。
3.根据权利要求1所述的动态分析***,其特征在于所述将权限信息从***传递到应用程序,其中,安卓的权限机制由两部分加强:安卓***服务和底层Linux内核;根据不同的权限增强技术,将安卓权限分为:内核权限和框架层权限;对框架层权限和内核权限采用不同的传递权限信息的方式;
(1)内核权限检查信息传递方式
由于内核权限增强机制通过gid隔离机制来实现,修改gid隔离机制,使得Linux内核将被检查的gid存储到内核线程专用存储区中;由于gid与权限的一一映射关系,故可在应用程序层通过从内核线程专用存储区中读取gid来确认被检查的权限信息;
(2)框架层权限检查信息传递方式
框架层权限检查信息发生在***进程中;通过扩展Binder通讯协议使得Binder不仅能传递函数调用参数和返回值,而且能同时够传递在IPC过程中的发生的权限检查信息;当权限检查最终在ActivityManagerService完成时,扩展权限检查逻辑,使得其在保留原本功能的基础上将权限检查信息传递给Binder驱动,再由扩展后的Binder驱动,将权限检查信息传递到应用程序层。
4.根据权利要求1所述的动态分析***,其特征在于所述隐式权限使用点追踪器用以追踪应用程序所获取的***敏感资源在程序内部的具体使用方式;
首先,给每个显式权限使用点赋予一个唯一的污点标识,该污点标识表示该权限使用点所请求的资源;污点标识是一个32位整数,标识的每一位代表一个唯一的显式权限使用点;污点标识的分配是上下文相关的,即具有相同函数调用上下文并且使用了同样权限的显式权限使用点,分配为相同的污点标识;
当一个显式权限使用点被分配到一个污点标识后,它所对应的由应用程序请求到的***敏感资源被标记该污点标识;污点标识的动态标记发生在显式权限使用点的资源传递点;对于注册回调函数的应用程序编程接口,使用包装方法将这些回调函数包装起来,以便根据具体的回调函数的类型给被传递的敏感资源标记污点标识;
对于其他种类的应用程序编程接口,根据接口的方法签名自动地给相关的资源标记污点标识:(1)显式权限使用点的处的应用程序编程接口的返回值将被自动标记上相应的污点标识;(2)因为Java是一种面向对象语言,一个实例的状态可能被其实例方法所修改,因此,对于实例方法,将给调用实例方法的实例标记相应的污点标识;
上述动态污点标记方法能动态的追踪***敏感数据在应用程序内部使用的数据流;通过识别这些资源的使用点来识别隐式权限使用点;
在识别资源传递点和执行基于权限的动态污点标记技术之后,隐式权限使用点追踪器保证在具有准确权限信息的前提下,追踪到所有的隐式权限使用点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310506289.XA CN103593605B (zh) | 2013-10-24 | 2013-10-24 | 一种基于权限使用行为的安卓平台应用程序动态分析*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310506289.XA CN103593605B (zh) | 2013-10-24 | 2013-10-24 | 一种基于权限使用行为的安卓平台应用程序动态分析*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103593605A CN103593605A (zh) | 2014-02-19 |
CN103593605B true CN103593605B (zh) | 2016-11-09 |
Family
ID=50083739
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310506289.XA Active CN103593605B (zh) | 2013-10-24 | 2013-10-24 | 一种基于权限使用行为的安卓平台应用程序动态分析*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103593605B (zh) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103885784B (zh) * | 2014-04-09 | 2017-01-18 | 中国人民解放军理工大学 | 具有安全模块可插拔功能的Android平台构建方法 |
CN105025045B (zh) * | 2014-04-18 | 2018-11-27 | 中国电信股份有限公司 | 资源调用的管控方法和***以及移动应用管理服务器 |
CN104281808B (zh) * | 2014-09-25 | 2017-09-01 | 中国科学院信息工程研究所 | 一种通用的Android恶意行为检测方法 |
CN104992116B (zh) * | 2014-09-27 | 2018-10-23 | 武汉安天信息技术有限责任公司 | 基于intent sniffer的监测方法及*** |
CN104408366B (zh) * | 2014-11-26 | 2017-11-21 | 清华大学 | 基于插装技术的安卓应用程序权限使用行为跟踪方法 |
CN104462976A (zh) * | 2014-12-23 | 2015-03-25 | 上海斐讯数据通信技术有限公司 | 一种低干扰的***权限管控方法 |
CN104850778B (zh) * | 2015-05-04 | 2019-08-27 | 联想(北京)有限公司 | 一种信息处理方法及电子设备 |
CN104966031B (zh) * | 2015-07-01 | 2018-02-27 | 复旦大学 | 安卓应用程序中非权限相关隐私数据的识别方法 |
CN105022954B (zh) * | 2015-07-07 | 2018-02-13 | 清华大学 | 飞腾cpu上三态操作***安全内核服务动态运行方法 |
CN106778239B (zh) | 2015-11-24 | 2019-10-29 | 阿里巴巴集团控股有限公司 | 用于提高Java沙箱安全性的方法及装置 |
CN105657550A (zh) * | 2016-02-04 | 2016-06-08 | 四川长虹电器股份有限公司 | Android电视***中音视频安全权限管理*** |
CN107402879B (zh) * | 2016-05-20 | 2020-11-06 | 阿里巴巴集团控股有限公司 | 确定应用之间调用关系的方法及装置 |
CN107103249A (zh) * | 2017-02-21 | 2017-08-29 | 上海青橙实业有限公司 | 日志文件读写权限的设置方法、日志文件的读取方法 |
CN107068150A (zh) * | 2017-05-03 | 2017-08-18 | 安利军 | 一种Android智能语音控制方法及*** |
CN107194277B (zh) * | 2017-05-15 | 2019-08-13 | 华中科技大学 | 面向安卓广告库的细粒度权限管理方法及*** |
CN107239694B (zh) * | 2017-05-27 | 2020-03-10 | 武汉大学 | 一种基于用户评论的Android应用权限推理方法及装置 |
CN107480530A (zh) * | 2017-08-23 | 2017-12-15 | 北京奇虎科技有限公司 | 安全检测的方法、装置、***以及服务器 |
CN109150951B (zh) * | 2018-06-11 | 2020-05-29 | 阿里巴巴集团控股有限公司 | Android***Activity的启动方法和装置 |
CN109271781B (zh) * | 2018-09-13 | 2020-11-17 | 西安交通大学 | 一种基于内核的应用程序获取超级权限行为检测方法与*** |
CN109598146B (zh) * | 2018-12-07 | 2023-02-17 | 百度在线网络技术(北京)有限公司 | 隐私风险评估方法和装置 |
CN110309661B (zh) * | 2019-04-19 | 2021-07-16 | 中国科学院信息工程研究所 | 一种基于控制流的敏感数据使用权限管理方法及装置 |
CN111353146B (zh) * | 2020-05-25 | 2020-08-25 | 腾讯科技(深圳)有限公司 | 应用程序敏感权限的检测方法、装置、设备和存储介质 |
CN115359766B (zh) * | 2022-08-10 | 2024-05-17 | 智己汽车科技有限公司 | 基于车辆行为的显示方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102521717A (zh) * | 2011-12-30 | 2012-06-27 | 山东中创软件工程股份有限公司 | 一种配置管理资源库信息统计的方法与装置 |
CN102737190A (zh) * | 2012-07-04 | 2012-10-17 | 复旦大学 | 基于静态分析的Android应用日志中信息泄漏隐患的检测方法 |
CN102810143A (zh) * | 2012-04-28 | 2012-12-05 | 天津大学 | 基于Android平台手机应用程序的安全检测***及方法 |
CN103023710A (zh) * | 2011-09-21 | 2013-04-03 | 阿里巴巴集团控股有限公司 | 一种安全测试***和方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005122474A (ja) * | 2003-10-16 | 2005-05-12 | Fujitsu Ltd | 情報漏洩防止プログラムおよびその記録媒体並びに情報漏洩防止装置 |
-
2013
- 2013-10-24 CN CN201310506289.XA patent/CN103593605B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103023710A (zh) * | 2011-09-21 | 2013-04-03 | 阿里巴巴集团控股有限公司 | 一种安全测试***和方法 |
CN102521717A (zh) * | 2011-12-30 | 2012-06-27 | 山东中创软件工程股份有限公司 | 一种配置管理资源库信息统计的方法与装置 |
CN102810143A (zh) * | 2012-04-28 | 2012-12-05 | 天津大学 | 基于Android平台手机应用程序的安全检测***及方法 |
CN102737190A (zh) * | 2012-07-04 | 2012-10-17 | 复旦大学 | 基于静态分析的Android应用日志中信息泄漏隐患的检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103593605A (zh) | 2014-02-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103593605B (zh) | 一种基于权限使用行为的安卓平台应用程序动态分析*** | |
CN106203113B (zh) | 安卓应用文件的隐私泄露监控方法 | |
CN107317730B (zh) | 用于监控区块链节点状态的方法、设备和*** | |
CN104766012B (zh) | 基于动态污点追踪的数据安全动态检测方法及*** | |
CN105956474B (zh) | Android平台软件异常行为检测*** | |
Vekris et al. | Towards Verifying Android Apps for the Absence of {No-Sleep} Energy Bugs | |
CN102667712B (zh) | 用于同时定义和实行访问控制和完整性策略的***、方法和装置 | |
EP3203406A1 (en) | Sensitive information security protection method and device | |
CN101997912A (zh) | 基于Android平台的强制访问控制装置及控制方法 | |
CN104392177A (zh) | 基于安卓平台的病毒取证***及其方法 | |
US20160246990A1 (en) | Fine-Grained User Control Over Usages Of Sensitive System Resources Having Private Data With Applications In Privacy Enforcement | |
CN111835756B (zh) | App隐私合规检测方法、装置、计算机设备及存储介质 | |
CN107103240B (zh) | 一种基于上下文信息的Android组件间隐私泄露行为识别方法及*** | |
CN105589807B (zh) | 一种应用程序间组件能力泄露动态检测方法和*** | |
CN107145376A (zh) | 一种主动防御方法和装置 | |
JP5990646B2 (ja) | 仮想マシンにおける強制保護制御 | |
CN105210075A (zh) | 被测应用程序的未使用参数 | |
CN111083093B (zh) | 调用端能力的方法、装置、电子设备及存储介质 | |
Hammad et al. | Determination and enforcement of least-privilege architecture in android | |
Kobayashi et al. | Mobile security assurance for automotive software through ArchiMate | |
CN106845235A (zh) | 一种基于机器学***台回调函数检测方法 | |
Jia et al. | A framework for privacy information protection on Android | |
JP2005234661A (ja) | アクセスポリシ生成システム、アクセスポリシ生成方法およびアクセスポリシ生成用プログラム | |
CN111124610B (zh) | 一种应用容器中应用程序调用方法、装置及存储介质 | |
CN113132346A (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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |