Android系统安全概述
目录
Android安全概述
本文简述了Android系统安全工程的目标,描绘了Android安全系统架构的基础,回答了系统架构和安全分析的一些相关问题。本文介绍的是Android核心平台的安全特性,并没有对一定的应用,如浏览器和短信的安全问题进行讨论。
一、背景
1.1 Android系统平台的构建块
-
设备硬件:Android系统可运行于广泛的硬件设备上,包括手机、笔记本和机箱盒上。
Android操作系统、
-
Android操作系统:Android核心操作系统的创建基于linux内核。一切的设备资源,像照相机功能、GPS数据、蓝牙功能、电话功能、网络连接等,都可以通过操作系统来访问。
-
Android应用程序运行环境:大多数Android应用程序用Java语言编写并运行在Dalvik虚拟机下。然而,很多应用程序,包括核心Android服务和应用是本机应用程序或者包含本地库代码。Dalvik和本机应用程序都在同一个安全环境的应用沙箱中运行运行,每一个应用程序都获得文件系统的一部分来保存私有数据,包括数据库和原生文件。
1.2 Android应用程序来源
-
系统自带的应用程序:Android系统包含一些应用程序,包括电话、日历、邮件、浏览器和联系人。这些应用程序可以是开源Android平台的一部分,也可以是厂商为特定设备所做的开发。
-
用户安装的应用程序:Android系统提供了一个开源的开发环境,它支持任何第三方的应用。谷歌应用商店为用户提供了成百上千的应用软件。
二、Android平台安全架构
2.1 Android平台安全架构目标
-
保护用户数据
-
保护系统资源(包括网络)
-
提供应用隔离机制
2.2 Android安全特性
-
在操作系统层面,通过Linux内核来建立一个健壮的安全机制
-
在应用程序层面,为所有的应用提供一个强制沙箱策略
-
为进程间通信提供保护机制
-
为应用程序提供签名
-
提供权限机制
下面几节会详细介绍Android平台的这些安全特性。图1总结了Android软件栈的分层安全结构。因为一小部分Android系统层面的代码具有root权限,所以在linux内核以上的代码都运行在应用程序沙箱之内。
图1 Android 软件栈
三、Android安全机制详细介绍
本章将分别从系统和内核层的安全、Linux安全、应用程序沙箱、用户安全特性、Android应用程序安全等几个方面来详细介绍Android安全机制。
3.1 系统和内核层安全机制
在操作系统层面,Android平台提供Linux内核保护机制以及一个进程间通信措施来确保不同进程的应用程序的安全通信。操作系统层面的安全机制确保即使是本地代码也被限制在应用程序沙箱内。系统会阻止流氓软件破坏其他软件、操作系统或设备。
3.1.1 Linux安全机制
作为移动计算环境的基础,Linux内核为Android提供了几个关键的安全特性,包括以下几点。
-
基于用户的权限机制
-
进程隔离机制
-
进程间通信安全机制的扩展
-
移除内核不必要的或潜在不安全部分的能力
作为一个多用户操作系统,Linux内核的一个基本安全目标是隔离用户资料。Linux安全原则是保护一个用户的资料对其他用户不可见。
-
阻止用户A读取用户B的文件
-
确保用户A不占用用户B的内存
-
确保用户A不占用用户B的CPU资源
-
确保用户A
-
占用用户B的设备(如电话、GPS、蓝牙)
3.1.2 应用程序沙箱
Android平台利用Linux基于用户的保护机制来识别和隔离应用程序资源。Android操作系统为每一个Android应用程序赋予一个特殊的用户ID,在运行时就像这个用户在一个独立的进程中。这个方法不同于其他的操作系统(包括传统的Linux配置),不同的应用程序在同一个用户权限下运行。
这样就建立了一个内核层的应用程序沙箱。默认情况下,应用程序之间不能相互通信,并且应用程序不能随意访问操作系统。如果应用程序A试图执行一些恶意行为,如读取应用程序B的数据或者在没有权限的情况下拨打电话(拨打电话是一个独立的应用程序),操作系统就会阻止它,因为应用程序A没有正确的用户权限。沙箱是一个简单的、可审计的、基于历史悠久的UNIX风格的进程隔离及文件权限机制。
因为应用程序沙箱在内核层,所以它可以从机器码延伸到操作系统软件。图1中内核层以上的所有软件,包括操作系统库,应用程序框架、应用程序运行环境和所有的应用程序都在应用程序沙箱中。在其他平台上,开发者只能用特定的开发框架、接口集合或者语言来开发应用程序以确保安全。在Android中,不需要因为安全问题来对应用程序开发进行限制,在这种情况下,机器码和翻译码一样安全。
就像所有的安全特性,应用程序沙箱也有可能被打破。但是,如果想要在一个正确配置的设备上打破沙箱,必须要破坏Linux内核安全机制。
3.2.1 应用程序组件
构成Android应用程序工程的主要模块如下。
-
AndroidManifest.xml:此文件是控制文件,它来告诉系统将要对所有的组件执行的操作,它同时也指定了所要求的权限。
-
Activities:一个Activity通常是一段执行某个任务的代码。它通常会给用户展示一个界面,但是有时候是不必要的,一些Activity从来不展示界面。一个应用程序可能会包含很多的Activity,但是只有一个是应用程序的入口。
-
Services:一个Service就是一段在后台执行的代码。它可以在自己的进程中运行,或者在其他应用程序的上下文中运行。Service的一个例子是媒体播放器:即使用户退出了播放界面,他可能还想让音乐继续播放。当用户界面结束时,Service来负责让音乐继续播放。
-
Broadcast Receiver:当操作系统或其他应用程序发出一个进程间通信请求时,一个BroadcastReceiver 就会被实例化。例如,一个应用程序可能会注册一个receiver来接收电量过低的消息,当收到这个消息时改变自身的一些行为。
3.2.2 Android权限模型:访问受保护的接口
受保护的接口包括:
-
相机功能
-
位置数据(GPS)
-
蓝牙功能
-
电话功能
-
SMS/MMS功能
-
网络/数据连接
以上这些资源只能被操作系统访问。为了使用这些受保护的接口,应用程序必须在它的manifest文件中声明权限。当要安装一个应用程序时,系统会为用户展示一个对话框,来表明此应用程序所需要的权限和询问用户是否要继续安装。如果用户继续安装,系统将会认为用户同意了所有要求的权限。用户不能授予或拒绝某一个权限,必须接受或拒绝所有要求的权限。
如果应用程序试图使用一个受保护的接口,而没有在manifest文件中声明,权限失败会对应用程序抛出一个安全异常。受保护接口权限检查是预防危害的最低检查层次。若应用程序要求访问受保护接口,安装时会对用户展示信息,如图2所示。
图2 Display of permissions for applications
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。