mcpField
S
sca-trivy

sca-trivy

github.com/agentsecopsセキュリティ22840 回インストール28 週間前に更新
リポジトリ

sca-trivy について

sca-trivyは、開発者やセキュリティチーム向けに、Trivyを使ったコンテナ、プロジェクトファイル、リポジトリのスキャン手順をまとめたスキルです。脆弱性の評価と修正、CI/CD連携、SBOM生成のワークフローとスクリプトを含みます。

主な機能

  1. 01コンテナと依存関係の脆弱性スキャン
  2. 02IaCの設定ミス検出
  3. 03シークレットとライセンスのスキャン
  4. 04CVSSに基づく修正レポート
  5. 05CycloneDXとSPDX形式のSBOM生成
  6. 06CI/CDテンプレートとベースライン追跡

活用シーン

  1. 01コンテナイメージの脆弱性修正を優先付け
  2. 02依存関係を確認し更新後に再スキャン
  3. 03TerraformとKubernetesの設定を点検
  4. 04コンプライアンスやサプライチェーン審査用のSBOM生成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/agentsecops/secopsagentkit --skill sca-trivy

インストール後、Claude Code で/sca-trivyを入力して読み込まれたか確認します。

詳細

Trivy によるソフトウェア構成分析

概要

Trivy は、コンテナ、ファイルシステム、Git リポジトリを対象とする包括的なセキュリティスキャナーです。OS パッケージやアプリケーションの依存関係に含まれる脆弱性(CVE)、IaC の設定ミス、公開されたシークレット、ソフトウェアライセンスを検出します。このスキルでは、脆弱性スキャン、SBOM の生成、CI/CD との統合、CVSS および OWASP の標準に沿った修正の優先順位付けのワークフローを提供します。

クイックスタート

コンテナイメージの脆弱性をスキャンします。

# Install Trivy
brew install trivy  # macOS
# or: apt-get install trivy  # Debian/Ubuntu
# or: docker pull aquasec/trivy:latest

# Scan container image
trivy image nginx:latest

# Scan local filesystem for dependencies
trivy fs .

# Scan IaC files for misconfigurations
trivy config .

# Generate SBOM
trivy image --format cyclonedx --output sbom.json nginx:latest

主なワークフロー

ワークフロー 1:コンテナイメージのセキュリティ評価

進捗: [ ] 1. 対象のコンテナイメージを特定する(repository:tag) [ ] 2. trivy image <image-name> で包括的な Trivy スキャンを実行する [ ] 3. 重大度(CRITICAL、HIGH、MEDIUM、LOW)ごとに脆弱性の検出結果を分析する [ ] 4. CVE の検出結果を CWE カテゴリおよび OWASP の参照情報に対応付ける [ ] 5. 利用可能なパッチと更新済みのベースイメージを確認する [ ] 6. アップグレードの推奨事項を含む、優先順位を付けた修正レポートを作成する

各ステップを順に進めます。完了した項目にチェックを付けてください。

ワークフロー 2:依存関係の脆弱性スキャン

プロジェクトの依存関係をスキャンし、既知の脆弱性を検出します。

# Scan filesystem for all dependencies
trivy fs --severity CRITICAL,HIGH .

# Scan specific package manifest
trivy fs --scanners vuln package-lock.json

# Generate JSON report for analysis
trivy fs --format json --output trivy-report.json .

# Generate SARIF for GitHub/GitLab integration
trivy fs --format sarif --output trivy.sarif .

脆弱性ごとに、次の手順を実施します。

  1. CVE の詳細と CVSS スコアを確認する
  2. 修正済みバージョンが利用可能か確認する
  3. 言語固有のガイダンスについて、references/remediation_guide.md を参照する
  4. 依存関係をパッチ適用済みのバージョンに更新する
  5. 再スキャンして修正を検証する
ワークフロー 3:Infrastructure as Code のセキュリティ

IaC ファイルの設定ミスを検出します。

# Scan Terraform configurations
trivy config ./terraform --severity CRITICAL,HIGH

