
sbomlyze v0.3.5
あなたのSBOMのgit diff ,CycloneDX/SPDX/Syftの部品表を比較し、改ざんを検出し、CIをゲートする
sbomlyze
SBOMのためのgit diff。 2つのSoftware Bill of Materialsを比較し、ビルド、バージョン、リリース間で何が変わったかを確認できます。
sbomlyzeはバージョン文字列だけでなく、コンポーネントのハッシュを比較します。攻撃者がバージョンを上げずにパッケージを差し替えた場合、sbomlyzeはそれを検出します。ジェネレーターや脆弱性スキャナーはこれを見逃します。
[![CI][ci-img]][ci] [![GitHub Marketplace][marketplace-img]][marketplace] [![GitHub Release][release-img]][release] [![Go Report Card][go-report-img]][go-report] [![OpenSSF Scorecard][scorecard-img]][scorecard] [![OpenSSF Best Practices][best-practices-img]][best-practices] [![License: Apache-2.0][license-img]][license] [![Downloads][download-img]][download]
このシグナルがマニフェストや通常のコンポーネントdiffとどう違うのかは、 Manifest diff vs. SBOM diff vs. integrity driftを参照してください。
ジェネレーターはSBOMを作り、スキャナーはCVEを見つけます。sbomlyzeは2つのSBOM間で何が変わったか、そしてそれを信頼すべきかどうかを教えてくれます。 ジェネレーターの後に実行してください:
syft image:tag -o cyclonedx-json | sbomlyze - --complianceは一時ファイルなしで生成されたSBOMを分析しスコアリングします。ベースラインと比較してドリフトを分類し、パイプラインをゲートできます。
GitHub Action クイックスタート
[SBOMlyze Diff from GitHub Marketplace][marketplace]を追加して、チェックインされたSBOMまたは別途生成されたSBOMをgitベースラインと比較します。以下の不変のSHAは公開されたv0.5.1 Actionです:```yaml
steps:
-
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0
-
uses: rezmoss/sbomlyze@31503690611fda8ebba4ed2bd186eda000442594 # v0.5.1 with: sbom-path: build/sbom.cdx.json
Action はデフォルトで Job Summary を書き込み、ポリシーの適用、整合性ドリフトの報告、SARIF のアップロード、または単一のプルリクエストコメントの維持ができます。入力、出力、権限、セキュリティガイダンスについては、[完全な Action リファレンス](https://github.com/rezmoss/sbomlyze/blob/main/ACTION.md)を参照してください。合格する依存関係の更新とブロックされた同一バージョンのハッシュ変更の例については、[ライブデモンストレーションリポジトリ](https://github.com/rezmoss/sbomlyze-action-demo)を参照してください。公開ワークフロー実行と SARIF エビデンスも含まれています。
フォーマット固有のドッグフーディングには、公開されている [Go + SPDX](https://github.com/rezmoss/sbomlyze-go-spdx-demo)、[Node + CycloneDX](https://github.com/rezmoss/sbomlyze-node-cyclonedx-demo)、または [container](https://github.com/rezmoss/sbomlyze-container-demo) の例を使用してください。それぞれに 5 つの再現可能なレビューシナリオが含まれています。[10 分間のベータガイド](https://github.com/rezmoss/sbomlyze/blob/main/BETA.md)には、4 つの焦点を絞ったアクティベーションとシグナル品質に関する質問がまとめられています。
生成された SBOM をコミットする必要はありません。`baseline: workflow-artifact` は、成功したデフォルトブランチの実行から最新の一致するアーティファクトを取得します。[固定された Syft コンパニオンワークフロー](https://github.com/rezmoss/sbomlyze/blob/main/examples/workflows/syft-companion.yml)は、SBOMlyze がレビューとポリシーを担当する一方で、生成とベースライン公開を示しています。
## なぜ sbomlyze なのか?
多くのツールが SBOM を生成します。それらを比較するものは少なく、変更が日常的なものかサプライチェーンの危険信号かを教えてくれるものはさらに少ないです。sbomlyze はそのギャップを埋めます。
| 機能 | **sbomlyze** | cyclonedx-cli | sbomqs | syft / trivy |
|---|:---:|:---:|:---:|:---:|
| SBOM 間の **diff** | ✅ | 基本 | ❌ | ❌ |
| **整合性 / 改ざん** ドリフト(バージョン変更なしでハッシュが変更) | ✅ | ❌ | ❌ | ❌ |
| 依存関係グラフの diff + 推移的深度リスク | ✅ | ❌ | ❌ | ❌ |
| **NTIA / CISA / BSI** コンプライアンススコアリング | ✅ | ❌ | ✅ | ❌ |
| フォーマット変換(Syft / CycloneDX / SPDX) | ✅ | ✅ | ❌ | 部分的 |
| **TUI + Web UI** エクスプローラー | ✅ | ❌ | ❌ | ❌ |
| ポリシーゲート + SARIF / JUnit / Markdown / HTML / Patch | ✅ | 部分的 | 部分的 | 部分的 |
## 機能
- **SBOM の diff**: 2 つの SBOM を比較し、追加、削除、変更されたコンポーネントを一目で確認
- **ドリフト分類**: バージョンドリフトと**整合性ドリフト**(バージョン変更なしでハッシュが変更され、改ざんを示す)、およびメタデータドリフトを区別
- **コンプライアンススコアリング**: 任意の SBOM を **NTIA**、**CISA 2025**、**BSI TR-03183** の最小要素に対してスコアリング
- **依存関係グラフの diff**: 推移的依存関係とサプライチェーンの深度を追跡
- **マルチフォーマット対応**: Syft、CycloneDX、SPDX(JSON)
- **フォーマット変換**: CycloneDX、SPDX、Syft フォーマット間の変換
- **強力な識別子マッチング**: PURL → CPE → BOM-ref → namespace/name の優先順位
- **統計モード**: 単一の SBOM をライセンス、依存関係、整合性メトリクスについて分析
- **インタラクティブ TUI モード**: キーボードナビゲーションと検索で SBOM を探索
- **Web UI モード**: ドラッグアンドドロップアップロードを備えたブラウザベースの SBOM エクスプローラー
- **ポリシーエンジン**: CI パイプラインでドリフト、ライセンス、コンプライアンススコアのルールを適用
- **GitHub Marketplace Action**: Job Summary、SARIF、およびオプションのコメント出力で SBOM ドリフトに対してプルリクエストをゲート
- **重複と衝突の検出**: 同じパッケージの複数バージョンと曖昧な識別子マッチングを検出
- **複数の出力フォーマット**: Text、JSON、SARIF、JUnit XML、Markdown、HTML、JSON Patch
- **寛容なパース**: 構造化された警告を伴ってエラー時も続行
## インストール
### Homebrew(macOS/Linux)```bash
brew install rezmoss/sbomlyze/sbomlyze
インストーラースクリプト
インストーラースクリプトは、お使いのOS/アーキテクチャに適したバイナリをダウンロードします:```bash
Install to ./bin
curl -sSfL https://raw.githubusercontent.com/rezmoss/sbomlyze/main/install.sh | sh
Install to /usr/local/bin (requires sudo)
curl -sSfL https://raw.githubusercontent.com/rezmoss/sbomlyze/main/install.sh | sudo sh -s -- -b /usr/local/bin
Install specific version
curl -sSfL https://raw.githubusercontent.com/rezmoss/sbomlyze/main/install.sh | sh -s -- -v 0.4.0
**インストーラーオプション:**
| オプション | 説明 |
|--------|-------------|
| `-b <dir>` | インストールディレクトリ (デフォルト: `./bin`) |
| `-d` | デバッグ出力を有効化 |
| `-v <ver>` | 特定のバージョンをインストール (デフォルト: 最新) |
インストーラーは常にリリースのチェックサムを検証します。互換性のある GitHub CLI
がインストールされている場合、リリースのビルドプロベナンスも検証し、その検証が
成功しない場合はフェイルクローズします。
### Go Install```bash
go install github.com/rezmoss/sbomlyze/cmd/sbomlyze@latest
バイナリリリースから
最新のバイナリは GitHub Releases からダウンロードしてください。
v0.3.7 以降、リリースアーカイブは GitHub のアーティファクト
アテステーション付きで公開されています。ダウンロードしたファイルは次の方法で独立して検証できます:```bash
gh attestation verify ./sbomlyze_0.4.0_Linux_x86_64.tar.gz
--repo rezmoss/sbomlyze
--signer-workflow rezmoss/sbomlyze/.github/workflows/release.yml
署名されていない apt、rpm、apk リポジトリの手順は、リポジトリがパッケージマネージャー標準の署名検証をサポートするまで削除されました。
**macOS ユーザー:** ダウンロード後に quarantine フラグを削除してください:```bash
xattr -d com.apple.quarantine ./sbomlyze
chmod +x ./sbomlyze
ソースからのビルド```bash
git clone https://github.com/rezmoss/sbomlyze.git cd sbomlyze go build -o sbomlyze ./cmd/sbomlyze
## クイックスタート```bash
# Compare two SBOMs (the headline use case)
sbomlyze before.json after.json
# Analyze a single SBOM
sbomlyze image.json
# Read an SBOM from standard input
syft image:tag -o cyclonedx-json | sbomlyze -
# Use standard input on either side of a diff
syft image:tag -o cyclonedx-json | sbomlyze baseline.json -
# Score an SBOM against NTIA / CISA / BSI minimum elements
sbomlyze image.json --compliance
# Interactive TUI explorer
sbomlyze image.json -i
# Web UI (opens browser)
sbomlyze -web
# Convert between SBOM formats
sbomlyze convert syft.json --to spdx
sbomlyze convert cdx.json --to syft -o output.json
# JSON output for CI integration
sbomlyze before.json after.json --json
# SARIF output for GitHub Code Scanning
sbomlyze before.json after.json --format sarif
# Markdown report for PR comments
sbomlyze before.json after.json --format markdown
# Apply policy checks
sbomlyze before.json after.json --policy policy.json
使用方法```
sbomlyze <sbom1|-> [sbom2|-] [options] sbomlyze convert <sbom|-> --to [-o output]
Modes: Single file: sbomlyze [--json] Show statistics Interactive: sbomlyze -i Interactive explorer Convert: sbomlyze convert --to Convert SBOM format Web server: sbomlyze -web [--port 8080] Web UI explorer Two files: sbomlyze [...] Show diff
Use - in place of one SBOM path to read it from standard input.
