您的位置:

深入理解vbmeta

一、什么是vbmeta

vbmeta是Android 8.0(Oreo)之后引入的一种安全机制,在bootloader启动阶段对系统映像文件进行数字签名和验证,以防止被非法篡改。

该机制包含一个metadata结构,其中包括公钥、签名、哈希等信息,存在于vbmeta分区中。

能够验证vbmeta的前提是设备的初始启动镜像需要事先被授信并在vbmeta中定义好相应的数据格式和签名规则。

二、vbmeta的作用

vbmeta主要有两个作用:

1、验证系统映像文件的完整性:在设备启动时,vbmeta会验证分区中每个映像文件的哈希值和数字签名,确保系统文件没有被非法篡改。

2、保护OEM加密:vbmeta可以管理OEM加密密钥,通过设备锁定的方式防止被其他人使用。如果验证失败,设备将会被锁定。

三、vbmeta的使用

1、创建vbmeta分区

首先需要在设备的分区中创建vbmeta分区,并将metadata结构写入其中。具体过程如下:

# 使用avbtool创建metadata结构
avbtool make_vbmeta_image --output vbmeta.img
# 将vbmeta.img写入vbmeta分区
dd if=vbmeta.img of=/dev/block/by-name/vbmeta

2、在bootloader中验证vbmeta

在设备启动时,bootloader将会读取vbmeta分区中的metadata结构,并进行数字签名和哈希验证。具体过程如下:

# 使用avbtool验证vbmeta分区
avbtool verify_vbmeta_image --image /dev/block/by-name/vbmeta --public_key_metadata AndroidPublicKey.pem

其中AndroidPublicKey.pem是设备的公钥文件,在验证前需要安装到本地。

四、vbmeta的局限

尽管vbmeta是一种有效的安全机制,在实际的开发中还是存在一些局限:

1、需要设备先被授信才能验证:设备的初始启动镜像需要先被授权,才能在vbmeta中定义数据格式和签名规则。在没有授信的设备上,vbmeta无法提供安全保障。

2、限制OTA升级:由于vbmeta主要保证操作系统的完整性,因此OTA升级时,若修改了系统分区,则需要重新签名新的vbmeta,并在bootloader中验证。如果设备处于locked状态,则OTA升级将会失败。

3、难以应对物理攻击:在物理攻击的情况下,攻击者可以直接读取设备上的密钥信息,从而绕过vbmeta的安全保护。

五、结论

作为一种有效的安全机制,vbmeta在Android系统中发挥着重要的作用。但是,在实际的开发过程中,我们需要权衡其安全性和扩展性的关系,充分利用好vbmeta提高系统的安全性。