# Scan Kubernetes manifests
trivy config ./k8s --severity CRITICAL,HIGH

# Scan Dockerfile best practices
trivy config --file-patterns dockerfile:Dockerfile .

# Generate report with remediation guidance
trivy config --format json --output iac-findings.json .

検出結果をカテゴリごとに確認します。

  • セキュリティ:認証、認可、暗号化
  • コンプライアンス:CIS ベンチマーク、セキュリティ標準
  • ベストプラクティス:リソース制限、不変性、最小権限
ワークフロー 4:CI/CD パイプラインとの統合
GitHub Actions
name: Trivy Security Scan
on: [push, pull_request]

jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Run Trivy vulnerability scanner
        uses: aquasecurity/trivy-action@master
        with:
          scan-type: 'fs'
          scan-ref: '.'
          format: 'sarif'
          output: 'trivy-results.sarif'
          severity: 'CRITICAL,HIGH'

      - name: Upload results to GitHub Security
        uses: github/codeql-action/upload-sarif@v2
        with:
          sarif_file: 'trivy-results.sarif'
GitLab CI
trivy-scan:
  stage: test
  image: aquasec/trivy:latest
  script:
    - trivy fs --exit-code 1 --severity CRITICAL,HIGH --format json --output trivy-report.json .
  artifacts:
    reports:
      dependency_scanning: trivy-report.json
    when: always
  allow_failure: false

追加のプラットフォームには、assets/ci_integration/ にある同梱テンプレートを使用してください。

ワークフロー 5:SBOM の生成

サプライチェーンの透明性を高めるため、ソフトウェア部品表を生成します。

# Generate CycloneDX SBOM
trivy image --format cyclonedx --output sbom-cyclonedx.json nginx:latest

# Generate SPDX SBOM
trivy image --format spdx-json --output sbom-spdx.json nginx:latest

# SBOM for filesystem/project
trivy fs --format cyclonedx --output project-sbom.json .

SBOM の用途:

  • 脆弱性の追跡:依存関係を監視して、新たな CVE を検出する
  • ライセンスコンプライアンス:ライセンス上の義務とリスクを特定する
  • サプライチェーンセキュリティ:コンポーネントの由来を検証する
  • 規制コンプライアンス:CISA の SBOM 要件を満たす

セキュリティ上の考慮事項

機密データの取り扱い
  • レジストリの認証情報:環境変数または認証情報ヘルパーを使用し、決してハードコードしないでください
  • スキャンレポート:脆弱性の詳細やパッケージのバージョンが含まれるため、機密情報として扱ってください
  • SBOM ファイル:内部アーキテクチャが明らかになる場合があるため、適切にアクセスを管理してください
  • シークレットスキャン:--scanners secret を有効にして、イメージ内で公開されている認証情報を検出してください
アクセス制御
  • コンテナレジストリへのアクセス:イメージのスキャンにはプル権限が必要です
  • ファイルシステムへのアクセス:依存関係マニフェストと IaC ファイルに対する読み取り権限が必要です
  • CI/CD との統合:API トークンとレジストリの認証情報をシークレット管理で保護してください
  • レポートの保存:脆弱性レポートと SBOM 成果物へのアクセスを制限してください
監査ログ

コンプライアンスおよびインシデント対応のため、次の情報を記録してください。

  • スキャン実行のタイムスタンプと対象範囲(イメージ、ファイルシステム、リポジトリ)
  • 重大度レベルごとの脆弱性件数
  • ポリシー違反とブロックの判断
  • SBOM の生成および配布イベント
  • 修正措置とバージョン更新
コンプライアンス要件
  • PCI-DSS 6.2:システムコンポーネントが既知の脆弱性から保護されていることを確認する
  • SOC2 CC7.1:セキュリティに影響する可能性のある変更を検出し、対応する
  • NIST 800-53 SI-2:欠陥の修正と脆弱性スキャン
  • CIS ベンチマーク:コンテナと Kubernetes のセキュリティ強化
  • OWASP Top 10 A06:脆弱で古いコンポーネント
  • CWE-1104:保守されていないサードパーティコンポーネントの使用

