私はドッカーについて多くを学んでいます。 docker-swarm、registry、shipyardなどを使用してdockerクラスタを作成する練習をしています。
Docker権限を持つ制限されたユーザーでホストに入ると、docker Hostマシンでrootになるのがいかに簡単かを見ました。これの代わりに、ドッカーコンテナーサービスからドッカーホストマシンに「エスケープ」できるかどうかを考えていました(rootであるかどうかは関係ありません)。
これはできますか?
概念の証明はありますか?私はグーグルでしたが、決定的なものは何も見つかりませんでした。
Docker Hostのユーザーで、Dockerグループにアクセスしたり、Sudo dockerコマンドへの権限を持っているユーザーは、実質的にrootです(dockerを使用して特権コンテナーを実行したり、コンテナー内にrootファイルシステムをマウントしたりできるため)。これが理由です。その権利を制御することは非常に重要です。
Dockerコンテナーからホストへの分割は別のゲームであり、いくつかの要因に応じて多かれ少なかれ困難になります。可能なベクトルは次のとおりです。
--privileged
基盤となるホストにアクセスできる可能性があります。詳細については、NCCのホワイトペーパーをお勧めします。 特権および非特権Linuxコンテナーの乱用 および Linixコンテナーの理解と強化 。私がやったこのプレゼンテーションのいくつかをカバーするプレゼンテーションもある here 。
Dockerの強化に興味がある場合は、 CIS Security standard も参照することをお勧めします。
通常の手段では、いいえ。 Dockerは、このセキュリティコンセプトに基づいて設計されています。
カーネルの名前空間機能を使用して、コンテナーで実行されているプロセスを、ホストで実行されているプロセスから分離します。ウェイが見つかると、セキュリティホールと見なされ、できるだけ早くクローズされます。
ただし、システム全体の構成設定が存在する可能性があります。最も一般的には、DockerコンテナはSYS_ADMIN
は、基本的にIPアドレスを変更できること、およびホストマシンで通常使用できる他の多くの機能を意味します。コンテナがSYS_ADMIN
、chrootで実行されているタスクとしては、本質的にはそれほど保護されていません。
この設定は主に、DockerコンテナーがLinuxサーバー上のデーモンのようにサービスとして実行される場合に使用されます。通常のラップトップでは、使用目的として、すべてがデフォルトで実行されます。そうでない場合、Dockerユーザーは、使用しているすべてのコンテナー開発者を信頼する必要があります。今、彼らはドッカー開発者を信頼する必要があるだけです。
Windowsバージョンのdockerでは、これでも十分ではありません。 Windows dockerはLinuxを起動しますVM HyperVで起動し、このLinux VMでdockerコンテナーを実行します。コンテナーからのブレークアウトは、このVMのroot権限を意味し、クライアントにブレークアウトしますHyperVにも穴を見つける必要がありました。