cognis-digital/attestport

GitHub: cognis-digital/attestport

一款纯离线运行的软件供应链安全闸门工具,在气隙环境中完成 SBOM 生成、构件来源签名验证及 CI 策略拦截。

Stars: 0 | Forks: 0

# ATTESTPORT — 气隙软件供应链闸门 [![PyPI](https://img.shields.io/pypi/v/cognis-attestport.svg)](https://pypi.org/project/cognis-attestport/) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/800cb1c782080849.svg)](https://github.com/cognis-digital/attestport/actions) [![License: COCL 1.0](https://img.shields.io/badge/License-COCL%201.0-2b6cb0.svg)](LICENSE) [![Suite](https://img.shields.io/badge/Cognis-Neural%20Suite-6b46c1.svg)](https://github.com/cognis-digital) **SBOM (CycloneDX 风格) + SLSA/in-toto 风格的来源、签名以及 CI 策略闸门 — 专为气隙 pipeline 打造。** *开发者与供应链安全 — 了解你交付的内容,并在不进行外部网络通信的情况下予以证明。* ## 用法 — 逐步指南 1. 从源码**安装** (Python 3.9+): pip install . 2. 为项目目录**生成** CycloneDX 风格的 SBOM: attestport sbom ./myproject --out sbom.json 3. **证明** artifact,并绑定 SBOM(SLSA/in-toto 风格的来源): attestport attest ./dist --builder ci@example.com --sbom sbom.json --out attestation.json 4. 根据其证明文件对 artifact 进行**验证**: attestport verify ./dist attestation.json --format json 5. **在 CI 中设置闸门** — 针对项目的策略闸门,按严重程度失败: attestport gate ./myproject --attestation attestation.json --format sarif --fail-on high --out gate.sarif 签名密钥来源于 `--key`、`ATTESTPORT_KEY` 环境变量或一个演示密钥。此外还支持:`attestport mcp`。 ## 为什么 大多数供应链工具都假定存在网络:需要通信的透明度日志、需要获取的密钥服务、需要查询的 registry。但在气隙或高 assurance 的 CI runner 中,你完全不具备这些条件。`attestport` **仅使用 Python 标准库即可在离线状态下完成整个闭环** — 无需 pip install,无需 daemon,无需网络: 1. **盘点**构建所包含的内容(一份 SBOM)。 2. 通过带有签名的 provenance 声明将其**绑定**到已构建的 artifact 上。 3. 稍后在任何地方**验证**该绑定。 4. 根据你控制的策略为 pipeline 设置**闸门**。 它针对的是生态系统已经在使用的公开开放格式 — **CycloneDX**、**in-toto** 和 **SLSA** — 但其实现是原创且自包含的。 ## 领域 **主要领域:** AI & ML · **JTF MERIDIAN 部门:** ATHENA-PRIME · SAGE **主题:** `cognis` `ai` `llm` `machine-learning` `sbom` **Cognis Neural Suite** 的一部分 — 300 多个源码可用的工具,组织在 JTF MERIDIAN 指挥结构下的 12 个领域中。请参阅 [GitHub 上的 suite](https://github.com/cognis-digital) 和 [jtf-meridian](https://github.com/cognis-digital/jtf-meridian) 以了解各个部分如何协同工作。 ## 安装 ``` # 无依赖;从 checkout 运行 pip install -e ".[dev]" # only to get pytest for the test suite # 或者直接: python -m attestport --help ``` ## 快速开始 ``` attestport --version # 1. 生成 CycloneDX 风格的 SBOM(检测 requirements.txt、package-lock.json、go.sum、Cargo.lock) attestport sbom demos/01-basic/demoproj --out sbom.json # 2. 生成绑定的 SBOM 的已签名的 SLSA/in-toto 风格的 provenance attestation attestport attest demos/01-basic/demoproj --sbom sbom.json --out att.json # 3. 根据 artifact 的 attestation 进行验证(通过;如果其中任何一个被篡改则失败) attestport verify demos/01-basic/demoproj att.json # 4. 基于 policy 对 CI pipeline 进行拦截(违规时以非零状态退出) attestport gate demos/01-basic/demoproj --policy demos/01-basic/policy.json --fail-on high # 通过 MCP (stdio) 将 engine 暴露给 agents: attestport mcp ``` ## 命令 | 命令 | 作用 | |---------|--------------| | `sbom ` | 遍历项目,从 lockfile 检测依赖项,对文件进行哈希处理,生成 CycloneDX 风格的 SBOM。 | | `attest ` | 构建 in-toto `Statement` + SLSA 风格的 provenance 断言(subject digest、builder、materials、绑定的 SBOM digest)并附加分离式签名。 | | `verify ` | 重新计算 subject digest,检查签名,可选地强制执行组件策略。任何不匹配均返回非零值。 | | `gate --policy policy.json` | CI 闸门:遇到被封禁的许可证、已知的恶意组件、未锁定的 deps 或缺失/无效的证明文件时失败。支持 `table` / `json` / `sarif` 输出 + `--fail-on`。 | | `mcp` | 作为本地 MCP server (stdio JSON-RPC) 运行,暴露 `sbom`、`verify`、`gate`。 | ## 支持的 lockfile `requirements.txt` (PyPI) · `package-lock.json` (npm, v1/v2/v3) · `go.sum` (Go modules) · `Cargo.lock` (crates.io)。每个组件都会附带一个 [Package-URL](https://github.com/package-url/purl-spec) (`purl`)、一个锁定/未锁定标志,以及 lockfile 中携带的任何完整性哈希值。 ## 签名模型(必读) 分离式签名是对规范声明字节的**带密钥 HMAC-SHA256**(`signature.algorithm = "hmac-sha256"`)。这在仅使用共享密钥且除了 `hashlib`/`hmac` 之外无需任何其他依赖的情况下提供了完整性 + 真实性验证,因此它可以在裸机气隙 runner 上运行。 它**不是**公钥加密方案,这是有意为之的。在生产环境中,你应该: - 通过 `ATTESTPORT_KEY`(或 `--key`)设置真实的密钥,而不是使用内置的演示密钥(当使用演示密钥时,工具会发出强烈的警告),并且 - 理想情况下,在集成边界处替换为非对称签名方案或 HSM。 规范化处理(`sort_keys`,无多余空格,UTF-8)使得 digest 和签名在不同机器之间能够实现逐字节复现。 ## 策略文件 ``` { "banned_licenses": ["GPL-3.0", "AGPL-3.0", "SSPL-1.0"], "banned_components": ["left-pad", "evil-pkg@1.0.0"], "allowed_components": null, "require_pinned": true, "require_attestation": false } ``` `allowed_components`(设置后)会将闸门转换为允许列表。`banned_components` 条目可匹配纯名称或 `name@version`。 ## 可选的 AI 风险摘要 `attestport sbom --ai` 会**仅在**配置了本地 Cognis AI 后端(`COGNIS_AI_BACKEND`)时,向 SBOM 添加自然语言风险摘要。该功能**默认关闭**,绝不是必需的,且不会有任何数据离开本地环境 — 在未配置后端的情况下,生成的 SBOM 与正常运行时在字节上完全一致。 ## 内置演示 请参阅 [`demos/01-basic/SCENARIO.md`](demos/01-basic/SCENARIO.md) 获取完整的 sbom → attest → verify → gate 演示流程。 ## 输出格式 - **Table**(默认)— 人类可读的终端摘要 - **JSON** — 供 pipeline 使用的机器可读 SBOM / 闸门发现结果 - **SARIF** — 直接输出到 GitHub 代码扫描 / IDE 问题面板 ## 原创性 / 净室开发 这是一个 **100% 原创的、净室(clean-room)** 实现。它没有 fork、vendor 或复制任何第三方供应链项目。它特意*针对*公开的开放规范(SPDX/CycloneDX/in-toto/SLSA)— 这些是任何人都可以生成的开放标准 — 但这里的每个解析器、哈希器、签名器和闸门规则都是仅使用 Python 标准库从头编写的。 ## 它如何融入 Cognis Neural Suite `attestport` 是 [Cognis Neural Suite](https://github.com/cognis-digital) 中的一个工具。每个工具都附带一个 MCP server,以便 [Cognis.Studio](https://cognis.studio) agent 能够将它们作为受限作用域的功能进行调用。 **`dev-supply-chain` 中的同级工具:** [`depgraph`](https://github.com/cognis-digital/depgraph)、[`ossaudit`](https://github.com/cognis-digital/ossaudit)、[`secretsweep`](https://github.com/cognis-digital/secretsweep)、[`pipewatch-pro`](https://github.com/cognis-digital/pipewatch-pro) ## 架构与路线图 - 设计文档:[`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) - 计划内工作:[`ROADMAP.md`](ROADMAP.md) ## 互操作性 `attestport` 可与 300 多个工具组成的 Cognis suite 组合使用 — JSON 输入/输出以及共享的 兼容 OpenAI 的 `/v1` 主干网络。请参阅 **[INTEROP.md](INTEROP.md)** 了解 suite 地图、组合模式和参考技术栈。 ## 集成 通过 [`cognis-connect`](https://github.com/cognis-digital/cognis-connect) 将 `attestport` 的发现结果转发至 STIX/MISP/Sigma/Splunk/Elastic/Slack/webhook。请参阅 **[INTEGRATIONS.md](INTEGRATIONS.md)**。 ## 许可证 在 **Cognis Open Collaboration License (COCL) v1.0** 下源码可见 — 可免费用于个人、内部评估、研究和教育用途;**商业/生产用途需要许可证** (licensing@cognis.digital)。请参阅 [LICENSE](LICENSE)。 ## 关于 **[Cognis Digital](https://cognis.digital)** — 美国, 怀俄明州 · *让明天更美好:高级网络安全、AI 创新与区块链专业知识。*
标签:SBOM, 图数据库, 安全合规, 硬件无关, 离线环境, 网络代理, 软件溯源, 逆向工具