同梱リソース

スクリプト(scripts/)
  • trivy_scan.py - JSON/SARIF 出力と重要度フィルタリングに対応した包括的なスキャン
  • sbom_generator.py - CycloneDX および SPDX 形式に対応した SBOM の生成
  • vulnerability_report.py - Trivy の出力を解析し、CVSS スコアを含む修正レポートを生成
  • baseline_manager.py - 新たな脆弱性のみを追跡するためのベースライン作成
リファレンス(references/)
  • scanner_types.md - 脆弱性、設定ミス、シークレット、ライセンスのスキャンに関する詳細ガイド
  • remediation_guide.md - 言語およびエコシステム固有の修正戦略
  • cvss_prioritization.md - CVSS スコアの解釈と脆弱性の優先順位付けフレームワーク
  • iac_checks.md - CIS ベンチマークとの対応付けを含む IaC セキュリティチェックの全リスト
アセット(assets/)
  • trivy.yaml - セキュリティポリシーと無視ルールを含むカスタム Trivy 設定
  • ci_integration/github-actions.yml - セキュリティゲートを含む GitHub Actions ワークフロー一式
  • ci_integration/gitlab-ci.yml - 依存関係スキャンを含む GitLab CI パイプライン一式
  • ci_integration/jenkins.groovy - Trivy 統合を含む Jenkins パイプライン
  • policy_template.rego - カスタム脆弱性ポリシー用の OPA ポリシーテンプレート

よくあるパターン

パターン 1:複数段階のセキュリティスキャン

複数のスキャン種別を組み合わせた包括的なセキュリティ評価:

# 1. Scan container image for vulnerabilities
trivy image --severity CRITICAL,HIGH myapp:latest

# 2. Scan IaC for misconfigurations
trivy config ./infrastructure --severity CRITICAL,HIGH

# 3. Scan filesystem for dependency vulnerabilities
trivy fs --severity CRITICAL,HIGH ./app

# 4. Scan for exposed secrets
trivy fs --scanners secret ./app

# 5. Generate comprehensive SBOM
trivy image --format cyclonedx --output sbom.json myapp:latest
パターン 2:ベースラインによる脆弱性追跡

新たな脆弱性のみを追跡するベースラインスキャンを実装します:

# Initial scan - create baseline
trivy image --format json --output baseline.json nginx:latest

# Subsequent scans - detect new vulnerabilities
trivy image --format json --output current.json nginx:latest
./scripts/baseline_manager.py --baseline baseline.json --current current.json
パターン 3:ライセンスコンプライアンススキャン

ライセンスコンプライアンスのリスクを検出します:

# Scan for license information
trivy image --scanners license --format json --output licenses.json myapp:latest

# Filter by license type
trivy image --scanners license --severity HIGH,CRITICAL myapp:latest

検出結果を確認します:

  • 高リスク:GPL、AGPL(強いコピーレフト)
  • 中リスク:LGPL、MPL(弱いコピーレフト)
  • 低リスク:Apache、MIT、BSD(寛容なライセンス)
パターン 4:カスタムポリシーの適用

OPA でカスタムセキュリティポリシーを適用します:

# Create Rego policy in assets/policy_template.rego
# Deny images with CRITICAL vulnerabilities or outdated packages

# Run scan with policy enforcement
trivy image --format json --output scan.json myapp:latest
trivy image --ignore-policy assets/policy_template.rego myapp:latest

統合ポイント

CI/CD 統合
  • GitHub Actions:ネイティブの aquasecurity/trivy-action を使用し、SARIF を Security タブにアップロード
  • GitLab CI:Security Dashboard 用の依存関係スキャンレポート形式
  • Jenkins:JUnit XML レポートを生成する Docker ベースのスキャン
  • CircleCI:アーティファクトストレージを備えた Docker executor
  • Azure Pipelines:タスクベースの統合と結果の公開
