Android Verified Boot 2.0

AVB2.0简要说明:Android Verified Boot 2.0简要_vbmeta是_沫珩MH的博客-CSDN博客

AVB2.0(Android Verified Boot2.0)是google新设计的verified boot流程用于保护boot/recovery/system/vendor等一些受保护分区的完整性。MTK平台中dtbo不使用AVB2.0保护,build出来的dtbo是avb2.0签名方式,会在调用签名脚本时将dtbo改为正常签名方式(dtbo用于初始化lcm等,如果dtbo校验失败了,无法显示yellow/orange/red state),而其他的image(preloader,lk,logo,tee等)仍然是使用MTK的verify flow。在Android P版本,如果平台使用的kernel版本大于等于4.9的话,AVB2.0是必须要开启的。

vbmeta分区

AVB2.0增加了一个vbmeta分区,对应的vbmeta.img由make_vbmeta_image工具编译生成的,其主要包含如下三大部分:

  • vbmeta image header(256 Bytes)
  • authentication data
    • hash
    • signature
  • auxiliary data
    • public key
    • public key metadata
    • descriptors
      • hash descriptors
      • hashtree descriptors
      • chain partition descriptors

vbmeta分区保存了受保护分区的所有信息,每个被avb2.0保护的分区后面都有一个vbmeta结构。vbmeta结构中包含多个描述符(和其他元数据),并且所有这些数据都被加密签名

受保护的分区可以配置为hash分区或者chain(链式)分区:

  1. hash分区:hash校验,用hash描述符中hash(保存在vbmeta分区的vbmeta结构里)验证目标分区
  2. chain分区:key校验,用chain分区描述符中的public key(保存在vbmeta分区的vbmeta结构里)验证目标分区vbmeta结构的完整性(vbmeta被private key签名)

vbmeta.img中vbmeta结构

循环遍历主vbmeta中所有描述符

  • chain分区描述符
    • 保存了用于验证目标分区vbmeta结构的public key
    • 如果目标分区vbmeta结构验证失败,将无法启动
  • hash表描述符
    • 目标分区vbmeta结构没有被使用,忽略
  • hash描述符
    • 除非它在“requested_partitions”中,被输入到avb2.0的入口函数:avb_slot_verify(),否则忽略目标分支vbmeta结构

vbmeta与boot/recovery/system/vendor绑定

  • 配置为hash分区:必须与主vbmeta一起更新
  • 配置为chain分区:假如目标分区vbmeta结构发生异常,就算此分区在当前启动模式不被使用,设备也将无法启动。
    • 比如,假如recovery分区配置为chain分区,一旦recovery发生异常,normal boot也将无法启动
    • 一旦recovery分区配置为hash分区,不能通过OTA改为chain分区配置

使能AVB2.0功能

  • lk:vendor/mediatek/proprietary/bootable/bootloader/lk/project/<project.mk>
MTK_AVB20_SUPPORT = yes
  • kernel:<project>_debug_defconfig & <project>_defconfig
CONFIG_MTK_AVB20_SUPPORT = y

配置avb分区

kernel-4.9\arch\arm64\boot\dts\mediatek\xxxx.dts

配置vbmeta.img的公钥与私钥

  • 公钥: /vendor/mediatek/proprietary/bootable/bootloader/lk/target/${project}/inc/avbkey.h
  • 私钥: device/mediatek/common/oem_prvk.pem
    • 在device/mediatek/common/device.mk中配置:BOARD_AVB_KEY_PATH := device/mediatek/common/oem_prvk.pem

vbmeta.img被oem_prvk.pem进行私钥签名,在启动阶段lk使用avbkey.h中的公钥对vbmeta.img进行验证,所以avbkey.h配置的公钥与oem_prvk.pem的私钥必须是一对,且此key与secure boot校验其他分区的key不是同一个,配置文件也不是同一个,但是可以配置成同一组key。

配置受保护分区

默认不配置情况下,受保护分区采用hash分区方式,如需配置成chain分区方式,采用如下方式:

     #settings for main vbmeta
     BOARD_AVB_ALGORITHM := SHA256_RSA2048
     BOARD_AVB_KEY_PATH := device/mediatek/common/oem_prvk.pem
 
ifeq ($(strip $(MAIN_VBMETA_IN_BOOT)),no)
     #settings for recovery, which is configured as chain partition
     BOARD_AVB_RECOVERY_KEY_PATH := device/mediatek/common/recovery_prvk.pem
     BOARD_AVB_RECOVERY_ALGORITHM := SHA256_RSA2048
     BOARD_AVB_RECOVERY_ROLLBACK_INDEX := 0
     # Always assign "1" to BOARD_AVB_RECOVERY_ROLLBACK_INDEX_LOCATION
     # if MTK_OTP_FRAMEWORK_V2 is turned on in LK. In other words,
     # rollback_index_location "1" can only be assigned to
     # recovery partition.
     BOARD_AVB_RECOVERY_ROLLBACK_INDEX_LOCATION := 1
