Android 安全团队负责管理在 Android 平台中以及与 Android 设备捆绑在一起的众多核心 Android 应用中发现的安全漏洞。
Android 安全团队会通过内部研究找出安全漏洞,还会对第三方报告的 bug 采取应对措施。外部 bug 的来源包括:通过漏洞表单报告的问题、已发布和预发布的学术研究、上游开源项目维护人员、来自设备制造商合作伙伴的通知,以及博客或社交媒体中发布的已公开披露的问题。
举报安全问题
任何开发者、Android 用户或安全研究人员都可以通过漏洞表单将潜在安全问题告知 Android 安全团队。
外部人员无法查看标记为安全问题的 bug,不过在问题经过评估或得到解决后,这些 bug 最终可能会对外公开。如果您打算提交旨在解决安全问题的补丁或兼容性测试套件 (CTS) 测试,请将其附加到 bug 报告中,然后等待我们的回复,得到我们的回复后再将代码上传到 AOSP。
待分类的错误
在处理安全漏洞时,第一项任务是确定 bug 的严重程度以及受影响的 Android 组件。严重程度决定问题的优先级,受影响的组件决定由谁来修复 bug、谁将会收到通知以及如何将修复程序部署给用户。
上下文类型
下表介绍了硬件和软件安全上下文的定义。 上下文可以按其通常处理的数据的敏感性来定义,也可以按它的运行区域来定义。并非所有安全上下文都适用于所有系统。下表按照权限从小到大的顺序排列。
上下文类型 | 类型定义 |
---|---|
受限上下文 |
一种受限的执行环境,只有最少的权限。 例如,在沙盒化环境中处理不可信数据的可信应用。 |
非特权上下文 |
非特权代码所预期的典型执行环境。 例如,在具有 untrusted_app_all 属性的 SELinux 域中运行的 Android 应用。
|
特权上下文 |
特权执行环境,可能有权获得提升的权限,可处理多种用户个人身份信息,并且/或者能够保持系统完整性。 例如,功能会被 SELinux untrusted_app 域禁止或具有 privileged|signature 权限的 Android 应用。
|
操作系统内核 |
符合以下条件的功能:
|
可信硬件基 (THB) | 独立的硬件组件(通常位于 SoC 上),用于提供对设备的核心用例至关重要的功能(例如移动网络基带、DSP、GPU 和机器学习处理器)。 |
引导加载程序链 | 一种组件,能够在设备启动时配置设备,然后将控制权传递给 Android OS。 |
可信执行环境 (TEE) | 一种组件,甚至可以抵御恶意操作系统内核的攻击(例如 TrustZone 和 Hypervisor [如 pKVM],它们可以保护虚拟机免受操作系统内核的影响)。 |
安全隔区/安全元件 (SE) |
一种可选硬件组件,旨在抵御设备上其他所有组件的攻击以及物理攻击,具体定义请参见安全元件简介。 这包括某些 Android 设备中存在的 Titan-M 芯片。 |
严重程度
bug 的严重程度通常能够反映 bug 被成功利用后可能造成的潜在危害。可以按照以下条件判断严重程度。
评分 | 被成功利用的后果 |
---|---|
严重 |
|
高 |
|
中 |
|
低 |
|
可忽略不计的安全影响 (NSI) |
|
分级调节方式
尽管通常可以轻松确定安全漏洞的严重程度,但分级可能会因具体情况而异。
原因 | 效果 |
---|---|
需要作为特权上下文运行才能执行攻击(不适用于 TEE、SE 以及 Hypervisor [如 pKVM]) | 严重程度降低 1 级 |
漏洞特有的详细信息限制了相应问题的影响大小 | 严重程度降低 1 级 |
绕过需要直接从设备所有者获得生物识别信息的生物识别验证 | 严重程度降低 1 级 |
编译器或平台配置缓解了源代码中的漏洞 | 如果底层漏洞的严重程度为“中”或更高,则实际严重程度为“中” |
需要实际接触设备内部,如果设备已关机或开机后尚未解锁,则仍然可以访问 | 严重程度降低 1 级 |
在设备处于开机状态且之前已解锁时需要实际接触设备内部 | 严重程度降低 2 级 |
需要解锁引导加载程序链才能进行本地攻击 | 不高于“低” |
需要当前在设备上启用了开发者模式或任何持久性开发者模式设置(且本身不是开发者模式中的 bug)才能进行本地攻击 | 不高于“低” |
如果任何 SELinux 域都无法在 Google 提供的 SEPolicy 下执行操作 | 可忽略不计的安全影响 |
本地攻击、邻近攻击以及远程攻击对比
远程攻击途径指攻击者可以在不安装应用或不实际接触设备的情况下利用的 bug。这包括因浏览网页、阅读电子邮件、接收短信或连接到恶意网络而触发的 bug。
邻近攻击途径被视为远程攻击途径。这包括只能被实际接近目标设备的攻击者利用的 bug,例如需要发送格式错误的 Wi-Fi 数据包或蓝牙数据包的 bug。我们将超宽带 (UWB) 和基于 NFC 的攻击视为邻近攻击,因此它们属于远程攻击。
本地攻击需要攻击者事先接触受害者。在假设的仅软件的示例中,这可以通过受害者安装的恶意应用或他们同意运行的免安装应用来实现。
已成功配对的设备(例如蓝牙配套设备)会被视为本地设备。我们会区分已配对的设备和正在参与配对流程的设备。
- 导致用户识别要配对的其他设备的能力(即身份验证能力)下降的 bug 被视为邻近 bug,因此属于远程 bug。
- 在配对流程中但在用户同意(即授权)之前发生的 bug 被视为邻近 bug,因此属于远程 bug。
- 在用户同意之后发生的 bug 会被视为本地 bug,即使配对最终失败也是如此。
物理攻击途径被视为本地攻击途径。这包括只能被实际接触到设备的攻击者利用的 bug,例如锁定屏幕中的 bug,或需要插入 USB 线的 bug。由于在插入 USB 后设备经常会处于解锁状态,因此无论设备是否需要解锁,需要 USB 连接的攻击的严重程度都是相同的。
网络安全
Android 假设所有网络都是恶意网络且可能会注入攻击或监视流量。虽然链路层安全保护机制(例如 Wi-Fi 加密)可以保护设备与其连接到的接入点之间的通信,但不会保护设备和与其通信的服务器之间的链中的其余链路。
相比之下,HTTPS 通常会对整个通信进行端到端保护,方法是在源位置对数据进行加密,只有在到达最终目标位置后才对数据进行解密和验证。正因如此,损害链路层网络安全的漏洞的严重程度分级低于 HTTPS/TLS 中的漏洞:对于互联网上的大部分通信而言,仅靠 Wi-Fi 加密是不够的。
生物识别身份验证
生物识别验证是一个具有挑战性的领域,即使是最好的系统,也可能会被近乎匹配的生物特征欺骗(请参阅 Android 开发者博客:Android 11 中的锁定屏幕和身份验证改进)。这些严重程度分级区分了两类攻击,旨在反映给最终用户带来的实际风险。
第一类攻击使攻击者能够以一种可泛化的方式绕过生物识别验证,而无需所有者提供高质量的生物识别数据。例如,如果攻击者可以在指纹传感器上放一块口香糖,它根据传感器上的残留物授予对设备的访问权限,这是攻击者可能会在任何易受攻击的设备上执行的一种简单攻击。不要求对设备的所有者有任何了解。鉴于这种攻击可泛化且可能会影响更多用户,因此会得到完整的严重程度分级(例如,“攻击者可以绕过锁定屏幕”的严重程度为“高”)。
另一类攻击通常涉及基于设备所有者的演示攻击手段(仿冒)。有时,这种生物识别信息相对容易获取(例如,如果某人在社交媒体上的个人资料照片足以骗过生物识别验证,则“攻击者可以绕过生物识别验证”会得到完整的严重程度分级)。但是,如果攻击者需要直接从设备所有者获取生物识别数据(例如,对他们的面孔进行红外扫描),这是一种足够有力的障碍,可以限制受攻击影响的人数,因此应用调节方式后严重程度降低 1 级。
SYSTEM_ALERT_WINDOW 和点按劫持
如需了解我们关于 SYSTEM_ALERT_WINDOW
和点按劫持的政策,请参阅 BugHunter University 的对安全没有影响的 bug 页面上的“非安全关键型屏幕上的点按劫持/叠加层 SYSTEM_ALERT_WINDOW 漏洞”部分。
Android Automotive OS 中的多用户安全模型
Android Automotive OS 采用不同于其他设备规格的多用户安全模型。每个 Android 用户意指一个与他人不同的自然人。例如,可以将一个临时访客用户分配给一个向车主借用车辆的朋友。为了适应此类使用情形,默认情况下,用户可以访问使用车辆所需的必要组件,例如 Wi-Fi 和移动网络设置。
受影响的组件
开发团队负责根据 bug 所在的组件来修复 bug。具体组件可能是 Android 平台的核心组件、原始设备制造商 (OEM) 提供的内核驱动程序,或 Pixel 设备上某个预加载的应用。
AOSP 代码中的错误由 Android 工程团队负责修复。严重程度为“低”的 bug、特定组件内的 bug 或者已经是众所周知的 bug 可以直接在已公开发布的 AOSP main 分支中进行修复;除此之外的其他 bug 都会先在我们的内部代码库中进行修复。
组件也是会影响用户如何获取更新的一种因素。如果是框架或内核存在的 bug,用户需要使用无线下载 (OTA) 的固件更新,每个 OEM 都需要推送此类更新。如果是 Google Play 中发布的应用或库(例如,Gmail、Google Play 服务或 WebView)存在的 bug,则可以通过 Google Play 向 Android 用户发送更新。
通知合作伙伴
在 Android 安全公告中公布已修复 AOSP 中的某个安全漏洞后,我们会将问题详细信息通知给 Android 合作伙伴,并提供相应的补丁。具体有哪些支持向后移植的版本,会随着每个新 Android 版本的发布而发生变化。如需查看支持的设备的列表,请与设备制造商联系。
向 AOSP 发布代码
如果安全 bug 发生在 AOSP 组件内,我们会先向用户发布 OTA 更新,然后再将修复推送到 AOSP。如果问题的严重程度为“低”,我们可能会先直接将修复提交到 AOSP main 分支,然后再通过 OTA 更新将其提供给设备。
接收 Android 更新
对 Android 系统的更新一般会通过 OTA 更新包提供给设备。这些更新可能来自生产相应设备的 OEM,也可能来自向相应设备提供服务的运营商。Google Pixel 设备更新由 Google Pixel 团队在相应更新通过运营商技术验收 (TA) 测试程序之后予以提供。Google 还会发布可以旁加载到设备的 Pixel 出厂映像。
更新 Google 服务
除了针对安全 bug 提供补丁之外,Android 安全团队还会审核安全 bug,确定是否有其他方式来保护用户。例如,Google Play 会扫描所有应用并移除任何试图利用安全 bug 的应用。对于通过 Google Play 之外的途径安装的应用,带有 Google Play 服务的设备可能还会使用验证应用功能来警告用户注意可能有害的应用。
其他资源
面向 Android 应用开发者的信息:https://developer.android.com
您可以从各个 Android 开放源代码和开发者网站上找到安全信息。最好从以下网址入手:
- https://source.android.com/docs/security
- https://developer.android.com/training/articles/security-tips
报告
Android 安全团队有时会发布报告或白皮书。如需了解详情,请参阅安全报告。