Skip to main content

定义和保护软件供应链完整性的框架

项目描述

整体建造 CII 最佳实践 构建状态 文件状态

in-toto 提供了一个框架来保护软件供应链的完整性。它通过验证链中的每个任务是否按计划执行,仅由授权人员执行,并且产品在运输过程中没有被篡改。

in-toto 需要项目所有者创建布局。布局列出了软件供应链的步骤顺序,以及授权执行这些步骤的人员。当一个工作人员执行一个步骤时,会收集有关使用的命令和相关文件的信息并将其存储在链接元数据文件中。因此,链接文件提供了建立连续链所需的证据,可以根据布局中定义的步骤进行验证。

由项目所有者签署的布局以及由指定人员签署的链接作为最终产品的一部分发布,并且可以手动或通过自动化工具(例如包管理器)进行验证。

入门

安装

in-toto 在PyPI上可用,可以通过pip. 请参阅 in-toto.readthedocs.io 以了解系统依赖项以及安装替代方案和建议。

pip install in-toto

创建布局、运行供应链步骤并验证最终产品

布局

整体软件供应链布局由以下部分组成:

  • 截止日期
  • 自述文件(供应链的可选描述)
  • 功能密钥(公钥,用于验证链接元数据签名)
  • 签名(使用项目所有者密钥创建的一个或多个布局签名)
  • 软件供应链步骤 对应于作为软件供应链一部分的职能人员执行的步骤。布局中定义的步骤列出了有权执行该步骤的工作人员(通过密钥 ID)。in-toto步骤需要一个唯一的名称,以便将它们(在验证时)与在工作人员使用工具执行步骤时创建的链接元数据相关联。此外,步骤必须具有定义步骤应该操作的文件的材料和产品规则。材料和产品规则在下面的部分中描述。
  • 检查定义要在验证过程中运行的命令,还可以列出材料和产品规则。

查看演示布局创建示例 ,了解有关如何创建整体布局的更多信息。或者试试我们的实验性布局创建网络工具

工件规则

软件供应链通常在一组文件上运行,例如源代码、可执行文件、包等。in-toto 调用这些文件工件。材料是在执行步骤或检查时将使用的工件。同样,产品是执行某个步骤的产物。

in-toto 布局提供了一种简单的规则语言来授权或强制执行步骤的工件并将它们链接在一起。这为任何给定的步骤或检查添加了以下保证:

  • 仅创建、修改或删除项目所有者授权的工件,
  • 每个定义的创建、修改或删除都被强制执行,并且
  • 仅限于其定义的范围,它将后续步骤和检查链接在一起。

请注意,您可以通过使用以下任何规则(通常是多个规则)授权、执行和链接材料和产品来正确保护您的供应链:

  • CREATE <pattern>
  • DELETE <pattern>
  • MODIFY <pattern>
  • ALLOW <pattern>
  • DISALLOW <pattern>
  • REQUIRE <file>
  • MATCH <pattern> [IN <source-path-prefix>] WITH (MATERIALS|PRODUCTS) [IN <destination-path-prefix>] FROM <step>

指定为<pattern>允许使用由 Python 实现的 Unix shell 样式通配符的规则参数fnmatch

要了解有关不同规则类型、它们的保证以及如何应用它们的更多信息,请查看 in-toto 规范的工件规则部分。

执行软件供应链步骤

投入运行

in-toto-run用于执行软件供应链中的一个步骤。这可以是与项目相关的任何内容,例如使用 标记发布git、运行测试或构建二进制文件。相关的步骤名称和命令与材料一起作为参数传递,材料是执行该步骤的命令所需的文件,以及作为执行该命令的结果预期的文件的产品。这些以及与该步骤有关的其他相关细节都存储在一个链接文件中,该文件使用该函数的密钥进行签名。

如果没有将材料传递给命令,则生成的链接文件不会记录它们。同样,如果执行命令 via in-toto-run没有产生任何产品,则它们不会记录在链接文件中。在命令执行期间以任何方式修改或使用的任何文件都不会记录在链接文件中,除非明确作为工件传递。相反,传递给命令的任何材料或产品都会记录在链接文件中,即使它们不是命令执行的一部分。

