
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]
[](https://github.com/rezmoss/sbomlyze-go-spdx-demo/pull/2)
このシグナルがマニフェストや通常のコンポーネントdiffとどう違うのかは、
[Manifest diff vs. SBOM diff vs. integrity drift](https://github.com/rezmoss/sbomlyze/blob/main/docs/manifest-vs-sbom-vs-integrity-drift.md)を参照してください。
> ジェネレーターは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](https://github.com/rezmoss/sbomlyze/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 <format> [-o output]
Modes:
Single file: sbomlyze <sbom> [--json] Show statistics
Interactive: sbomlyze <sbom> -i Interactive explorer
Convert: sbomlyze convert <sbom> --to <fmt> Convert SBOM format
Web server: sbomlyze -web [--port 8080] Web UI explorer
Two files: sbomlyze <sbom1> <sbom2> [...] Show diff
Use `-` in place of one SBOM path to read it from standard input.
Options:
-i, --interactive Interactive TUI explorer
-web, --web Start web UI server
--port <port> Web server port (default 8080)
--json Output in JSON format (shortcut for --format json)
--format <format> Output format: text, json, sarif, junit, markdown, html, patch
--compliance Show NTIA/CISA/BSI compliance scoring
--policy <file> Policy file for CI checks
--strict Fail on parse warnings
--tolerant Continue on parse warnings (default)
--no-pager Disable automatic paging of output
--to <format> Target format for convert: cyclonedx (cdx), spdx, syft
-o, --output <file> Output file for convert (default: stdout)
--version, -v Show version information
--help, -h Show this help message
```
## コマンド
### 統計モード (単一ファイル)
SBOMを分析して、コンポーネント、ライセンス、依存関係に関するインサイトを取得します。```bash
sbomlyze image.json
```
出力にはスキャンコンテキスト、自動検出された主要な検出事項、および統計情報が含まれます:```
Scan Context:
Tool: syft 1.40.1
Schema: 16.0.18
Scan Scope: all-layers
Source Type: image
Source: alpine:latest
Key Findings:
💻 OS/Distro: Alpine Linux v3.21
📦 Dominated by apk: 71 of 71 packages (100.0%)
📂 8,542 files tracked on filesystem
🔗 Relationships: 71 containment + 64 dependency
📜 License profile: 72% permissive, 20% copyleft
⚠️ Low hash coverage: 0.0% (71 of 71 missing)
🔍 Top catalogers: apkdb-cataloger (71)
📦 SBOM Statistics
==================
Total Components: 71
By Package Type:
apk 71
Licenses:
With license: 71
Without license: 0
Top Licenses:
MIT 17
BSD-3-Clause 8
GPL-2.0-only 8
Integrity:
With hashes: 0
Without hashes: 71
Dependencies:
Components with deps: 65
Total dep relations: 176
```
#### 主な検出事項
sbomlyze は SBOM に関するインサイトを自動的に生成します。単一ファイル分析の場合、以下が含まれます:
| 検出事項 | 説明 |
|---------|-------------|
| **OS/ディストリビューション検出** | SBOM メタデータからオペレーティングシステムまたはディストリビューションを識別します |
| **支配的なエコシステム** | 1つのパッケージタイプが支配的な場合(全パッケージの60%超)に報告します |
| **ファイルシステムフットプリント** | ファイルシステム上で追跡されているファイル数 |
| **リレーションシップ密度** | containment および dependency-of リレーションシップのカウント |
| **ロケーションホットスポット** | コンポーネントが見つかる上位ディレクトリ |
| **ライセンスリスクプロファイル** | パーミッシブ/コピーレフト/不明ライセンスの割合の内訳 |
| **データ品質警告** | ライセンス(<50%)、ハッシュ(<50%)、または PURL(<80%)のカバレッジが低い場合に警告します |
| **重複警告** | 重複するコンポーネントグループにフラグを立てます |
| **カタロガー内訳** | コンポーネントを検出した上位のスキャナー/カタロガー(Syft SBOM) |
#### カバレッジメトリクス
統計モードはデータ品質評価のためにカバレッジ率を計算します:
| メトリクス | 説明 |
|--------|-------------|
| **PURL カバレッジ** | Package URL を持つコンポーネントの割合 |
| **CPE カバレッジ** | CPE を持つコンポーネントの割合(脆弱性スキャンの準備状況) |
| **ライセンスカバレッジ** | 少なくとも1つのライセンスを持つコンポーネントの割合 |
| **ハッシュカバレッジ** | 整合性ハッシュを持つコンポーネントの割合 |
#### ライセンスの分類
ライセンスは自動的に以下のように分類されます:
| カテゴリ | 例 |
|----------|----------|
| **コピーレフト** | GPL, LGPL, AGPL, MPL, EPL, CDDL |
| **パーミッシブ** | MIT, BSD, Apache, ISC, Zlib, Unlicense |
| **パブリックドメイン** | パブリックドメインへの献呈 |
| **不明** | 認識されない、または欠落しているライセンス |
### 変換モード
CycloneDX、SPDX、および Syft JSON 形式間で SBOM を変換します。入力形式は自動検出されます。```bash
# CycloneDX to SPDX
sbomlyze convert image.cdx.json --to spdx
# Syft to CycloneDX (cdx is an alias for cyclonedx)
sbomlyze convert syft-output.json --to cdx
# SPDX to Syft, writing to a file
sbomlyze convert spdx-output.json --to syft -o converted.json
```
#### サポートされているターゲット形式
| 形式 | `--to` の値 | 出力 |
|--------|-------------|--------|
| CycloneDX 1.5 | `cyclonedx` または `cdx` | メタデータ、依存関係、プロパティを含む CycloneDX JSON |
| SPDX 2.3 | `spdx` | パッケージ、リレーションシップ、外部参照を含む SPDX JSON |
| Syft | `syft` | アーティファクト、リレーションシップ、ソース、ディストロ情報を含む Syft JSON |
#### 保持されるもの
変換では、コンポーネント名、バージョン、PURL、CPE、ライセンス、ハッシュ、サプライヤー情報、依存関係が保持されます。形式固有のフィールド(例: Syft の language、foundBy、locations)は、CDX に変換する際に CycloneDX プロパティを通じて引き継がれます。
### Diff モード(2 ファイル)
2 つの SBOM を比較して、バージョン間で何が変更されたかを確認します。```bash
sbomlyze v1.0.json v2.0.json
```
#### 差分の概要
差分は、並列表示のメタデータ比較(ファイル名、サイズ、OS情報、ツール情報、コンポーネント数)から始まり、利用可能な場合はスキャンコンテキストの詳細が続きます。
#### 出力```
📊 Drift Summary:
📦 Version drift: 58 components
⚠️ Integrity drift: 1 component (hash changed without version change!)
📝 Metadata drift: 2 components
🔑 Key Findings:
📈 Attack surface: +5 packages (7.0%), +120 files (3.2%)
🚨 2 version downgrades detected: openssl 3.1.4→3.0.2, curl 8.5.0→8.4.0
🔄 56 version upgrades (2 major, 12 minor, 42 patch) among 65 shared packages
⚠️ Integrity drift (1 total): 1 npm (review recommended)
❌ python ecosystem entirely removed (15 → 0 packages)
➕ New ecosystem: golang (8 packages)
✅ Core system packages stable: apk (71) unchanged
+ Added (2):
+ libgcrypt 1.10.3-r0
+ libgpg-error 1.49-r0
- Removed (3):
- libapk 3.0.3-r1
- libgcc 15.2.0-r2
- nghttp3 1.13.1-r0
~ Changed (58):
~ nginx
version: 1.29.4-r1 -> 1.27.3-r1
~ suspicious-pkg ⚠️ [INTEGRITY]
hash[SHA256]: abc123 -> def456
>> Added dependencies:
pkg:apk/alpine/libxslt: +[so:libgcrypt.so.20]
<< Removed dependencies:
pkg:apk/alpine/libcurl: -[so:libnghttp3.so.9]
🔗 New transitive dependencies (3):
+ pkg:npm/lodash (depth 2)
via: [pkg:npm/my-app pkg:npm/express pkg:npm/lodash]
+ pkg:npm/underscore (depth 3)
via: [pkg:npm/my-app pkg:npm/express pkg:npm/lodash pkg:npm/underscore]
📊 New deps by depth:
Depth 2: 1
Depth 3+ (risky): 2 ⚠️
```
#### Diff の主な検出事項
diff モードでは、sbomlyze が両方の SBOM を比較してより豊富なインサイトを自動生成します:
| 検出事項 | 説明 |
|---------|-------------|
| **スキャンコンテキストの不一致** | SBOM 間でスキーマバージョンやスキャンスコープが変更された場合に警告 |
| **攻撃対象領域の差分** | パッケージ、ファイル、リレーションシップの数の変化を割合付きで表示 |
| **消滅/新規エコシステム** | 完全に出現または消滅したパッケージタイプ |
| **OS/ディストリビューションの移行** | スキャン間のオペレーティングシステムの変更を検出 |
| **バージョン変更分析** | アップグレードとダウングレードをカウントし、変更を major/minor/patch に分類 |
| **バージョンダウングレード** | ダウングレードをセキュリティシグナルとしてフラグ付けし、コンポーネントの詳細を表示 |
| **整合性ドリフトのコンテキスト** | 整合性ドリフトをパッケージタイプ別に分類し、リスクガイダンスを提供 |
| **支配的なパスパターン** | タイプとファイルシステムパス別に集中した変更を表示 |
| **削除/追加のホットスポット** | 変更の影響を最も受けたトップディレクトリ |
| **安定したタイプ** | 数が同一のパッケージタイプ(変更されていないコア) |
| **ライセンスカテゴリのシフト** | コピーレフト/パーミッシブのバランスの変化 |
| **カタログ作成者のギャップ** | Before でパッケージを検出したが After では検出しなかったスキャナー |
#### タイプ別パッケージサンプル
追加および削除されたコンポーネントは、サンプルリスト付きでパッケージタイプ別にグループ化され、各エコシステムで何が変更されたかを簡単に確認できます。
## コンプライアンススコアリング
3 つの主要な最小要素フレームワークに対して任意の SBOM をスコアリングし、監査担当者や調達チームが繰り返し尋ねる質問に答えます:**「この SBOM は十分に完全か?」**```bash
# Score a single SBOM
sbomlyze image.json --compliance
# Score alongside a diff
sbomlyze before.json after.json --compliance
# As JSON for CI
sbomlyze image.json --compliance --json
```
### 評価対象フレームワーク
| フレームワーク | チェック項目 | 主な要件 |
|-----------|--------|----------------------|
| **NTIA Minimum Elements** (2021) | 7 | 名前、バージョン、サプライヤー、一意のID (PURL/CPE)、依存関係、SBOM作成者、タイムスタンプ |
| **CISA 2025 Minimum Elements** (2025年8月ドラフト) | 10 | NTIAに加えて、ソフトウェア生産者、ライセンス情報、**コンポーネントハッシュ**、ツール名を追加 |
| **BSI TR-03183-2** (v2.1.0, 2025) | 9 | コンポーネント作成者の連絡先、**SHA-512ハッシュ**、SPDX形式のライセンス、SBOM作成者の連絡先を要求 |
### スコア表示
各フレームワークはパーセンテージ (合格チェック数 / 全チェック数) と総合スコア (フレームワーク間の平均) を報告し、ステータスインジケーターを表示します:
| インジケーター | スコア |
|-----------|-------|
| 🟢 | ≥ 90% |
| 🟡 | 70–89% |
| 🟠 | 50–69% |
| 🔴 | < 50% |
JSON出力 (`--compliance --json`) には、チェックごとの合否詳細を含む完全なレポートが含まれます。HTML形式では、コンプライアンスレポートがレポートページに埋め込まれます。
### CIにおけるコンプライアンスのゲーティング
[ポリシーエンジン](#policy-engine)を通じてコンプライアンスしきい値を強制します。しきい値を設定すると、`--compliance`フラグなしでコンプライアンス評価がトリガーされます:```json
{
"min_ntia_score": 85,
"min_cisa_score": 70,
"min_bsi_score": 80,
"min_overall_compliance": 75
}
```
## 検出
### 検出の仕組み
`detect` コマンドは、ファイルシステムをスキャンして、既知のAIエージェント設定ファイル、MCP設定、およびエージェント関連のアーティファクトを探します。検出は、ファイル名のパターン、ディレクトリ構造、およびファイル内容のシグネチャに基づいています。
### 検出されるもの
| カテゴリ | 例 |
|----------|----------|
| エージェント設定 | `.cursor/mcp.json`, `.claude/settings.json`, `CLAUDE.md` |
| MCPサーバー | `mcp.json`, `mcp_config.json`, `.mcp/` ディレクトリ |
| エージェント指示 | `AGENTS.md`, `.cursorrules`, `.github/copilot-instructions.md` |
| 認証情報 | 設定ファイル内のAPIキー、トークン、シークレット |
| 権限設定 | ツール許可リスト、自動承認設定 |
### 検出出力
```bash
agent-audit detect --path /home/user/project
```
出力例:
```
[+] 検出されたエージェント設定:
- /home/user/project/.cursor/mcp.json (Cursor MCP)
- /home/user/project/CLAUDE.md (Claude Code 指示)
- /home/user/project/.mcp/servers.json (MCP サーバー定義)
[!] 潜在的な認証情報の検出:
- /home/user/project/.cursor/mcp.json:12 (API キーパターン)
```
### 検出オプション
| オプション | 説明 |
|--------|-------------|
| `--path` | スキャンするディレクトリ (デフォルト: カレントディレクトリ) |
| `--recursive` | サブディレクトリを再帰的にスキャン |
| `--json` | 出力をJSON形式で表示 |
| `--quiet` | 検出された項目のみを表示 |
## 監査
### 監査の仕組み
`audit` コマンドは、検出された設定に対して一連のセキュリティチェックを実行します。各チェックは、設定を分析して潜在的なセキュリティ問題を特定します。
### 監査チェック
| チェック | 重大度 | 説明 |
|-------|----------|-------------|
| `credential-exposure` | 高 | 設定ファイル内の平文認証情報 |
| `overly-permissive-tools` | 高 | 過度に広範なツール権限 |
| `auto-approve-enabled` | 中 | 危険な操作に対する自動承認 |
| `untrusted-mcp-servers` | 高 | 信頼できないソースからのMCPサーバー |
| `missing-sandbox` | 中 | サンドボックス分離の欠如 |
| `network-access` | 中 | 制限のないネットワークアクセス |
| `file-system-access` | 中 | 過度に広範なファイルシステムアクセス |
| `shell-execution` | 高 | 制限のないシェル実行 |
| `prompt-injection-risk` | 中 | プロンプトインジェクションの潜在的なリスク |
| `outdated-config` | 低 | 古い、または非推奨の設定形式 |
### 監査出力
```bash
agent-audit audit --path /home/user/project
```
出力例:
```
[高] credential-exposure
ファイル: .cursor/mcp.json:12
問題: 平文のAPIキーが検出されました
修正: 環境変数またはシークレットマネージャーを使用してください
[高] overly-permissive-tools
ファイル: .claude/settings.json:8
問題: ツール 'shell' が制限なしで許可されています
修正: ツールの許可リストを制限してください
[中] auto-approve-enabled
ファイル: .cursor/mcp.json:20
問題: 危険な操作に対して自動承認が有効になっています
修正: 自動承認を無効にするか、許可される操作を制限してください
```
### 監査オプション
| オプション | 説明 |
|--------|-------------|
| `--path` | 監査するディレクトリ |
| `--severity` | 最低重大度レベルでフィルタリング (low, medium, high) |
| `--json` | 出力をJSON形式で表示 |
| `--fix` | 自動修正を提案する (該当する場合) |
## レポート
### レポートの仕組み
`report` コマンドは、検出および監査の結果から包括的なレポートを生成します。レポートは、複数の形式 (テキスト、JSON、HTML、SARIF) で出力できます。
### レポート形式
| 形式 | 説明 |
|--------|-------------|
| `text` | 人間が読めるテキスト出力 (デフォルト) |
| `json` | 機械可読なJSON出力 |
| `html` | インタラクティブなHTMLレポート |
| `sarif` | SARIF形式 (CI/CD統合用) |
### レポート出力
```bash
agent-audit report --path /home/user/project --format html --output report.html
```
### レポートオプション
| オプション | 説明 |
|--------|-------------|
| `--path` | レポート対象のディレクトリ |
| `--format` | 出力形式 (text, json, html, sarif) |
| `--output` | 出力ファイルパス |
| `--severity` | 最低重大度レベルでフィルタリング |
| `--include-passed` | 合格したチェックも含める |
## 設定
### 設定ファイル
`agent-audit` は、以下の場所にある設定ファイルをサポートしています:
1. `~/.config/agent-audit/config.yaml`
2. `.agent-audit.yaml` (プロジェクトルート)
3. `--config` フラグで指定されたパス
### 設定オプション
```yaml
# スキャン設定
scan:
recursive: true
exclude:
- node_modules
- .git
- vendor
# 監査設定
audit:
severity_threshold: medium
checks:
credential-exposure:
enabled: true
overly-permissive-tools:
enabled: true
auto-approve-enabled:
enabled: true
# レポート設定
report:
format: text
include_passed: false
# カスタム検出パターン
detection:
patterns:
- name: custom-agent-config
file_pattern: "*.agent.json"
type: agent-config
```
### 環境変数
| 変数 | 説明 |
|----------|-------------|
| `AGENT_AUDIT_CONFIG` | 設定ファイルへのパス |
| `AGENT_AUDIT_LOG_LEVEL` | ログレベル (debug, info, warn, error) |
| `AGENT_AUDIT_NO_COLOR` | カラー出力を無効にする |
| `AGENT_AUDIT_CACHE_DIR` | キャッシュディレクトリ |
## 統合
### CI/CD 統合
`agent-audit` は、CI/CD パイプラインに統合して、AIエージェント設定の自動セキュリティチェックを実行できます。
#### GitHub Actions
```yaml
name: Agent Security Audit
on: [push, pull_request]
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run agent-audit
run: |
go install github.com/example/agent-audit@latest
agent-audit audit --path . --severity high --format sarif --output results.sarif
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
```
#### GitLab CI
```yaml
agent-audit:
stage: test
script:
- go install github.com/example/agent-audit@latest
- agent-audit audit --path . --severity high --format json --output audit.json
artifacts:
paths:
- audit.json
```
### プリコミットフック
```yaml
# .pre-commit-config.yaml
repos:
- repo: local
hooks:
- id: agent-audit
name: Agent Security Audit
entry: agent-audit audit --severity high
language: system
pass_filenames: false
```
### カスタムチェック
カスタム監査チェックを追加するには、チェック定義を含むYAMLファイルを作成します:
```yaml
# custom-checks.yaml
checks:
- id: custom-check
name: Custom Security Check
severity: high
description: Checks for custom security issue
match:
file_pattern: "*.json"
content_pattern: "dangerous_setting"
remediation: Remove the dangerous setting
```
次に、設定で参照します:
```yaml
audit:
custom_checks:
- custom-checks.yaml
```
## アーキテクチャ
### プロジェクト構造
```
agent-audit/
├── cmd/
│ └── agent-audit/
│ └── main.go
├── internal/
│ ├── detect/
│ │ ├── detector.go
│ │ └── patterns.go
│ ├── audit/
│ │ ├── auditor.go
│ │ └── checks/
│ ├── report/
│ │ ├── reporter.go
│ │ └── formats/
│ └── config/
│ └── config.go
├── pkg/
│ └── models/
│ └── models.go
├── go.mod
├── go.sum
└── README.md
```
### 主要コンポーネント
| コンポーネント | 説明 |
|-----------|-------------|
| `detect` | ファイルシステムのスキャンと設定の検出 |
| `audit` | 検出された設定に対するセキュリティチェック |
| `report` | レポートの生成とフォーマット |
| `config` | 設定の読み込みと管理 |
| `models` | 共有データモデルと型 |
### データフロー
```
ファイルシステム → 検出 → 監査 → レポート
↓ ↓ ↓
パターン チェック フォーマット
```
## 開発
### 前提条件
- Go 1.21 以上
- Git
### ビルド
```bash
git clone https://github.com/example/agent-audit.git
cd agent-audit
go build -o agent-audit ./cmd/agent-audit
```
### テスト
```bash
go test ./...
```
### リンティング
```bash
golangci-lint run
```
### 貢献
1. リポジトリをフォークする
2. フィーチャーブランチを作成する (`git checkout -b feature/amazing-feature`)
3. 変更をコミットする (`git commit -m 'Add amazing feature'`)
4. ブランチにプッシュする (`git push origin feature/amazing-feature`)
---
[Read more](https://github.com/rezmoss/sbomlyze)