Android系统的安全问题 - Android的启动时验证

发布于:2025-03-29 ⋅ 阅读:(34) ⋅ 点赞:(0)

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)
内核 验证 systemvendor 等分区 DM-verity(基于哈希的验证)
Android 系统 检查系统完整性(如 SELinux、APK 签名) 通过 initfs_mgr 实现

3. Verified Boot 的关键技术

(1)Android Verified Boot (AVB)

  • 作用:Google 设计的标准验证协议,用于 Bootloader 验证 boot.img 和系统分区。
  • 主要机制
    • 分区哈希验证vbmeta 分区存储各分区的哈希值或签名。
    • 公钥验证:Bootloader 使用设备内置公钥验证 vbmeta 签名。
    • A/B 无缝更新支持:确保系统更新后仍能通过验证。
  • 三种验证模式
    • enforcing(严格模式):验证失败则拒绝启动。
    • logging(日志模式):仅记录验证错误,仍允许启动(用于调试)。
    • disabled(禁用模式):不验证(仅用于开发设备)。

(2)DM-verity

  • 作用:在内核层验证 systemvendor 等只读分区的完整性。
  • 原理
    • 分区被划分为多个 4KB 块,每个块对应一个哈希值(存储在 hashtree 中)。
    • 启动时内核验证哈希树,运行时按需检查访问的块是否被篡改。
  • 防篡改能力:如果攻击者修改系统文件,DM-verity 会检测到哈希不匹配并拒绝读取。

(3)Bootloader 锁定(Locked Bootloader)

  • 作用:防止未签名的镜像被刷入设备(如自定义 ROM)。
  • 用户影响
    • 锁定状态:仅允许加载官方签名镜像(OEM 密钥)。
    • 解锁状态:可刷入第三方镜像(但会触发 Verified Boot 失败警告)。

4. Verified Boot 的启动流程

  1. Power-On → ROM Bootloader

    • 芯片内置的只读代码(如高通 PBL)加载并验证 Bootloader(如 abl.elf)。
  2. Bootloader → vbmeta 验证

    • Bootloader 读取 vbmeta 分区,验证其签名(使用设备公钥)。
    • 检查 boot.imgsystem 等分区的哈希是否匹配。
  3. 内核启动 → DM-verity 初始化

    • 内核挂载 system 分区时,加载 hashtree 并启用实时验证。
  4. 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)共同构建了从启动到运行的完整防护体系。


网站公告

今日签到

点亮在社区的每一天
去签到