私は 20 年以上 IT の分野で働いてきましたが、どういうわけかコンテナについては触れたことがありませんでした。 理論的には、それらがどのように構成され、どのように機能するかを理解しました。 しかし、私は実際に彼らに遭遇したことがなかったので、彼らのボンネットの下の歯車がどのように正確に回転し、回転するのかわかりませんでした。
それに、彼らの安全がどのようになっているのか全く分かりませんでした。 しかし、繰り返しになりますが、この理論は聞こえが良く、「セキュリティが強化されると、ユーザビリティは低下する」という古い歌が頭から離れませんでした。 そこで私は、コンテナを使用するとすべてが非常に簡単になるため、安全性は標準以下であると考えました。 結局のところ、私は正しかったのです。
すぐに始めるために、コースに登録しました
Sheila A. Berta 氏と Sol Ozan 氏が講師を務めるこのコースは、すぐに Docker コンテナーがどのように機能するのか、そして Kubernetes にデプロイされる際にどのようなプロセスがかかるのかについての説明から始まりました。 これは完全な実践的なクラスでした。学生はクラスの前に自分のマシンに Docker と microk8s をインストールする必要がありました。これは、ツールがどのように相互作用するかを確認し、弱点を見つけ、最も重要なことに、それらをブロックしようとする素晴らしい方法でした。
残念ながら、このコースは XNUMX 日後には「王子様」になれると約束されていましたが、私はすべてが始まったばかりで、学ぶべきことがまだたくさんあると感じていました。
私の高尚な観察に入る前に、コンテナとは何かを説明することが重要です。 開発の世界では、個人のマシンで書かれたコードが完璧に動作するのが普通だと考えられていますが、それをどこかのサーバーで実行しようとすると、まったく動作しません。 コンテナーは、常に動作することがわかっていて、あるサーバーから別のサーバーに簡単に移動できる自己完結型のマシンを提供することで、この問題を克服しようとします。 名前が示すように、ジョブを実行するために必要なコード、ライブラリ、その他のソフトウェアが含まれています。 一方、Kubernetes は、
以下は、赤チームと青チームの観点から見た私の発見の一部です。
レッドチーム
ほとんどのコンテナ コンテンツは root として実行されます: これは、コンテナーが侵害された場合に、コンテナーに完全にアクセスできることを意味します。 これにより、次のステップがはるかに簡単になります。
docker.sock をコンテナー内にマウントするのは危険です注: コンテナー内に root があり、Docker ソケット (/var/run/docker.sock) を持つコンテナー内に Docker をインストールしている場合は、他のコンテナーへのアクセスを含むクラスター全体を探索できる可能性があります。 このようなアクセスは、ネットワーク分離などの手段では防ぐことができません。
環境変数には機密データが含まれることがよくあります: ほとんどの場合、通常の環境変数を使用してパスワードをコンテナに送信します。 したがって、アカウントにアクセスできる場合は、後で権限を拡張するためにこれらの環境変数をスパイすることができます。
Docker API は多くの情報を提供できます: Docker API は、デフォルトで構成されている場合、承認なしで実行され、大量の情報を生成する可能性があります。 Shodan を使用すると、開いているポートのリストを簡単に見つけて、クラスターに関する詳細情報を取得し、完全なキャプチャに進むことができます。 トレンドマイクロがこれについて書いています
ブルーチーム
コンテナの内容を root として実行しないでください: root として実行する方が簡単ですが、そうすべきではありません。 代わりに、CLI から実行するときに --user オプションを使用するか、Dockerfile で USER を指定して、uid を表示することにより、アクセス許可をリセットしてアプリケーションを実行します。
コンテナへのソフトウェアのインストールを許可しない: ほぼすべての攻撃は何かを植えることから始まります。 nmap から ifconfig 、Docker 自体 (コンテナー内) まで、あらゆるものをコンテナーにインストールするのが一般的になってきました。 同じ理由で、未使用のポートはすべて常にブロックする必要があります。 これは、マシンが感染したときに制御コマンドが送信されるのを防ぐのにも役立ちます。 プログラムのインストールを防ぐだけでなく、タスクを完了するために必要な最小限のアプリケーションがコンテナ自体にインストールされていることを確認することも重要です。
docker.sock を保護する: コンテナとクラスター間の通信はこのソケットを介して処理されるため、保護する必要があります。 この記事では詳しく書きたくないので、読んでください。
環境変数の代わりに Docker シークレットを使用する: 秘密があります
この記事を読んでコンテナーに興味を持った場合は、Docker または microk8s (Kubernetes の小さいバージョン) を簡単にインストールできます。
インストール後、次の操作に進むことができます
Docker に関する包括的なコースを受講したい場合、または受講する必要がある場合は、実践的なスピーカーが基本的な抽象化からネットワーク パラメーター、さまざまなオペレーティング システムやプログラミング言語の操作の微妙な違いまで、Docker のすべてのツールを検討します。
出所: habr.com