系统和内核安全

在操作系统级别,Android 平台不仅提供 Linux 内核的安全功能,而且还提供安全的进程间通信 (IPC) 机制,以便在不同进程中运行的应用之间安全通信。操作系统级别的这些安全功能旨在确保即使是原生代码也要受应用沙盒的限制。无论相应代码是由于应用自身行为所产生的,还是利用了应用漏洞,系统都能防止恶意应用危害其他应用、Android 系统或设备本身。如需了解您可以采取哪些措施来增强设备的内核安全性,请参阅内核配置。如需了解必需的设置,请参阅 Android 兼容性定义文档 (CDD)

Linux 安全

Android 平台的基础是 Linux 内核。Linux 内核多年来得到了非常广泛的应用,在千百万对安全敏感的环境中都有它的身影。在历经无数攻击以及成千上万的开发者的不断研究和修复之后,Linux 已成为许多公司和安全专业人士信任的一款既稳定又安全的内核。

作为移动计算环境的基础,Linux 内核为 Android 提供了一些关键的安全功能,其中包括:

  • 基于用户的权限模式
  • 进程隔离
  • 用于实现安全 IPC 的可扩展机制
  • 能够移除内核中不必要的和可能不安全的部分

作为一种多用户操作系统,Linux 内核的一个基本安全目标是将用户资源彼此隔离开来。Linux 的安全理念是防范用户资源之间相互侵扰,它能够:

  • 防止用户 A 读取用户 B 的文件
  • 确保用户 A 不会占用用户 B 的内存
  • 确保用户 A 不会占用用户 B 的 CPU 资源
  • 确保用户 A 不会占用用户 B 的设备(例如,电话、GPS、蓝牙)

应用沙盒

Android 的应用安全性是由应用沙盒(它可将不同的应用分隔开来,并保护应用和系统免受恶意应用的攻击)强制实施的。如需了解详情,请参阅应用沙盒

system 分区和安全模式

各种受完整性保护的分区包含 Android 的内核,以及操作系统库、应用运行时、应用框架和应用。该分区设为了只读分区。当用户将设备启动到安全模式时,第三方应用可由设备所有者手动启动,但不会默认启动。

文件系统权限

在 UNIX 风格的环境中,文件系统权限可确保一个用户不能更改或读取另一个用户的文件。在 Android 中,每个应用都以自己的用户身份运行。除非开发者明确地与其他应用共享文件,否则一个应用不能读取或更改另一个应用创建的文件。

安全增强型 Linux

Android 使用安全增强型 Linux (SELinux) 来实施访问控制策略并针对进程建立强制访问控制 (mac) 机制。如需详细信息,请参阅 Android 中的安全增强型 Linux

启动时验证

Android 7.0 及更高版本支持严格强制执行的启动时验证,这意味着遭到入侵的设备将无法启动。启动时验证功能旨在保证设备软件(从硬件信任根直到 system 分区)的完整性。在启动过程中,无论是在哪个阶段,都会在进入下一个阶段之前以加密形式先验证下一个阶段的完整性和正确性。
如需了解详情,请参阅启动时验证

加密

Android 提供了一系列加密 API 供应用使用,其中包括标准和常用加密基元(例如,AES、RSA、DSA 和 SHA)的实现。此外,Android 还提供了适用于更高级别协议(例如 SSL 和 HTTPS)的 API。

Android 4.0 中引入了 KeyChain 类,以便应用使用系统凭据存储空间来存储私钥和证书链。

获取设备的 root 权限

默认情况下,在 Android 上,只有内核和一小部分核心服务能够以 root 权限运行。SELinux 仍会限制以 root 身份运行的用户空间进程。启动时验证功能可防止具有 root 权限的用户或服务永久修改操作系统。

能够修改自己的 Android 设备对于使用 Android 平台的开发者来说非常重要。在许多 Android 设备上,用户都可以解锁引导加载程序,以便安装替代操作系统。这些替代操作系统可能会允许所有者获得 root 权限,以便他们调试应用和系统组件,或者使用 Android API 未提供给应用的功能。

在某些设备上,能够亲手控制设备并拥有 USB 线的用户可以安装能够向其提供 root 权限的新操作系统。为了保护所有现有用户数据免遭入侵,引导加载程序解锁机制要求引导加载程序在解锁期间清空所有现有用户数据。利用内核 bug 或安全漏洞获得 root 访问权限后,可以绕过这种保护机制。

使用存储在设备上的密钥对数据进行加密的做法并不能防止已取得 root 权限的设备上的根用户访问应用数据。应用可以使用存储在设备之外的密钥(例如,存储在服务器上的密钥,或用户密码)进行加密,从而添加一道数据保护屏障。在没有密钥的情况下,这种方法可以提供临时保护,但应用迟早要获取密钥来进行解密,此时根用户也就可以取得相应密钥了。

一种更强大的防止根用户获取数据的方式是使用硬件解决方案。原始设备制造商 (OEM) 可以选择实现能够限制访问特定类型的内容的硬件解决方案,例如,适用于视频播放的 DRM 解决方案,或适用于 Google 钱包的 NFC 相关可信存储设备。如果设备丢失或被盗,存储加密功能可确保在不知道用户锁屏凭据的情况下无法访问用户数据。

用户安全功能

存储加密

CDD 要求,对于所有发布时搭载 Android 10 或更高版本的设备,以及大多数发布时搭载 Android 6.0 或更高版本的设备,这些设备必须在用户开箱后启用存储加密功能。

Android 当前的存储加密实现是文件级加密结合元数据加密。文件级加密会以透明的方式加密用户数据分区中的文件内容和名称,并对不同目录使用不同的密钥。这种加密方式可以为每个用户(包括已设置工作资料的用户)提供凭据加密存储空间和设备加密存储空间目录。

元数据加密是对文件级加密的补充。这种加密方式会加密用户数据分区中尚未通过文件级加密进行加密的所有块。该加密方式使用的密匙未绑定到任何用户的锁屏凭据,但仍受到启动时验证功能的保护。

锁屏凭据保护

Android 可以配置为先验证用户提供的锁屏凭据(PIN 码、密码或图案),然后再提供对设备的访问权限。除了防止未经授权使用设备外,锁屏凭据还可以保护凭据加密数据的加密密钥。 设备管理员可以要求使用锁屏凭据和/或设置凭据复杂度规则。

设备管理

Android 2.2 及更高版本提供 Android Device Administration API,该 API 在系统级别提供设备管理功能。例如,内置的 Android 电子邮件应用可以使用该 API 来改善 Exchange 支持。通过该电子邮件应用,Exchange 管理员可以跨设备强制执行锁屏凭据政策(字母数字密码或数字 PIN 码都算作凭据)。管理员还可以远程清除(即恢复出厂默认设置)丢失或被盗手机上的数据。

除了 Android 系统自带的应用,提供设备管理解决方案的第三方也可使用该 API。如需详细了解该 API,请参阅设备管理