Skip to main content

コンテナスキャンについて知っておくべきこと

著者:
0 分で読めます

コンテナスキャンとは

コンテナスキャン、またはコンテナイメージスキャンとは、コンテナおよびそのコンポーネント内の脆弱性を特定するために使用するプロセスまたはスキャンツールのことを言います。これはコンテナセキュリティの鍵で、これにより開発者やサイバーセキュリティチームはコンテナ化されたアプリケーションのセキュリティ脅威を導入前に修正できます。

コンテナ化したデプロイメントの人気が高まっていますが、これには理由があります。コンテナ化することにより、開発者はアプリケーションを自己完結型の移植可能なコード単位に変換でき、アプリケーションをすばやく移動し、確実に導入できるようになります。ただし、コンテナ化されたソフトウェアを採用することは、コンテナセキュリティの責任が開発者に移る、ということでもあります。開発者がコンテナのセキュリティを確保するための効率的な方法の一つにコンテナスキャンがあります。

ここでは、コンテナスキャンの基本と自動コンテナスキャナのしくみについて詳しく見ていきましょう。また、コンテナスキャナで検出できる脆弱性の種類や、イメージレイヤーがコンテナのセキュリティに与える影響についても説明します。

コンテナスキャンの基本

脆弱性は、様々な方法でコンテナに侵入する可能性があります。コンテナ内のソフトウェア、コンテナとホスト OS や隣接コンテナとのやり取り、ネットワークやストレージの設定などがあります。コンテナスキャナは、これらの様々なコンテナコンポーネントを分析してセキュリティの脆弱性を検出する自動化ツールです。

イメージに追加したコードやツールから直接もたらされる脆弱性のほかに、コンテナが依存する別のイメージから問題が発生する可能性もあります。これらの別のイメージは、親イメージまたはベースイメージと呼ばれます (ただし、技術的には「親」の方がより正確です)。特に、検証済みの発行元からイメージをダウンロードし、イメージの発行元と内容を認証していない場合は、既知の脆弱性やマルウェアを含む一般に公開されているイメージをベースにしている可能性があるため、コンテナイメージを作成する際には注意が必要です。よく知られた信頼できるプロバイダーのイメージでさえ、しばしば脆弱性が含まれています。それでも、独自にイメージの脆弱性をスキャンし、親イメージとその脆弱性を特定すれば、多くの場合、1 回の変更で多数の問題を修正できます。

セキュリティスキャナは、開発の様々な段階で組み込むことができます。たとえば、イメージのベースとして使用するイメージを決定する前に、親になる可能性のあるイメージをデスクトップからスキャンしておくことができます。ツールや IDE プラグインの中には、Dockerfile をスキャンして、脆弱性の少ない、あるいはサイズの小さい代替イメージを選択できるものもあります。多くの企業は、コンテナの脆弱性スキャンを継続的インテグレーションおよび継続的デリバリー (CI/CD) パイプラインに統合しており、そこでは多くの場合、デプロイメント前に「本物の」イメージが構築されます。パイプラインでスキャンすることで、問題が多すぎるコンテナイメージがレジストリに保存され、本番環境に到達するのを防ぐことができます。ほとんどのチームは、コンテナ化されたデプロイメントが Kubernetes または別のプラットフォームで実行されている場合にもモニタリングしています。そのため、コンテナセキュリティスキャンを行うことで、開発者が多くの追加作業を行うことなく、アプリケーションのセキュリティを劇的に向上させることができます。

コンテナレジストリをスキャンすることも、使用頻度の高いイメージの脆弱性の数を減らす優れた方法の一つです。たとえば、Snyk と Docker Hub の統合により、開発者が作成するコンテナのベースとして使用できる、信頼できるパブリックイメージのソースが構築されます。また、保存されたイメージを時系列でモニタリングし、既存のイメージで新たに開示された脆弱性を特定し、将来的にそれらのイメージが本番環境に導入されることを防ぐことができます。さらに、めったに変更されない古いイメージや、サードパーティ製のイメージがコンテナレジストリにいくつか保存されている可能性があるかもしれません。これらのイメージは CI/CD パイプラインを通過しないため、レジストリからスキャンすることは、イメージが安全に使用できるかどうかを判断する良い方法となります。したがって、レジストリスキャナにより、コンテナ化されたデプロイメントに使用するイメージの信頼性を高めることができます。

検出できるコンテナの脆弱性の種類

前述のように、様々な方法でコンテナに脆弱性が入り込みます。これらのコンテナの脆弱性は、安全でないアプリケーションコードやランタイムの設定ミスから、ネットワークの脅威やアクセス制御の問題まで、多岐にわたります。これらの脅威から保護するには、コンテナを継続的にモニタリングし、発見された新しい脆弱性に関する最新の知識を得ることが必要です。

