跳转到主要内容

一个用于定义和保障软件供应链完整性的框架

项目描述

in-toto Build CII Best Practices Documentation Status

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

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

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

入门指南

安装

in-toto 可在 PyPI 上获取,并且可以通过 pip 安装。有关系统依赖项、安装替代方案和推荐的详细信息,请参阅 in-toto.readthedocs.io

pip install in-toto

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

布局

in-toto 软件供应链布局由以下部分组成

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

有关如何创建 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 的 fnmatch 实现的 Unix shell 风格通配符。

in-toto 的工件规则默认允许工件存在,除非它们被明确禁止。因此,建议在大多数步骤定义的最终规则中使用 DISALLOW *。有关不同规则类型、它们的保证以及如何应用的信息,请参阅 in-toto 规范的 工件规则 部分。

执行软件供应链步骤

in-toto-run

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

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

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

in-toto-record

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

发布最终产品

为了使用 in-toto 验证最终产品,验证者必须能够访问布局、*.link 文件以及项目所有者的公钥。

验证

使用 in-toto-verify 对最终产品进行验证,以确保

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

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

签名

in-toto-sign 是一个元数据签名辅助工具,用于在 in-toto Link 或 Layout 元数据中添加、替换和验证签名,具有以下选项:

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

此工具非常适合重新签名测试和演示数据。例如,如果元数据格式或签名程序更改,可以使用它。

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

in-toto 演示

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

规范

您可以通过查看规范来了解 in-toto 的工作原理。

安全问题与漏洞

请参阅SECURITY.md

治理与贡献

有关 in-toto 的治理和贡献指南的信息,请参阅GOVERNANCE.md

致谢

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

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

项目详情


下载文件

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

源代码分发

in_toto-3.0.0.tar.gz (151.4 kB 查看哈希值)

上传时间 源代码

构建分发

in_toto-3.0.0-py3-none-any.whl (75.0 kB 查看哈希值)

上传时间 Python 3

支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面