移动智能终端安全课件:权限提升攻击_第1页
移动智能终端安全课件:权限提升攻击_第2页
移动智能终端安全课件:权限提升攻击_第3页
移动智能终端安全课件:权限提升攻击_第4页
移动智能终端安全课件:权限提升攻击_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

权限提升攻击9.1权限提升攻击的分类9.2权限机制漏洞挖掘9.3权限提升攻击实例小结

9.1权限提升攻击的分类

Android操作系统是权限分离的系统,即应用程序如果需要使用涉及相关系统权限的功能,必须获取相应的系统权限。权限获取后,程序在后台对权限的调用就可能会涉及通信录、短信、位置信息等各种隐私。Android系统同时有多个应用在运行,各个应用也设置了对应的访问权限,应用之间也可以互相访问,因此就会出现由于某个应用权限扩展导致的权限提升漏洞。

该漏洞的存在使得一部分没有特定API访问权限的应用可以通过对第三方应用的访问间接实现某些超越自身权限的功能,这就是权限提升攻击。权限提升攻击具体分为混淆代理人攻击和共谋攻击,如图9-1所示。图9-1

Android权限提升攻击分类

9.1.1混淆代理人攻击

混淆代理人攻击是指恶意程序利用其他程序的未保护接口间接获得特权的功能,普遍存在于Android缺省程序(例如电话、闹钟、音乐和设置程序)及第三方程序中。一个计算机程序被恶意程序欺骗,以至于错误地使用自身的权限来使恶意程序获得特权功能,是一种特权扩大的典型攻击方式。

在此情况下,受攻击者控制的应用程序可以利用良性应用程序中未受保护的接口进行权限提升。

9.1.2共谋攻击

共谋攻击是应用层权限提升攻击的一种方式,指恶意程序可以通过共谋来合并权限从而执行超出各自特权的动作的行为。此情况下发起攻击的应用程序和被利用的应用程序都是恶意的,它们通过共谋来获取更大的权限。共谋攻击在两个应用程序之间可以采用直接通信和间接通信两种方式。对于直接通信来说,共谋攻击建立起直接的ICC信道,或者通过socket连接;对于间接通信来说,共谋攻击通过共享文件的方式或者通过一个中间的组件提供隐蔽信道(例如通过电量管理器)或显式信道(例如通过用户联系人数据库)来完成应用程序间的通信。

9.2权限机制漏洞挖掘

权限机制是操作系统的安全保护机制。为保护用户免于遭受第三方代码的威胁,最新的平台通常采用的方式是对与应用程序安全和隐私相关的API进行访问控制,由用户决定是否允许应用程序访问该敏感资源。

权限机制可以分为安装时期权限和实时权限两种。实时权限要求用户在应用程序运行时对应用程序所需的访问请求进行批准,在iOS操作系统中应用广泛。安装时期权限要求开发者预先声明权限请求,使用户可以在安装时期对这些权限请求进行授权。安装时期权限是Android平台所采用的重要安全机制。在Android系统中,不同开发者开发的Android应用程序被分别分配唯一的用户ID,使得任何一个应用程序在默认情况下都无法直接访问其他应用程序。

访问其他应用程序的操作包括读写用户的私有数据、读写其他应用程序的文件、进行网络访问或者唤醒设备等。权限机制是在组件间通信的基础上,为限制不同组件间的随意访问而建立的访问控制机制。

权限机制漏洞分析分为安装时期权限机制漏洞分析和运行时期权限机制漏洞分析。

9.2.1安装时期权限机制漏洞分析

Android安装时期的权限机制是指应用程序在安装时期将该程序需要使用的全部权限显示给用户,由用户进行授权工作。在安装时期权限的设计中存在以下三个问题:

(1)用户如果希望安装并使用该应用程序的功能,就必须对应用程序所申请的全部权限进行授权,如果拒绝,则应用程序包安装器将拒绝安装该应用。

(2)

Android权限机制在安装时期确定,无法根据运行时环境的不同动态修改应用程序访问资源的能力。例如用户在某个秘密场合下,希望所有应用程序的互联网连接、录音等权限都被禁止授予,因此,需要一个能根据上下文(例如位置、时间、温度、噪声等因素)来实施细粒度访问策略的访问控制系统。

(3)

Android已有权限机制缺少对已安装应用程序的保护,这样在权限机制设计上的疏忽容易使恶意程序利用已安装应用程序的权限完成自身权限的扩大。

9.2.2运行时期权限机制漏洞分析

Android在安装时期完成对不同应用程序的权限授权,并在运行期间对应用程序发起的敏感API访问进行访问控制。Android权限框架由Android中间件提供,包含一个对进程间通信(Android系统中的组件间通信)实施强制访问控制的引用监视器,安全敏感的API受到在安装时期赋予的权限保护。引用监视器侧重于检测哪些应用直接引用了该敏感API,而无法检测最终是哪个应用程序应用了该敏感API的功能,因此Android权限机制存在权限提升攻击的缺陷。

Android权限提升攻击是指一个拥有少量权限的应用程序(没有特权的调用者)允许访问拥有更多权限的应用程序的组件(有特权的被调用者)。由于没有授予相应的权限API,调用者没有权限去访问被调用者的位置等信息,但通过被调用者的组件,调用者不需要权限即可访问被调用者。如果被调用者拥有访问位置资源等权限,则调用者可通过与被调用者的交互达到访问位置等信息的目的。

9.3权限提升攻击实例

