文档章节

Android安全模型之Android安全机制(进程通信)

柳哥
 柳哥
发布于 2014/12/02 10:48
字数 1847
阅读 391
收藏 9

进程通信是应用程序进程之间通过操作系统交换数据与服务对象的机制。Linux操作系统的传统进程间通信(IPC)有多种方式,比如管道,命令管道,信号量,共享内存,消息队列,以及网络与Unix套接字等。虽然理论上Android系统仍然可以使用传统的Linux进程通信机制,但是在实际中,Android的应用程序几乎不使用这些传统方式在Android的应用程序设计架构下,甚至看不到进程的概念,取而代之的是从组件的角度,如Intent,Activity,Service,Content Provider,实现组件之间的相互通信。Android应用程序通常由一系列Activity和Service组成的,一般Service运行在独立的进程中, Activity既可能运行在同一个进程中,也可能运行在不同的进程中。在不同进程中的Activity和Service要协作工作,实现完整的应用功能,必须进行通信,以获取数据与服务。这就回归到历史久远的Client-Server模式。基于Client-Server的计算模式广泛应用于分布式计算的各个领域,如互联网,数据库访问等。在嵌入式智能手持设备中,为了以统一模式向应用开发者提供功能,这种Client-Server方式无处不在。Android系统中的媒体播放,音视频设备,传感器设备(加速度,方位,温度,光亮度等)由不同的服务端(Server)负责管理,使用服务的应用程序只要作为客户端(Client)向服务端(Server)发起请求即可。

但是,Client-Server方式对进程间通信机制在效率与安全性方面都是挑战

  • 效率问题。传统的管道,命名管道,网络与UNIX套接字,消息队列等需要多次复制数据数据先从发送进程的用户区缓存复制到内核区缓存中,然后再从内核缓存复制到接收进程的用户区缓存中,单向传输至少有两次复制),系统开销大传统的共享内存(shmem)机制无需将数据从用户空间到内核空间反复复制,属于低层机制,但应用程序直接控制十分复杂,因而难以使用

  • 安全问题。传统进程通信机制缺乏足够的安全措施:首先,传统进程通信的接收进程无法获得发送进程可靠的用户标识/进程标识(UID/PID),因而无法鉴别对方身份Android的应用程序有自己UID,可用于鉴别进程身份。在传统进程通信中,只能由发送进程在请求中自行填入UID与PID,容易被恶意程序利用,是不可靠的。只有内置在进程通信机制内的可靠的进程身份标记才能提供必要的安全保障。其次,传统进程通信的访问接入点是公开的,如FIFO与unix domain socket的路径名,socket的ip地址与端口号,lSystem V键值等,知道这些接入点的任何程序都可能试图建立连接,很难阻止恶意程序获得连接,如通过猜测地址获得连接等。

Android基于Dianne Hackborm的OpenBinder实现,引入Binder机制以满足系统进程通信对性能效率和安全性的要求。Binder基于Client-Server通信模式,数据对象只需一次复制并且自动传输发送进程的UID/PID信息,同时支持实名Binder与匿名Binder。Binder其实提供了远程过程调用(RPC)功能,概念上类似于COM和CORBA分布式组件架构。对于熟悉Linux环境的程序设计者而言,从Linux意义的进程通信角度来看,Android的进程通信原理如下图所示:


Binder进程通信机制由一系列组件组成:ClientServerService Manager,以及Binder Driver。其中,Client,Server和Service Manager是用户空间组件,而Binder Driver运行于内核空间用户层的Client和Server基于Binder Driver和Service Manager进行通信。开发者通常无需了解Binder Driver与Service Manager的实现细节,只要按照规范设计实现自己的Client和Server组件即可。从Android应用程序设计的角度来看,进程通信机制如下图:

在系统安全设计方面,Android的进程通信机制设计具备优于传统Linux的重要优势

  • Android应用基于权限机制,定义进程通信的权限,相比传统Linux IPC具有更细粒度的权限控制。

  • Binder进程间通信机制具备类型安全的优势。开发者在编译应用程序时,使用Android接口接描述语言(AIDL)定义交换数据的类型,确保进程间通信的数据不会溢出越界污染进程空间。

  • Binder通过Android的共享内存机制(Ashmem)实现高效率的进程通信,而不是采用传统的Linux/UNIX共享内存(Shared Memory),也具备特殊的安全含义。

