vincents-ai/transparenz
GitHub: vincents-ai/transparenz
一款用于生成、增强、校验和提交符合 BSI TR-03183-2 标准 SBOM 的命令行工具,同时集成漏洞扫描与数据库持久化功能。
Stars: 1 | Forks: 0
# transparenz
一个用于生成、补充、验证和提交符合 BSI TR-03183-2 标准的软件物料清单 (SBOM) 的 CLI 工具。
## 功能
- 通过原生 Syft 库生成 SBOM (CycloneDX 1.6 JSON, SPDX 2.3 JSON)
- BSI TR-03183-2 信息补充:SHA-512 制品哈希、供应商检测、许可证检测、组件分类 (executable/archive/structured)、依赖完整性断言
- 带加权评分的 SBOM 合规性验证 (`bsi-check`)
- 使用 Bearer token 认证将 SBOM 提交到远程服务器 endpoint
- 基于 PostgreSQL 的 SBOM 和漏洞扫描结果持久化存储
- 通过原生 Grype 库进行独立漏洞扫描
## 要求
- Go 1.25+
- PostgreSQL(用于 `--save` 标志以及 `db` / `list` / `show` / `search` / `delete` 命令)
- Grype 漏洞数据库(在首次运行 `scan` 时自动下载)
## 安装
```
# 通过 go install 安装
go install github.com/vincents-ai/transparenz@latest
# 或者从源码构建
git clone https://github.com/vincents-ai/transparenz.git
cd transparenz
go build -o transparenz .
```
## 快速开始
### 1. 生成符合 BSI 标准的 SBOM 并保存到文件
```
transparenz generate . \
--format cyclonedx \
--bsi-compliant \
--binary ./build/myapp \
--manufacturer "Acme Corp" \
--manufacturer-url "https://acme.example.com" \
--output sbom.json
```
### 2. 生成并直接提交到服务器
```
export TRANSPARENZ_SERVER_URL=https://sbom.example.com/api/sbom
export TRANSPARENZ_TOKEN=my-bearer-token
transparenz generate . \
--format cyclonedx \
--bsi-compliant \
--submit
```
### 3. 生成、持久化到数据库并进行漏洞扫描
```
# 首先运行数据库迁移(一次)
transparenz db migrate
# 生成并持久化
transparenz generate . --bsi-compliant --save
# 列出已存储的 SBOM 以获取 ID
transparenz list
# 扫描 SBOM 并将结果保存到数据库
transparenz scan sbom.json --save
```
## 命令参考
### 全局标志
| 标志 | 简写 | 默认值 | 描述 |
|------|-------|---------|-------------|
| `--config` | `-c` | `$HOME/.transparenz.yaml` | 配置文件路径 |
| `--verbose` | `-v` | `false` | 启用详细输出 |
### `generate [source]`
从源路径或容器镜像生成 SBOM。
```
transparenz generate [source] [flags]
```
| 标志 | 简写 | 默认值 | 描述 |
|------|-------|---------|-------------|
| `--format` | `-f` | `spdx` | 输出格式:`spdx` 或 `cyclonedx` |
| `--output` | `-o` | stdout | 输出文件路径 |
| `--save` | | `false` | 将 SBOM 持久化到 PostgreSQL 数据库 |
| `--bsi-compliant` | `-b` | `false` | 应用 BSI TR-03183-2 信息补充 (哈希、许可证、供应商、属性) |
| `--manufacturer` | | | SBOM 生产者组织名称 (也可使用:`TRANSPARENZ_MANUFACTURER`) |
| `--manufacturer-url` | | | SBOM 生产者组织 URL (也可使用:`TRANSPARENZ_MANUFACTURER_URL`) |
| `--binary` | | | 用于注入 SHA-512 哈希的已编译二进制文件路径 (需要 `--bsi-compliant`) |
| `--scope` | | `source` | SBOM 范围:`source` (依赖清单) 或 `binary` (已编译二进制文件/容器镜像) |
| `--no-fetch` | | `false` | 跳过预扫描依赖获取 (禁用 `go mod download` 等) |
| `--submit` | | `false` | 生成后将生成的 SBOM 提交到远程服务器 |
| `--server-url` | | | 远程服务器 endpoint URL (也可使用:`TRANSPARENZ_SERVER_URL`) |
| `--token` | | | Bearer 认证 token (也可使用:`TRANSPARENZ_TOKEN`) |
| `--insecure` | | `false` | 跳过 TLS 验证 (也可使用:`TRANSPARENZ_INSECURE=true`) |
| `--timeout` | | `30` | 提交的 HTTP 超时时间 (秒) |
**示例:**
```
transparenz generate .
transparenz generate . --format cyclonedx --output sbom.json
transparenz generate docker:nginx:latest --format spdx
transparenz generate . --bsi-compliant --binary ./build/app --save
```
### `enrich [sbom-path]`
使用 BSI TR-03183-2 元数据补充现有 SBOM。
```
transparenz enrich [sbom-path] [flags]
```
为所有组件添加:BSI 属性 (`executable`、`archive`、`structured`)、依赖完整性断言,并将 CycloneDX 的 `specVersion` 升级到 1.6。
| 标志 | 简写 | 默认值 | 描述 |
|------|-------|---------|-------------|
| `--output` | `-o` | stdout | 输出文件路径 |
| `--artifacts` | | | 用于计算 SHA-512 哈希的已编译二进制文件目录 |
| `--binary` | | | 用于注入 SHA-512 哈希的单个已编译二进制文件路径 |
| `--manufacturer` | | | SBOM 生产者组织名称 (也可使用:`TRANSPARENZ_MANUFACTURER`) |
| `--manufacturer-url` | | | SBOM 生产者组织 URL (也可使用:`TRANSPARENZ_MANUFACTURER_URL`) |
| `--submit` | | `false` | 补充后将增强的 SBOM 提交到远程服务器 |
| `--server-url` | | | 远程服务器 endpoint URL (也可使用:`TRANSPARENZ_SERVER_URL`) |
| `--token` | | | Bearer 认证 token (也可使用:`TRANSPARENZ_TOKEN`) |
| `--insecure` | | `false` | 跳过 TLS 验证 (也可使用:`TRANSPARENZ_INSECURE=true`) |
| `--timeout` | | `30` | 提交的 HTTP 超时时间 (秒) |
**示例:**
```
transparenz enrich sbom.json -o sbom-enriched.json
transparenz enrich sbom.json --artifacts ./build/ -o sbom-final.json
transparenz enrich sbom.json --binary ./build/app --manufacturer "Acme Corp" -o sbom-final.json
```
### `bsi-check [sbom-path]`
根据 BSI TR-03183-2 要求验证 SBOM 并输出合规性报告。
```
transparenz bsi-check [sbom-path] [flags]
```
| 标志 | 简写 | 默认值 | 描述 |
|------|-------|---------|-------------|
| `--output` | `-o` | stdout | JSON 合规性报告的输出文件路径 |
**示例:**
```
transparenz bsi-check sbom.json
transparenz bsi-check sbom.json --output report.json
```
### `validate [sbom-path]`
根据 BSI TR-03183-2 要求验证 SBOM。这是 `bsi-check` 的别名,侧重于通过/失败的验证结果。
```
transparenz validate [sbom-path]
```
检查项:
- 哈希算法 (根据 BSI TR-03183-2 强制要求 SHA-512)
- 许可证覆盖率 (所有组件的 SPDX 标识符)
- 供应商覆盖率 (所有组件的供应商/作者信息)
- 组件属性 (`executable`、`archive`、`structured`)
- 依赖完整性断言
- 格式版本 (CycloneDX 1.6+ 或 SPDX 2.3+)
### `submit`
使用 Bearer token 认证将 SBOM 提交到远程服务器。从 `--file` 或 stdin 读取。除非覆盖,否则 Content-Type 会根据 SBOM 内容自动检测。
```
transparenz submit [flags]
```
| 标志 | 简写 | 默认值 | 描述 |
|------|-------|---------|-------------|
| `--file` | `-f` | stdin | 要提交的 SBOM 文件路径 |
| `--url` | | | 服务器 endpoint URL (也可使用:`TRANSPARENZ_SERVER_URL`) |
| `--token` | | | Bearer 认证 token (也可使用:`TRANSPARENZ_TOKEN`) |
| `--timeout` | | `30` | HTTP 超时时间 (秒) |
| `--insecure` | | `false` | 跳过 TLS 证书验证 |
| `--content-type` | | 自动检测 | 覆盖 `Content-Type` header |
**示例:**
```
transparenz submit --file sbom.json --url https://sbom.example.com/api/sbom --token my-token
cat sbom.json | transparenz submit --url https://sbom.example.com/api/sbom --token my-token
```
### `scan [sbom-path]`
使用原生 Grype 库扫描 SBOM 中的已知漏洞。接受 SPDX JSON 和 CycloneDX JSON 输入。
```
transparenz scan [sbom-path] [flags]
```
| 标志 | 简写 | 默认值 | 描述 |
|------|-------|---------|-------------|
| `--output-format` | `-f` | `json` | 输出格式:`json` 或 `table` |
| `--output` | `-o` | stdout | 输出文件路径 |
| `--severity` | | | 按最低严重程度过滤结果 (`Critical`, `High`, `Medium`, `Low`) |
| `--save` | | `false` | 将扫描结果持久化到数据库 (需要先保存 SBOM) |
**示例:**
```
transparenz scan sbom.json
transparenz scan sbom.json --output-format table
transparenz scan sbom.json --severity Critical --save
transparenz scan sbom.json -f json --output results.json
```
### `list`
列出存储在数据库中的 SBOM。
```
transparenz list [flags]
```
| 标志 | 简写 | 默认值 | 描述 |
|------|-------|---------|-------------|
| `--limit` | `-l` | `50` | 要显示的 SBOM 最大数量 |
| `--offset` | `-s` | `0` | 分页偏移量 |
| `--format` | | `table` | 输出格式:`table` 或 `json` |
### `show [sbom-id]`
显示已存储 SBOM 的详细信息,包括其软件包列表。
```
transparenz show [sbom-id]
```
### `search [package-name]`
按软件包名称搜索已存储的 SBOM。
```
transparenz search [package-name]
```
### `delete [sbom-id]`
从数据库中删除已存储的 SBOM 及所有相关数据。
```
transparenz delete [sbom-id] [flags]
```
| 标志 | 简写 | 默认值 | 描述 |
|------|-------|---------|-------------|
| `--force` | `-f` | `false` | 跳过确认提示 |
### `db migrate`
运行 GORM 自动迁移以创建或更新数据库 schema。
```
transparenz db migrate
```
### `db export `
从数据库导出原始 SBOM JSON。接受完整的 UUID 或 8 个字符的前缀。
```
transparenz db export [flags]
```
| 标志 | 简写 | 默认值 | 描述 |
|------|-------|---------|-------------|
| `--output` | `-o` | stdout | 输出文件路径 |
**示例:**
```
transparenz db export a1b2c3d4
transparenz db export a1b2c3d4-e5f6-7890-abcd-ef1234567890 --output exported.json
```
## 环境变量
| 变量 | 使用者 | 描述 |
|----------|---------|-------------|
| `DATABASE_URL` | 所有 db 命令 | PostgreSQL 连接字符串 (默认:`host=localhost user=shift dbname=transparenz port=5432 sslmode=disable`) |
| `TRANSPARENZ_SERVER_URL` | `generate`, `enrich`, `submit` | 远程服务器 endpoint URL |
| `TRANSPARENZ_TOKEN` | `generate`, `enrich`, `submit` | Bearer 认证 token |
| `TRANSPARENZ_MANUFACTURER` | `generate`, `enrich` | SBOM 生产者组织名称 |
| `TRANSPARENZ_MANUFACTURER_URL` | `generate`, `enrich` | SBOM 生产者组织 URL |
| `TRANSPARENZ_INSECURE` | `generate`, `enrich` | 设为 `true` 以跳过 TLS 证书验证 |
## BSI TR-03183-2 合规性
`transparenz` 旨在满足《欧盟网络弹性法案》要求的 BSI TR-03183-2 软件物料清单技术指南。
**该工具的功能:**
- **格式**:输出 CycloneDX 1.6 JSON (或 SPDX 2.3 JSON)。`bsi-check` 验证器最低要求 CycloneDX 1.6+ 或 SPDX 2.3+。
- **SHA-512 哈希** (第 4.3 节):通过 `--binary` (单个文件) 或 `--artifacts` (目录扫描) 从已编译的二进制文件计算得出。SHA-512 是强制性的;仅使用 SHA-256 是不合规的。
- **供应商和许可证补充**:将基于命名空间的供应商检测和 SPDX 许可证标准化应用于所有组件。
- **组件分类** (第 4.1 节):每个组件都会获得 `executable`、`archive` 和 `structured` 属性。
- **依赖完整性** (第 4.2 节):将 `completeness: complete` 断言注入到 SBOM 元数据中。
- **制造商身份**:`metadata.manufacturer` 字段由 `--manufacturer` / `TRANSPARENZ_MANUFACTURER` 填充。
**合规性评分 (`bsi-check`):**
验证器根据六个类别生成加权总分:
| 类别 | 权重 | 达标阈值 |
|----------|--------|------------------------|
| SHA-512 哈希覆盖率 | 30% | ≥ 80% 的组件 |
| 许可证覆盖率 | 25% | ≥ 80% 的组件 |
| 供应商覆盖率 | 15% | ≥ 80% 的组件 |
| 组件属性 | 15% | ≥ 80% 的组件 |
| 依赖完整性 | 10% | 存在 |
| 格式版本 | 5% | CycloneDX 1.6+ 或 SPDX 2.3+ |
当所有六个类别都分别达到其阈值时,该 SBOM 即被标记为**合规**。
## 数据库设置
`transparenz` 通过 GORM 使用 PostgreSQL。 `DATABASE_URL` 环境变量或使用默认连接字符串。
```
# 示例:创建数据库
createdb transparenz
# 运行迁移(创建表)
transparenz db migrate
```
`generate` 和 `scan` 上的 `--save` 标志需要运行已应用迁移的 PostgreSQL 实例。
## 许可证
本软件采用双重许可:
- **社区版**:GNU Affero General Public License v3.0 或更高版本 (AGPL-3.0-or-later)。免费用于开源使用、研究、公共部门和非营利组织。修改版本的网络使用需要根据 AGPL 披露源代码。
- **商业许可证**:用于闭源商业应用、专有 SaaS 或嵌入到非 AGPL 兼容产品中。请联系 `shift@someone.section.me`。
请参阅 [LICENSE.md](LICENSE.md) 获取完整的许可文本。
标签:EVTX分析, Go, LLM防护, Ruby工具, SBOM, 合规检测, 日志审计, 测试用例, 硬件无关