1. 课程导入
在移动终端安全体系中,Android 安全启动与可信链集成是连接硬件信任根、引导加载程序、系统内核与上层应用的关键安全基础设施。本课程面向 Android 系统开发、终端安全、系统集成与安全测试人员,围绕“从芯片上电到系统服务可用”的完整启动过程,讲解如何建立一条可验证、可度量、可传递的信任链,并最终把信任状态传递给 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 框架的信任传递
下图给出本节最核心的知识框架:左侧是启动阶段,右侧是每一阶段建立的信任对象与验证手段。可以看到,信任不是一次性完成的,而是沿着“硬件→固件→引导程序→内核→系统分区→框架服务”逐级传递。
三、方法流程:一次完整启动中的验证动作
以高通平台为例,一次典型启动会经历如下验证动作。理解这些动作的顺序,是后续排障与集成的基础。
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 密钥。
六、学习路径建议
- 先建立概念地图:信任根、可信链、度量、验证、证明。
- 再逐级拆解启动阶段:BootROM、SPL、ABL、Kernel、init、Framework。
- 然后动手实践:使用 avbtool 生成 vbmeta,配置 dm-verity,观察启动状态。
- 最后进入集成与排障:OTA、回滚保护、KeyStore 绑定与远程证明。