UEFI 扩展加载程序
shim 是一个简单的 EFI 应用程序,运行时会尝试打开和执行另一个应用程序。它最初将尝试通过标准 EFI LoadImage() 和 StartImage() 调用来完成此操作。如果这些调用失败(例如,因为已启用安全引导,而二进制文件没有使用合适的密钥签名),则它将使用内置证书对二进制文件进行验证。如果验证成功,并且二进制文件或签名密钥没有被禁止,则 shim 将重定位并执行二进制文件。
shim 还会安装一个协议,允许第二阶段的引导加载程序执行类似的二进制验证。此协议具有 shim.h 头文件中所述的 GUID,并提供了一个单一的入口点。在 64 位系统中,此入口点预期使用 SysV ABI 而不是 MSABI 来调用,因此对其的调用不应包装。
当安装此协议时,即使嵌套内核未签名,也可以加载签名的 UKI,因为在加载和验证 UKI 之后,Shim 会构建包含在 UKI 中的所有部分的内部允许列表。当从这些部分中加载图像时,它会根据拒绝列表(在本文撰写时为 DBX/MOKX/SBAT)进行验证,但不会根据允许列表(DB/MOK 哈希/签名)进行检查,因为外部图像已经进行了验证,因此内部图像被这些签名或哈希所覆盖。此外,内部图像不会在 TPM 中进行测量,以避免重复测量。
在具有启用 TPM 晶片且由系统固件支持的系统中,shim 会将各种 PCR 扩展为加载目标的摘要。完整列表请参阅文件 README.tpm。
暂无开放 Issues,或尚未同步最近议题。