Android 启动时验证(Verified Boot)
Android 的 启动时验证(Verified Boot) 是一项关键安全机制,用于确保设备启动过程中加载的所有系统镜像(如 Bootloader、内核、系统分区)未被篡改,防止恶意软件植入或 Root 攻击。其核心思想是 逐级验证,从硬件信任根开始,直到 Android 系统完全启动。
参考:Google官方文档 Android的启动时验证
1. Verified Boot 的核心目标
- 完整性检查:验证每个启动阶段的固件和系统镜像是否未被修改。
- 防回滚保护:防止攻击者降级系统到存在漏洞的旧版本。
- 可信链建立:从硬件信任根(Root of Trust)到 Android 系统,形成完整的信任链。
2. Verified Boot 的信任链(Chain of Trust)
Android 的启动验证是一个 逐级验证 的过程,依赖以下关键组件:
启动阶段 | 验证内容 | 验证方式 |
---|---|---|
硬件 Root of Trust | 设备唯一密钥(如熔断式密钥) | 由芯片厂商固化,不可更改 |
Bootloader | 验证 boot.img (内核 + initramfs) |
使用设备密钥签名验证(如 AVB) |
内核 | 验证 system 、vendor 等分区 |
DM-verity(基于哈希的验证) |
Android 系统 | 检查系统完整性(如 SELinux、APK 签名) | 通过 init 和 fs_mgr 实现 |
3. Verified Boot 的关键技术
(1)Android Verified Boot (AVB)
- 作用:Google 设计的标准验证协议,用于 Bootloader 验证
boot.img
和系统分区。 - 主要机制:
- 分区哈希验证:
vbmeta
分区存储各分区的哈希值或签名。 - 公钥验证:Bootloader 使用设备内置公钥验证
vbmeta
签名。 - A/B 无缝更新支持:确保系统更新后仍能通过验证。
- 分区哈希验证:
- 三种验证模式:
enforcing
(严格模式):验证失败则拒绝启动。logging
(日志模式):仅记录验证错误,仍允许启动(用于调试)。disabled
(禁用模式):不验证(仅用于开发设备)。
(2)DM-verity
- 作用:在内核层验证
system
、vendor
等只读分区的完整性。 - 原理:
- 分区被划分为多个 4KB 块,每个块对应一个哈希值(存储在
hashtree
中)。 - 启动时内核验证哈希树,运行时按需检查访问的块是否被篡改。
- 分区被划分为多个 4KB 块,每个块对应一个哈希值(存储在
- 防篡改能力:如果攻击者修改系统文件,DM-verity 会检测到哈希不匹配并拒绝读取。
(3)Bootloader 锁定(Locked Bootloader)
- 作用:防止未签名的镜像被刷入设备(如自定义 ROM)。
- 用户影响:
- 锁定状态:仅允许加载官方签名镜像(OEM 密钥)。
- 解锁状态:可刷入第三方镜像(但会触发 Verified Boot 失败警告)。
4. Verified Boot 的启动流程
Power-On → ROM Bootloader
- 芯片内置的只读代码(如高通 PBL)加载并验证 Bootloader(如
abl.elf
)。
- 芯片内置的只读代码(如高通 PBL)加载并验证 Bootloader(如
Bootloader →
vbmeta
验证- Bootloader 读取
vbmeta
分区,验证其签名(使用设备公钥)。 - 检查
boot.img
、system
等分区的哈希是否匹配。
- Bootloader 读取
内核启动 → DM-verity 初始化
- 内核挂载
system
分区时,加载hashtree
并启用实时验证。
- 内核挂载
Android 启动 →
init
检查init
进程验证关键文件(如selinux
策略)的完整性。- 如果使用
fs-verity
(文件级验证),进一步检查 APK 签名。
5. 安全增强:Android 13+ 的改进
- Init Boot 验证:在
init
阶段验证启动脚本和关键配置文件。 - Fs-verity:文件级完整性验证(用于 APK、系统配置文件等)。
- 动态分区验证:支持动态分区的哈希验证(如
super
分区)。
6. 开发者相关
(1)调试 Verified Boot
查看验证状态:
adb shell getprop ro.boot.verifiedbootstate
- 返回
green
(验证通过)、yellow
(解锁 Bootloader)、red
(验证失败)。
- 返回
强制进入
logging
模式(仅调试):fastboot set_active other
(2)自定义 ROM 兼容性
- 如果设备启用 AVB,刷入第三方 ROM 需满足:
- 使用设备支持的签名密钥(如社区签名密钥)。
- 或解锁 Bootloader(但会降低安全性)。
7. 攻击与防护
已知攻击方式
- Bootloader 漏洞:利用未修补的漏洞跳过验证(如 CVE-2022-20452)。
- 物理攻击:通过 JTAG 或芯片拆解绕过验证(需高端设备)。
防护措施
- 防回滚(Anti-Rollback):熔断计数器阻止降级到旧版本。
- 安全芯片(如 Titan M):存储根密钥,防止软件层攻击。
8. 总结
关键点 | 说明 |
---|---|
硬件信任根 | 芯片厂商固化密钥,确保 Bootloader 可信。 |
AVB(Verified Boot) | Bootloader 验证 vbmeta ,确保内核和系统分区未被篡改。 |
DM-verity | 内核实时验证 system 分区的完整性。 |
用户可见影响 | 解锁 Bootloader 会触发警告,部分功能(如银行应用)可能禁用。 |
Verified Boot 是 Android 设备安全的基石,与 TEE(如 Trusty)、加密(如 FBE)共同构建了从启动到运行的完整防护体系。