コンテナセキュリティとは?代表的な脅威と事例、安全に運用するセキュリティ対策のポイントを紹介
コンテナ技術とは、アプリケーションやサービスを、独立したコンテナという仮想環境の中に格納する技術です。コンテナは仮想マシンと比較して軽量で、起動時間が短く、複数のアプリケーションを簡単にデプロイすることができるメリットがあります。しかし、コンテナ特有のさまざまな脅威があります。そのため、脅威を理解し、適切なセキュリティガイドラインを定義した運用が必要です。この記事では、コンテナの脅威の種類や、コンテナの攻撃事例を紹介し、コンテナを運用する際に大事なセキュリティガイドラインのポイントについて解説します。
コンテナセキュリティとは
コンテナセキュリティとは、コンテナを用いた環境で稼働するアプリケーションを安全に運用するために、セキュリティに関するツールやポリシーを活用して攻撃を防ぐためのプロセスの設定を指します。ソリューションを活用するだけでなく、コンテナのライフサイクルを通じて安全性を確保するために、どのような対策が行われているかが重要です。そのためには、定期的なセキュリティ・スキャンの実施と重要な脆弱性へのパッチ適用、異常な活動や疑わしい活動を監視する詳細な監査ログの作成、コンテナに対しての定期的なリスク評価と評価に対する適切なセキュリティ方針、計画と対策の実施が求められます。
さらに、コンテナ化されたアプリケーション内に保持されるデータは永続化されないため重要なデータはホスト側に保存することが重要です。そして、暗号化およびアクセス制御ツールを使用して、ユーザーデータを保護しなくてはなりません。その他、本番環境におけるアプリケーションの整合性を保護するために、安全な通信と認証技術を実装する必要があります。
コンテナを使用すれば、複数のアプリケーションを1つのサーバ上で実行できるようになる大きな利点があります。組織はアプリケーションを迅速、簡単、かつ効率的に稼働させることが可能です。しかし、コンテナの利用が増えるにつれて、悪意のあるユーザーや第3者が、コンテナ上の貴重な資産に不正にアクセスするなどの脅威が顕在化してきました。そのため、すべてのコンテナが安全な基盤から始まり、脆弱性が悪用されないよう定期的に更新されることを確認する必要があります。
さらに、すべてのコンテナを監視し、コンテナに対して悪意のある行為が行われていないことを確認することも大切です。コンテナを保護するための適切なセキュリティ対策を確立することは、組織にとって非常に重要になります。
コンテナの仕組みや従来の仮想化との違いについては下記リンク先をご覧ください。
https://jp.tdsynnex.com/blog/cloud/what-is-container-2/
コンテナへの脅威の種類
コンテナイメージの脆弱性
コンテナイメージの脆弱性とは、コンテナイメージの中に含まれるアプリケーションやOSのバージョンなどを悪用し、攻撃者がコンテナ内のデータやリソースにアクセスして、悪用するために利用される可能性のある脆弱性のことです。脆弱性の例としては、コンテナイメージの中の不正なパッケージ、アプリケーションやOSのバージョンなどが悪用される可能性があります。また、コンテナイメージの設定を攻撃者が悪用することも考えられるでしょう。
脅威の代表的な事例としては、コンテナマルウェア、安全でないコンテナ特権、センシティブなデータを含むコンテナなどがあります。それぞれ、概要は以下の通りです。
- コンテナマルウェア:コンテナイメージを使用して、悪意のあるデータやコードを意図的に環境に導入すること
- 安全でないコンテナ特権:コンテナ内で特権コマンドを実行できるようになっていたり、コンテナを他のコンテナまたはサービスへ接続させる特権が実行可能になっている場合など、コンテナイメージを使用して不正なアクセスを可能にしてしまうこと
- センシティブなデータを含むコンテナ:コンテナイメージに意図せず保管してしまった情報が見える状態になっている事で、個人情報や機密情報などのセンシティブな情報が外部に漏れる可能性がある状態のこと
以降で、その他の脆弱性について解説します。
認証の脆弱性
認証の脆弱性とは、コンテナイメージに関する認証や検証が不十分なため不正なコンテナイメージが使用されてしまう可能性があることを指します。例えば、不正なコンテナイメージが入手されてしまうと、悪意のある攻撃者がサーバやネットワークへの侵入を試みることができるなどの危険性があります。そのため、コンテナイメージの認証や検証を正しく行うことが重要です。
アプリケーションの脆弱性
アプリケーションの脆弱性とは、コンテナイメージ上のアプリケーションのソースコードや、設定の不備によって発生する脆弱性です。例えば、アプリケーションの設定ファイルに不正な構成が入っていたり、ソースコードにバグが含まれていたりすると、アプリケーションがハッキングされる可能性があります。また、コンテナイメージの脆弱性としては、不正なアクセスができる悪意のあるプログラムがコンテナイメージ内にある可能性もあります。
ネットワークの脆弱性
ネットワークの脆弱性とは、コンテナイメージ内の特定のネットワーク設定によって、悪意のある攻撃者が不正な接続を行う可能性がある脆弱性です。この脆弱性を通して、攻撃者はコンテナイメージ内のデータを盗み出せたり、不正なコマンドを実行できる可能性があります。
この脆弱性に対して、認証、暗号化、コンテナファイアウォールの設定などの対策は、潜在的な悪意ある行為を防ぐのに役立ちます。ただし、これらの対策は一度行えば良いというものではなく、定期的に現状をチェックし、必要に応じて更新する必要があります。
コンテナへの攻撃事例
コンテナへの攻撃事例のひとつに コンテナエスケープ攻撃というものがあります。この種の攻撃は、コンテナ技術の弱点を利用して、ホストOSにアクセスするものです。コンテナエスケープ攻撃は、侵入者がコンテナのセキュリティ制御をバイパスして、基盤となるホストOSにアクセスする能力を提供します。攻撃者は、この脆弱性を利用してノードを危険にさらし、機密データにアクセスし、機密情報を盗むことが可能です。
対策として、管理者はコンテナの攻撃対象領域を減らすために、必要最小限の権限付与を行うべきでしょう。さらに、コンテナに関連するあらゆる疑わしい活動を追跡するため、例えばログ管理システムを利用したり、悪意のあるふるまいを検出して防御するために Web Application Firewall などを使用する必要があります。
【参考】 コンテナ経由でホストを侵害する「コンテナエスケープ」攻撃を実例で解説
https://www.trendmicro.com/ja_jp/research/21/c/examples-describe-the-container-escape-attack-that-goes-through-a-container-to-infiltrate-the-host.html
コンテナ運用のセキュリティ対策のポイント
コンテナを運用する際のセキュリティ対策は、非常に重要です。コンテナ環境を利用することでさまざまなメリットを享受できますが、その反面、セキュリティ上の危険性も存在しているからです。そのため、より安全な環境を確保するために、セキュリティ対策を実践していく必要があります。
以下に、セキュリティ対策のポイントをいくつかご紹介します。
1.イメージの取得と検証
公式リポジトリからのみイメージを取得する
Dockerイメージは、Docker Hubを含む多数のリポジトリで公開されていますが、これらのイメージが信頼できるものであるかは保証できません。そのため、コンテナを運用する際には、公式リポジトリからのみイメージを取得することを推奨します。公式リポジトリは、Dockerが公式にメンテナンスしているリポジトリであり、信頼性が高いとされています。
イメージが署名されていることを確認する
署名されたDockeイメージは、そのイメージが認証されたものであることを示しています。したがって、署名されたイメージを使用することで、イメージの信頼性を高めることができます。イメージが署名されているかを確認するには、Docker Content Trustと呼ばれる機能を使用します。
イメージの脆弱性スキャンを実行する
Dockerイメージには、脆弱性が存在する場合があるため、イメージを取得する前に脆弱性スキャンの実行をおすすめします。それによって、イメージの脆弱性の特定と必要に応じて修正ができます。脆弱性スキャンには、Docker Hubに統合された「Docker Security Scanning」とサードパーティ製のツールを使用することができます。
2.ホストOSのセキュリティ設定
ホストOSのパッチを定期的に適用する
定期的にホストOSのパッチを適用することで、最新のセキュリティ修正が反映され、脆弱性から保護されます。パッチ適用を怠ると、脆弱性を悪用した攻撃者にシステムに侵入されてしまう可能性があります。
カーネルのパラメータを最小限に設定する
カーネルは、OSの中心部であり、システムの安全性に大きな影響を与えます。カーネルのパラメータを最小限に設定することで、攻撃者がシステムに侵入することを困難にします。またカーネルのパラメータを調整できるUNIX系コマンドのsysctlを実行して、ネットワークスタックやメモリ制限などのセキュリティ機能を設定できます。
ホストOS上で実行されているコンテナのネットワーク設定を監視する
ホストOS上で実行されているコンテナのネットワーク設定を監視することで、不正なトラフィックを検出でき、適切な対応ができます。例えば、不正なポートが開かれていないか、コンテナ間の通信が暗号化されているかなどを確認することができます。また、コンテナのネットワーク設定に対する適切なポリシーを定義することも重要です。
3.コンテナのセキュリティ設定
実行ユーザーを最小限に制限する
コンテナ内のアプリケーションは権限を持ったユーザーによって実行されるため、悪用された場合、攻撃者はそのユーザーの権限を利用して、ホストOS上での特権操作を行うことができます。そのため、実行ユーザーを最小限に制限することが重要です。最低限必要な権限のみを持つ非特権ユーザーを作成し、そのユーザーでコンテナ内のアプリケーションを実行することを推奨します。
必要なポートのみを公開する
コンテナは通常、特定のポートを公開して外部ネットワークからアクセスできるようになっています。しかし、不要なポートを公開することは、攻撃者に対して攻撃の手がかりを提供する可能性があるため、必要なポートのみを公開するようにして、不要なポートは閉じておくことを推奨します。
データの保護のためにボリュームを暗号化する
コンテナは、ホストOS上のファイルシステムを共有することができるため、コンテナ内で扱われるデータが外部に漏洩する可能性があります。この問題を回避するためにはボリュームを暗号化することでデータを保護し、万が一の場合にも情報漏洩を防止することができます。
4.ログ管理
コンテナのログを適切に保存する
コンテナ内で発生したログには、コンテナ内で発生したすべてのアクティビティが含まれます。ログには、コンテナ内で実行されているアプリケーションの状態や、コンテナ内で発生したエラーなどが含まれます。これらの情報の適切な収集は、セキュリティ侵害や障害発生時のトラブルシューティングに役立ちます。
ログの保存方法は、コンテナのランタイムの種類や環境によって異なりますが、コンテナ内で発生したログを外部ストレージに転送し、そこで保存する方法が一般的です。また、ログの収集には、Fluentdやsyslog-ngなどのツールを使用することができます。
ログを定期的に監視し、異常なアクティビティを検知する
ログを定期的に監視することで、コンテナ内で発生したセキュリティ侵害や異常なアクティビティを早期に発見し、適切な対策を講じることができます。
ログの監視には、ログの収集と同様にLogstashやFluentdなどのツールを使用することができます。
ログには時刻、IPアドレス、アクセスされたURLなどの詳細情報を含める
ログに含まれる情報が多いほど、攻撃や不正アクセスを特定しやすくなります。ログには、アクセスされた日時、IPアドレス、アクセスされたURL、アクセスに成功したかどうか、アクセスされたユーザー名などを含めることが望ましいです。ただし、プライバシーの問題があるため、ログに含める情報は企業のポリシーに従って検討する必要があります。
5.セキュリティ監視
インシデントが発生した場合は、迅速に対応する
コンテナ環境では、セキュリティインシデントが発生する可能性があります。例えば、不正アクセス、悪意のあるコードの実行、データの漏洩などが挙げられます。インシデントが発生した場合は、速やかにインシデントの確認、原因の特定、修正を行う必要があります。また、同様のインシデントが再発しないように、対策を講じることも必要です。
セキュリティ監視ツールを使用し、コンテナのネットワークアクティビティやシステムリソースの使用状況を監視する
セキュリティ監視ツールを使用することで、コンテナのネットワークアクティビティやシステムリソースの使用状況を監視して、不正アクセスや攻撃の試み、異常なシステムリソースの使用などを検知することができます。適切なセキュリティ監視ツールを選択し、適切な設定を行うことが重要です。
セキュリティポリシーに違反している場合は、適切な措置を取る
コンテナ環境で使用するセキュリティポリシーは、機密性、完全性、可用性を確保するために重要になります。ポリシーに違反するアクティビティが発生した場合は、速やかに適切な措置を取る必要があり、これらのアクティビティを検知するには、セキュリティ監視ツールの使用が効果的です。またポリシーに違反した場合は、調査を行い、必要な対応を行うことが重要になります。
まとめ
コンテナを使用すれば複数のアプリケーションを1つのサーバ上で複数実行できるという大きな利点があります。そして仮想マシンと比較して、軽量で起動時間が短いなど、多くのメリットがありますが、その環境を正しい状態で使用するためには、悪意のあるユーザーや第3者が不正にアクセスすることのないように、適切に管理する必要があります。そのためにはセキュリティガイドラインを整備し、より安全に使用できるように環境を整えることが必要です。
そして、コンテナを最新の状態に保ち、最新の脆弱性に対応するため、定期的なメンテナンスが欠かせません。これらの対策を実施するにあたり、組織内の運用指針となるセキュリティガイドラインの策定が必要となります。コンテナ基盤のフルマネージド運用も検討することでセキュリティ要件の除外も進み、企業はコンテナを活用したクラウドネイティブ時代の高いセキュリティ要件での拡張性、俊敏性、継続性に優れた環境を実現できるでしょう。
[筆者プロフィール]
おじかの しげ
https://twitter.com/shige_it_coach
東京近郊の中堅SIerに20年勤務する、インフラ系システムエンジニア。インフラ環境構築からOS、ミドル導入、構築、運用。最近はインフラ関係だけではなく、WEBアプリ開発など幅広く業務を経験。