ほとんどのコンテナスキャンソリューションは、国家脆弱性データベース (NVD)共通脆弱性識別子 (CVE) データベースなど、脆弱性情報の公開ソースを活用しています。これらのデータベースは自動化された脆弱性管理、セキュリティ測定、およびコンプライアンスを可能にする既知のエクスプロイトを公開しています。

Snyk のセキュリティリサーチチームは、コンテナの脆弱性データを充実化させ、膨大な数のコンテナ脆弱性に優先順位を設定するのに役立つ情報を提供しています。Snyk Container では、Kubernetes クラスターで実行されているかどうか、実行されている場合はどのように設定されているか、成熟したエクスプロイトが利用できるかどうか、ソーシャルメディア上の噂、Linux ディストリビューション固有の脆弱性の詳細などの要素をもとに、どの問題が最も重要かを簡単に判断できるようにしています。

コンテナレイヤーが脆弱性検出に与える影響

コンテナとは、最新のアプリケーション用のビルディングブロックのことを指します。コンテナを使用することの利点の一つは、他の人が開発した成果物の上に構築できることにあります。Docker は開発者向けにこれを簡単にし、Docker Hub でコンテナイメージを簡単に共有できるようにしています。Docker は、幅広い言語やフレームワーク、その他のアプリケーションサービスに対応する独自の Docker 公式イメージも提供しています。他の人が作業した上に独自のイメージを構築すると、コンテナは最終的に複数の読み取り専用レイヤーと最後の一つの読み書きレイヤーが残ります。

新しいレイヤーを追加するごとに、コンテナに新たな脆弱性が生じるリスクがあるため、使用するコンテナスキャナはレイヤーごとに問題を検出できることが非常に重要です。また、レイヤーを作成したコマンドや Dockerfile の命令と関連付けると、開発者にとって分かりやすくなるため、さらに効果的になります。さらに、イメージはほとんどの場合、他のイメージの上に構築されるため (Dockerfile の FROM コマンドを使用するなど)、Snyk Container のようなコンテナ脆弱性スキャナは、Docker 公式イメージかどうか判断し、脆弱性を低減する代替手段をインテリジェントに提供でき、生のレイヤーの提供よりも優れていると言えます。コンテナ内のレイヤーが多くなればなるほど、通常、コンテナにインストールされるパッケージも増えます。そして、パッケージが増えると、脆弱性も増え、リスクも増えます。そのため、アプリケーションのニーズを満たす、できる限りスリムなイメージを使用することがベストプラクティスです。

包括的なコンテナセキュリティ

コンテナは複数のレイヤーで構成されているため、包括的なセキュリティでは、カスタムコード、オープンソースの依存関係、コンテナ、Dockerfile そのもの、場合によっては IaC ファイルなどの脆弱性をスキャンすることが必要です。これらは最新のクラウドネイティブアプリケーションのコンポーネントで、安全な開発ワークフローを構築する際に考慮すべき重要な領域になります。

Snyk は、クラウドネイティブアプリケーション向けの包括的なセキュリティスキャンツールセットを提供し、開発チームが開発プロセスの早い段階で脆弱性を簡単に見つけて修正できるようにしています。Snyk は既存の開発ワークフローにシームレスに統合されるため、開発チームで新しいセキュリティプロセスを導入する際の摩擦を軽減できます。これにより、組織はセキュリティをシフトレフトし、コンテナとアプリケーションのセキュリティ対策を最初の段階から実装できます。

具体的には、Snyk Container では、コンテナをスキャンするだけでなく、Dockerfile そのものもスキャンすることで、脆弱性を導入したコマンドと照合し、推奨事項を表示したり、脆弱性の少ない親イメージを使用するためのプルリクエストを提供したりできます。このようにセキュリティ上の問題点を詳細に把握することで、開発者は攻撃可能性に基づいて対策の優先順位を設定し、最小限の変更でコンテナやアプリケーションのセキュリティ態勢をただちに改善できます。

コンテナスキャンに関するよくある質問

コンテナスキャンが動作するしくみ

コンテナの脆弱性をスキャンするには、通常、セキュリティツールを使用してコンテナイメージをレイヤーごとに分析し、潜在的なセキュリティ問題を検出します。ほとんどのスキャンソリューションは、既知の脆弱性のデータベースを活用しているため、セキュリティ脅威の状況の変化に応じて最新の状態を維持することができます。また、コンテナ化されたアプリケーションは、カスタムコード、オープンソースの依存関係、イメージ、Dockerfile など、複数のコンポーネントで構成されています。これらのコンポーネントすべてで脆弱性をスキャンすることは、包括的なコンテナセキュリティにおいて極めて重要です。