ホームページ >運用・保守 >Docker >Dockerコンテナエスケープとは何ですか

Dockerコンテナエスケープとは何ですか

WBOY
WBOYオリジナル
2022-07-25 17:13:574094ブラウズ

Docker コンテナエスケープとは、Docker が分離技術を使用しているため、攻撃者がコンテナ化されたビジネスロジックや直接制御をハイジャックすることにより、コンテナ内の特定の権限の下でコマンド実行機能を獲得するプロセスとその結果を指します。コンテナの内部からは外部のプロセスを見ることはできませんが、外部のプロセスからは内部を見ることができるため、コンテナが外部のリソースにアクセスしたり、ホストホストの権限を取得したりできる場合、これを「Docker エスケープ」と呼びます。

Dockerコンテナエスケープとは何ですか

このチュートリアルの動作環境: linux7.3 システム、docker バージョン 19.03、Dell G3 コンピューター。

docker コンテナ エスケープとは

「コンテナ エスケープ」とは、このようなプロセスと結果を指します:まず、攻撃者はコンテナ化されたビジネス ロジックを乗っ取る、または直接コントロール (CaaS およびコンテナー制御が合法的に取得されるその他のシナリオ) などは、コンテナー内の特定の権限に基づいてコマンド実行機能を取得しています。

攻撃者はこのコマンド実行機能を使用して、一部のメソッドをさらに取得します。コンテナーが配置されている直接ホスト上の特定のアクセス許可 (「物理マシンが仮想マシンを実行し、仮想マシンがコンテナーを実行する」というシナリオがよく見られます。このシナリオにおける直接ホストとは、コンテナーの外部にある仮想マシンを指します)コンテナ). コマンド実行機能。

Docker は分離テクノロジーを使用しているため、コンテナー内のプロセスは外部プロセスを見ることができませんが、外部プロセスは内部を見ることができるため、コンテナーが外部プロセスのリソースにアクセスしたり、権限を取得したりすることができます。これを「Dockerエスケープ」といいます。

Docker エスケープには現在 3 つの理由があります:

  • カーネルの脆弱性が原因です。

  • #Docker ソフトウェアの設計が原因です。

  • # 不適切な特権モードと設定が原因です。

#これら 3 つのエスケープ方法について簡単に説明します。

1. カーネルの脆弱性によるエスケープ

Docker はホスト カーネルを直接共有するため、ホスト カーネルにセキュリティの脆弱性があると、 Docker のセキュリティが影響を受けると、Docker がエスケープされる可能性があります。具体的なプロセスは次のとおりです。

  • カーネルの脆弱性を利用してカーネル コンテキストに入る

  • # 現在のプロセスのタスク構造体を取得する

  • タスク リストをバックトレースして、pid = 1 のタスク構造体を取得し、その関連データをコピーします。

  • 現在の名前空間を切り替えます

  • root シェルを開いてエスケープを完了します

2. Docker ソフトウェア設計によるエスケープ

典型的な例は次のとおりです。 Docker の標準化されたコンテナ実行エンジン ----runc。 Runc は、2019 年 2 月に Docker エスケープの脆弱性 CVE-2019-5736 にさらされました。この脆弱性の原理は、Docker、Containerd、またはその他の runc ベースのプログラムが実行時にセキュリティの脆弱性になりやすいということです。攻撃者は、ホスト runc が特定のコンテナ イメージまたは exec 操作を通じてファイルを実行するときにファイル ハンドルを取得し、runc を変更する可能性があります。バイナリ ファイル. を実行することで、ホスト マシンの root 実行権限を取得し、Docker をエスケープさせます。

3. 特権モードでのディレクトリ マウントによるエスケープ

このエスケープ方法は、他の 2 つよりもよく使用されます。特権モードは、バージョン 6.0 で Docker に導入されました。その中心的な機能は、コンテナ内の root が外部物理マシンに対する root 権限を持つことを許可することです。以前は、コンテナ内の root ユーザーには、外部物理マシンに対する通常のユーザーの権限しかありませんでした。 。

コンテナを特権モード (docker run --privileged) で起動すると、Docker コンテナはホスト上のすべてのデバイスへのアクセスが許可され、多数のデバイス ファイルへのアクセス権を取得し、マウントするにはmountコマンドを使用します。

特権モードを使用してコンテナを制御する場合、Docker 管理者は、mount コマンドを使用して外部ホスト ディスク デバイスをコンテナにマウントし、ホスト全体に対するファイルの読み取りおよび書き込み権限を取得できます。スケジュールされたタスクやその他の方法を入力して、ホスト マシン上でコマンドを実行します。

特権モードを使用して Docker を起動すると Docker がエスケープされるだけでなく、機能メカニズムを使用すると Docker がエスケープされます。 Linux カーネルはバージョン 2.2 から機能メカニズム (Capabilities) を導入し、UNIX/LINUX オペレーティング システムにおけるスーパー ユーザーと一般ユーザーの概念を打ち破り、スーパー ユーザー権限でのみ実行できるコマンドを一般ユーザーが実行できるようにしました。たとえば、コンテナが --cap-add=SYSADMIN で起動されると、コンテナ プロセスはマウントやアンマウントなどの一連のシステム管理コマンドの実行を許可されますが、このとき攻撃者がコンテナ内の外部デバイス ディレクトリをマウントすると、 , Dockerエスケープが発生します。

推奨される学習: 「

docker ビデオ チュートリアル

以上がDockerコンテナエスケープとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。