コンテナエスケープ
更新日:
用語解説
コンテナエスケープは、コンテナの中で動いているプロセスが、コンテナの分離(隔離)を破って外に出て、ホストのOSやほかのコンテナを操作できるようにする攻撃です。コンテナはホストのOSのカーネルを共有しているため、1つのコンテナを乗っ取られると、ホスト全体に被害が広がるおそれがあります。
■ 試験で押さえるポイント
主な原因は、特権モード(--privileged)での実行、rootでの実行、ホストのディレクトリやDockerのソケット(docker.sock)のマウント、不要なケーパビリティの付与などの、設定の不備です。
ホストのカーネルや、コンテナを動かすランタイム(runcなど)の脆弱性を突かれることもあります。
対策は、特権モードやroot権限を使わない最小権限での実行、ホストの資源をむやみにマウントしないこと、ホストのカーネルやランタイムの更新、seccompやAppArmor・SELinuxによるシステムコールやアクセスの制限、ユーザー名前空間の利用などです。
仮想マシンでゲストOSからハイパーバイザやホストに抜け出す攻撃は、VMエスケープといいます。
原因 | 例 | 主な対策 |
|---|---|---|
特権での実行 | 特権モードやrootでコンテナを動かす | 特権モードを使わず、root以外の利用者で動かす |
ホストの資源のマウント | docker.sockやホストの「/」をコンテナに渡す | 必要なものだけを、読取り専用でマウントする |
過剰な権限 | 不要なケーパビリティを付ける | ケーパビリティを最小にし、seccompなどで制限する |
ソフトウェアの脆弱性 | カーネルやランタイムの脆弱性を突く | ホストとランタイムを速やかに更新する |
■ 過去問での着眼点
「コンテナの中から、ホストやほかのコンテナを操作できるようにする」攻撃です。コンテナは仮想マシンと違ってカーネルを共有するので、分離が弱く、エスケープの影響がホスト全体に及ぶ点を押さえます。
例: Dockerのソケットをマウントしたコンテナを乗っ取った攻撃者が、そのソケットを使ってホストのディレクトリをマウントした新しい特権コンテナを起動し、ホストを操作します。