secubox-openwrt/docs-zh/sbom-pipeline.md
CyberMind-FR ccfb58124c docs: Add trilingual documentation (French and Chinese translations)
Add complete French (fr) and Chinese (zh) translations for all documentation:

- Root files: README, CHANGELOG, SECURITY, BETA-RELEASE
- docs/: All 16 core documentation files
- DOCS/: All 19 deep-dive documents including embedded/ and archive/
- package/secubox/: All 123+ package READMEs
- Misc: secubox-tools/, scripts/, EXAMPLES/, config-backups/, streamlit-apps/

Total: 346 translation files created

Each file includes language switcher links for easy navigation between
English, French, and Chinese versions.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-20 10:00:18 +01:00

304 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SecuBox SBOM 流水线文档
🌐 **语言:** [English](../docs/sbom-pipeline.md) | [Français](../docs-fr/sbom-pipeline.md) | 中文
## 概述
SecuBox SBOM软件物料清单流水线生成符合 CycloneDX 1.6 和 SPDX 2.3 标准的 SBOM以满足欧盟网络弹性法案CRA附件一的合规要求。
## 架构
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ SecuBox SBOM 流水线 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 数据源 A │ │ 数据源 B │ │ 数据源 C │ │ 数据源 D │ │
│ │ OpenWrt │ │ SecuBox │ │ Rootfs │ │ 固件 │ │
│ │ 原生 │ │ Feed │ │ 扫描 │ │ 镜像 │ │
│ │ │ │ │ │ │ │ │ │
│ │ 软件包 │ │ Makefiles │ │ Syft 扫描 │ │ Syft 扫描 │ │
│ │ .manifest │ │ PKG_* 变量 │ │ dir:rootfs │ │ file:*.bin │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │ │
│ └──────────────────┴──────────────────┴──────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ 合并与去重 │ │
│ │ (jq fusion) │ │
│ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ 验证 │ │
│ │ cyclonedx-cli │ │
│ └────────┬────────┘ │
│ │ │
│ ┌──────────────┼──────────────┐ │
│ ▼ ▼ ▼ │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
│ │ CVE 扫描 │ │ CRA 报告 │ │ 校验和 │ │
│ │ (grype) │ │ 摘要 │ │ sha256sum │ │
│ └───────────┘ └───────────┘ └───────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
输出文件:
├── secubox-VERSION.cdx.json # CycloneDX 1.6(主要格式)
├── secubox-VERSION.spdx.json # SPDX 2.3(备选格式)
├── secubox-VERSION-cve-report.json # Grype CVE 扫描结果
├── secubox-VERSION-cve-table.txt # 人类可读的 CVE 表格
├── secubox-VERSION-cra-summary.txt # CRA 合规摘要
├── sbom-warnings.txt # 缺失元数据警告
└── checksums.sha256 # 文件完整性校验和
```
## 前提条件
### 最低版本要求
| 工具 | 最低版本 | 用途 |
|------|----------|------|
| OpenWrt | 22.03 | 原生 SBOM 支持 |
| Perl | 5.26+ | package-metadata.pl |
| jq | 1.6+ | JSON 处理 |
| Syft | 0.100+ | 文件系统扫描 |
| Grype | 0.70+ | CVE 扫描 |
| cyclonedx-cli | 0.25+ | SBOM 验证 |
### 环境配置
```bash
# 检查前提条件
./scripts/check-sbom-prereqs.sh
# 安装 SBOM 工具(如果未安装)
# Syft
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b ~/.local/bin
# Grype
curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b ~/.local/bin
# cyclonedx-cli
curl -sSfL -o ~/.local/bin/cyclonedx-cli \
https://github.com/CycloneDX/cyclonedx-cli/releases/latest/download/cyclonedx-linux-x64
chmod +x ~/.local/bin/cyclonedx-cli
# 添加到 PATH
export PATH="$HOME/.local/bin:$PATH"
```
### OpenWrt Kconfig 配置
`.config` 中启用原生 SBOM 生成:
```
CONFIG_JSON_CYCLONEDX_SBOM=y
CONFIG_COLLECT_KERNEL_DEBUG=n
```
## 使用方法
### 日常开发
```bash
# 完整 SBOM 生成(全部 4 个数据源)
./scripts/sbom-generate.sh
# 从现有构建产物快速生成 SBOM无需重新构建
./scripts/sbom-generate.sh --version 0.20
# 离线模式(无网络,使用缓存的数据库)
./scripts/sbom-generate.sh --offline
# 跳过 CVE 扫描(更快)
./scripts/sbom-generate.sh --no-cve
```
### 使用 Makefile 目标
```bash
# 完整构建 + SBOM
make sbom
# 仅生成 SBOM无需重新构建
make sbom-quick
# 验证现有 SBOM
make sbom-validate
# 仅进行 CVE 扫描
make sbom-scan
# 清理 SBOM 输出
make sbom-clean
# 显示帮助
make sbom-help
```
### 审计 Feed 软件包
```bash
# 检查所有 SecuBox feed 软件包是否缺失元数据
./scripts/sbom-audit-feed.sh
# 输出feeds/secubox/MANIFEST.md
```
## 添加新软件包
向 SecuBox feed 添加新软件包时,请确保 SBOM 兼容性:
### 检查清单
- [ ] 已定义 **PKG_NAME**
- [ ] 已定义 **PKG_VERSION**
- [ ] 已定义 **PKG_LICENSE**SPDX 标识符)
- [ ] 已定义 **PKG_HASH**sha256
- [ ] 已定义 **PKG_SOURCE_URL**(可选但推荐)
### Makefile 示例
```makefile
include $(TOPDIR)/rules.mk
PKG_NAME:=my-package
PKG_VERSION:=1.0.0
PKG_RELEASE:=1
PKG_SOURCE_URL:=https://github.com/example/my-package/archive
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_HASH:=a1b2c3d4e5f6... # 源码压缩包的 sha256sum
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=LICENSE
PKG_MAINTAINER:=您的姓名 <email@example.com>
```
### 计算 PKG_HASH
```bash
# 下载并计算源码哈希
wget https://example.com/package-1.0.0.tar.gz
sha256sum package-1.0.0.tar.gz
# 或使用 OpenWrt 下载助手
make package/my-package/download V=s
sha256sum dl/my-package-1.0.0.tar.gz
```
## CRA 附件一映射
| CRA 要求 | SBOM 实现 |
|----------|-----------|
| 第13(5)条 - 组件识别 | `components[].purl`(软件包 URL |
| 第13(5)条 - 供应商识别 | `metadata.component.supplier` |
| 第13(5)条 - 版本信息 | `components[].version` |
| 第13(5)条 - 依赖关系 | `dependencies[]` 数组 |
| 第13(5)条 - 许可证信息 | `components[].licenses[]` |
| 第13(6)条 - 机器可读格式 | CycloneDX 1.6 JSON + SPDX 2.3 |
| 第13(6)条 - 漏洞披露 | SECURITY.md + VEX 文档 |
| 第13(7)条 - 唯一标识 | PURL + `serialNumber` UUID |
| 附件一(2) - 完整性验证 | `hashes[]`(含 SHA-256 |
## ANSSI CSPN 提交
申请 CSPN 认证时,请在申请材料中包含以下内容:
### 必需文档
1. **SBOM 文件**
- `secubox-VERSION.cdx.json`(主要格式)
- `secubox-VERSION.spdx.json`(备选格式)
2. **来源证明**
- `checksums.sha256`(完整性验证)
- 元数据中的 Git 提交哈希
3. **漏洞分析**
- `secubox-VERSION-cve-report.json`
- `secubox-VERSION-cra-summary.txt`
4. **流程文档**
- 本文档(`docs/sbom-pipeline.md`
- `SECURITY.md`(漏洞披露政策)
### 提交检查清单
- [ ] 所有组件都有 PKG_HASH 和 PKG_LICENSE
- [ ] SBOM 通过 cyclonedx-cli 验证
- [ ] 无未处理的严重级别 CVE
- [ ] VEX 文档说明了已接受的风险
- [ ] 已验证 SOURCE_DATE_EPOCH 可重现性
## 故障排除
### 常见错误
#### "OpenWrt version < 22.03"
原生 CycloneDX SBOM 支持需要 OpenWrt 22.03 或更高版本。
**解决方案:** 升级您的 OpenWrt 分支,或使用不依赖原生支持的 `sbom-generate.sh`(将回退到 Makefile 解析)。
#### "package-metadata.pl not found"
您的 OpenWrt 检出中缺少 SBOM 生成脚本。
**解决方案:**
```bash
git checkout origin/master -- scripts/package-metadata.pl
```
#### "syft: command not found"
Syft 未安装或不在 PATH 中。
**解决方案:**
```bash
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b ~/.local/bin
export PATH="$HOME/.local/bin:$PATH"
```
#### "SBOM validation failed"
生成的 SBOM 存在架构错误。
**解决方案:**
1. 检查 `sbom-warnings.txt` 了解缺失的元数据
2. 修复缺少 PKG_HASH 或 PKG_LICENSE 的 Makefile
3. 重新生成 SBOM
#### "Grype database update failed"
网络连接问题或速率限制。
**解决方案:**
- 使用 `--offline` 模式配合缓存的数据库
- 或手动更新:`grype db update`
### 调试模式
```bash
# 详细输出
DEBUG=1 ./scripts/sbom-generate.sh
# 保留中间文件
KEEP_TEMP=1 ./scripts/sbom-generate.sh
```
## 版本历史
| 版本 | 日期 | 变更 |
|------|------|------|
| 1.0 | 2026-03-04 | 初始流水线实现 |
---
_由 CyberMind Produits SASU 维护_
_联系方式secubox@cybermind.fr_