1. 课程导入

在移动终端安全体系中,Android 安全启动与可信链集成是连接硬件信任根、引导加载程序、系统内核与上层应用的关键安全基础设施。本课程面向 Android 系统开发、终端安全、系统集成与安全测试人员,围绕“从芯片上电到系统服务可用”的完整启动过程,讲解如何建立一条可验证、可度量、可传递的信任链,并最终把信任状态传递给 Android 的验证启动、密钥库、生物识别与远程证明等安全能力。

学习本课程后,你应当能够:理解信任根、可信链、度量与验证的区别;掌握 Android 启动各阶段的信任传递关系;能够阅读并分析启动日志中的验证状态;能够设计一个从 BootROM 到 Android 框架层的可信链集成方案;并能够定位启动失败、验证失败与回滚保护相关的典型问题。

一、核心概念:信任根、可信链与验证启动

安全启动的本质是“信任必须从不可变的硬件开始”。芯片内部固化的 BootROM 代码是整条链的信任根(Root of Trust, RoT)。它首先验证下一级引导程序(如 SPL、BL1/BL2、ABL)的签名,验证通过后才把控制权交出。每一级都验证下一级,形成一条逐级传递的可信链(Chain of Trust)。

需要区分三个容易混淆的概念:度量(Measurement)是把代码或数据做哈希并记录,用于后续证明;验证(Verification)是用公钥校验签名,决定是否允许执行;证明(Attestation)是把度量结果用设备私钥签名后交给远端,证明设备当前状态。Android 的验证启动(Verified Boot)在传统安全启动之上,进一步引入 dm-verity 对系统分区做块级完整性校验,并通过 AVB(Android Verified Boot)元数据描述分区哈希与签名。

二、整体框架:从 BootROM 到 Android 框架的信任传递

下图给出本节最核心的知识框架:左侧是启动阶段,右侧是每一阶段建立的信任对象与验证手段。可以看到,信任不是一次性完成的,而是沿着“硬件→固件→引导程序→内核→系统分区→框架服务”逐级传递。

Android 安全启动与可信链集成框架 启动阶段 信任对象与验证手段 BootROM 硬件信任根 RoT SPL / BL1 / BL2 一级引导程序 ABL / U-Boot Android 引导加载程序 Linux Kernel 内核与 initramfs system / vendor dm-verity 校验分区 Android Framework Keystore / Gatekeeper 固化公钥哈希,验证 SPL 签名 不可篡改的信任起点 验证 ABL 镜像签名与版本 防回滚版本号比对 校验 boot / dtbo / vbmeta AVB 元数据与公钥 dm-verity 建立哈希树 块级完整性校验 只读挂载,拒绝篡改分区 验证失败进入受限模式 KeyMint / KeyStore 绑定信任状态 密钥仅在可信状态可用 可信链集成关键能力 安全启动开关与熔丝 OEM 解锁状态管理 AVB 签名与元数据 avbtool 生成 vbmeta dm-verity 与 FEC 哈希树与纠错数据 启动状态上报 green / yellow / orange 远程证明与密钥绑定 Key Attestation 回滚保护与版本控制 rollback index

三、方法流程:一次完整启动中的验证动作

以高通平台为例,一次典型启动会经历如下验证动作。理解这些动作的顺序,是后续排障与集成的基础。

BootROM  -> 校验 SPL 签名(固化公钥哈希)
SPL      -> 校验 BL1/BL2 与 TZ 镜像
ABL      -> 读取 vbmeta,校验 boot/dtbo/vendor_boot
Kernel   -> 解析 dm-verity 表,建立哈希树
init     -> 只读挂载 system/vendor,触发 fs_mgr
Framework-> 读取 ro.boot.verifiedbootstate,绑定 KeyStore

在集成时,通常需要关注以下参数与状态:

参数 / 状态 含义 典型取值
ro.boot.verifiedbootstate 当前验证启动状态 green / yellow / orange
ro.boot.flash.locked 引导加载程序是否锁定 0 / 1
ro.boot.veritymode dm-verity 工作模式 enforcing / logging / disabled
rollback index 防回滚版本号 单调递增整数
vbmeta 公钥 校验分区元数据的公钥 PEM / DER

四、案例与场景:从“能开机”到“可信开机”

某定制终端项目最初只做了 BootROM 到 ABL 的签名校验,系统可以正常启动,但安全测试发现:攻击者可以刷入修改过的 system 分区,仍能进入系统。原因在于缺少 dm-verity 与 vbmeta 校验。集成 AVB 后,system 分区被只读挂载,任何块级篡改都会触发验证失败,设备进入受限模式并上报 orange 状态。

另一个常见场景是 OTA 升级。升级包必须携带新的 vbmeta 与 rollback index。如果新版本 rollback index 小于设备当前值,引导程序会拒绝启动,防止降级攻击。这一机制与 A/B 无缝升级配合时,需要确保 slot 元数据与 vbmeta 同步更新。

建议在开发阶段先使用 avbtool verify_image 与 adb shell getprop ro.boot.verifiedbootstate 建立基线,再逐步开启 enforcing 模式,避免一次性开启导致无法定位问题。

五、常见误区与复盘

  • 误区一:把安全启动等同于验证启动。安全启动关注引导程序签名,验证启动还覆盖系统分区完整性与运行时状态上报。
  • 误区二:认为解锁后就没有信任链。解锁设备仍可运行,但状态变为 orange,密钥与证明能力会受限,信任链并未消失,而是被降级。
  • 误区三:忽略回滚保护。只校验签名不校验版本,攻击者可以刷回存在漏洞的旧版本。
  • 误区四:只验证不度量。没有度量就无法做远程证明,也无法把启动状态绑定到 KeyStore 密钥。
调试阶段若关闭 dm-verity 或设置 veritymode=disabled,务必在量产版本中恢复 enforcing,否则系统分区可被任意篡改,可信链在系统层断裂。

六、学习路径建议

  1. 先建立概念地图:信任根、可信链、度量、验证、证明。
  2. 再逐级拆解启动阶段:BootROM、SPL、ABL、Kernel、init、Framework。
  3. 然后动手实践:使用 avbtool 生成 vbmeta,配置 dm-verity,观察启动状态。
  4. 最后进入集成与排障:OTA、回滚保护、KeyStore 绑定与远程证明。