AI

OSSコンテナセキュリティ比較:Trivy vs Snyk vs Falco でDockerイメージを守る

オープンソースラボ編集部2026年6月14日

OSSコンテナセキュリティ比較:Trivy vs Snyk vs Falco でDockerイメージを守る

Aqua(エンタープライズ向け年数百万円〜)・Twistlock(年数百万円〜)に対して、Trivy(脆弱性スキャン・最も簡単)・Snyk(開発者向けセキュリティプラットフォーム)・Falco(Kubernetesランタイムセキュリティ)はOSSのコンテナセキュリティツールです。

コンテナセキュリティの脅威

  • 既知脆弱性(CVE): Dockerイメージ内のOSパッケージ・言語依存ライブラリに含まれるCVE
  • 設定ミス: ルートコンテナ実行・過剰な権限・不適切なネットワーク設定
  • サプライチェーン攻撃: 信頼されたイメージ内へのマルウェア混入(SolarWinds型)
  • ランタイム脅威: 実行中コンテナでの異常なシステムコール・プロセス起動

主要ツールの概要

Trivy

2019年にAqua Securityが公開したGo製のコンテナ・IaCセキュリティスキャナーです。GitHubスター24k+。Dockerイメージ・ファイルシステム・Git履歴・IaC(Terraform・Kubernetes YAML)の脆弱性・設定ミスを1コマンドでスキャンします。インストールが簡単でCI/CDへの組み込みが容易なため、最も広く使われているOSSコンテナスキャナーです。

# Trivyのインストール
# Linux
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin

# macOS
brew install trivy

# Dockerイメージをスキャン
trivy image nginx:latest

# CVSSスコア7.0以上のHIGH・CRITICALのみ表示
trivy image --severity HIGH,CRITICAL nginx:latest

# JUnit XML形式でCI/CDに出力
trivy image --format template   --template "@contrib/junit.tpl"   --output junit-report.xml   nginx:latest

# Terraform・Kubernetes YAMLのIaCスキャン
trivy config ./terraform/
trivy config ./kubernetes/

# ローカルのファイルシステムをスキャン
trivy fs --scanners vuln,misconfig,secret ./

# シークレットスキャン(APIキー・パスワードの漏洩検出)
trivy fs --scanners secret --severity HIGH,CRITICAL ./
# .github/workflows/security-scan.yml - GitHub Actions CI統合
name: Container Security Scan

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

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

      - name: Build Docker image
        run: docker build -t my-app:${{ github.sha }} .

      - name: Run Trivy vulnerability scanner
        uses: aquasecurity/trivy-action@master
        with:
          image-ref: "my-app:${{ github.sha }}"
          format: "sarif"
          output: "trivy-results.sarif"
          severity: "CRITICAL,HIGH"
          exit-code: "1"   # CRITICAL/HIGH検出でCI失敗

      - name: Upload Trivy scan results to GitHub Security tab
        uses: github/codeql-action/upload-sarif@v3
        if: always()
        with:
          sarif_file: "trivy-results.sarif"
# Trivy-friendlyなDockerfileの書き方
# まず最も安全なベースイメージを選ぶ
# Distroless: OS全体を削除して必要なランタイムのみ残す
FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o main .

FROM gcr.io/distroless/static-debian12
# gcr.io/distroless は200個以上のパッケージを削除済み
# CVEが格段に少ない(Nginxのalpineイメージ比で90%削減)
COPY --from=builder /app/main /main
USER nonroot:nonroot   # rootで実行しない
ENTRYPOINT ["/main"]

Falco

2018年にSysdigが開発しCNCFに寄贈したKubernetesランタイムセキュリティツールです。GitHubスター8k+。Linuxカーネルのシステムコールをリアルタイム監視し、異常なコンテナ動作(シェルの起動・ファイル書き込み・特権昇格)を検知してアラートを発します。ビルド時スキャンでは検出できない実行時攻撃(CVE悪用・コンテナブレイクアウト)に対応します。

# FalcoをKubernetesにインストール(Helm)
helm repo add falcosecurity https://falcosecurity.github.io/charts
helm repo update

helm install falco falcosecurity/falco   --namespace falco --create-namespace   --set driver.kind=ebpf \    # eBPF ドライバー(カーネルモジュール不要・推奨)
  --set falcosidekick.enabled=true   --set falcosidekick.webui.enabled=true   --set falcosidekick.config.slack.webhookurl="https://hooks.slack.com/services/YOUR_WEBHOOK"
