lunal-dev/kettle

GitHub: lunal-dev/kettle

一个基于 TEE 可信执行环境的构建认证工具,通过硬件签名和 SLSA 标准来源证明实现软件供应链的可验证安全。

Stars: 17 | Forks: 1

kettle

# Kettle,用于认证构建 Kettle 构建并验证**认证构建**(attested builds),即包含经加密签名的 SLSA 来源证明的包,该证明认证了用于创建构建的源代码、工具和机器。 **只需获得可复现构建的精华部分:即签名和可验证输入的安全性与保障,而无需忍受不断修复构建系统的痛苦。** ## 为什么选择认证构建? 认证构建通过添加加密签名来确切显示使用了哪些源代码、依赖项和工具链,从而允许任何人验证生成任何二进制输出的确切输入。 Kettle 使用 TEE(可信执行环境)通过硬件认证对构建进行签名。硬件认证针对硬件制造商发布的证书进行验证,在加密上将二进制文件与其确切的源代码关联起来。 ### 认证构建的使用案例 Kettle 的认证构建几乎可以为任何需要将二进制文件直接追溯至创建它们的源代码和工具的场景提供解决方案。以下是 Kettle 可以解决的几个问题示例: - 部署您服务的客户希望确认该服务正在运行您声称的代码,即由他们审计过的源代码构建而成。 - 合规团队希望获得证据,证明二进制文件是使用特定的依赖版本构建的,而不是使用了包含未知变更的较新版本。 - 安全审计员希望验证用于编译发布版本的工具链是否与您的安全文档中规定的相匹配。 - 受监管的企业希望获得证明,确认敏感数据仅由通过了其审查的代码处理,而不是由修改后的版本处理。 - 包使用者希望确保他们下载的二进制文件对应于他们审查过的源代码和依赖项,而不是被篡改的版本。 欲全面了解 Kettle 的设计、架构和安全保证,请阅读我们的认证构建指南。 1. [什么是认证构建?](/docs/1-attested-builds.md) 2. [认证构建的工作原理](/docs/2-how-it-works.md) 3. [来源证明与标准](/docs/3-provenance-standards.md) 4. [威胁模型与安全边界](/docs/4-threat-model.md) ## 为什么使用 Kettle 进行认证? 大多数构建系统无法提供硬件安全的构建机器。Kettle 确保您的构建是在机密虚拟机内部创建和签名的,其内存和计算即使面对恶意的 hypervisor 也是安全的。相比之下,如果您使用 GitHub 的 [artifact attestations](https://docs.github.com/en/actions/concepts/security/artifact-attestations),您将被迫简单地相信 GitHub 的说法,即他们的云 VM 没有篡改您的构建。 使用 Kettle 在 TEE 内部进行构建和认证,您可以获得基于硬件的加密断言,从而显著减少您被迫信任的参与方数量。您只需要信任硬件制造商和构建机器的物理看管者。无需信任拥有裸机 root 权限的系统管理员,或创建和管理您构建 VM 的 hypervisor 作者,或维护您的代码将运行在其上的镜像的开发人员。在您的 TEE 中运行的代码由硬件签名,因此您可以确定运行了什么,并且经过加密,即使是 hypervisor 也无法在您的工作运行时读取其内存。 ## 安装 Kettle Kettle 可通过 GitHub Releases 获取,或通过 Rust 构建工具 Cargo 从源码获取。 ### 从 GitHub Releases 获取 ``` curl -LO https://github.com/lunal-dev/kettle/releases/latest/download/kettle ``` ### 从源码获取 要安装 Kettle,首先[安装 Rust](https://rustup.rs),然后使用 Cargo 进行构建和安装: ``` cargo install --git https://github.com/lunal-dev/kettle ``` 如果您在 TEE 内部运行,则需要安装用于认证的 OS 包,然后启用 `attest` 功能标志。以下是 Ubuntu Linux 的示例: ``` apt-get install -y libtss2-dev cargo install --features attest --git https://github.com/lunal-dev/kettle ``` ## 使用 Kettle ### 在任何地方构建 运行 `kettle build` 以执行除硬件加密之外的所有步骤:生成符合 SLSA 标准的 `provenance.json` 文件、构建项目并对二进制文件进行校验和。即使您不在 TEE 内部,也可以使用此命令测试您的构建过程。 ![`kettle build` 将生成来源证明、构建项目并对二进制文件进行校验和](/docs/build.png) 目前,Kettle 支持构建和认证 Rust 和 Nix 项目。添加额外的工具链很容易,我们计划很快增加对 Python 和 Go 的官方支持。 此示例将检出 `ripgrep` 搜索工具,构建二进制文件,并生成来源证明文件: ``` git clone https://github.com/burntsushi/ripgrep kettle build ripgrep ``` Kettle 运行结束后,可以在 `kettle-build` 目录中找到来源证明和二进制文件。 ### 从 TEE 进行认证 运行 `kettle attest` 以运行构建,记录 VM 固件和 OS 镜像,然后对所有内容应用硬件签名以创建 `evidence.json` 文件。 ![`kettle attest` 将在需要时进行构建,然后创建包含来源证明文件校验和和机密 VM 启动度量的硬件签名证据](/docs/attest.png) 在 TEE 内部运行时,这将检出、构建并认证 `ripgrep` 搜索工具: ``` git clone https://github.com/burntsushi/ripgrep kettle attest ripgrep ``` Kettle 运行结束后,来源证明、认证和二进制文件可在 `kettle-build` 目录中找到。 ### 在任何地方验证 运行 `kettle verify` 以加密验证您的二进制文件。Kettle 将读取 `evidence.json`,使用硬件供应商公钥验证签名,然后验证签名的 `provenance.json` 并使用它来确认二进制文件的校验和。 ![验证硬件签名的证据,该证据提供了来源证明和二进制文件的校验和,您可以用它们来证明使用了哪些源代码、依赖项和工具链](/docs/verify.png) 像这样验证上面创建的认证构建: ``` kettle verify ripgrep/kettle-build ``` ## 开发 使用 `cargo nextest run` 运行适用于任何平台的测试。 在 TEE 中,使用 `cargo nextest run --ignored all` 运行完整的集成测试,这些测试会检出 Rust 和 Nix 项目,构建它们,对它们进行认证,并验证它们。
标签:DevSecOps, DNS 反向解析, DNS 解析, SLSA, TEE, 上游代理, 二进制验证, 代码签名, 依赖安全, 可信执行环境, 可视化界面, 可验证构建, 安全合规, 完整性验证, 审计追踪, 密码学, 手动系统调用, 文档安全, 来源证明, 构建证明, 硬件隔离, 网络代理, 软件供应链安全, 软件开发工具包, 远程方法调用, 通知系统, 防御篡改