第5章移动终端操作系统的安全 移动智能终端的广泛使用,给用户和网络信息安全带来了不容忽视的威胁。移动互联 网上丰富的应用,要求移动智能终端设备提供更加开放的平台,也就是说操作系统的开放性 是支持智能化应用的基础。实际上,移动智能终端操作系统是管理移动终端的硬件、软件资 源的平台,其特点是开放应用程序接口(ApplicationProgramInterface,API)或开放操作系 统源文件。与移动智能终端相对封闭的内核不同,移动智能终端系统开放的接口和服务也 为恶意程序的行为打开了方便之门。因而,移动智能终端的安全对整个移动互联网的安全 至关重要。本章首先介绍移动终端面临的安全风险,然后对Android、iOS以及鸿蒙OS的 系统架构、安全机制、系统安全分析及安全防护措施进行重点介绍。 5.移动终端操作系统概述 1 操作系统是计算机系统的核心控制软件,是计算机用户和计算机硬件之间的桥梁,其功 能是管理和控制计算机硬件与软件资源。移动终端操作系统是在嵌入式操作系统基础之上 发展而来的专门为手机设计的操作系统,为使用手机提供了统一的接口和友好的交互界面, 也为手机功能的扩展、第三方软件的安装与运行提供了平台。现在,手机已成为人们日常生 活不可或缺的助手,其中存储的各种信息面临着极其严重的安全威胁。手机作为重要的信 息载体,存储着联系人、通话记录、短信、照片、视频、邮件等大量隐私数据,一旦泄露,就会造 成损失。 目前流行的智能手机操作系统可以按照源代码、内核和应用环境的开放程度不同划分 为开放型平台(基于Linux内核)和封闭型平台(基于UNIX和Windows内核)两大类。 当前运行在移动智能终端操作系统主要有Android(谷歌公司产品)、iOS(苹果公司产 品)、WindowsPhone(微软公司产品)、WebOS(惠普公司产品)、Harmony(华为公司产品) 等。在移动通信领域,谷歌公司的Android系统一家独大,占据的市场份额大于80% 、苹果 公司的iOS系统占百分之十几,其余平台占比都不超过1% 。现在Android和iOS系统不 仅在智能手机市场份额维持领先,而且优势仍在不断加大。 近几年,Symbiam(塞班)、WindowsMobile、Blackbery(黑莓)、Bada等智能手机的操 作系统已经在市场上销声匿迹。值得一提的是,华为公司的移动智能终端操作系统 HarmonyOS(鸿蒙OS),十分引人注目。 Android操作系统因具有较强的可扩展性、开放性,使其快速超越众多移动智能终端操 作系统,跃居市场份额首位。 ·237· 5.nrid移动终端操作系统概述 2 Ado Android(安卓)英文原意为“机器人”,是由AndyRubin同其他三位创始人于2003 年 在美国创办的公司,该公司开发的一种基于数字照相机的系统便是Android系统的雏形。 随后,Android公司才转而开发手机操作系统。2005 年,这家仅成立22 个月的公司被美国 谷歌(Google)公司收购,开始了真正意义上的智能手机操作系统开发。2007 年11 月,该公 司正式推出了基于Li6标准内核的开源手机操作系统,命名为And它是首个为 nux2.roid, 移动终端开发的真正的开放的、完整的移动软件,其中集成了大量的谷歌服务,内置有软件 商店。 当时,市场份额最高的手机操作系统是Symbian操作系统。该系统创始于1999 年,对 手机配置要求不高且省电。据统计,2006 年全球交付的智能手机数量达到了7290 万部,运 行Symbian系统的手机高达70% 。 2007 年,苹果公司发布了iPhone手机,开启了新的时代。iPhone手机拥有大尺寸触 屏、上网方便以及大量的第三方应用,极大地提升了用户体验,彻底颠覆了Symbian系统。 然而,苹果公司的操作系统第三方手机厂商不能使用。众多第三方手机厂商迫切需要一款 能够提供类似iPhone体验的手机操作系统。 谷歌公司的Android系统恰好能够满足这一需求,它不但能够提供类似于苹果手机的 用户体验,而且是开源、免费的操作系统。软件开发者可以自由开发需要的软件。Android 平台的手机用户可以享受地图、邮件、搜索等服务。 2007 年11 月,谷歌公司宣布建立一个全球性的开放手机联盟,该联盟里面包括了谷 歌、中国移动、摩托罗拉、英特尔、高通、三星、意大利电信、西班牙电信、T-Mobile、德州仪 器、博通、宏达电(HTC)等34 家厂商。联盟里面包括了全球知名的手机制造商、软件开发 商、电信运营商以及芯片制造商。这一联盟将支持谷歌发布的手机操作系统以及应用软件, 将共同开发安卓系统的开放源代码。 2008 年10 月,全球首款Android旗舰智能手机T-MobileG1 首次正式上市。开放手 机联盟成员的谷歌、T-mobile、HTC 共同促成了这款手机的诞生,显示出联盟的价值。而 后,安卓智能手机迎来爆发式增长。连原来青睐Symbian系统的摩托罗拉、索尼公司都纷 纷转为Android系统。在谷歌和众多合作伙伴的共同努力下,安卓很快成为了最主流的操 作系统,最终占据了手机操作系统大部分的市场份额。 从实际表现看,微软公司在整个手机时代都是处于跟随者的地位。在Symbian系统占 据优势的时候,微软公司推出了WindowsMobile(简称WM)手机操作系统,该系统基本按 照PC 版的Windows理念进行设计,并将计算机软件导入该系统。但用户对此并不太认 可,WM 处于劣势地位。 当iPhone发布后,微软公司发现WM 不能满足需求,因此将其抛弃,研发了一套新的 操作系统。然而,新操作系统姗姗来迟。直到2010 年10 月,微软公司才发布了Windows Phone(简称为WP )。此时,Android已经占据了明显优势,包括第三方手机厂商和软件厂 商的生态布局已经成型。WP 并没有取得多大进展,就以失败告终。 Android系统一经推出就得到业界的广泛支持,通过十几年的发展,经过不断地迭代与 ·238· 更新,已经由最初的Andx发展至And0,每一次的命名均以甜点为名,如表5 roid1.roid11.-1 所示。 表5- 1 Android版本及甜点名 版本名称发布时间 Android11.0 RedVelvetCake(红丝绒蛋糕) 2020.09.09 Android10.0 QuenCake(皇后蛋糕) 2019.09.03 Android9.0 PistachioIceCream(开心果冰淇淋) 2018.08.06 Android8.0 Oreo(奥利奥) 2017.03.21 Android7.0 Nougat(牛轧糖) 2016.05.18 Android6.0 Marshmalow(棉花糖) 2015.05.28 Android5.0 Lolipop(棒棒糖) 2014.06.25 Android4.4 KitKat(奇巧巧克力棒) 2013.09.03 Android4.1/4.2/4.3 JelyBean(果冻豆) 2012.06.28 Android4.0 IceCreamSandwich(冰淇淋三明治) 2011.10.19 Android3.0 Honeycomb(蜂巢) 2010.05.20 Android2.0/2.1 Eclair(闪电泡芙) 2009.12.03 Android1.6 Donut(甜甜圈) 2009.09.15 Android1.5 Cupcake(纸杯蛋糕) 2009.04.17 Android系统是一个针对移动设备的程序集,其中包括一个操作系统、一个中间件和一 些关键性应用。Android有如下特性。 (1)程序框架可重用及由可复写组件组成。 (2)针对移动设备优化过的Dalvik虚拟机。 (3)整合浏览器,该浏览器基于开源的WebKit引擎开发。 (4)提供了优化过的图形系统,该系统由一个自定义的2D图形库和一个遵循OpenGL ES1. 0标准(硬件加速)的3D图形库组成。 (5)使用SQLite实现结构化数据的存储。 (6)媒体方面对一些通用的音频、包括MPEG4 、H. 视频和图片格式提供支持( 264 、 MP3 、AAC 、AMR 、JPG 、PNG 、GIF格式)。 (7)GSM技术(依赖硬件)。 (8)蓝牙、EDGE 、3G和WiFi(依赖硬件) 。 (9)Camera、GPS 、指南针和加速计(依赖硬件) 。 (10)非常丰富的开发环境,包括一个设备模拟器、调试工具、内存和效率调优工具和一 个Eclipse的插件ADT 。 Android平台最大优势是开放性,允许任何移动终端厂商、用户和应用开发商加入 Android联盟,允许众多的厂商推出功能各具特色的应用产品。平台提供给第三方开发商 ·239· 宽泛、自由的开发环境,由此诞生了丰富的、实用性好、新颖、别致的应用。产品具备触摸屏、 高级图形显示和上网功能;界面友好,是移动终端的Web应用平台。 5.2.1 Android系统架构 目前,Android系统是世界上最广泛使用的智能手机平台,其后续版本中引入了许多新 概念,例如GoogleBouncer(谷歌保镖)和GoogleAppVerifier(谷歌应用验证程序)等。 Android系统的整体架构从下往上分为4层,分别为Linux内核层、系统库和Android 运行时环境、应用程序框架层和应用层,如图5-1所示。Linux内核层经过修改,可在移动 环境中获得更好的性能。Linux内核层还必须与所有硬件组件交互,因此也包含大多数硬 件的驱动程序。此外,Linux内核层还负责Android系统的大多数安全功能。由于Android 系统是基于Linux平台的,因此便于开发人员将Android应用移植到其他平台。 图5-1 Android系统架构层次 Android系统还提供了一个硬件抽象层,供开发人员在Android平台栈和他们想要移 植的硬件之间创建软件钩子。在Linux内核之上的层级,包含一些最重要和有用的库,如下 所示。 (1)SurfaceManager:管理窗口和屏幕媒体框架;这允许使用各种类型的编解码器来 播放和记录不同的媒体。 ·240· (2)SQLite:这是一个轻量级的SQL版本,用于数据库管理。 (3)WebKit:这是浏览器渲染引擎。 (4)OpenGL:用于在屏幕上正确显示2D和3D内容。 1.Linux内核 虽然Android系统以Linux系统的内核为基础并进行了裁剪和定制,但是依旧由 Linux为其提供基本的进程和内存管理、网络协议栈、电源管理、网络管理和驱动管理等功 能。其中部分修改是为Android系统定制的,例如轻量级的进程间通信Binder机制。它的 出现不仅给Android系统提供了方便,也更可靠地保证了系统的安全。谷歌公司为 Android系统开发了约250个补丁程序,这些补丁程序包含网络处理调整、进程管理、内存 管理等方面,大多是为了使Android系统在开发时更加灵活,便于开发人员基于Android系 统开发出更多的应用。And0之前的系统是基于Li6内核的;0之后 roid4.nux2.Android4. 的版本是基于Linx3.增加了与Andod系统的硬件兼容性, ux内核的, ri使得在更多设备上 得到支持。 Android系统的内核对Linux系统的内核进行了增强,增加了低内存管理器(Low MemoryKeler,LMK )、匿名共享内存(Ashmem )、轻量级的进程间通信Binder机制等面向 移动计算的特有功能。这些内核的增强使Android在继承Linux内核安全机制的同时,进 一步提升了内存管理、进程间通信等方面的安全性。表5-2列举了Android内核的主要驱 动模块。 表5- 2 Android内核主要驱动模块 驱动名称 电源管理(PowerManagement) 低内存管理器(Low MemoryKiler, LMK) 匿名共享内存(Ashmem) 日志(AndroidLogger) 定时器(AndroidAlarm) 物理内存映射管理(AndroidPMEM) 定时设备(AndroidTimeddevice) Yafs2文件系统 AndroidParanoid网络 说明 针对嵌入式设备的、基于标准Linux电源管理系统的、轻量级 的电源管理驱动 可以根据需要杀死进程来释放需要的内存。扩展了Linux的 OOM机制,形成独特的LMK机制 为进程之间提供共享内存资源,为内核提供回收和管理内存 的机制 一个轻量级的日志设备 提供了一个定时器用于把设备从睡眠状态唤醒 DSP及其他设备只能工作在连续的物理内存上,PMEM用于 向用户空间提供连续的物理内存区域映射 可以执行对设备的定时控制功能 采用大容量的NAND闪存作为存储设备,使用Yafs2作为文 件系统管理大容量MTDNANDFlash;Yafs2占用内存小, 垃圾回收简捷迅速 对Linux内核的网络代码进行了改动,增加了网络认证机制。 可在IPv4、IPv6和蓝牙中设置,由ANDROID_PARANOID_ NETWORK宏来启用此特性 ·241· 2.Android系统库和运行时环境 Android的系统库和运行时环境位于Linux内核层之上,是应用程序框架的支撑,为 Android系统中的各个组件提供服务。Android系统的各个组件都是工作在C/C++库的基 础上,库的使用需要由Android框架将这些库提供给开发者使用。所有的开发过程都是以 系统库为基础,系统库作为应用程序框架层和Linux内核层的中间层,起到了至关重要的作 用。主要的系统类库及说明如表5-3所示。 表5- 3 Android系统类库 系统类库名称 SurfaceManager MediaFramework SQLite OpenGLES FreType WebKit SGL Libc(bioniclibc) SSL 说明 执行多个应用程序时,管理子系统的显示,也对2D和3D图形提供支持 基于PacketVideoOpenCore的多媒体库,支持多种常用的音频和视频格式的录 制和回放,所支持的编码格式包括MPEG4 、MP3 、H264 、AAC和ARM 本地小型关系数据库,Android提供了一些新的SQLite数据库API,以替代传统 的耗费资源的JDBCAPI 基于Op0API标准实现的3D跨平台图形库 enGLES1. 用于显示位图和矢量字体 Web浏览器的软件引擎 底层的2D图形引擎 继承自BSD的C函数库bioniclibc,更适合基于嵌入式Linux的移动设备 安全套接层(SSL)是为网络通信提供安全及数据完整性的一种安全协议 除表5-3列举的主要系统类库之外,AndroidNDK(AndroidNativeDevelopmentKit, Android原生库)也十分重要。NDK为开发者提供了可直接使用的Android系统资源,采 用C/C++语言编写程序的接口即可调用。因此,第三方应用程序可以不依赖于Dalvik虚 拟机进行开发。实际上,NDK提供了一系列从C/C++生成原生代码所需要的工具,为开发 者快速开发C/C++的动态库提供方便,使用该工具能自动将生成的动态库和Java应用程 序一起打包成扩展名为.pk的应用程序包文件。 a 值得注意的是,使用原生库无法访问应用框架层API,兼容性无法保障。从安全性角度 考虑,Android原生库用非类型安全的程序语言C/C++编写,更容易产生安全漏洞,原生库 的缺陷(Bug)也可能更容易直接影响应用程序的安全性。 Android运行时包含核心库与Dalvik虚拟机两部分。核心库提供了Java语言基础功 能,并提供Androd的核心API,如anrios、nrint、adod.da等。 idod.adod.enrimei Dalvik是一款由谷歌公司开发的虚拟机,适用于Linux内核,实现进程隔离与线程调度 管理、安全和异常管理、垃圾回收等重要功能。开发人员编写的代码会先被编译为字节码 (Byte-code),然后由Dalvik虚拟机处理这些字节码。Dalvik也可作为基于Apache的Java 虚拟机使用,它针对移动手持设备的特性做了改善,满足了移动端的低内存需求,能同时运 行多个虚拟机实例,也能保证Android系统的安全性和进程之间的独立性。 3.Andid应用程序框架层 Android(r) 应(o) 用程序框架层是一个应用程序的核心,提供开发Android应用程序所需的 ·242· 一系列类库,开发人员都必须遵守整个框架的规则,可以进行快速的应用程序开发,也可以 通过继承实现个性化的扩展。Android应用框架的功能如表5-4所示。 表5- 4 Android应用程序框架的功能 功能 管理各个应用程序生命周期并提供常用的导航退回功能,为所有 程序的窗口提供交互的接口 对所有开启的窗口程序进行管理 提供一个应用程序访问另一个应用程序数据的功能或者共享自己 的数据 创建应用程序的基本组件,包括列表(List)、网格(Grid)、文本框 视图系统(ViewSystem) (Textbox)、按钮(Buton),还有可嵌入的Web浏览器 使应用程序可以自定义状态栏中的提示信息 对应用程序进行管理,提供应用程序的安装与卸载功能以及提示 相关的权限信息 提供各种非代码资源供应用程序使用,如本地化字符串、图片、音 频等 提供位置信息服务 管理所有的移动设备功能 是谷歌公司在线即时交流软件中一个通用的进程,提供后台推送 服务 应用程序框架层类库 活动管理器(ActivityManager) 窗口管理器(WindowManager) 内容提供器(ContentProvider) 通知管理器(NotificationManager) 包管理器(PackageManager) 资源管理器(ResourceManager) 位置管理器(LocationManager) 电话管理器(TelephonyManager) XMPP服务 4.Andid应用层 Android(r) 体(o) 系架构栈上的最高层就是应用层,应用层上包括各类与用户直接交互的应 用程序或用Java语言编写的运行于后台的服务程序。这些应用分为系统应用和用户自安 装应用两类。 (1)系统应用是指在设备上不能删除和卸载的应用软件,用户不能向它们写入任何数 据,也不能被用户所更改。所以这些应用的安全系数相对较高,同时它们能够获取设备上的 更多数据和资源,系统应用通常是由谷歌公司、硬件厂商或者移动运营商定制的软件。 (2)用户自安装应用是用户主动从应用市场下载的应用软件,可以随时卸载或删除,例 如常见的图片浏览器、日历、游戏、地图、Web浏览器等基本功能程序和专门开发的其他应 用程序。由于应用市场的开放性,这部分应用的安全性非常不可控。 5.Andid硬件抽象层 Android(r) 体(o) 系架构内核驱动和用户软件之间还存在所谓的硬件抽象层(Hardware AbstractLayer,HAL),它是对硬件设备的具体实现加以抽象。HAL没有出现在官方的 Android系统架构图中,位置介于内核层与系统库层之间,如图5-2所示。 Android的HAL就是对Linux内核驱动程序的封装,向上提供接口,屏蔽底层的实现 细节。即把对硬件的支持分成了两层,一层放在用户空间(UserSpace),一层放在内核空间 (KernelSpace),其中,硬件抽象层运行在用户空间,而Linux内核驱动程序运行在内核空间。 ·243· 图5-2 Android硬件抽象层 出于商业方面的原因,硬件抽象层和内核驱动没有被整合在一起放在内核空间。许多 硬件设备厂商不希望公开其设备驱动的源代码,如果能将Android的应用程序框架层与 Linux系统内核的设备驱动程序隔离,使应用程序框架的开发尽量独立于具体的驱动程序, 则Android将减少对Linux内核的依赖。HAL是对Linux内核驱动程序进行的封装,将硬 件抽象化,屏蔽了底层的实现细节。HAL规定了一套应用层对硬件层读写和配置的统一 接口,本质上就是将硬件的驱动分为用户空间和内核空间两个层面。例如读写硬件寄存器 的通道,至于从硬件中读到了什么值或者写了什么值到硬件中的逻辑,都放在硬件抽象层 中,这样就可以把厂商的商业秘密隐藏起来。 5.2 Adod系统的安全机制 2.nri 随着Android系统在智能终端上的普及,其安全性需求也越来越高。虽然Android的 安全框架源于Linux系统,安全模型也与Linux内核有许多相似的地方,但是经过重新剪裁 和定制后已有了非常大的变化,已经影响了它的安全体系架构设计。 Linux系统支持多用户,每一个用户的资源既不会交叉也不会混淆。在Linux系统内, 一个用户不能访问另一个用户的文件(除非有明确的权限),并且除非对应的可执行文件的 set-user-ID或set-group-ID位被设置,否则每个进程都要启动它的用户身份运行(用户和组 ID,通常指UID和GID )。 Android利用了这个用户隔离机制,但与传统的桌面或者服务器版的Linux系统有所 不同。在传统Linux系统中,一个UID可以给登录系统并通过Shel 执行命令的物理用户, 也可以给在后台执行的系统服务(也称为守护进程,因为系统守护进程常常可以通过网络访 问,每个守护进程使用专用的UID运行,可以限制某个守护进程被攻击后带来的损失)。而 Android系统是为智能手机设计的,由于智能手机是私人设备,所以不需要在系统内注册不 同的物理用户,物理用户是隐式的,所以UID被用来区别应用程序,这就构成了Android应 用程序沙盒的基础。 ·244· 1.进程沙盒 Android扩展了Linux内核安全模型的用户与权限机制,将多用户操作系统的用户隔 离机制巧妙地移植为应用程序隔离。沙盒(Sandbox)的工作原理是将App运行在一个隔离 的空间内,且在沙盒中运行的App可读不可写,从而避免App对其他程序和数据造成永久 性的修改或造成破坏。Android系统源于Linux,而Linux继承了UNIX著名的进程独立 和最小特权法则。需要注意的是,进程作为独立的用户运行时,既不能与其他用户通信,又 无法访问其他用户的内存区域。所以沙盒可以理解为几个概念:标准的Linux进程隔离, 大多数App都有单独的用户标识(UID )。在Android系统中,一个UID则识别一个App 。 在安装App时向其分配UID 。App在设备上存续期间内,其UID保持不变。权限用于允 许或限制App对设备资源的访问。不同的App分别属于不同的用户,因此App运行于自 己独立的进程空间,与UID不同的App自然形成资源隔离,如此便形成了一个操作系统级 别的App沙盒。如图5-3所示,Android有严格的文件系统权限。当App运行时,UID 、 GID和补充组分配给一个新进程,操作系统不仅会在内核层级强制使用权限限制,还会在 应用运行时进行控制。 图5-3 AndroidApp的沙盒机制 AndroidApp在安装时被赋予独特的UID(用户标识),并永久保持;App及其运行的 Dalvik虚拟机(谷歌公司自己编写的Android系统的虚拟机,可执行dex文件)运行于独立 的Linux进程空间,与UID不同的App完全隔离。另外,每个App都有一个只有它具有读 写权限的专用数据目录。因此,App是隔离,或沙盒封装化的,包括进程级(分别运行在各 自的进程中)和文件级(具有私有的数据目录)。这将创建一个内核级的App沙盒,适用于 所有的App,而不管它是原生还是虚拟机内执行的进程。 在特殊情况下,进程间还可以存在相互信任关系。如源自同一开发者或同一开发机构 的App,通过Android系统提供的共享UID(SharedUserId)机制,使得具备信任关系的 App可以运行在同一进程空间。 系统守护进程和App都在明确的、恒定的UID下运行,很少有守护进程以root用户身 份运行。Android系统没有传统/etc/pasword文件,并且它的系统UID是静态定义在 androidfilesystem_config.yst h头文件中。系统服务的UID从1000开始,1000是sem用户,具有特(_) 殊的权限。对于App,自动从10000开始产生UID,对应的用户名是app_××× 或uY_a×××(支持多用户的Android版本)的格式,×××即是从AID_APP起的偏移, Y是Android的userID(与UID不同)。 ·245· 在单用户设备上,App的文件数据目录已在/data/data目录下,是以包名创建的。多用 户设备使用不同的命名模式。所有数据目录下的文件均属于特定的Linux用户。 在Android模拟器中,通过ps命令可以查看进程的PID 。根据PID(如值为n),通过 cd/proc/ n 进入PID 为 n 的进程内,用命令catstatus就可以查看相应的UID 和GID 。 App沙盒并不是牢不可破,但是想要在一台配置正常的设备上打破App沙盒的限制 , 就必须牺牲Linux内核的安全性。这样就会用到Android的root技术,让用户拥有root权 限,能够满足用户对Android系统的大部分需求。所以,拥有root权限的用户或者App都 可以突破沙盒环境的限制,进而修改Android系统(包括内核)中的其他任意部分,包括App 及其数据。 2.应用权限 AndroidApp是通过沙盒隔离的,每个App只能访问自己的文件和一些设备上全局可 访问的文件。然而这样一个受限的应用,并不方便使用,但Android可以赋予App额外的、 更细粒度的访问权限,从而使App具备更丰富的功能。这些访问权限被称为permision, 可以控制App对网络连接、移动数据、硬件设备和数据资源的应用。 Andrinfs.l文件中定义了每一个App的访问权限。用户安装每个App时都 odmaietxm 会检查Androdmaietxml文件中的权限列表,从而决定是否给予授权。一旦授权,权限 infs. 不可撤销,并且无须再次确认,这些权限对App一直都有效。 在Android系统中,权限分为系统权限和自定义权限两类。系统权限有130多种,种类 涉及数据读取、网络连接、硬件管理、系统同步等方面。Android系统为应用设计了 4 种基 础权限级别,依据保护的重要程度从轻到重依次为正常、危险、签名和签名或系统。这4种 权限级别的含义如下。 (1)正常。申请就可使用,对系统不会产生危害,在App 安装时系统会自动赋予此 权限。 (2)危险。可能会对系统产生危害,若App申请了此权限,则需要在安装时由用户进 行确认同意才可以赋予此权限。 (3)签名。请求权限的App和声明权限的应用,它们的签名一致才能赋予此权限,当 签名一致时系统自动赋予此权限。 (4)签名或系统级别。当系统或者请求权限的App的签名与声明权限的App的签名 一致时,才赋予此权限。 在Android系统架构的每一层都会进行权限检查,当请求电池驱动这类最底层的资源 时,由Linux调用相关进程的UID;当访问其他层的资源时,就由其他层的组件来调用进程 的UID 或GID 。 3.进程通信 进程通信就是在不同进程之间传播或交换信息。在Linux中,进程间通信的主要手段 有管道、信号量、消息队列、信号、共享内存等。虽然Android系统理论上可以使用Linux系 统的进程通信方式,但是Android系统使用最多的是基于OpenBinder修改版本的IPC 机 制的Binder。 Binder进程通信机制提供基于共享内存的高效进程通信;Binder基于CS模式,提供类 似COM 与CORBA 的轻量级远程进程调用(RPC);通过接口描述语言(AIDL)定义接口与 ·246 ·