# カスタムFalcoルール
# /etc/falco/rules.d/custom-rules.yaml
- rule: Shell Spawned in Container
  desc: シェルがコンテナ内で起動された(侵害の可能性)
  condition: >
    spawned_process
    and container
    and container.image.repository != "busybox"
    and proc.name in (shell_binaries)
  output: >
    Shell spawned in container
    (user=%user.name container=%container.name
    image=%container.image.repository:%container.image.tag
    cmd=%proc.cmdline)
  priority: WARNING
  tags: [runtime, shell]

- rule: Suspicious Write to /etc
  desc: /etc 配下への書き込み(設定ファイル改ざんの可能性)
  condition: >
    open_write
    and container
    and fd.name startswith /etc
    and not proc.name in (trusted_processes)
  output: Write to /etc in container (user=%user.name file=%fd.name container=%container.name)
  priority: HIGH

- rule: Crypto Mining Detected
  desc: 仮想通貨マイニングプロセスの検知
  condition: >
    spawned_process
    and container
    and proc.name in (xmrig, minerd, cpuminer, cgminer)
  output: Crypto miner detected (proc=%proc.name container=%container.name)
  priority: CRITICAL

機能比較表

比較項目TrivySnykFalco
スキャンタイミングビルド時・CIビルド時・開発時ランタイム
脆弱性データベースNVD+OSSSnyk DBN/A
IaCスキャン
シークレット検出
ランタイム監視
Kubernetes対応✅(kube-bench)✅(ネイティブ)
GitHub Stars24k+1k+(CLI)8k+

コンテナセキュリティスキャンの結果をダッシュボードで可視化するにはDevOpsカテゴリ/categories/devopsのGrafanaと組み合わせてください。Falcoのアラートを集約・解析するにはSecurityカテゴリ/categories/securityのSIEMツールも参照してください。

FAQ

Q. TrivyスキャンでCRITICALが出た場合、すぐにブロックすべきですか?

A. 状況に依ります。まず確認すべきこと: ①CVEは実際に悪用可能か(攻撃経路・実際の露出)②修正バージョンが存在するか(存在しない場合は一時的に許容が必要)③脆弱なパッケージを実際に使っているか(インストールされているが使っていないケースも多い)。推奨アプローチ: CIでは--exit-code 1でCRITICALをブロックし、HIGHは警告のみ。.trivyignoreファイルで許容するCVEを記録(理由コメント付きで)。修正が長期間ない場合はDistrolessベースイメージへの切り替えを検討します。

Q. DistrolessイメージとAlpineイメージの脆弱性数の差はどのくらいですか?

A. trivy image gcr.io/distroless/python3-debian12 vs trivy image python:3.12-alpine の比較では、Distrolessの方が通常CVE数が50〜80%少ない傾向があります。Alpine(musl libc)は独自のパッケージ管理で最小構成ですが、gccライブラリ等が含まれます。DistrolessはOS全体を削除してPythonランタイムのみ残すため、攻撃対象面が最小です。ただしDebugging(シェルがないためdocker exec -it bashできない)が難しくなります。

Q. FalcoはGKE(Google Kubernetes Engine)で使えますか?

A. はい。GKEではFalcoのeBPFドライバーを使うことで、カーネルモジュールのインストール不要でランタイム監視が可能です。ただしGKE Autopilotでは制限があり、Standard Modeが必要です。GKEでのFalcoデプロイはHelm + eBPFドライバーを推奨。Falcosidekickを使ってFalcoのイベントをCloud Logging・PubSub・Slack・PagerDutyに転送できます。

Q. コンテナイメージの署名・検証はどのツールで行いますか?

A. Cosign(Sigstore プロジェクト)が事実上の標準です。ビルド時にイメージに署名し、Kubernetesへのデプロイ時にAdmission Webhook(Kyverno・Open Policy Agent)で署名を検証することで、未署名イメージのデプロイを拒否できます。TrivyはCosignの署名検証にも対応しており、trivy image --verify-attestationで署名付きイメージの脆弱性情報のアテステーションを検証できます。

まとめ

ユースケース推奨ツール
CI/CDビルド時のイメージスキャンTrivy
開発時の依存ライブラリスキャンSnyk
Kubernetesランタイム異常検知Falco

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。