web-dev-qa-db-ja.com

暗号化された安全なDockerコンテナ

オープンソースに移行してソフトウェアを自由に配布できない状況を私たちは皆知っています。そして、私はこれらの状況のいずれかにいます。

多数のバイナリ(Cソースからコンパイル)とpythonシステムにすべてをラップするコード。ネットワーク経由でアプリの機能にアクセスできますが、バイナリとコードが保存されている実際のサーバーに触れる機会はありません。

次に、システムの「ローカル」バージョンを提供します。アプリは、ユーザーが物理的に所有するPC上で実行されます。私たちはすべてが壊れる可能性があることを知っていますが、少なくとも可能な限りコピーやリバースエンジニアリングからアプリを保護したいと考えています。

Dockerは素晴らしい展開ツールであることを知っているので、コンテナのファイルシステムに保存されているデータを誰も見ることができない暗号化されたdockerコンテナを作成することは可能でしょうか?この問題の既知の解決策はありますか?

また、おそらくドッカーに基づいていないよく知られたソリューションがありますか?

40
Alexey Petrenko

あなたが尋ねているのは 難読化 と呼ばれています。これはDockerとは関係がなく、言語固有の問題です。データについては、必要なマングリングをいつでも行うことができますが、攻撃者を思いとどまらせることはできますが、決して安全ではありません。プログラム(ユーザーが提供する)にはキーが含まれている必要があるため、最先端の暗号化スキームでも役に立ちません。

Cは通常、リバースエンジニアリングするのに十分な難易度です。Pythonを試すことができます pyobfuscate および similar

データについては、 この質問 (キーワード: 暗号化ファイルゲーム )が見つかりました。

8
remram

ホストマシン(rootデーモンが実行されている)上のdockerユーザーは、ホストで実行されているすべてのプロセスへのフルアクセス権を持っています。つまり、ホストマシンを制御する人は、アプリケーションとファイルシステムのRAMに常にアクセスできます。これにより、ファイルシステムの復号化や保護のためにキーを隠すことができなくなります。 RAMデバッグから。

標準のLinuxボックスで難読化を使用すると、ファイルシステムとRAMを読みにくくすることができますが、不可能にしたりコンテナを実行したりすることはできません。

オペレーティングシステムを実行しているハードウェアを制御できる場合は、システムが起動するとすぐにシステム検証を開始する Trusted Platform Module をご覧ください。次に、rootユーザーがシステムにアクセスしてキーを隠し、ファイルシステムを強力に暗号化する前に、理論的に何かを行うことができます。その場合でも、マシンへの物理的アクセスが与えられれば、決心した攻撃者は常に復号化されたデータを取得できます。

27
Andy

完全に安全なソリューションが必要な場合、機密性の「聖杯」である準同型暗号化を探しています。つまり、アプリケーションとデータを暗号化してPCに送信し、所有者、OS、または他の人がデータをすくい取ることなく、このPCでそれらを実行する必要があります。パフォーマンスを大幅に低下させることなくこれを行うことは、活発な研究プロジェクトです。少なくとも 1つのプロジェクト がこれを管理しましたが、まだ制限があります:

  1. それは窓のみです
  2. CPUはキーにアクセスできます(つまり、Intelを信頼する必要があります)
  3. クラウドシナリオ向けに最適化されています。これを複数のPCにインストールする場合、アプリケーションをインストールするPCの1つに安全な方法でキーを提供する必要があります(つまり、そこに行って自分で入力する必要があります)。キーを他のPCに安全に伝達します。

TPMの使用に関するAndyの提案は、ポイント2および3と同様の意味を持ちます。

7
tec-goblin

Dockerのようなサウンドは適切なツールではありません。これは、本格的なサンドボックスとして使用することを意図したものではなかったためです(少なくとも私が読んでいるものに基づくと)。より本格的なVirtualBoxアプローチを使用していないのはなぜですか?少なくともその後、ログインの背後で仮想マシンをロックアップし(他の人のコンピューターへの物理的なインストールをロックアップできる限り)、分離された暗号化されたファイルシステムと9ヤード全体を実行できます。

軽く開いて開くか、太って閉じてください。 「軽量で閉じた」オプションがあることは知りません。

5
WineSoaked

私はまったく同じ問題を抱えています。現在、私が発見できたのは以下です。

A. Asylo( https://asylo.dev

  1. Asyloでは、プログラム/アルゴリズムをC++で記述する必要があります。
  2. Asyloライブラリはdockerに統合されており、Asyloに基づいてカスタムdeckerイメージを作成するのが望ましいようです。
  3. Asyloは、「proto buffers」や「bazel」など、あまり人気のない多くの技術に依存しています。私にとっては、学習曲線は急ではないようです。どうやってするの。
  4. Asyloは無料です
  5. Asyloは、その長所と短所をすべて備えた明るい新製品です。
  6. AsyloはGoogleによって製造されていますが、そのページの免責事項によると、公式にサポートされているGoogle製品ではありません。
  7. Asyloは、root権限を持つユーザーからでも、信頼できる環境のデータを保存できると約束しています。ただし、ドキュメントが不足しており、現在どのようにこれを実装できるかは明確ではありません。

B.スコーン( https://sconedocs.github.io

  1. INTEL SGXテクノロジーにバインドされていますが、シミュレーションモード(開発用)もあります。
  2. 無料ではありません。それは支払われていない機能のほんの小さなセットを持っています。
  3. 多くのセキュリティ機能をサポートしているようです。
  4. 使いやすい。
  5. 彼らは彼らの技術であなた自身の港湾労働者イメージを構築する方法とより多くのドキュメントと指示を持っているようです。
4
osoitza