Android Verified Boot (AVB) 的原理和作用


标签: AVB; Android Verified Boot ;Android;安卓启动保护

Android Verified Boot (AVB) 的原理和作用

原理

Android Verified Boot (AVB) 是 Android 平台上的一项安全特性,旨在确保设备启动过程中加载的每个阶段的完整性和真实性。AVB 的工作原理可以分为以下几个关键步骤:

  1. 签名与验证

    • 每个系统映像(如 boot.img, system.img 等)在构建时都会生成一个包含哈希值和签名信息的 vbmeta.img 文件。这个文件由私钥签名,公钥存储在设备的安全区域中,用于在启动时验证这些映像。
    • 当设备启动时,启动加载程序(bootloader)使用存储的公钥来验证 vbmeta.img 的签名。验证通过后,继续验证包含在 vbmeta.img 中的每个分区的哈希值和哈希树描述符。
  2. 哈希树(Hashtree)与 dm-verity

    • 为了保证文件系统的完整性,AVB 使用哈希树结构(Merkle Tree)来验证文件系统的每个块。这一机制被称为 dm-verity
    • 哈希树的根哈希(root hash)存储在 vbmeta.img 中,并在启动时通过公钥签名验证。这确保了文件系统在运行过程中没有被篡改。
  3. 回滚保护(Rollback Protection)

    • AVB 包含回滚保护机制,以防止设备降级到存在已知漏洞的旧版本软件。每个 vbmeta 结构包含一个回滚索引(rollback index),设备会存储最后一次成功启动的最高索引值。如果新镜像的索引值低于已存储的值,启动将失败。
作用

AVB 的主要作用是保护设备启动过程中的完整性和真实性,防止加载未经授权或被篡改的系统映像。具体来说:

  1. 数据完整性保护

    • 通过验证每个系统映像的哈希值,确保这些映像在构建后没有被篡改。
    • 使用 dm-verity 验证文件系统的每个块,防止运行时的数据篡改。
  2. 防止恶意软件

    • 确保只有经过签名验证的代码能够在设备启动过程中执行,从而防止恶意软件在启动过程中注入或替换系统组件。
  3. 回滚保护

    • 通过回滚索引机制,防止设备降级到存在已知漏洞的旧版本软件,增强设备的整体安全性。

如何保护数据

AVB 通过以下机制保护数据:

  1. 使用公钥基础设施(PKI)进行签名和验证

    • 每个系统映像的签名由私钥生成,设备启动时使用公钥进行验证。公钥存储在设备的安全区域中,防止篡改。
  2. 哈希树与 dm-verity

    • dm-verity 机制通过哈希树验证文件系统的每个块,确保在设备运行时文件系统的完整性。
  3. 回滚保护

    • 设备存储了每个分区的最高回滚索引值,防止设备回滚到不安全的旧版本软件。
  4. vbmeta.img 文件

    • 包含所有分区的哈希值和签名信息,是验证其他分区的核心。

通过这些机制,AVB 提供了一种强大的数据保护手段,确保 Android 设备从启动到运行的每个阶段都受到保护。



参考:
Android AVB官方原文:
https://android.googlesource.com/platform/external/avb/+/master/README.md



作者简介:https://shimo.im/docs/rp3OVwxle2fJn7Am/
上海徐汇
2024年6月6日


### Android Verified Boot (AVB)介绍 Android Verified Boot (AVB) 是一种增强设备安全性的机制,旨在防止未经授权修改启动过程中的关键组件。通过构建一个信任链来确保从最底层硬件到操作系统各个部分均未被篡改。这一链条依次经过 ROM code、BootLoader、boot image 及至 System Vendor 分区[^1]。 ### AVB工作原理启动流程里,每个阶段都会加载并验证下一个阶段的数据完整性与真实性: - **ROM Code**: 设备上不可更改的第一段执行代码负责初始化基本硬件设置,并引导进入 bootloader。 - **Bootloader**: 验证 `boot.img` 文件(内含 Kernel Image),此文件包含了用于后续分区验证所需的公钥——verity_key,该密钥存储于 ramdisk 中而后者被打包进了 boot.img 之内[^2]。 - **Boot Image & Hash Tree Verification**: 当到达系统供应商分区间时,则利用之前由 bootloader 解析出来的 verity metadata 来检验这些区域内的 hash tree 结构,从而确认其内容无损且未经非法改动。 ```python def verify_partition(partition_data, partition_hash_tree): """ Verify the integrity of a given partition using its associated hash tree. :param bytes partition_data: Raw data from the partition to be checked. :param list partition_hash_tree: List representing the Merkle tree hashes for verification. :return bool: True if valid, False otherwise. """ calculated_hashes = compute_merkle_tree(partition_data) return all(a == b for a, b in zip(calculated_hashes, partition_hash_tree)) ``` 对于采用 A/B 更新模式的系统而言,在版本切换期间同样遵循上述原则以保障新旧状态间的平滑过渡以及安全性。 ### 实现方式 实际部署中,AVB 主要依赖如下几个方面来达成目标: - **vbmeta Partition**: 自 Android Pie 开始引入的新概念,它保存着关于其他受保护分区的信息摘要及其签名信息;这使得即使当 primary slot 的数据遭到破坏或更新失败时也能借助 secondary slot 完成恢复操作而不影响整个验证逻辑的有效性。 - **Public Key Infrastructure(PKI)**: 整个过程中涉及到多个层次上的加密算法应用,比如 RSA 或者 ECDSA 等非对称密码技术用来签署重要资料,保证只有持有对应私钥的一方才能创建有效的签名,进而维护了整体架构的安全等级。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值