摘要:近几年来,基于Android平台的移动设备,如智能手机、平板电脑等,十分流行。Android Market上的各种应用软件,使得这些移动设备为人们提供了近似于PC的服务,人们也越来越多的利用这些设备处理日常生活和工作方面的事务。几乎是不可避免的,人们在这些设备上也面临着类似于PC上的安全性问题。本文将对android平台的安全机制分析。
关键词:Android 安全 移动设备
1. Android系统
Android是一个开源的系统。它主要是由底层的Linux内核、各种本地库和Android运行时环境、应用软件框架以及最上层的各种应用构成。Linux内核提供了各种基础性的功能,如内存管理、设备驱动、网络等。本地库包括字体渲染引擎freetype,图形库OpenGL/OpenES,定制化的libc、网页渲染引擎Webkit等等,这些库主要是用C或C++写成。Android运行时环境包括了Dalvik虚拟机以及一些核心库。Dalvik虚拟机是基于寄存器的虚拟机,其字节码与JVM不同。核心库实现了对JavaSE5的一个子集以及Android专有特性的支持。应用软件框架完全由Java实现,包括装口管理器、包管理器、内容服务等等。最上层的应用软件包括浏览器、电话薄等等以及各种第三方应用软件。各应用分别打包在各自的apk文件中以便安装。apk包类似于jar,包含了各种内容。每个应用由组件组成,组件之间利用ICC(Inter Component Communication)机制通信。
图 1 system architecture
2. Android安全机制
作为一个基于Linux的系统,Android继承了很多Linux的安全特性。而作为一个主要面向移动设备的系统,Android借鉴了一些之前的一些系统的安全特性,提供了一些独特的安全机制。接下来,我们将从继承于Linux的安全特性、环境安全特性以及Android特有的安全特性。
2.1 继承于Linux的安全特性
每个应用在安装时即被指定了一个唯一的不可变的POSIX User Id,注意,是应用而不是用户。应用运行于自己的进程中。Discretionary Access Control(DAC)机制控制了进程对文件的访问。每个文件都有对三个主体有(user/group/everyone)相应的访问控制规则。每个主体都有读、写、执行的权限。系统文件是“system”或者“root”用户所拥有。因而各个应用只能访问自己所拥有的文件或者共享的文件。以文件形式提供的系统资源得到了保护。Android系统映像是以只读的方式挂载到文件系统上的。这样以来,即是是恶意的应用获得了写的权限,仍然无法破坏这些关键系统文件。所有的用户应用和数据都存放在用户分区,当系统与安全模式启动时,不挂载用户分区,从而进一步确保了安全。这样使得每个应用的进程无法干扰其他应用的进程,同时也无法破坏其他应用的文件。
由于移动设备性能一般不是很强,所以Linux的许多功能被精简掉了。更少的功能一般意味着更少的bug,不过,也有一些增强安全性的功能被精简掉了,如对于防止Syn Flood比较有效的Syn Cookie。
2.2 环境安全特性
Android上应用主要是强类型的Java语言写的,一定程度上减少了C语言那种无类型检查的类型转换所带来的安全隐患。当然系统也允许应用带有C写的原生的组件,这在某种程度上增加了安全的风险。经过Android修改过的组件通讯机制ICC也是类型安全的。程序利用ICC传递的数据必须通过Android接口定义语言(Android Interface Definition Language, AIDL)来定义,进而保证数据的类型在跨越进程边界的时候也保持安全。而认证、授权和计费这一传统的通讯系统必备属性与传统的非智能设备一样是通过SIM卡来实现的。
2.3. Android特有的安全特性
Android特有的安全特性的核心在于,对于一些操作,系统保证了应用必须得到相应的许可才能执行这些操作。包管理器(Package Manager)负责在应用安装的时候对应用程序所需要的许可进行审批,而应用框架则在应用运行时进行权限审核。Android定义了100中这种许可,如拨打电话(CALL_HONE)、使用摄像头(CAMERA)、访问网络(INTERNET)、接受键盘输入(READ_INPUT_STATE)等等许可,应用程序也可以定义自己的相应的许可,进而保护应用自己安全。应用程序必须在自己的manifest文件中明确指定自己所需要的许可,然后在安装的时候获得这些许可。安装的时候,系统通过检查应用的签名并通过与用户的交互来决定是否准许应用获得某个许可。应用的安装完成之后,就不能再申请获得别的许可了,如果安装时未被批准获得某许可,那么也不能再一次申请。应用运行时如果进行了某个不具有相应许可的操作,就会被终结掉。这样,用户就必须决定是否信赖应用的作者,因而容易带来比较大的隐患。一个简单的例子是,用户安装了两个貌似不相关的应用,一个需要访问网络的许可,而另一个应用需要访问通讯录的许可,用户都批准了。这两个在应用运行时,暗中通过一个Content Provider或者Intent进行通信,从而把用户的资料泄漏出去。此外,许可虽然是比较全面了,但是粒度仍然不够细致。例如,系统没有限制应用操作IO的限额,而SIM卡和闪存的擦写次数都是有限的;耗费电池也很容易,只需一直保持较高的CPU利用率,这种恶意行为目前还是不宜防范。
3. 总结
移动平台作为一个新的领域,在安全方面带来了很多新的挑战。Android平台是一个很流行的平台,本文从继承于Linux的安全特性、环境安全特性以及Android特有的安全特性这三个方面进行了简单的分析,从而了解到了Android平台在安全方面的优势以及不足。
参考文献:
Information Security. 346-360.
Arxiv preprint arXiv:0912.5101.
[3]. ENCK, W., ONGTANG, M., AND MCDANIEL, P. 2009b. Understanding Android Security. IEEE Security and Privacy, 7(1):50-57.
Security \& Privacy, IEEE, 8
Proceedings of the ACM SIGPLAN Fourth Workshop on Programming Languages and Analysis for Security, 2009, 1-7.