UEFI shim loader
shim是一个简单的EFI应用程序,当运行时,它会尝试打开和执行另一个应用程序。它最初会通过标准的EFI
我一直在阅读以了解在启用安全启动选项时验证过程是如何进行的: vmlinuz *-generic和*-generic.efi.signed之间的区别 Secure Boot实际上是如何工作的?
LoadImage()
和StartImage()
调用来尝试执行。如果这些调用失败(例如因为启用了安全启动并且二进制文件未使用适当的密钥进行签名),则它将根据内置证书验证二进制文件。如果验证成功,并且二进制文件或签名密钥未被列入黑名单,则shim将重新定位并执行该二进制文件。我一直在阅读以了解在启用安全启动选项时验证过程是如何进行的: vmlinuz *-generic和*-generic.efi.signed之间的区别 Secure Boot实际上是如何工作的?
现在我可以告诉你,这个过程是这样的:
机器的固件首先运行Shim。现在Shim必须运行引导加载程序。我不明白的是Shim如何验证二进制文件?例如,上面引用的段落指出,Shim尝试通过标准的EFI LoadImage()
和StartImage()
调用来启动其他应用程序,如果失败了,Shim会尝试从内置证书中验证二进制文件。这个内置证书是属于Shim的吗?基本上,这就是为什么Shim被称为机器所有者密钥管理器(MOK)吗?因为它有自己的密钥数据库来验证二进制文件。
简单来说,机器的固件有自己的NVRAM密钥数据库来验证二进制文件,而Shim有自己的密钥数据库来验证二进制文件。
在引导加载程序经过验证并执行之后,引导加载程序会在哪里查找需要引导的已签名内核的密钥,比如从固件的密钥数据库中?