移动智能终端安全课件:权限提升攻击
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
口间接获得特权的功能,普遍存在于Android缺省程序(例如 电话、闹钟、音乐和设置程序)及第三方程序中。一个计算 机程序被恶意程序欺骗,以至于错误地使用自身的权限来使 恶意程序获得特权功能,是一种特权扩大的典型攻击方式。
在此情况下,受攻击者控制的应用程序可以利用良性应 用程序中未受保护的接口进行权限提升。
权限提升攻击
9.3.2 共谋攻击实例 假设某恶意应用程序具有对麦克风的访问权限,但没有
网络连接和其他可能带来风险的权限,由于该恶意应用程序 没有其他的高级权限,如拦截电话等权限,因此需要获取必 要的信息来完成攻击操作,例如利用被叫的电话号码,通过 分析电话录音等为攻击操作做准备。
权限提升攻击
本实例编写了nativeGpsTest以实现GpsLocation Provider.cpp的功能,并作为应用程序的自带原生库安装进 入手机,该方法流程可简述如下:
(1) nativeGpsTest使用dlopen函数调用libhardware.so中 Hal层入口函数get_module_t以获得gps.xxxx.so路径并调用初 始化接口。
权限提升攻击
权限提升攻击
9.1 权限提升攻击的分类 9.2 权限机制漏洞挖掘 9.3 权限提升攻击实例 小结
权限提升攻击
9.1 权限提升攻击的分类
Android操作系统是权限分离的系统,即应用程序如果 需要使用涉及相关系统权限的功能,必须获取相应的系统权 限。权限获取后,程序在后台对权限的调用就可能会涉及通 信录、短信、位置信息等各种隐私。Android系统同时有多 个应用在运行,各个应用也设置了对应的访问权限,应用之 间也可以互相访问,因此就会出现由于某个应用权限扩展导 致的权限提升漏洞。
权限提升攻击
9.3 权限提升攻击实例
9.3.1 混淆代理人攻击实例 Android系统拥有位置信息服务,包含GPS定位、WiFi定位、 基站定位和AGPS定位四种方法。以下对Android位置信息服 务的调用做具体分析,LocationManager为整个定位服务的 入口类。在LocationManager.java(frameworks/base/location /java/android/location/)中可以看到,LocationManager类中所 有功能的实现依赖于名为mService的字段,该字段的类型为 ILocationManager。ILocationManager由 LocationManagerService实现。
权限提升攻击
9.2 权限机制漏洞挖掘
权限机制是操作系统的安全保护机制。为保护用户免于 遭受第三方代码的威胁,最新的平台通常采用的方式是对与 应用程序安全和隐私相关的API进行访问控制,由用户决定 是否允许应用程序访问该敏感资源。
权限提升攻击
权限机制可以分为安装时期权限和实时权限两种。实时 权限要求用户在应用程序运行时对应用程序所需的访问请求 进行批准,在iOS操作系统中应用广泛。安装时期权限要求 开发者预先声明权限请求,使用户可以在安装时期对这些权 限请求进行授权。安装时期权限是Android平台所采用的重 要安全机制。在Android系统中,不同开发者开发的Android 应用程序被分别分配唯一的用户ID,使得任何一个应用程 序在默认情况下都无法直接访问其他应用程序。
(4) GpsLocationProvider中的updateLocation方法会对 ProviderHandler发送消息UPDATE_LOCATION,该消息被 ProviderHandler中的handler方法处理,处理方式为调用 handleUpdateLocation方法,handleUpdateLocation方法调用 native_inject_location方法完成注入。
权限提升攻击
访问其他应用程序的操作包括读写用户的私有数据、读 写其他应用程序的文件、进行网络访问或者唤醒设备等。权 限机制是在组件间通信的基础上,为限制不同组件间的随意 访问而建立的访问控制机制。
权限机制漏洞分析分为安装时期权限机制漏洞分析和运 行时期权限机制漏洞分析。
权限提升攻击
9.2.1 安装时期权限机制漏洞分析 Android安装时期的权限机制是指应用程序在安装时期
权限提升攻击
事实上,在移动设备中可真正用于定位服务的方法通常 只有两种:一种是通过GPS模块,另一种是通过网络。网络 定位通过代理方式来完成,但代理在运行时可进行动态替换, 具有一定的不确定性。相反,GPS模块的定位实现是确定且 可参考的。因此本实例通过GPS模块来完成定位的实现类 “GpsLocationProvider”(frameworks/base/services/java/com/ android/server/location/GpsLocationProvider.java)。
权限提升攻击
该漏洞的存在使得一部分没有特定API访问权限的应用可以 通过对第三方应用的访问间接实现某些超越自身权限的功能, 这就是权限提升攻击。权限提升攻击具体分为混淆代理人攻 击和共谋攻击,如图9-1所示。
权限提升攻击
图9-1 Android权限提升攻击分类
权限提升攻击
9.1.1 混淆代理人攻击 混淆代理人攻击是指恶意程序利用其他程序的未保护接
权限提升攻击
经过分析可知,硬件检测到位置更新后,最初调用的是 GpsLocationProvider.cpp中的location_callback函数,消息通 知的流程如下:
(1) location_callback函数中对应的是调用 GpsLocationProvider.java中的reportLocation方法。
权限提升攻击
(2) 编写的回调函数GpsCallback结构体作为init函数的参 数,通过gps.xxxx.so调用Linux内核层,设备驱动打开设备 并启动数据接收线程。在获得GPS数据后,该nativeGpsTest 作为攻击者开发的程序通过gps.xxxx.so文件直接调用底层代 码,绕过中间层的检验机制,获得GPS数据,并把所获GPS 数据返回给该程序,再返回至nativeGpsTest。
权限提升攻击
Android权限提升攻击是指一个拥有少量权限的应用程 序(没有特权的调用者)允许访问拥有更多权限的应用程序的 组件(有特权的被调用者)。由于没有授予相应的权限API, 调用者没有权限去访问被调用者的位置等信息,但通过被调 用者的组件,调用者不需要权限即可访问被调用者。如果被 调用者拥有访问位置资源等权限,则调用者可通过与被调用 者的交互达到访问位置等信息的目的。
将该程序需要使用的全部权限显示给用户,由用户进行授权 工作。在安装时期权限的设计中存在以下三个问题:
(1) 用户如果希望安装并使用该应用程序的功能,就必 须对应用程序所申请的全部权限进行授权,如果拒绝,则应 用程序包安装器将拒绝安装该应用。
权限提升攻击
(2) Android权限机制在安装时期确定,无法根据运行时 环境的不同动态修改应用程序访问资源的能力。例如用户在 某个秘密场合下,希望所有应用程序的互联网连接、录音等 权限都被禁止授予,因此,需要一个能根据上下文(例如位 置、时间、温度、噪声等因素)来实施细粒度访问策略的访 问控制系统。
权限提升攻击
9.1.2 共谋攻击 共谋攻击是应用层权限提升攻击的一种方式,指恶意程
序可以通过共谋来合并权限从而执行超出各自特权的动作的 行为。此情况下发起攻击的应用程序和被利用的应用程序都 是恶意的,它们通过共谋来获取更大的权限。共谋攻击在两 个应用程序之间可以采用直接通信和间接通信两种方式。对 于直接通信来说,共谋攻击建立起直接的ICC信道,或者通 过socket连接;对于间接通信来说,共谋攻击通过共享文件 的方式或者通过一个中间的组件提供隐蔽信道(例如通过电 量管理器)或显式信道(例如通过用户联系人数据库)来完成应 用程序间的通信。
权限提升攻击
(5) LocationManagerService中的 handleLocationChangedLocked方法将最新的位置存放到 mLastKnownLocation中。至此,便可以通过 LocationManagerService中的getLastKnownLocation方法获取 到最近更新的位置信息了。
权限提升攻击
接下来描述攻击的具体实现方案:为成功调用Android 底层数据,攻击程序参照了GpsLocationProvider.cpp,结构 上与GpsLocationProvider.cpp源代码完全相同,功能上也可 以替代源代码。
权限提升攻击
GpsLocationProvider.cpp源码由两部分组成,一部分是 实现其功能的普通函数,另一部分是回调函数。普通函数的 编写替换可以参照源码,回调函数必须自行编写并对源码进 行替换。回调函数主要通过调用上层Java方法的方式来实现 数据、命令等在两层间的传递。由于本实例设计的攻击直接 穿过Framework层,所有的功能使用原生方法实现,因此不 需要向上层传递信息,即不需要调用上层Java方法,只需编 写空的回调函数即可。但create_thread_callback作为关键回 调函数需要特殊处理,其主要功能是调用系统函数 createJavaThread来创建线程,是整个 GpsLocationProvider.cpp中唯一一个需要Java代码来实现的 功能,需要通过使用dlopen来调用createJavaThread函数。
(3) Android已有权限机制缺少对已安装应用程序的保护, 这样在权限机制设计上的疏忽容易使恶意程序利用已安装应 用程序的权限完成运行时期权限机制漏洞分析 Android在安装时期完成对不同应用程序的权限授权,
并在运行期间对应用程序发起的敏感API访问进行访问控制。 Android权限框架由Android中间件提供,包含一个对进程间 通信(Android系统中的组件间通信)实施强制访问控制的引用 监视器,安全敏感的API受到在安装时期赋予的权限保护。 引用监视器侧重于检测哪些应用直接引用了该敏感API,而 无法检测最终是哪个应用程序应用了该敏感API的功能,因 此Android权限机制存在权限提升攻击的缺陷。
权限提升攻击
在完成攻击的具体实例之后,还要对攻击效果进行如下 验证:本实例以Android 4.1.2系统为例来说明,方案将攻击 程序运行在Android虚拟机上,然后利用 eclipseEmulatorControl模拟生成GPS数据,以此模拟现实的 GPS数据接收。攻击程序获得GPS数据成功之后通过Log向 控制台输出获得的结果,并与模拟生成的GPS数据进行比较。 实验结果是编写的攻击程序在Android虚拟机上攻击成功。
(2) GpsLocationProvider.java中的reportLocation方法调 用ILocationManager中的report Location方法,再调用 LocationManagerService中的reportLocation方法。
权限提升攻击
(3) LocationManagerService中的reportLocation方法会对 LocationWorkerHandler发送MESSAGE_ LOCATION_ CHANGED消息。该消息在LocationProviderHandler中的 handleMessage方法中被处理。处理方法会调用 LocationProviderInterface中的updateLocation方法。
权限提升攻击
定位服务的真正实现类是LocationManagerService,该 类位于frameworks/base/services/ java/com/android/server/LocationManagerService.java中。 LocationManagerService.java的另一个作用是对申请使用位置 信息的应用进行权限检查。本实例的混淆代理人攻击需要绕 过的第一个访问控制便在此处。
在此情况下,受攻击者控制的应用程序可以利用良性应 用程序中未受保护的接口进行权限提升。
权限提升攻击
9.3.2 共谋攻击实例 假设某恶意应用程序具有对麦克风的访问权限,但没有
网络连接和其他可能带来风险的权限,由于该恶意应用程序 没有其他的高级权限,如拦截电话等权限,因此需要获取必 要的信息来完成攻击操作,例如利用被叫的电话号码,通过 分析电话录音等为攻击操作做准备。
权限提升攻击
本实例编写了nativeGpsTest以实现GpsLocation Provider.cpp的功能,并作为应用程序的自带原生库安装进 入手机,该方法流程可简述如下:
(1) nativeGpsTest使用dlopen函数调用libhardware.so中 Hal层入口函数get_module_t以获得gps.xxxx.so路径并调用初 始化接口。
权限提升攻击
权限提升攻击
9.1 权限提升攻击的分类 9.2 权限机制漏洞挖掘 9.3 权限提升攻击实例 小结
权限提升攻击
9.1 权限提升攻击的分类
Android操作系统是权限分离的系统,即应用程序如果 需要使用涉及相关系统权限的功能,必须获取相应的系统权 限。权限获取后,程序在后台对权限的调用就可能会涉及通 信录、短信、位置信息等各种隐私。Android系统同时有多 个应用在运行,各个应用也设置了对应的访问权限,应用之 间也可以互相访问,因此就会出现由于某个应用权限扩展导 致的权限提升漏洞。
权限提升攻击
9.3 权限提升攻击实例
9.3.1 混淆代理人攻击实例 Android系统拥有位置信息服务,包含GPS定位、WiFi定位、 基站定位和AGPS定位四种方法。以下对Android位置信息服 务的调用做具体分析,LocationManager为整个定位服务的 入口类。在LocationManager.java(frameworks/base/location /java/android/location/)中可以看到,LocationManager类中所 有功能的实现依赖于名为mService的字段,该字段的类型为 ILocationManager。ILocationManager由 LocationManagerService实现。
权限提升攻击
9.2 权限机制漏洞挖掘
权限机制是操作系统的安全保护机制。为保护用户免于 遭受第三方代码的威胁,最新的平台通常采用的方式是对与 应用程序安全和隐私相关的API进行访问控制,由用户决定 是否允许应用程序访问该敏感资源。
权限提升攻击
权限机制可以分为安装时期权限和实时权限两种。实时 权限要求用户在应用程序运行时对应用程序所需的访问请求 进行批准,在iOS操作系统中应用广泛。安装时期权限要求 开发者预先声明权限请求,使用户可以在安装时期对这些权 限请求进行授权。安装时期权限是Android平台所采用的重 要安全机制。在Android系统中,不同开发者开发的Android 应用程序被分别分配唯一的用户ID,使得任何一个应用程 序在默认情况下都无法直接访问其他应用程序。
(4) GpsLocationProvider中的updateLocation方法会对 ProviderHandler发送消息UPDATE_LOCATION,该消息被 ProviderHandler中的handler方法处理,处理方式为调用 handleUpdateLocation方法,handleUpdateLocation方法调用 native_inject_location方法完成注入。
权限提升攻击
访问其他应用程序的操作包括读写用户的私有数据、读 写其他应用程序的文件、进行网络访问或者唤醒设备等。权 限机制是在组件间通信的基础上,为限制不同组件间的随意 访问而建立的访问控制机制。
权限机制漏洞分析分为安装时期权限机制漏洞分析和运 行时期权限机制漏洞分析。
权限提升攻击
9.2.1 安装时期权限机制漏洞分析 Android安装时期的权限机制是指应用程序在安装时期
权限提升攻击
事实上,在移动设备中可真正用于定位服务的方法通常 只有两种:一种是通过GPS模块,另一种是通过网络。网络 定位通过代理方式来完成,但代理在运行时可进行动态替换, 具有一定的不确定性。相反,GPS模块的定位实现是确定且 可参考的。因此本实例通过GPS模块来完成定位的实现类 “GpsLocationProvider”(frameworks/base/services/java/com/ android/server/location/GpsLocationProvider.java)。
权限提升攻击
该漏洞的存在使得一部分没有特定API访问权限的应用可以 通过对第三方应用的访问间接实现某些超越自身权限的功能, 这就是权限提升攻击。权限提升攻击具体分为混淆代理人攻 击和共谋攻击,如图9-1所示。
权限提升攻击
图9-1 Android权限提升攻击分类
权限提升攻击
9.1.1 混淆代理人攻击 混淆代理人攻击是指恶意程序利用其他程序的未保护接
权限提升攻击
经过分析可知,硬件检测到位置更新后,最初调用的是 GpsLocationProvider.cpp中的location_callback函数,消息通 知的流程如下:
(1) location_callback函数中对应的是调用 GpsLocationProvider.java中的reportLocation方法。
权限提升攻击
(2) 编写的回调函数GpsCallback结构体作为init函数的参 数,通过gps.xxxx.so调用Linux内核层,设备驱动打开设备 并启动数据接收线程。在获得GPS数据后,该nativeGpsTest 作为攻击者开发的程序通过gps.xxxx.so文件直接调用底层代 码,绕过中间层的检验机制,获得GPS数据,并把所获GPS 数据返回给该程序,再返回至nativeGpsTest。
权限提升攻击
Android权限提升攻击是指一个拥有少量权限的应用程 序(没有特权的调用者)允许访问拥有更多权限的应用程序的 组件(有特权的被调用者)。由于没有授予相应的权限API, 调用者没有权限去访问被调用者的位置等信息,但通过被调 用者的组件,调用者不需要权限即可访问被调用者。如果被 调用者拥有访问位置资源等权限,则调用者可通过与被调用 者的交互达到访问位置等信息的目的。
将该程序需要使用的全部权限显示给用户,由用户进行授权 工作。在安装时期权限的设计中存在以下三个问题:
(1) 用户如果希望安装并使用该应用程序的功能,就必 须对应用程序所申请的全部权限进行授权,如果拒绝,则应 用程序包安装器将拒绝安装该应用。
权限提升攻击
(2) Android权限机制在安装时期确定,无法根据运行时 环境的不同动态修改应用程序访问资源的能力。例如用户在 某个秘密场合下,希望所有应用程序的互联网连接、录音等 权限都被禁止授予,因此,需要一个能根据上下文(例如位 置、时间、温度、噪声等因素)来实施细粒度访问策略的访 问控制系统。
权限提升攻击
9.1.2 共谋攻击 共谋攻击是应用层权限提升攻击的一种方式,指恶意程
序可以通过共谋来合并权限从而执行超出各自特权的动作的 行为。此情况下发起攻击的应用程序和被利用的应用程序都 是恶意的,它们通过共谋来获取更大的权限。共谋攻击在两 个应用程序之间可以采用直接通信和间接通信两种方式。对 于直接通信来说,共谋攻击建立起直接的ICC信道,或者通 过socket连接;对于间接通信来说,共谋攻击通过共享文件 的方式或者通过一个中间的组件提供隐蔽信道(例如通过电 量管理器)或显式信道(例如通过用户联系人数据库)来完成应 用程序间的通信。
权限提升攻击
(5) LocationManagerService中的 handleLocationChangedLocked方法将最新的位置存放到 mLastKnownLocation中。至此,便可以通过 LocationManagerService中的getLastKnownLocation方法获取 到最近更新的位置信息了。
权限提升攻击
接下来描述攻击的具体实现方案:为成功调用Android 底层数据,攻击程序参照了GpsLocationProvider.cpp,结构 上与GpsLocationProvider.cpp源代码完全相同,功能上也可 以替代源代码。
权限提升攻击
GpsLocationProvider.cpp源码由两部分组成,一部分是 实现其功能的普通函数,另一部分是回调函数。普通函数的 编写替换可以参照源码,回调函数必须自行编写并对源码进 行替换。回调函数主要通过调用上层Java方法的方式来实现 数据、命令等在两层间的传递。由于本实例设计的攻击直接 穿过Framework层,所有的功能使用原生方法实现,因此不 需要向上层传递信息,即不需要调用上层Java方法,只需编 写空的回调函数即可。但create_thread_callback作为关键回 调函数需要特殊处理,其主要功能是调用系统函数 createJavaThread来创建线程,是整个 GpsLocationProvider.cpp中唯一一个需要Java代码来实现的 功能,需要通过使用dlopen来调用createJavaThread函数。
(3) Android已有权限机制缺少对已安装应用程序的保护, 这样在权限机制设计上的疏忽容易使恶意程序利用已安装应 用程序的权限完成运行时期权限机制漏洞分析 Android在安装时期完成对不同应用程序的权限授权,
并在运行期间对应用程序发起的敏感API访问进行访问控制。 Android权限框架由Android中间件提供,包含一个对进程间 通信(Android系统中的组件间通信)实施强制访问控制的引用 监视器,安全敏感的API受到在安装时期赋予的权限保护。 引用监视器侧重于检测哪些应用直接引用了该敏感API,而 无法检测最终是哪个应用程序应用了该敏感API的功能,因 此Android权限机制存在权限提升攻击的缺陷。
权限提升攻击
在完成攻击的具体实例之后,还要对攻击效果进行如下 验证:本实例以Android 4.1.2系统为例来说明,方案将攻击 程序运行在Android虚拟机上,然后利用 eclipseEmulatorControl模拟生成GPS数据,以此模拟现实的 GPS数据接收。攻击程序获得GPS数据成功之后通过Log向 控制台输出获得的结果,并与模拟生成的GPS数据进行比较。 实验结果是编写的攻击程序在Android虚拟机上攻击成功。
(2) GpsLocationProvider.java中的reportLocation方法调 用ILocationManager中的report Location方法,再调用 LocationManagerService中的reportLocation方法。
权限提升攻击
(3) LocationManagerService中的reportLocation方法会对 LocationWorkerHandler发送MESSAGE_ LOCATION_ CHANGED消息。该消息在LocationProviderHandler中的 handleMessage方法中被处理。处理方法会调用 LocationProviderInterface中的updateLocation方法。
权限提升攻击
定位服务的真正实现类是LocationManagerService,该 类位于frameworks/base/services/ java/com/android/server/LocationManagerService.java中。 LocationManagerService.java的另一个作用是对申请使用位置 信息的应用进行权限检查。本实例的混淆代理人攻击需要绕 过的第一个访问控制便在此处。