“安卓系统启动更安全!资深大师教你如何使用AVB“

"安卓系统启动更安全!资深大师教你如何使用AVB" (qq.com)

Android Verified Boot,简称AVB,是Google推荐的适用于安卓操作系统的保证系统启动安全的最佳实现方式,本篇文章主要介绍AVB的使用以及注意事项。

01AVB使能

如果要在自己的安卓project上面使能AVB,请在对应的BoardConfig.mk中增加如下配置:


BOARD_AVB_ENABLE := true

BOARD_AVB_ALGORITHM := SHA512_RSA4096 BOARD_AVB_KEY_PATH := /path/to/rsa_key_4096bits.pem


同时,如果项目要过CTS/VTS认证,就会进行替换GSI进行测试,这个时间就要使能AVB的链式分区(chained partitions)功能,增加如下配置:


BOARD_AVB_VBMETA_SYSTEM := system system_ext BOARD_AVB_VBMETA_SYSTEM_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem BOARD_AVB_VBMETA_SYSTEM_ALGORITHM := SHA256_RSA2048 BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX_LOCATION := 1


如果增加防回滚机制,就额外增加如下配置:


BOARD_AVB_ROLLBACK_INDEX := 5


至此,AVB使能的安卓集成方面的配置都已经打开,正常进行source/lunch/make即可。

02avbtool

在使能配置之后,正常的安卓编译过程中,就会额外调用avbtool,来产生验证过程中的image info,主要是如下三个函数接口:

对于比较小的镜像,在bootloader阶段做一次hash校验,会调用add_hash_footer接口。

对于system,vendor等比较大的镜像,在运行时验证,调用add_hashtree_footer接口。

基于前面的编译出的带有footer的镜像,我们会调用make_vbmeta_image生成vbmeta.img,用于BootLoader在加载HLOS之前,进行校验。

03如何进行key客制化

前面我们的使能配置,都是使用原生的key进行签名和校验的,显然对于上市的产品是不可以的,必须使用客制化的key。

第一,通过OpenSSL 产生项目特有的key,更待BoardConfig.mk中的key路径配置。

第二,调用avbtool 的方法,生成private key对应的public key。


avbtool extract_public_key --key key.pem --output pkmd.bin


第三,将生成的pkmd.bin转化为数组,替换到BootLoader中。


avbtool extract_public_key --key testkey_rsa4096.pem --output avb_root_pub.binxxd -i  avb_root_pub.bin | sed 's/unsigned char/const unsigned char/g' > OEMPublicKey.hcp  avb_root_pub.h xxx/bootloader/xxx/avb_root_pub.h

04如何进行remount

对于AVB使能的设备,我们一般要做remount,就必须进行unlock设备的操作,但avbtool 里面也提供了方法,不用unlock设备,也可以进行remount动作。只需要在生成vbmeta镜像时增加--set_hashtree_disabled_flag参数即可。

05如何静态验证镜像

当AVB使能之后,我们也可以在服务器先行验证,验证成功之后再烧写到板子上面进行验证。


avbtool verify_image \      --image /path/to/vbmeta.img \      --key my_key.pem \      --expect_chained_partition foobar:8:foobar_vendor_key.avbpubkey

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值