>_ DevTrendsja

言語

ホーム

言語

セクション

フロントエンド バックエンド モバイル DevOps AI / ML ゲーム開発 ブロックチェーン 組み込み セキュリティ
Go

Dockerコンテナのセキュリティをスムーズにチェックする方法

最近、セキュリティ研究者がDocker Hubで400万個以上の空のプレースホルダーコンテナと、隠された暗号マイナーが埋め込まれた数十万個のイメージを発見しました。ベースイメージやサードパーティの依存関係を1つの docker pull コマンドでプルすることに慣れ切られており、レイヤーの中に何が存在するかはほとんど考えません — 脆弱なパッケージだけでなく、他人のインフラストラクチャへの埋め込まれたアクセストークンやサンドボックスエスケープスクリプトかもしれません。

イメージスキャンには、通常Trivy、Grype、Clairが使用されます。これらはシステムパッケージの既知のCVEを見つけるという点では十分な仕事をしますが、実行時の設定の不備、リークされたAPIキー、サプライチェーンを標的とした新しい攻撃ベクトルなど、微妙な問題を見逃すことがよくあります。

スペイン人のセキュリティ研究者であるDaniel Garcia(cr0hn)が開発したdockerscanプロジェクトは、包括的な監査によってこの問題を解決します。ツールの最初のバージョンは2017年にPythonで書かれており、実行速度は遅かったですが、第2版では著者がエンジンを完全にGoで書き直し、速度を10倍に向上させ、脆弱性スキャン、シークレット検出、設定監査を1つのバイナリに統合しました。

新しいDockerScanの中身

イメージを順番にチェックするために3つの異なるユーティリティを実行するのではなく、dockerscanは一度に複数の領域で包括的な診断を実行します。

このツールは5つの分析モジュールを組み合わせています:

  • CIS Docker Benchmark v1.7.0。ルートでの実行、不要なオープンポート、欠落しているHEALTHCHECKディレクティブ、正しいシステムファイルのパーミッションなど、80以上のセキュリティパラメータをチェックします。
  • サプライチェーン攻撃検出。近年の一般的なキャンペーンの痕跡を検索:隠されたマイナー(xmrigなど)、システムライブラリ内のバックドア(xz-utilsインシデントに従ったもの)、フィッシングテキスト、実質なレイヤーのないコンテナ。
  • 埋め込まれたシークレットの検出。40以上のキーとトークン形式を認識(AWS、GCP、OpenAI、Stripe、プライベートSSHキー、データベース接続文字列)。不明なトークンは、4.5以上のしきい値でシャノンエントロピー計算によって検出されます。
  • CVE脆弱性データベース。危険なコンテナエスケープの脆弱性(runcのCVE-2024-21626)、BuildKitの問題、古いベースイメージをトラッキング。データベースは公式MITRE cvelistV5スナップショットからコンパイルされるため、 utility hits NVD API limitsしません。
  • ランタイムセキュリティ監査。危険なLinuxケーパビリティ(例:CAP_SYS_ADMIN)、SeccompとAppArmorプロファイル、名前空間分離フラグをチェックします。

バージョン2.1.0では、以前のv2.0.xビルドでパッケージの脆弱性スキャンが静かにゼロの結果を返す原因となった重要なバグが修正されました。パッケーションバージョンマッチングは теперь distribution backportsを考慮したdpkgルールに従います。

クイックスタートとチェックの実行

このユーティリティは、Linux、macOS、Windows用のすぐに使えるバイナリとして配布されています。プルする依存関係はありません。

Linux amd64へのインストールは3行で完了します:

最初の実行する前に、ローカルCVEデータベースをダウンロードします:

データベースはGitHub Actions経由で毎日更新され、圧縮状態で約30MBです。その後、スキャナーは任意のローカルまたはリモートイメージをターゲットにできます:

特定のチェックのみが必要な場合(例:シークレット検出とCISベンチマーク準拠)、 --scanners フラグでモジュールを制限できます:

自動化スクリプトには、クワイエットモード -q と重大度フィルタリングが便利です:

プライベートレジストリでの作業

多くのスキャナーに共通する問題は、プライベートリポジトリでの認証の不便さです。Dockerscanはすべての一般的なシナリオをサポートしています:Docker Hub、GHCR、AWS ECR、Google Artifact Registry、Azure ACR、GitLab。

docker login で既に認証済みの場合は、ユーティリティは ~/.docker/config.json からトークンを自動的にプルします。システム認証情報ヘルパー(macOSではosxkeychain、Windowsではwincred、Linuxではpass)もサポートしています。

CI/CDパイプラインでは、環境変数を介して認証情報を渡す方が便利です:

このユーティリティは明確な終了コードを返します:クリーンなレポートの場合は0、高レベルの問題が見つかった場合は1、重大な脆弱性が検出された場合は2。これにより、危険なバグが見つかった直後にパイプラインのビルドを即座に停止できます。

CI/CDへの統合とレポート

Dockerscanの結果はJSONとSARIF形式で保存されます。SARIF形式はGitHub Security、GitLab、Azure DevOpsでネイティブに理解されるため、見つかった問題はプルリクエストインターフェースにすぐに表示されます。

GitHub Actionsの例:

ライセンスと制限事項

プロジェクトライセンスは特別な注意 заслуживает。著者はソース利用可能なモデルを選択しました。ソースコードは完全にオープンで、ユーティリティは社内会社のニーズ、パーソナルCI/CDパイプラインへの組み込み、監査とペネトレーションテストに無料で使用できます。1つだけ禁止されていることがあります:著者の許可なしにdockerscanを商用SaaSにパッケージ化し、有料のクラウドスキャンサービスとして販売することです。

DockerScanに移行する価値はあるか

イメージの高速な静的分析とコンテナのパーミッション検査、リークされたトークンの検出を組み合わせる必要がある場合、dockerscanはすべて1つのコマンドでこれらのタスクをカバーします。このユーティリティは約50〜100MBのRAMを消費し、古いPythonソリューションよりも заметно高速に実行されます。

このツールは、定期的な本番イメージ監査とデプロイメントパイプラインへの厳格なチェックの追加に、DevOpsエンジニアとセキュリティスペシャリストに最適です。始める最佳方法は、実際の動作コンテナ数個に対して実行して、隠されたCISベンチマーク警告の реальное数を確認することです。

関連プロジェクト