
sbomlyze v0.3.6
SBOM用のGit diff — CycloneDX、SPDX、Syftドキュメントを比較し、改ざんを検出し、CIをゲートします。
sbomlyze
あなたのSBOMのためのgit diff。 2つのSoftware Bill of Materials(SBOM)を比較し、ビルド間・バージョン間・リリース間で何が変わったかを確認します。
sbomlyzeは、バージョン文字列だけでなくコンポーネントのハッシュを比較します。攻撃者がバージョンを上げずにパッケージをすり替えた場合、sbomlyzeはそれを検出します。SBOMジェネレータや脆弱性スキャナではこのような変化を見逃します。
[![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] [![License: Apache-2.0][license-img]][license] [![Downloads][download-img]][download]
このシグナルがマニフェスト差分や通常のコンポーネント差分とどう違うかは、 マニフェスト差分 vs. SBOM差分 vs. 整合性ドリフト を参照してください。
ジェネレータはSBOMを作成し、スキャナはCVEを見つけます。sbomlyzeは2つのSBOM間で何が変わったか、そしてそれを信頼すべきかを示します。 ジェネレータの後に実行してください:
syft image:tag -o cyclonedx-json | sbomlyze - --complianceは、一時ファイルなしで生成されたSBOMを分析しスコアリングします。ベースラインと比較してドリフトを分類し、パイプラインをゲートします。
GitHub Action クイックスタート
[GitHub Marketplace の SBOMlyze Diff][marketplace] を追加して、チェックイン済み
または別途生成された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
The Action writes a Job Summary by default and can enforce policy, report
integrity drift, upload SARIF, or maintain a single pull-request comment. See
[the complete Action reference](https://github.com/rezmoss/sbomlyze/blob/main/ACTION.md) for inputs, outputs, permissions,
and security guidance. See the
[live demonstration repository](https://github.com/rezmoss/sbomlyze-action-demo)
for a passing dependency update and a blocked same-version hash change, with
public workflow runs and SARIF evidence.
フォーマット別のdogfoodingには、公開されている
[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がレビューとポリシーを担当する一方で、生成とベースライン公開を示しています。
## Why sbomlyze?
SBOMを生成するツールは多くあります。しかし、それらを比較するものはほとんどなく、変更が日常的なものなのかサプライチェーンの危険信号なのかを教えてくれるものはさらに少ないのです。sbomlyzeはそのギャップを埋めます。
| 機能 | **sbomlyze** | cyclonedx-cli | sbomqs | syft / trivy |
|---|:---:|:---:|:---:|:---:|
| SBOM間の**差分** | ✅ | 基本 | ❌ | ❌ |
| **整合性 / 改ざん**ドリフト(バージョン変更なしのハッシュ変更) | ✅ | ❌ | ❌ | ❌ |
| 依存関係グラフの差分 + 推移的深度リスク | ✅ | ❌ | ❌ | ❌ |
| **NTIA / CISA / BSI** コンプライアンススコアリング | ✅ | ❌ | ✅ | ❌ |
| フォーマット変換(Syft / CycloneDX / SPDX) | ✅ | ✅ | ❌ | 一部 |
| **TUI + Web UI** エクスプローラー | ✅ | ❌ | ❌ | ❌ |
| ポリシーゲート + SARIF / JUnit / Markdown / HTML / Patch | ✅ | 一部 | 一部 | 一部 |
## 機能
- **SBOM差分**: 2つのSBOMを比較し、追加・削除・変更されたコンポーネントをひと目で確認できます
- **ドリフト分類**: バージョンドリフトと**整合性ドリフト**(バージョン変更なしにハッシュが変更され、改ざんを示す)、およびメタデータドリフトを区別します
- **コンプライアンススコアリング**: 任意のSBOMを**NTIA**、**CISA 2025**、**BSI TR-03183**の最小要素に対してスコアリングします
- **依存関係グラフの差分**: 推移的依存関係とサプライチェーンの深度を追跡します
- **マルチフォーマット対応**: Syft、CycloneDX、SPDX(JSON)
- **フォーマット変換**: CycloneDX、SPDX、Syft形式間の変換
- **堅牢なIDマッチング**: PURL → CPE → BOM-ref → 名前空間/名前の優先順位
- **統計モード**: ライセンス、依存関係、整合性メトリクスについて単一のSBOMを分析
- **対話型TUIモード**: キーボードナビゲーションと検索でSBOMを探索
- **Web UIモード**: ドラッグ&ドロップアップロード対応のブラウザベースSBOMエクスプローラー
- **ポリシーエンジン**: CIパイプラインでドリフト、ライセンス、コンプライアンススコアのルールを適用
- **GitHub Marketplace Action**: Job Summary、SARIF、任意のコメント出力を使用して、SBOMドリフトに基づいてプルリクエストをゲート
- **重複・衝突検出**: 同じパッケージの複数バージョンと曖昧なID一致を検出
- **複数の出力形式**: 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 インストール```bash
go install github.com/rezmoss/sbomlyze/cmd/sbomlyze@latest
バイナリリリースから
最新のバイナリは GitHub Releases からダウンロードできます。
v0.3.7 以降、リリースアーカイブは GitHub artifact attestations 付きで公開されています。
ダウンロードを独立して検証するには、以下を使用します:```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 ユーザー:** ダウンロード後に検疫フラグを解除してください:```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.
