https://source.android.com/tech/security/
1. 背景
2. 系统和内核层的安全性
3. 应用程序的安全性
1. 背景
Android为移动设备提供了一套开源平台和开发环境。其主要的平台编译模块是:
Android应用程序有两个主要来源:
1.1 Android平台的安全架构
Android重新定义传统操作系统的安全控制:
为了实现这些目标,Android提供了以下关键的安全特性:
2. 系统和内核层的安全性
在操作系统层级,Android平台提供了Linux内核的安全性,包括IPC的安全机制来确保运行在不同进程间安全地通信。这些在操作系统层面上的安全性确保了本地代码同样也可以受到应用程序沙盒机制的制约。
2.1 Linux安全性
尽管Linux的历史充满了被无数开发者研究,攻击或修复,如今的Linux已经成为了一个受到很多企业和专家信任的安全稳定的内核。
作为移动开发环境的基础,Linux内核提供了Android一些关键的安全特性,包括:
作为一个多用户的操作系统,一个基本的安全目标是隔离用户彼此间的资源。
2.2 沙盒机制
Android平台利用Linux基于用户的保护方式用来识别和区分应用程序的资源。Android系统为每一个应用程序分配一个唯一的用户ID号(UID),进程以该用户身份的独立运行。这种方式与其他操作系统(包括传统的Linux配置)的区别就在于后者的多用户应用程序都运行在相同的用户权限下。
这就建立起一个内核层面上的应用程序沙盒,使内核确保了应用程序与系统之间的安全性。默认情况下,应用程序间无法进行交互,如果程序A尝试比如读取程序B的数据或者在没有权限的情况下打电话,那么操作系统将防止它发生因为程序A没有合适的用户等级。沙盒是简单的,可审核的,基于老的Unix风格的用户分隔处理和文件权限。
由于应用程序的沙盒是在内核里的,这种安全模型可以扩展到本地代码和操作系统的程序。所有在内核层以上的软件(包括操作系统库,framewrok,运行时以及所有应用程序)都运行在应用程序沙盒之中。在一些平台上,出于安全考虑,开发者被限制在特定的开发框架或者API组里,而Android却没有这样的限制。
在一些操作系统里,内存崩溃错误往往会破坏设备的安全,Android不会这样,内存崩溃只会允许强制代码在该特定的程序上下文间执行,这种权限由操作系统建立。
2.3 系统分区和安全模式
系统分区包括内核,操作系统库,运行时,framework和应用程序。这样的分区设为只读。当用户启动设备进入安全模式时,仅应用程序可以访问,确保了用户可以启动设备进入一个对于第三方软件可以自由运行的环境。
2.4 文件系统权限
类UNIX系统的文件系统权限确保了用户无法改变或读取他人的文件。在Android上,每一个应用程序运行在自己的用户下,除非开发者显式地把文件暴露给其他程序,他人的程序同样无法改变或读取自己的文件。
2.5 密码系统 (Cryptography)
Android为用户提供了一套加密系统API,包括一些标准公用的密码算法比如AES, RSA, DSA, SHA. 此外,API还提供了比如SSL, HTTPS等更高等级的协议。
Android 4.0引入KeyChain类,允许用户使用系统认证的存储空间来存放私钥和证书。
2.6 Root
默认情况下,仅有内核和一小部分核心程序运行于root权限下,Android并不会保护那些拥有root权限的用户或程序被操作系统,内核或其他应用修改。一般情况下,root超级用户拥有对应用程序和数据的完全访问权,那些改变了Android设备权限获取root权限的用户增加了安全隐患和潜在漏洞。
优化Android设备的能力对于开发者来说是很重要的。在很多设备上,用户有能力解锁bootloader来安装程序和改变系统,这些被改变的系统可能允许使用者为了调试程序和系统而获得root权限。为了保护存在的用户数据不被破坏,bootloader解锁机制需要bootloader擦除任何存在的用户数据作为解锁步骤的一部分,但是通过发掘内核的bug或者安全漏洞也可以获取root权限。
对存储在设备上的密钥数据加密并不能保护来自root超级用户的应用程序数据。应用程序可以加一层数据保护层,该层使用存储于设备之外(比如服务器或者用户密码)的密钥的加密方法。当密钥没有呈现时这种方法可以提供暂时的保护,但是在某些情况下密钥必须提供给应用程序,然后使之获得root用户的权限。
保护来自root用户的数据的一个更健壮的方案是使用硬件解决方案。OEM厂商可能会提供硬件解决方案来限制对特定内容的访问,比如视频播放的DRM,谷歌钱包的NFC存储。
对于已丢失或被偷的设备,完全文件系统加密(full filesystem encryption)使用了设备密码来保护加密的密钥,这样一来,即便修改了bootloader或系统在没有设备密码的情况下也无法充分获得用户的数据。
2.7 文件系统加密 (Filesystem Encryption)
Android 3.0及以后版本提供了完全文件系统加密,使用AES128所有用户数据在内核里加密。加密的密钥由AES128算法保护,该算法的密钥来自用户的密码。
2.8 密码保护
Android可以通过配置来认证用户提供的密码来获取设备权限。是否使用密码以及密码的复杂程度规则可以由设备管理员设定。
2.9 设备管理员
Android 2.2及以后版本提供了Android设备管理员API,在系统层提供了设备管理员的特性。比如说,内置的邮件应用使用了这些API来增强交换数据(Exchange)的支持。通过邮件应用,Exchange管理员可以增强密码策略。管理员同样可以远程擦除已丢失或偷窃的设备。