9.3.1混淆代理人攻击实例Android系统拥有位置信息服务,包含GPS定位、WiFi定位、基站定位和AGPS定位四种方法。以下对Android位置信息服务的调用做具体分析,LocationManager为整个定位服务的入口类。在LocationManager.java(frameworks/base/location/java/android/location/)中可以看到,LocationManager类中所有功能的实现依赖于名为mService的字段,该字段的类型为ILocationManager。ILocationManager由LocationManagerService实现。

定位服务的真正实现类是LocationManagerService,该类位于frameworks/base/services/

java/com/android/server/LocationManagerService.java中。LocationManagerService.java的另一个作用是对申请使用位置信息的应用进行权限检查。本实例的混淆代理人攻击需要绕过的第一个访问控制便在此处。

事实上,在移动设备中可真正用于定位服务的方法通常只有两种:一种是通过GPS模块,另一种是通过网络。网络定位通过代理方式来完成,但代理在运行时可进行动态替换,具有一定的不确定性。相反,GPS模块的定位实现是确定且可参考的。因此本实例通过GPS模块来完成定位的实现类“GpsLocationProvider”(frameworks/base/services/java/com/

android/server/location/GpsLocationProvider.java)。

经过分析可知,硬件检测到位置更新后,最初调用的是GpsLocationProvider.cpp中的location_callback函数,消息通知的流程如下:

(1)

location_callback函数中对应的是调用GpsLocationProvider.java中的reportLocation方法。

(2)

GpsLocationProvider.java中的reportLocation方法调用ILocationManager中的reportLocation方法,再调用LocationManagerService中的reportLocation方法。

(3)  LocationManagerService中的reportLocation方法会对LocationWorkerHandler发送MESSAGE_

LOCATION_

CHANGED消息。该消息在LocationProviderHandler中的handleMessage方法中被处理。处理方法会调用LocationProviderInterface中的updateLocation方法。

(4)  GpsLocationProvider中的updateLocation方法会对ProviderHandler发送消息UPDATE_LOCATION,该消息被ProviderHandler中的handler方法处理,处理方式为调用handleUpdateLocation方法,handleUpdateLocation方法调用native_inject_location方法完成注入。

(5) LocationManagerService中的handleLocationChangedLocked方法将最新的位置存放到mLastKnownLocation中。至此,便可以通过LocationManagerService中的getLastKnownLocation方法获取到最近更新的位置信息了。

本实例编写了nativeGpsTest以实现GpsLocationProvider.cpp的功能,并作为应用程序的自带原生库安装进入手机,该方法流程可简述如下:

(1)

nativeGpsTest使用dlopen函数调用libhardware.so中Hal层入口函数get_module_t以获得gps.xxxx.so路径并调用初始化接口。

(2)编写的回调函数GpsCallback结构体作为init函数的参数,通过gps.xxxx.so调用Linux内核层,设备驱动打开设备并启动数据接收线程。在获得GPS数据后,该nativeGpsTest作为攻击者开发的程序通过gps.xxxx.so文件直接调用底层代码,绕过中间层的检验机制,获得GPS数据,并把所获GPS数据返回给该程序,再返回至nativeGpsTest。

接下来描述攻击的具体实现方案:为成功调用Android底层数据,攻击程序参照了GpsLocationProvider.cpp,结构上与GpsLocationProvider.cpp源代码完全相同,功能上也可以替代源代码。

GpsLocationProvider.cpp源码由两部分组成,一部分是实现其功能的普通函数,另一部分是回调函数。普通函数的编写替换可以参照源码,回调函数必须自行编写并对源码进行替换。回调函数主要通过调用上层Java方法的方式来实现数据、命令等在两层间的传递。由于本实例设计的攻击直接穿过Framework层,所有的功能使用原生方法实现,因此不需要向上层传递信息,即不需要调用上层Java方法,只需编写空的回调函数即可。但create_thread_callback作为关键回调函数需要特殊处理,其主要功能是调用系统函数createJavaThread来创建线程,是整个GpsLocationProvider.cpp中唯一一个需要Java代码来实现的功能,需要通过使用dlopen来调用createJavaThread函数。

在完成攻击的具体实例之后,还要对攻击效果进行如下验证:本实例以Android4.1.2系统为例来说明,方案将攻击程序运行在Android虚拟机上,然后利用eclipseEmulatorControl模拟生成GPS数据,以此模拟现实的GPS数据接收。攻击程序获得GPS数据成功之后通过Log向控制台输出获得的结果,并与模拟生成的GPS数据进行比较。实验结果是编写的攻击程序在Android虚拟机上攻击成功。

9.3.2共谋攻击实例

假设某恶意应用程序具有对麦克风的访问权限,但没有网络连接和其他可能带来风险的权限,由于该恶意应用程序没有其他的高级权限,如拦截电话等权限,因此需要获取必要的信息来完成攻击操作,例如利用被叫的电话号码,通过分析电话录音等为攻击操作做准备。

该恶意应用程序的目的是从私人数据电话交谈中提取出少量高价值的信息并将提取出的信息传送给恶意攻击者。达到这种目的需要两个关键组件:上下文感知数据收集器(简称收集器)和数据发送器(简称发送器)。收集器监视电话状态并为有价值的电话信息做简短记录,建立档案数据库。根据简短记录提取出高价值信息发送给恶意攻击者。由于该恶意应用程序没有直接访问互联网的权限,所以需要通过另一个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论