什么是secure boot
secure boot 是一种保证平台上软件完整性的过程或机制。secure boot会在硬件和软件之间建立一种信任关系。在启用secure boot之后,没有经过签名的固件和软件是无法运行在该设备上。通过这种方式可以保证操作系统免受恶意攻击。secure boot一般使用公钥/私钥来进行固件的验证和应用程序的签名。
为什么需要 secure boot
如果以上流程中的flash中的镜像被更换,最终系统会运行被修改后的固件程序,造成安全泄露。
secure boot的安全级别
EL3 secure Hypervisor 最高的管理权限,负责安全检测和secure world和normal world之间的切换
EL2 hypervisor 提供了对虚拟化的支持
EL1 是一个特权模式,主席那个一些指令和运行各类型的操作系统,在secure world就是secure OS 比如TEE
EL0 是无权模式,所有的APP的都会在这一层级
secure boot 启动流程
BL1 是信任链的根所在一般是固化在芯片内部的一段代码,叫做bootrom, 拥有最高的执行权限EL3,在CPU出厂的时候就被写死了。 芯片复位上电之后,bootrom的代码会从固件位置加载BL2,然后初始化sram, 在BL2的验签通过后会跳转到BL2.
BL2 和BL1一样拥有EL3的至高权限,不同的是BL2是在Flash中的一段可信的安全启动代码,它的可信是建立在BL1的验证通过上。主要是在BL2完成一些平台的初始化,比如说是DDR的初始化等。在初始化完成之后,会寻找BL31或BL33,对其进行执行,找到BL31就不会再调用BL33,这两必须存在一个。
BL31 是EL3的最后一个阶段,是听过SMC指令为Non-Secure持续提供设计安全的服务。在secure world和Non secure world之间进行切换,主要是找BL32,验签,然后运行BL32.
BL32 是所谓的secure os 在ARM的TEE(Trusted Execution Enviroment)实现, OP-TEE是基于ARM TrustZone硬件架构实现的软件secure OS。一般在这个阶段会运行OPTeeOS+ 安全App. 是可信任的OS运行在EL1并且在EL0启动可信任APP。 并且在Trust OS运行完成后通过SMC指令返回BL31,切换到BL31, BL31切换到Non secure world继续知悉BL33
BL33 就是Normal World了,运行的都是非安全固件,也就是常见的UEFI firmwre 或者 u-boot 也可能是自启动的linux kernel。
启动BL1 BL2 BL31 BL32就是一个完整的ATF信任链的建立过程(ARM Trusted Firmware),比如常见的PSCI (power state coordination interface) 功能是在BL31上实现的。