为了进一步提高对 Android 操作系统的信任度,我们承诺在透明度日志中列出通过 Google Play 作为更新提供的每个 Android 操作系统模块(称为 Mainline)。 我们会发布透明度日志,以验证我们对这些模块的声明。预安装的模块不会明确列出,因为它们已包含在 Pixel 二进制文件透明度中。
威胁模型
透明度系统可用于检测供应链攻击,从而阻止此类攻击。下面我们通过一些示例进行说明。
假设攻击者恶意修改 Mainline 模块(可以是 APEX 或 APK 文件),甚至设法使用通过 Google Play 分发时使用的签名 密钥对其进行签名。 任何收到可疑模块的人都可以查询二进制文件透明度日志,以验证模块的真实性。 他们会发现 Google 尚未将相应的模块元数据添加到日志中,因此会知道不要信任遭到入侵的操作系统模块。
由于向日志发布与使用签名进行发布是分开的过程,因此这不仅提高了攻击者入侵密钥的门槛,还提高了其他方面的门槛。
虽然我们计划使用标准见证协议将此日志集成到见证人公共网络中 ,但我们鼓励外部独立方监控此 公开日志 的完整性。这些方可以证明日志的仅追加属性,并报告任何篡改行为。
此类透明度系统的存在以及攻击的可发现性提高,有助于阻止恶意活动。 如果操作系统模块遭到入侵,但用户只信任日志中的模块,则需要公开遭到入侵的模块。 这会提高发现遭到入侵的模块的可能性,并可以采取措施来移除其分发。
版权主张方模型
版权主张方模型是一个框架,用于在 可验证的系统中 定义角色和工件。对于 Android Mainline 模块透明度,我们声明的是,此日志中记录的模块文件的哈希值代表特定版本的官方 Android 模块,供公众使用。
- ClaimMainlineModule: (I, Google, claim that
$hashModuleis for$mainlineModule),其中:
任何拥有 $mainlineModule 副本的人都可以验证此声明。
验证页面提供了此过程的详细
说明。
这些步骤适用于常规
APK 和 Mainline 模块(可以是 APK 或 APEX 文件)。
日志内容
当 Google 发布新版本的 Mainline 模块时, 它会在 Mainline 模块透明度日志中添加相应的条目。
此日志中的每个条目都包含四条元数据:
- 已签名的 Android Mainline 模块的 APK 或 APEX 的哈希值。 这是整个文件的 SHA256 摘要的十六进制字符串。
- 上述哈希类型的说明。这是一个字符串。
- 模块的软件包名称。这是一个字符串。
- 模块的版本号 (versionCode)。这是一个非零整数。
日志条目的格式是将这四条信息与换行符 (\n) 连接起来,如下所示:
hash\nhash_description\npackage_name\npackage_version\n
由于 Mainline 模块可以是 APK 或 APEX 文件,因此哈希说明可以是 SHA256(APK) 或 SHA256(APEX)。