一、什么是AVB
Android Verified Boot (AVB) 是 Google Android 系统固有的一种引导程序验证机制,旨在保障 Android 设备在启动过程中不受攻击和威胁。AVB 机制尤其适用于 Android 操作系统从 7.0 开始,如果设备上的引导程序检测到系统映像和引导程序有违背验证规则的可能性,将会阻止系统继续启动,提高系统的安全性。
AVB 基于内核秘钥和保留数据分区来实现引导验证。硬件厂商和设备制造商必须在生产过程中安全地生成这些秘钥,并将其保存在设备上。引导程序完成启动前验证,如果没有找到有效的验证结果,则引导程序不会继续启动系统映像。
二、AVB 如何保障设备启动安全
AVB 保证 Android 设备安全启动的过程主要包括以下方面:
1. 关于映像
AVB 对 Android 设备上的系统映像进行签名和验证,使得无法在设备上下载、量产的映像篡改。如果设备上的引导程序遇到无法验证的映像,设备就提醒用户该设备软件存在风险并拒绝启动。
2. 关于引导程序
AVB 在启动的时候会校验设备的引导程序和引导配置,如果被篡改时,设备将不会继续启动。
3. 引导程序与应用程序分离
引导程序通常都是已知和可验证的,它们非常小巧、高效、统一。AVB 强制要求引导程序与应用程序完全分离。因此,对于已经通过验证的引导程序,需要接管它们的信息来启动系统。
三、如何实现 AVB
我们可以通过以下方式来实现AVB的设计:
1. 生成硬件级别密钥
AVB 的正确实现需要硬件实现安全。设备制造商必须使用提前生产的硬件级别密钥来验证它们而不是使用软件级别密钥,从而确保本身是安全的。硬件级别密钥的生成应该是随机的,尽可能安全和难以预计,这是通常由 FIPS 标准的实现要求的。
2. 实现固件签名
硬件生成的密钥使用强密码学算法来生成设备的 AVB 签名。使用固件签名工具将签名附加到 Android 映像镜像上。能够验证固件签名使用工具和映像的目标设备。
tools/avbtool add_hash_footer --image vbmeta.img --partition_size 4096 --partition_name boot
3. 保证整个系统的安全
设备制造商必须使用保留数据分区模式来保证该参数不受“刷入攻击”的影响。在日常操作中,如果用户无法自己管理这些参数或验证其完整性,则默认为 Android 验证引导程序先查找验证参数的位置。如果验证失败 AVB 阻止系统启动。
四、总结
AVB 可以从多个方面为 Android 设备提供更高的安全防护,签名验证和引导程序验证都是 AVB 机制的一部分。引导程序与应用程序分离是硬件设计水平的提高,一些高端 Android 设备可能今后会成为自欺行业的必要选择。AVB 的正确实现需要硬件级别安全的保证,以便预防恶意软件的攻击。有了 AVB 机制,Android 设备的安全性得到了极大地提升。