#uefi #component #data #boot #image #generation #revocation

无需std sbat

UEFI安全启动高级定位(SBAT)无需std库

9个不稳定版本

0.5.2 2024年5月22日
0.5.1 2024年3月18日
0.5.0 2023年8月7日
0.4.0 2023年7月8日

#95嵌入式开发

Download history 8/week @ 2024-04-28 137/week @ 2024-05-19 23/week @ 2024-05-26 4/week @ 2024-06-02 7/week @ 2024-06-09 1/week @ 2024-06-16 4/week @ 2024-06-23 1/week @ 2024-06-30 5/week @ 2024-07-07 69/week @ 2024-07-28 21/week @ 2024-08-04 55/week @ 2024-08-11

每月145次下载
sbat-tool 中使用

MIT/Apache

54KB
880

sbat

Crates.io Docs.rs

此无需std库处理SBAT解析和SBAT撤销检查。

SBAT是一种空间高效的从启用安全启动的UEFI可执行文件中撤销启动权限的方法。SBAT需要两种数据源:正在启动的镜像相关的元数据和撤销列表。

镜像元数据

可执行文件(如shim和grub)在特殊.sbat部分中嵌入SBAT数据。这些SBAT数据是CSV格式,描述了构成可执行文件源组件的列表。通常组件包括源代码库、可执行文件派生的父代码库(如果适用),以及SBAT格式本身(以便在需要时可以更改格式)。

组件通过名称和生成号进行标识。生成号是一个简单的版本号,可能与组件的可读版本号不同;它始终是一个正整数,当需要撤销该组件的较旧版本时,会递增。每个组件还与一些人类可读数据相关联,但这些数据不用于比较。

以下是一个关于假设的可执行文件“Pizza”的SBAT元数据的示例

sbat,1,SBAT Version,sbat,1,https://github.com/rhboot/shim/blob/main/SBAT.md
pizza,2,Pizza,pizza,1.2.3,https://example.com/pizza
pizza.somecorp,1,SomeCorp,pizza,1.2.3,https://example.com/somecorp

此可执行文件包含三个组件。每个记录的前两个字段是组件名称和生成号。其余的都是用于比较之外的人类可读数据。在移除人类可读部分后,我们剩下

sbat,1
pizza,2
pizza.somecorp,1

第一个组件总是用于SBAT格式本身。如果SBAT格式需要在破坏性的方式下进行更改,所有现有的SBAT v1的使用都可能被撤销。在这个例子中,第二个组件是Pizza程序的官方仓库。第三个组件是SomeCorp对Pizza的分支。这个仓库可能非常接近上游仓库,但增加了一些特殊功能。如果SomeCorp在他们的分支中犯了一个只有他们的分支受到影响的错误,那么能够撤销pizza.somecorp而不需要撤销所有的pizza是很重要的。

请注意,尽管pizza.somecorp指代了pizza的一个分支,但对于SBAT来说,这些是具有独立关系的不同组件。

撤销数据

撤销数据通常存储在UEFI变量中。像图像元数据一样,它是一个CSV格式的组件列表。以下是一个示例

sbat,1,20210723
pizza,2

与图像元数据一样,每个记录中只使用前两个字段进行撤销。(第一行中额外的日期字段由更新撤销数据的程序使用,以确定UEFI变量是否是最新的。)

每个组件记录描述了该组件的最小版本(版本)。如果一个图像的组件在撤销列表中,该组件的版本必须大于或等于撤销列表中的版本。如果图像有一个不在撤销列表中的组件,该组件被隐式允许。

因此,在这个例子中,pizza组件的第1代已被撤销。第2代及以上版本允许。由于pizza.somecorp组件根本不在撤销列表中,因此该组件的任何版本都允许。sbat组件在撤销列表中,但由于版本为1,而1是最小的版本号,因此所有版本的sbat都被允许。

示例:允许的图像元数据

sbat,1
pizza,2

这也会被允许

sbat,1
pizza,2,
pizza.somecorp,1

而由于pizza组件,这不会被允许

sbat,1
pizza,1,
pizza.somecorp,2

许可证

根据您的选择,在Apache License, Version 2.0MIT许可证下许可。

免责声明

此项目不是官方Google项目。它不受Google支持,并且Google明确声明对此项目的质量、商业性或特定用途的适用性不承担任何保证。

依赖项

~300KB