Android Mainline 模块透明度

为了进一步提高对 Android 操作系统的信任度,我们承诺在透明度日志中列出通过 Google Play 作为更新提供的每个 Android 操作系统模块(称为 Mainline)。 我们会发布透明度日志,以验证我们对这些模块的声明。预安装的模块不会明确列出,因为它们已包含在 Pixel 二进制文件透明度中。

威胁模型

透明度系统可用于检测供应链攻击,从而阻止此类攻击。下面我们通过一些示例进行说明。

假设攻击者恶意修改 Mainline 模块(可以是 APEXAPK 文件),甚至设法使用通过 Google Play 分发时使用的签名 密钥对其进行签名。 任何收到可疑模块的人都可以查询二进制文件透明度日志,以验证模块的真实性。 他们会发现 Google 尚未将相应的模块元数据添加到日志中,因此会知道不要信任遭到入侵的操作系统模块。

由于向日志发布与使用签名进行发布是分开的过程,因此这不仅提高了攻击者入侵密钥的门槛,还提高了其他方面的门槛。

虽然我们计划使用标准见证协议将此日志集成到见证人公共网络中 ,但我们鼓励外部独立方监控此 公开日志 的完整性。这些方可以证明日志的仅追加属性,并报告任何篡改行为。

此类透明度系统的存在以及攻击的可发现性提高,有助于阻止恶意活动。 如果操作系统模块遭到入侵,但用户只信任日志中的模块,则需要公开遭到入侵的模块。 这会提高发现遭到入侵的模块的可能性,并可以采取措施来移除其分发。

版权主张方模型

版权主张方模型是一个框架,用于在 可验证的系统中 定义角色和工件。对于 Android Mainline 模块透明度,我们声明的是,此日志中记录的模块文件的哈希值代表特定版本的官方 Android 模块,供公众使用。

  • ClaimMainlineModule: (I, Google, claim that $hashModule is for $mainlineModule),其中:
    • $hashModule 是特定版本的 $mainlineModule 的操作系统模块文件的加密哈希值(例如 SHA256)。
    • $mainlineModule 是构成操作系统模块的 APEX 或 Android 软件包 (APK),由 Google 创建、签名和分发。

任何拥有 $mainlineModule 副本的人都可以验证此声明。 验证页面提供了此过程的详细 说明。 这些步骤适用于常规 APK 和 Mainline 模块(可以是 APK 或 APEX 文件)。

日志内容

当 Google 发布新版本的 Mainline 模块时, 它会在 Mainline 模块透明度日志中添加相应的条目。

此日志中的每个条目都包含四条元数据:

  1. 已签名的 Android Mainline 模块的 APK 或 APEX 的哈希值。 这是整个文件的 SHA256 摘要的十六进制字符串。
  2. 上述哈希类型的说明。这是一个字符串。
  3. 模块的软件包名称。这是一个字符串。
  4. 模块的版本号 (versionCode)。这是一个非零整数。

日志条目的格式是将这四条信息与换行符 (\n) 连接起来,如下所示:

hash\nhash_description\npackage_name\npackage_version\n

由于 Mainline 模块可以是 APK 或 APEX 文件,因此哈希说明可以是 SHA256(APK)SHA256(APEX)