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 在 嵌入式开发
每月145次下载
在 sbat-tool 中使用
54KB
880 行
sbat
此无需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.0或MIT许可证下许可。
免责声明
此项目不是官方Google项目。它不受Google支持,并且Google明确声明对此项目的质量、商业性或特定用途的适用性不承担任何保证。
依赖项
~300KB