Skip to main content

概要

  • 機能:コンテナイメージスキャンは、プロジェクトで使用されるコンテナイメージの既知のセキュリティ脆弱性を特定します。これには、イメージレイヤー内にインストールされたベースOSパッケージ、システムライブラリ、アプリケーションパッケージの脆弱性が含まれます。デプロイ前にイメージをスキャンすることで、コンテナ化されたアプリケーションのセキュリティリスクを早期に検出できます。
  • 対象者:コンテナ化されたアプリケーションをリリースし、ベースイメージから継承される脆弱性を可視化したいセキュリティチーム、開発者、DevOpsエンジニア。

仕組み

Corgeaはプロジェクトで参照されたコンテナイメージを自動的に検出し、既知の脆弱性データベースと照合して各イメージをスキャンします。
1

イメージ検出

Corgeaはプロジェクトから Dockerfile とDocker Composeファイルをスキャンし、そこからイメージ参照を抽出します:
  • Dockerfiles: FROM で宣言されたベースイメージ(例: FROM python:3.11-slim)
  • Docker Compose:各サービスごとに image: で宣言されるイメージ(例: image: postgres:15)
検出されたイメージは重複を除去し、参照したファイルにマッピングされます。
2

イメージ解析

各イメージは抽出され、そのレイヤーを解析してインストールされたソフトウェアのインベントリを作成します。これにはOS/ディストリビューションパッケージ(Debian、Ubuntu、Alpineなど)や、イメージ内にインストールされたアプリケーションパッケージが含まれます。
3

脆弱性マッチング

検出されたパッケージは既知の脆弱性データベースと照合され、一致したものは他のスキャン結果と共に報告されます。

ビルド済みイメージをスキャンする

上記の検出フローは、プロジェクトが参照しているベースイメージをスキャンします。代わりにビルド済みのイメージ、たとえばCIでビルドしたばかりでレジストリにプッシュしていないイメージをスキャンするには、--include-imageでCLIに渡します。
ローカルのコンテナエンジン(dockerまたはpodman)がイメージをエクスポートし、CLIがプロジェクトと一緒にアップロードします。そのため、実際に配布される状態のままスキャンされます。--include-imageを指定した場合、Corgeaはソースコードからベースイメージを検出する代わりに、指定されたイメージをスキャンします。--include-imageはBLASTスキャナーのみで使用できます。コンテナスキャンがアカウントで有効になっている必要があります。 オプションの詳細な動作は、CLIリファレンスのコンテナイメージをスキャンを参照してください。

スキャンをまたぐ検出結果の追跡

Corgeaは、イメージ、パッケージ、脆弱性アドバイザリーに基づいてコンテナの検出結果を追跡します。パッケージのバージョンが変わってもトリアージ結果は維持され、同じアドバイザリーの影響を受ける別のパッケージは個別の検出結果として扱われます。

サポート登録

Corgeaは公開レジストリに掲載されているイメージをスキャンします:
  • Docker Hub
  • GitHubコンテナレジストリ(GHCR)
  • Googleコンテナレジストリ(GCR)
  • Quay.io
  • Microsoft Container Registry(MCR)
  • Amazon ECR パブリック
  • GitLabコンテナレジストリ
Dockerファイルがプロジェクト内で検出されると、イメージの自動検出が有効になり、設定は不要です。--include-imageでビルド済みイメージをスキャンする場合は、コンテナスキャンがアカウントで有効になっている必要があります。

制限

以下の制限は、Corgeaが自身で検出してプルするイメージに適用されます。
  • 公開レジストリのみ:プライベートレジストリにホストされているイメージはスキップされます。プライベートイメージをスキャンするには、自分のランナーでプルまたはビルドし、--include-imageで渡してください。この場合、Corgeaが取得するのではなく、お使いのコンテナエンジンからイメージがアップロードされます。
  • 最大イメージサイズ:1000MB(1 GB)を超えるイメージはスキップされます。
  • Dockerfile およびDocker Composeファイルで参照されたイメージのみが検出されます。どちらにも記載されていないイメージをスキャンするには--include-imageを使用します。

ベストプラクティス

一貫性のある再現性のあるスキャン結果を得るために、latestの代わりに特定のイメージタグ(例:python:3.11.5-slim)を使用します。
  • 特定のタグを使用:latestタグを避け、スキャンを再現できるよう正確なバージョンに固定します。
  • 最小構成のベースイメージを優先:攻撃対象領域を減らすため、slim、Alpine、distrolessなどのバリアントを使用します。
  • 定期的に更新:セキュリティパッチを取り込むため、ベースイメージを更新します。
  • マルチステージビルド:最終イメージのサイズと含まれるパッケージセットを最小化します。

関連