| <html devsite><head> |
| <title>系统和内核安全</title> |
| <meta name="project_path" value="/_project.yaml"/> |
| <meta name="book_path" value="/_book.yaml"/> |
| </head> |
| <body> |
| <!-- |
| Copyright 2017 The Android Open Source Project |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <p>在操作系统级别,Android 平台不仅提供 Linux 内核的安全功能,而且还提供安全的进程间通信 (IPC) 机制,以便在不同进程中运行的应用之间安全通信。操作系统级别的这些安全功能旨在确保即使是原生代码也要受应用沙盒的限制。无论相应代码是自带应用行为导致的结果,还是利用应用漏洞导致的结果,系统都能防止违规应用危害其他应用、Android 系统或设备本身。要了解您可以采取哪些措施来增强设备的内核安全性,请参阅<a href="/devices/tech/config/kernel.html">内核配置</a>。要了解必需的设置,请参阅 <a href="/compatibility/cdd.html">Android 兼容性定义文档 (CDD)</a>。</p> |
| <h2 id="linux-security">Linux 安全</h2> |
| <p>Android 平台的基础是 Linux 内核。Linux 内核多年来得到了非常广泛的应用,在千百万对安全敏感的环境中都有它的身影。在历经无数攻击以及成千上万的开发者的不断研究和修复之后,Linux 已成为许多公司和安全专业人士信任的一款既稳定又安全的内核。</p> |
| <p>作为移动计算环境的基础,Linux 内核为 Android 提供了一些关键的安全功能,其中包括:</p> |
| <ul> |
| <li>基于用户的权限模式</li> |
| <li>进程隔离</li> |
| <li>用于实现安全 IPC 的可扩展机制</li> |
| <li>能够移除内核中不必要的和可能不安全的部分</li> |
| </ul> |
| <p>作为一种多用户操作系统,Linux 内核的一个基本安全目标是将用户资源彼此隔离开来。Linux 的安全理念是防范用户资源之间相互侵扰。因此,Linux 可以:</p> |
| <ul> |
| <li>防止用户 A 读取用户 B 的文件</li> |
| <li>确保用户 A 不会占用用户 B 的内存</li> |
| <li>确保用户 A 不会占用用户 B 的 CPU 资源</li> |
| <li>确保用户 A 不会占用用户 B 的设备(例如,电话、GPS、蓝牙)</li> |
| </ul> |
| <h2 id="the-application-sandbox">应用沙盒</h2> |
| <p>Android 的应用安全性是由应用沙盒(它可将不同的应用分隔开来,并保护应用和系统免受恶意应用的攻击)强制实施的。如需了解详情,请参阅<a href="/security/app-sandbox">应用沙盒</a>。</p> |
| <h2 id="system-partition-and-safe-mode">系统分区和安全模式</h2> |
| <p>系统分区包含 Android 的内核,以及操作系统库、应用运行时、应用框架和应用。该分区设为了只读分区。当用户将设备启动到安全模式时,第三方应用可由设备所有者手动启动,但不会默认启动。</p> |
| <h2 id="filesystem-permissions">文件系统权限</h2> |
| <p>在 UNIX 风格的环境中,文件系统权限可确保一个用户不能更改或读取另一个用户的文件。在 Android 中,每个应用都以自己的用户身份运行。除非开发者明确地与其他应用共享文件,否则一个应用不能读取或更改另一个应用创建的文件。</p> |
| <h2 id="se-linux">安全增强型 Linux</h2> |
| <p>Android 使用安全增强型 Linux (SELinux) 来实施访问控制策略并针对进程建立强制访问控制 (mac) 机制。如需详细信息,请参阅 <a href="/security/selinux/index.html">Android 中的安全增强型 Linux</a>。</p> |
| <h2 id="verified-boot">验证启动</h2> |
| <p> |
| Android 6.0 及更高版本支持验证启动功能和 device-mapper-verity。验证启动功能旨在保证设备软件(从硬件信任根直到系统分区)的完整性。在启动过程中,无论是在哪个阶段,都会在进入下一个阶段之前以加密形式先验证下一个阶段的完整性和正确性。 |
| </p> |
| <p> |
| Android 7.0 及更高版本支持严格强制执行的验证启动,这意味着遭到入侵的设备将无法启动。 |
| </p> |
| <p> |
| 如需更多详细信息,请参阅<a href="/security/verifiedboot/index.html">验证启动</a>。 |
| </p> |
| |
| <h2 id="crypto">加密</h2> |
| <p>Android 提供了一系列加密 API 供应用使用,其中包括标准和常用加密基元(例如,AES、RSA、DSA 和 SHA)的实现。此外,Android 还提供了适用于更高级别协议(例如,SSL 和 HTTPS)的 API。</p> |
| <p>Android 4.0 中引入了 <a href="http://developer.android.com/reference/android/security/KeyChain.html">KeyChain</a> 类,以便应用使用系统凭据存储空间来存储私钥和证书链。</p> |
| <h2 id="rooting-devices">获取设备的 Root 权限</h2> |
| <p>默认情况下,在 Android 上,只有内核和一小部分核心应用能够以 Root 权限运行。Android 不会阻止具有 Root 权限的用户或应用修改操作系统、内核或任何其他应用。一般来说,Root 对所有应用和所有应用数据拥有完整访问权限。如果用户在 Android 设备上更改权限来向应用授予 Root 访问权限,那么在面对恶意应用以及潜在应用缺陷时,安全风险会更大。</p> |
| <p>能够修改自己的 Android 设备对于使用 Android 平台的开发者来说非常重要。在许多 Android 设备上,用户都可以解锁引导加载程序,以便安装替代操作系统。这些替代操作系统可能会允许所有者获得 Root 访问权限,以便他们调试应用和系统组件,或者使用 Android API 未提供给应用的功能。</p> |
| <p>在某些设备上,能够亲手控制设备并拥有 USB 数据线的用户可以安装能够向其提供 Root 权限的新操作系统。为了保护所有现有用户数据免遭入侵,引导加载程序解锁机制要求引导加载程序在解锁期间清空所有现有用户数据。利用内核错误或安全漏洞获得 Root 访问权限后,可以绕过这种保护机制。</p> |
| <p>使用存储在设备上的密钥对数据进行加密的做法并不能防止 Root 用户访问应用数据。应用可以使用存储在设备之外的密钥(例如,存储在服务器上的密钥,或用户密码)进行加密,从而添加一道数据保护屏障。在没有密钥的情况下,这种方法可以提供临时保护,但应用迟早要获取密钥来进行解密,此时 Root 用户也就可以取得相应密钥了。</p> |
| <p>一种更强大的防止 Root 用户获取数据的方式是使用硬件解决方案。OEM 可以选择实现可限制特定类型的内容的访问权限的硬件解决方案,例如,适用于视频播放的 DRM 解决方案或适用于 Google 电子钱包的 NFC 相关可信存储空间。</p> |
| <p>如果设备丢失或被盗,Android 设备上的全文件系统加密功能会用设备密码来保护加密密钥,这样一来,修改启动加载程序或操作系统的做法将不足以在没有用户设备密码的情况下访问用户数据。</p> |
| <h2 id="user-security">用户安全功能</h2> |
| <h3 id="filesystem-encryption">文件系统加密</h3> |
| <p>Android 3.0 及更高版本提供全文件系统加密功能,因此所有用户数据都可以在内核中进行加密。</p> |
| <p>Android 5.0 及更高版本支持<a href="/security/encryption/full-disk.html">全盘加密</a>。全盘加密功能旨在用一个密钥(由用户的设备密码加以保护)来保护设备的整个用户数据分区。在启动时,用户必须先提供其凭据,然后才能访问磁盘的任何部分。 |
| </p> |
| <p> |
| Android 7.0 及更高版本支持<a href="/security/encryption/file-based.html">文件级加密</a>。采用文件级加密时,可以使用不同的密钥对不同的文件进行加密,并且可以对这些文件进行单独解密。 |
| </p> |
| |
| <p>如需详细了解如何实现文件系统加密,请参阅<a href="/security/encryption/index.html">加密</a>部分。</p> |
| <h3 id="password-protection">密码保护</h3> |
| <p>Android 可以配置为先验证用户提供的密码,然后再提供对设备的访问权限。除了防止未经授权使用设备外,该密码还可以保护用于进行全文件系统加密的加密密钥。</p> |
| <p>设备管理员可以要求使用密码和/或设置密码复杂度规则。</p> |
| <h2 id="device-administration">设备管理</h2> |
| <p>Android 2.2 及更高版本提供 Android Device Administration API,该 API 在系统级别提供设备管理功能。例如,内置的 Android 电子邮件应用可以使用该 API 来改善 Exchange 支持。在此情况下,Exchange 管理员可以跨设备强制执行密码政策(字母数字密码或数字 PIN 码都算作密码)。管理员还可以远程清除(即恢复出厂默认设置)丢失或被盗手机上的数据。</p> |
| <p>除了 Android 系统自带的应用,提供设备管理解决方案的第三方也可使用该 API。如需详细了解该 API,请参阅<a href="https://developer.android.com/guide/topics/admin/device-admin.html">设备管理</a>。</p> |
| |
| </body></html> |