コンテナプラットフォーム
  • Docker:レジストリへのプッシュ前にイメージをスキャン
  • Kubernetes:実行時スキャンに trivy-operator を使用するアドミッションコントローラー
  • Harbor:レジストリスキャン用の Trivy 組み込み統合
  • AWS ECR:拡張スキャンを有効にして、プッシュ時にイメージをスキャン
  • Google Artifact Registry:脆弱性スキャンとの統合
セキュリティツールのエコシステム
  • SIEM 統合:JSON の検出結果を Splunk、ELK、または Datadog にエクスポート
  • 脆弱性管理:SARIF/JSON を Snyk、Qualys、または Rapid7 にインポート
  • SBOM ツール:CycloneDX および SPDX と dependency-track、GUAC との互換性
  • ポリシー適用:コードとしてのカスタムポリシーに向けた OPA/Rego 統合

トラブルシューティング

問題:誤検知が多い

症状:ユースケースに該当しない脆弱性が多数報告される

解決策:

  1. .trivyignore ファイルを使用して、理由を添えて特定の CVE を抑制します
  2. 悪用可能性でフィルタリングします:trivy image --ignore-unfixed myapp:latest
  3. 重要度でフィルタリングします:--severity CRITICAL,HIGH
  4. 誤検知の妥当性を確認するため、ベンダー固有のセキュリティ勧告を確認します
  5. よくあるパターンについては references/false_positives.md を参照してください
問題:大きなイメージでのパフォーマンス問題

症状:スキャンに過度な時間がかかる、またはメモリ使用量が多い

解決策:

  1. キャッシュ済みの DB を使用します:trivy image --cache-dir /path/to/cache myapp:latest
  2. 不要なスキャナーをスキップします:--scanners vuln(config、secret を除外)
  3. 初回の DB ダウンロード後はオフラインモードを使用します:--offline-scan
  4. タイムアウトを延長します:--timeout 30m
  5. 特定のレイヤーをスキャンします:削除済みパッケージを除外するには --removed-pkgs を使用します
問題:特定の言語で脆弱性が検出されない

症状:アプリケーションの依存関係で、想定される CVE が検出されません

解決策:

  1. 言語のサポートを確認します:サポートされている言語とファイルパターンを確認してください
  2. 依存関係マニフェストが存在することを確認します(package.json、go.mod、requirements.txt)
  3. 正確なバージョン検出のために、ロックファイルを含めます
  4. コンパイル済みバイナリの場合は、ソースコードを別途スキャンします
  5. 言語固有の要件については、references/scanner_types.md を参照してください
問題:レジストリの認証エラー

症状:プライベートコンテナーイメージをスキャンできません

解決策:

# Use Docker credential helper
docker login registry.example.com
trivy image registry.example.com/private/image:tag

# Or use environment variables
export TRIVY_USERNAME=user
export TRIVY_PASSWORD=pass
trivy image registry.example.com/private/image:tag

# Or use credential file
trivy image --username user --password pass registry.example.com/private/image:tag

高度な設定

Trivy のカスタム設定

設定ファイル trivy.yaml を作成します:

# trivy.yaml
vulnerability:
  type: os,library
severity: CRITICAL,HIGH,MEDIUM
ignorefile: .trivyignore
ignore-unfixed: false
skip-files:
  - "test/**"
  - "**/node_modules/**"

cache:
  dir: /tmp/trivy-cache

db:
  repository: ghcr.io/aquasecurity/trivy-db:latest

output:
  format: json
  severity-sort: true

次のように使用します:trivy image --config trivy.yaml myapp:latest

Trivy の無視ファイル

特定の CVE を抑制するには、.trivyignore を作成します:

# .trivyignore
# False positive - patched in vendor fork
CVE-0000-12345

# Risk accepted by security team - JIRA-1234
CVE-0000-67890

# No fix available, compensating controls in place
CVE-0000-11111
オフラインのエアギャップ環境でのスキャン

エアギャップ環境では、次のようにします:

# On internet-connected machine:
trivy image --download-db-only --cache-dir /path/to/db

# Transfer cache to air-gapped environment

# On air-gapped machine:
trivy image --skip-db-update --cache-dir /path/to/db --offline-scan myapp:latest

参考資料

コメント