endif
 
     #settings for system, which is configured as chain partition
     BOARD_AVB_SYSTEM_KEY_PATH := device/mediatek/common/system_prvk.pem
     BOARD_AVB_SYSTEM_ALGORITHM := SHA256_RSA2048
     BOARD_AVB_SYSTEM_ROLLBACK_INDEX := 0
     BOARD_AVB_SYSTEM_ROLLBACK_INDEX_LOCATION := 2
  • 配置了system分区为chain分区方式
  • 算法为SHA256_RSA2048
  • private key为device/mediatek/common/system_prvk.pem
  • 当MAIN_VBMETA_IN_BOOT宏为no时,配置recovery分区为chain分区方式

MTK平台AVB2.0、Secure boot与Dm-verity

当AVB2.0、Secure boot与Dm-verity同时开启,系统启动时preloader采用secure boot方式验证tee/lk等分区的可靠性,在lk阶段采用secure boot方式验证dtbo/logo等分区的可靠性,同时采用AVB方式验证vbmeta分区的可靠性和boot分区(或recovery分区)的可靠性。在init进程阶段,如果vendor或者system镜像配置为hash partition方式,则采用原先Dm-verity方式验证vendor或system分区的可靠性(在采用AVB方式验证时,发现其分区配置为hash partition方式,会bypass掉,采用dm-verify方式),如果配置为chain partition方式,则采用AVB方式验证其可靠性。

参考:

Android P上打开AVB2.0的配置方法 - RESSRC

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: MTK Secureboot是联发科技(MediaTek)开发的一种安全引导技术,主要用于保护移动设备的系统安全。它能够通过安全引导启动来确保只有经过权威验证且具备合法授权的软件才能被加载到设备中,有效防止潜在的恶意软件攻击和篡改。同时,它还能够保护设备数据的机密性,保护用户的隐私信息。 MTK Secureboot的实现依赖于硬件和软件两个方面。硬件方面,它需要支持可信执行环境(TEE)技术,这是一种安全运行环境,它能够在系统启动前就启动并运行,保护系统启动过程的安全。软件方面,它需要支持数字签名技术,以加强软件的身份认证和验证。通过数字证书的方式,软件可以被证明是经过权威验证的,从而确保软件的合法性和可信度。 总的来说,MTK Secureboot是一种重要的安全技术,可以有效地保护移动设备的系统安全和用户隐私,它的应用也得到了越来越广泛的认可和应用。 ### 回答2: MTK SecureBoot是联发科技(MediaTek)开发的一种安全防护技术。它为MTK固件提供了一种基于硬件和软件的保护机制,可以防止恶意软件和未经授权的ROM运行在设备上。 MTK SecureBoot的工作原理是通过验证每个固件分区的签名来确定其完整性和可信度。所有的固件文件必须由联发科技或得到其授权的合作伙伴签名才能被设备识别并运行。同时,MTK SecureBoot还可以检测和拦截未经授权的ROM,以保护设备不被非法使用。 MTK SecureBoot的优点在于它不需要额外的硬件或芯片来实现,而是通过与MTK芯片集成的TrustZone技术来提供安全保护。此外,MTK SecureBoot还支持OTA(Over-The-Air)升级,可以在设备运行时检查并更新固件,以确保设备始终处于最新的安全状态。 总体来说,MTK SecureBoot是一项非常重要的安全保护技术,可以帮助保护个人和企业设备免受恶意软件和未经授权的ROM的攻击。 ### 回答3: MTK SecureBoot是联发科技(MediaTek)开发的一种安全保护技术。其主要作用是确保手机的操作系统和应用程序来自于信任的软件发布者,并避免恶意软件对设备的攻击和入侵。 MTK SecureBoot是在手机设计阶段就集成的一个技术,它通过使用数字签名认证和加密机制来保护设备的安全性。在正常情况下,只有经过数字签名认证的软件才能在设备上运行。如果有非法软件或者恶意软件试图在设备上运行,MTK SecureBoot就会阻止它们的运行。 MTK SecureBoot也可以帮助用户防止被病毒或者恶意软件攻击。如果用户下载了一款有问题的应用程序,MTK SecureBoot就会检测到该软件是否被数字签名认证,并发出警告提示用户删除该应用程序。 总而言之,MTK SecureBoot是一项非常重要的技术,它提供了保护设备安全性和数据隐私的保障,让用户更加安心地使用手机。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值