Android在Binder进程通信机制中采用Android接口描述语言(AIDL。AIDL同传统RPC中的IDL语言一样,根据描述可以生成代码,使两个进程通过内部通信进程进行交互。例如,在一个Activity(一个进程)中访问一个Service(另一个进程)的对象/服务,使用AIDL定义接口与参数并实现在进程间的传递。AIDL IPC的机制是基于接口的,类似于COM与Corba,但更为轻量级,使用代理类在客户端和实现层间传递值。

AIDL的接口定义与参数描述是类型安全的,与程序设计语言中的类型安全概念一致。Android应用程序使用java语言编写。Java语言就具备所谓的“类型安全”特性,是一种强类型化的编程语言, 它强制不同内容遵循规定的数据格式,进而防止错误或恶意应用。不完整的类型安全与边界检查机制极易受到内存污染或缓冲区溢出攻击,进而导致任意代码,甚至恶意代码的运行。但是,在C/C++程序设计中,允许未经类型检查的强制类型转换,而且,除非编程者专门编程进行边界检查,否则C语言本身不要求边界检查。实践证明,这些C/C++语言的灵活性恰成为恶意代码攻击的目标。Android系统原生库允许采用C/C++编程,存在一定的安全隐患,需要其他特殊技术加以防范。传统Linux的进程通信机制虽然有用户权限的限制,但缺少强制的类型安全

由于类型安全的接口与数据描述,在接收方从其他进程接收数据时,可以充分检查安全性,确保其他进程发来的参数都在可接受的范围内,而不管调用者想要干什么,都可以防止进程间通信的数据溢出越界污染进程空间。

© 著作权归作者所有

共有 人打赏支持
柳哥
粉丝 206
博文 405
码字总数 347782
作品 0
杭州
技术主管
私信 提问
Android安全模型之介绍

从技术架构角度来看,Android安全模型基于强健的Linux操作系统内核安全性,通过进程沙箱机制隔离进程资源,并且辅以独特的内存管理技术与安全高效的进程间通信机制,适应嵌入式移动端处理器性...

柳哥
2014/11/30
0
0
android面试3

一、概念及说明 Android为了屏蔽进程的概念,利用不同的组件[Activity、Service]来表示进程之间的通信! 组件间通信的核心机制是Intent,通过Intent可以开启一个Activity或Service, 不论这个...

迷途d书童
2012/03/30
157
0
Android进程间通信--消息机制及IPC机制实现

一、概念及说明 Android为了屏蔽进程的概念,利用不同的组件[Activity、Service]来表示进程之间的通信! 组件间通信的核心机制是Intent,通过Intent可以开启一个Activity或Service,不论这个...

暖风
2010/11/13
0
0
浅入浅出 Android 安全:第四章 Android 框架层安全

第四章 Android 框架层安全 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 如我们在第1.2节中所描述的那样,应用程序框架级别上的安全性由 IPC 引用监视器实现...

apachecn_飞龙
2016/12/05
0
0
浅入浅出 Android 安全:第一章 Android

第一章 Android 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 Android 安全架构的理解不仅帮助我了解 Android 的工作原理,而且为我开启了如何构建移动操作系...

apachecn_飞龙
2016/11/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

阿里的Java岗面试到底有多难?这些常问技术原理你能答出多少!

阿里面试喜欢问哪些? 阿里的面试特别喜欢面试技术原理,特别是 数据结构 多线程并发 NIO 异步消息框架 分布式相关的缓存算法等 JVM的加裁过程和原理 垃圾回收算法 以及具体使用过的框架,会...

java知识分子
7分钟前
0
0
hibernate入门

下载和导包 下载hibernate 导入数据库驱动包 导入hibernate必要包 lib/required 导入日志记录的包 创建数据库和数据库实体 package com.company.domain;public class Customer { ...

gwl_
13分钟前
0
0
快速体验 Sentinel 集群限流功能,只需简单几步

️ Pic by Alibaba Tech on Facebook 集群限流 可以限制某个资源调用在集群内的总 QPS,并且可以解决单机流量不均导致总的流控效果不佳的问题,是保障服务稳定性的利器。 Sentinel 从 1.4.0 ...

阿里云云栖社区
13分钟前
0
0
元数据注册系统:命名和标识原则

名词定义 对象类术语 对象类是概念、抽象或客观事物的集舍,它们具有明确的边界和含义,且其特性和行为都遵循相同的规则。一个对象类术语可以是管理项概念域、数据元概念和数据元的名称的一部...

十动然拒
22分钟前
0
0
抽丝剥茧:生产环境中负载均衡产品DPDK问题的解决

ULB4是UCloud自主研发的基于DPDK的高可用四层负载均衡产品,转发能力接近线速;DPDK则是一个高性能的开源数据面开发套件。ULB4作为用户应用的全局入口,在大流量多元化场景下保证用户业务的持...

UCloudTech
23分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部