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
機能比較表
| 比較項目 | Trivy | Snyk | Falco |
|---|---|---|---|
| スキャンタイミング | ビルド時・CI | ビルド時・開発時 | ランタイム |
| 脆弱性データベース | NVD+OSS | Snyk DB | N/A |
| IaCスキャン | ✅ | ✅ | ❌ |
| シークレット検出 | ✅ | ✅ | ❌ |
| ランタイム監視 | ❌ | ❌ | ✅ |
| Kubernetes対応 | ✅(kube-bench) | ✅ | ✅(ネイティブ) |
| GitHub Stars | 24k+ | 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 |