Dependency-Track - 継続的 SBOM 分析 チートシート
Dependency-Track (OWASPフラッグシッププロジェクト)は、継続的なソフトウェア サプライチェーン リスク管理のためのプラットフォーム。その定義するアイデア:ビルド時に依存関係を一度スキャンするのではなく、プロジェクト当たりCycloneDX SBOMをアップロードし、プラットフォームは新しい脆弱性が開示されるとコンポーネントを継続的に再評価する。CVEが公開されると、何度も再構築またはスキャンすることなく、どのアプリケーションが影響を受けるコンポーネントを含むかすぐに知っている。
デプロイ
| 方法 | コマンド |
|---|
| Docker Compose | curl -LO https://dependencytrack.org/docker-compose.yml && docker compose up -d |
| コンテナ (API) | docker run -p 8081:8080 dependencytrack/apiserver |
| フロントエンド | dependencytrack/frontendコンテナ (デフォルトUI 8080) |
| Kubernetes | Helm チャート利用可能 |
| 要件 | ~4GB+ RAM; 本番用PostgreSQL |
コアコンセプト
| 用語 | 意味 |
|---|
| プロジェクト | 追跡するアプリケーション/サービス |
| コンポーネント | プロジェクト内の依存関係 |
| SBOM | アップロードする CycloneDX 部品表 |
| 脆弱性 | コンポーネントに影響するCVE/勧告 |
| ポリシー | リスクをゲートするルール (ライセンス、重大度、年齢) |
| ポートフォリオ | すべてのプロジェクト、集約 |
SBOM のアップロード
Syftまたはcyclonedx-*ツール機能を使用して生成し、API経由でアップロード:
# CycloneDX SBOMを生成
syft dir:. -o cyclonedx-json > bom.json
# Dependency-Trackにアップロード
curl -X POST "http://localhost:8081/api/v1/bom" \
-H "X-Api-Key: $DT_API_KEY" \
-F "project=$PROJECT_UUID" \
-F "bom=@bom.json"
| エンドポイント | 目的 |
|---|
POST /api/v1/bom | SBOMをアップロード |
GET /api/v1/project | プロジェクトをリスト表示 |
PUT /api/v1/project | プロジェクトを作成 |
GET /api/v1/vulnerability/project/{uuid} | プロジェクトの脆弱性 |
GET /api/v1/metrics/project/{uuid}/current | 現在のリスクメトリクス |
脆弱性インテリジェンスソース
| ソース | 提供内容 |
|---|
| NVD | CVE データ |
| GitHub Advisories | エコシステム固有の勧告 |
| OSV | Open Source Vulnerabilities データベース |
| VulnDB | 商用 (オプション) |
| 内部 | 独自の勧告 |
プラットフォームはこれらのフィードをミラーし、スケジュールに従ってすべての保存されたコンポーネントを再分析する。
ポリシーエンジン
| ポリシー条件 | 例 |
|---|
| 重大度 | いずれかのCRITICAL脆弱性がある場合失敗 |
| ライセンス | 所有権のある製品でGPLをブロック |
| コンポーネント年齢 | N年間メンテナンスされていない依存関係にフラグ |
| 座標 | 特定のパッケージ/バージョンを禁止 |
| CWE | 特定の弱点クラスにフラグ |
ポリシーは脆弱性と一緒に表示される違反を生成し、ライセンスと衛生リスクが同じ場所で追跡される。
CI/CD統合
# パイプライン:ビルド → SBOM生成 → アップロード → ゲート
syft dir:. -o cyclonedx-json > bom.json
curl -X POST "$DT_URL/api/v1/bom" -H "X-Api-Key: $DT_API_KEY" \
-F "project=$PROJECT_UUID" -F "bom=@bom.json"
# 分析結果をポーリングし、ポリシー違反でフェイル
| 統合 | 注記 |
|---|
| Jenkins/GitHub Actions | 公式プラグイン/アクション利用可能 |
| Webhook | Slack/Teams/Jiraで新しい結果を通知 |
| VEX | 利用可能性の決定を記録 (影響を受けない等) |
分類と VEX
| アクション | 意味 |
|---|
| Not Affected | 脆弱なコードパスに到達不可 |
| False Positive | 検出は間違い |
| Resolved | このプロジェクトで固定 |
| Suppressed | 正当性を伴う受け入れられたリスク |
これらをVEXとして記録することでノイズを減らし、監査人のために決定を文書化する。
Dependency-Track vs ポイントスキャナー
| 側面 | Dependency-Track | Grype/Trivy | Socket |
|---|
| モデル | 継続的 SBOM プラットフォーム | ポイントイン タイム走査 | 行動マルウェア検出 |
| 再評価 | 新しい CVE で自動 | 実行時のみ | 依存関係変更時 |
| ポートフォリオビュー | はい (すべてのプロジェクト) | スキャン単位 | PR単位 |
| 最適用途 | 組織全体のサプライチェーン リスク | CI走査 | 悪意のあるパッケージ検出 |
SyftからSBOMをフィードし、ビルド時走査のためにGrypeと組み合わせ、悪意のあるパッケージ検出のためにSocketと組み合わせる。
リソース