有关更多详细信息,请参阅演示应用程序中的这个简单用法示例。有关所有命令行参数的详细列表,请运行in-toto-run --help 或查看在线文档

入账

in-toto-record工作方式类似于in-toto-run但可用于多部分软件供应链步骤,即不是由单个命令执行的步骤。用于in-toto-record start ...创建仅记录素材的初步链接文件,然后运行该步骤的命令或手动编辑文件,最后用于 in-toto-record stop ...记录产品并生成实际的链接元数据文件。有关所有命令行参数及其用法的详细列表,请运行in-toto-record start --helpor in-toto-record stop --help,或查看在线文档

发布最终产品

为了全面验证最终产品,验证者必须有权访问布局、*.link文件和项目所有者的公钥。

确认

在最终产品上使用in-toto-verify以验证

  • 布局是用项目所有者的私钥签署的,
  • 没有过期,
  • 每个步骤都由授权的工作人员执行并签名,
  • 工作人员使用了他们应该使用的命令,
  • 每个步骤的材料和产品都按照规则的规定到位,并且
  • 运行定义的检查

有关所有命令行参数及其用法的详细列表,请运行 in-toto-verify --help或查看 在线文档

签名

in-toto-sign是一个元数据签名助手工具,用于在整体链接或布局元数据中添加、替换和验证签名,具有以下选项:

  • 替换(默认)或添加签名,布局元数据可以一次由多个密钥签名,而链接元数据一次只能由一个密钥签名
  • 将已签名的元数据写入指定路径(如果未指定输出路径,则布局元数据将写入输入文件的路径,同时将链接元数据写入<name>.<keyid prefix>.link
  • 验证签名

此工具旨在对 布局 Web 向导创建的布局进行签名,但也可以很好地用于对测试和演示数据进行重新签名。例如,如果元数据格式或签名例程发生变化,可以使用它。

有关所有命令行参数及其用法的详细列表,请运行 in-toto-sign --help或查看 在线文档

整体演示

您可以通过运行演示应用程序进行全面尝试。该演示基本上概述了三个用户,即 Alice(项目所有者)、Bob(职能人员)和 Carl(职能人员),以及 in-toto 如何帮助指定项目布局并验证是否以正确的方式遵循了布局。

规格

您可以通过查看规范来了解更多关于 in-toto 工作原理的信息。

安全问题和错误

可以通过发送电子邮件至 justincappos@gmail.com报告安全问题。

报告至少必须包含以下内容:

  • 漏洞描述。
  • 重现问题的步骤。

或者,可以使用 PGP 对通过电子邮件发送的报告进行加密。您应该使用 PGP 密钥指纹 E9C0 59EC 0D32 64FA B35F 94AD 465B F9F6 F8EB 475A。

请不要使用 GitHub 问题跟踪器提交漏洞报告。问题跟踪器用于错误报告和提出功能请求。

贡献者须知

in-toto 的开发发生在此存储库的“开发”分支上。可以通过提交 GitHub Pull Requests来进行贡献。请查看我们的开发指南 以获取详细说明。提交的代码应遵循我们的样式指南,并且必须经过单元测试。

贡献者还必须通过在每条 git 提交消息后附加 a来表明接受开发者原产地证书 (DCO) (请参阅 参考资料)。Signed-off-by: Your Name <example@domain.com>git commit --signoff

致谢

该项目由普渡大学的 Santiago Torres-Arias 教授管理。学术界和工业界的许多人都在研究它,包括纽约大学 安全系统实验室和NJIT 网络安全研究中心的成员。

这项研究得到了美国国防高级研究计划局 (DARPA)、空军研究实验室 (AFRL) 和美国国家科学基金会 (NSF) 的支持。本材料中表达的任何意见、发现和结论或建议均为作者的观点,不一定反映 DARPA、AFRL 和 NSF 的观点。尽管此处有任何版权声明,美国政府有权复制和分发重印本。

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

in-toto-1.2.0.tar.gz (141.8 kB 查看哈希)

已上传 source

内置分布

in_toto-1.2.0-py3-none-any.whl (68.6 kB 查看哈希)

已上传 py3