我对在Android中了解经过验证的引导过程很感兴趣,但是我无法找到关于这个过程的一些特性的见解。
从我到目前为止收集到的信息来看,在Android设备中,使用dm-verity
支持经过验证的引导过程,它检查要加载的操作系统所在的内存块的签名散列。此外,目前大多数(如果不是全部)基于ARM处理器的设备都有TrustZone特性,用于创建所谓的“安全世界”和“不安全世界”。
我想了解的是,这一切是如何结束的:
dm-verity
何时运行?dm-verity
是从“安全世界”中运行的吗?如果是这样的话,如何验证“安全世界”操作系统加载?发布于 2020-12-22 03:44:45
AVB由引导程序执行,dm-verity由内核执行.两者都在android引导流中连续运行。
在工厂:
/system
、/vendor
、产品和ODM分区的哈希树。哈希树不是为/boot
和/vbmeta
分区构造的。在靴子上:
链分区用于委托权限,如企业设备和载体设备的情况。如果企业希望包含其他分区,则将用于链分区的vbmeta存储在脚注中,或者如果存在多个链分区,则可以创建一个单独的vbmeta_enterprise
来验证所有链分区。它由企业的私钥(key1)签名。公钥(key1_pub)随后存储在原始vbmeta分区中。通过使用链分区的新描述符更新原始vbmeta映像和删除公钥key1_pub
,可以很容易地撤销此委托权限。
AVB的信任链是从ABL开始的,因此可以用自己的密钥替换OEM公钥,并通过遵循OEM所做的相同过程重新签名vbmeta。为了防止反洗钱被篡改,生产SoCs实施了secure-boot
。为了支持安全引导,生产设备的eFuse被吹到工厂,而且它是不可逆转的。快速引导unlock
和unlock_critical
命令不会关闭安全引导。即使是一个快速引导命令,也会破坏原型设备的eFuse,从而永久地启用SoC的安全引导。
fastboot oem SecureBoot EnableFuse
在Qualcomm Snap巨龙SoCs中,ABL由X力求引导加载程序( XBL )进行验证,XBL由初级引导加载程序(PBL)验证。PBL被刻录在CPU芯片上,其公钥存储在eFUSE中,从而使其具有抗篡改能力。可信执行环境(TEE)不经AVB验证。它是由XBL_SEC验证的,这是另一个由PBL验证的引导加载器。TEE图像是由芯片制造商和OEM双签名的。在XBL加载ABL的同时,TEE被XBL_SEC唤醒,如图所示。
安全引导和图像认证 (pdf)
发布于 2020-12-17 16:12:12
我知道这是个老生常谈的问题,但无论如何,这里有一些答案,因为官方文件缺乏许多重要的细节:
到AVB的文档可以找到在Google开发者网站上和官方代码存储库。
在Android引导过程中,dm-verity何时运行?
dm-真实性是一个内核扩展,在挂载分区和运行时运行。但是,Android验证的启动进程在内核加载之前就启动了。更准确地说,设备的ROM引导加载程序在加载内核(boot.img)之前验证它的完整性,从而防止内核损坏。一旦内核被加载,dm-verity就会生效。您应该知道,每个供应商都自定义了验证引导的实现。例如,华为和三星使用它们自己的实现。
dm-真实性是从“安全世界”中运行的吗?如果是这样的话,如何验证“安全世界”操作系统加载?
如前所述,dm-verity是一个内核扩展,在内核级别上运行,而Arm TrustZone是您的CPU的安全扩展,并在内核加载之前运行。TrustZone在硬件级别上运行,像三星诺克斯这样的产品使用Arm TrustZone进行实时内核验证。dm-verity本身不需要在TrustZone中运行,但是dm-verity的自定义实现可能使用TrustZone进行加密操作。例如,Samsungs使用TrustZone进行密钥认证。
TrustZone并不是安卓验证引导系统的直接一部分,因为它是一种商业产品。它被三星等公司用于在启动阶段和运行时对内核进行额外的验证。这不是必要的,也不是强制性的Android验证引导。AVB的一般引导过程可以概括如下:
在引导过程中,何时是第一次访问/激活TrustZone“world”特性?
正如前面提到的,根据维基百科的说法,TrustZone是封闭的源,我们不知道在引导过程中什么时候它是可用的。但是,通常可信的执行环境是在操作系统之前加载的。例如,华为在加载可闪光引导加载程序之后加载它。在这种情况下,每个组件只是验证下一个组件的完整性,并构建一个密钥链。
https://security.stackexchange.com/questions/162457
复制相似问题