Dockerは「自分のマシンでしか動作しない」という難題を解決し、アプリケーションやマイクロサービスの開発・デプロイを容易にしました。しかし、移植性や効率性といった利点を提供する一方で、コンテナは独自のセキュリティ課題も引き起こす可能性があります。その結果、コンテナセキュリティは極めて重要です。これによりコンテナを脆弱性や悪意ある攻撃から保護し、コンテナ化されたアプリケーションの完全性、機密性、可用性を確保できるからです。
本記事では、Dockerコンテナセキュリティの概念を解説し、コンテナを保護するためのヒントを提供します。
Dockerコンテナセキュリティとは?
Docker コンテナセキュリティ は、アプリケーションを実行するための Docker コンテナと分離された環境を、脆弱性、脅威、悪意のある攻撃から保護するための推奨される方法と手法に従います。コンテナの共有カーネルアーキテクチャを悪用したり、コンテナ設定の誤りを突いたりする可能性のあるセキュリティ侵害に対して、強固な防御を構築することを目的としています。これには、コンテナ自体とそれを実行するホストシステム、通信を行うネットワーク、そしてコンテナを管理・オーケストレーションするプロセスを保護することが含まれます。
一般的なDockerコンテナのセキュリティ課題/リスク
以下に、一般的なDockerコンテナのセキュリティ課題を示します:
1. 脆弱なイメージ
コンテナはソフトウェアをイメージとしてパッケージ化しますが、各イメージには通常、他のソフトウェアパッケージが含まれており、それぞれがリスクをもたらす可能性があります。これには、脆弱性を持つ可能性のある、古いシステムライブラリからアプリケーションレベルの依存関係まで、あらゆるものが含まれます。廃止された、または信頼できない Docker イメージ を使用すると、脆弱性が導入され、システムが攻撃にさらされる可能性があります。
2.コンテナからの脱走
コンテナからの脱走とは、攻撃者がコンテナからホストシステムや別のコンテナへ移動できるセキュリティ上の状況です。これはコンテナ内で物理カーネルが共有されていることに起因し、カーネルのバグ、コンテナ内の権限設定の誤り、コンテナランタイムの問題によって発生します。
3.ネットワーク設定の不適切さ
ネットワーク環境におけるコンテナの取り扱いにおける設定ミスは、サービスの露出、横方向の移動の機会、さらにはコンテナ境界を越えて他のコンテナにアクセスし不正な活動を行う可能性を引き起こすことがあります。誤ったネットワーク設定は、コンテナを不正アクセスや攻撃に晒す可能性があります。
4.安全でないデーモン設定
安全でないデーモン設定は、不正アクセス、特権昇格、さらにはシステム全体の侵害につながる可能性があります。Dockerデーモンのセキュリティ確保には、特権付きでの実行、TLS暗号化によるAPIエンドポイントの保護、堅牢な認証メカニズムの実装、設定の定期的な監査など、複数の側面が含まれます。
5. 漏洩したシークレットと環境変数
コンテナ化された環境が増えるにつれて、シークレットや機密性の高い設定データの管理の問題も増えています。これらのシークレットは、Dockerfileにハードコードされているか、環境変数として渡されている可能性があり、その結果、意図的または偶然に、Dockerイメージのレイヤー、ログ、あるいは稼働中のコンテナの検査を通じて、意図的または偶発的に公開される可能性があります。
6. カーネル脆弱性
コンテナは同一のカーネルで動作するため、カーネルレベルの問題は常に汎用的であり、したがってホスト上で動作する全てのコンテナに適用されます。この問題を解決するには、セキュリティアップデートの即時インストール、カーネルパラメータの調整、カーネルの強化機能など、カーネルを対象とした予防策に基づいています。
7. コンテナ間の無制限の通信
コンテナは他のコンテナと自由に通信できます。多くのユースケースでは便利ですが、重大なセキュリティリスクをもたらす可能性もあります。1 つのコンテナを侵害することで、攻撃者は環境へのアクセス権を取得し、同じネットワーク内の他のコンテナを標的にすることができます。
CNAPP Market Guide
Get key insights on the state of the CNAPP market in this Gartner Market Guide for Cloud-Native Application Protection Platforms.
Read GuideFAQs
信頼できる定期的に更新されるベースイメージを使用し、最小権限の原則に従い、非rootユーザーとしてコンテナを実行し、可能な限り読み取り専用ファイルシステムを使用してください。
Dockerの分離機能は攻撃対象領域を縮小できますが、そのセキュリティは適切な設定、定期的な更新、ベストプラクティスの遵守に大きく依存します。
Dockerコンテナを安全に停止するには、docker stopコマンドを使用します。このコマンドはメインプロセスにSIGTERMシグナルを送信し、正常なシャットダウンを可能にします。10秒のタイムアウト内に停止しない場合、Dockerは強制終了のためにSIGKILLシグナルを送信します。

