web-dev-qa-db-ja.com

ホスティング会社がVMの暗号化キーにアクセスできないようにするにはどうすればよいですか?

ローカルホスティング会社によるWebアプリケーション(ソースコード+データベース)の潜在的な盗難を防止したいのですが、何らかの理由で完全に信頼していません(ただし、断然最高の方法で使用するしかありません)。ここでの待ち時間)。

パーティションをcryptsetupで暗号化し、そこにWebディレクトリ+データベースファイルを保存する予定です。

唯一の問題は、Webサーバーとデータベースサーバーを起動する前に、再起動のたびに(制御されていないものであっても)パーティションのロックを解除する必要があることです。でも今はそれで生活する準備ができていると思います。

ただし、私がWeb全体で読み取ることができる限り、暗号化キーはそのままメモリに格納され、専用のマシンからでも、マシンへの物理的なアクセスを指定して読み取ることができます コールドブート攻撃 を使用します。 VMでは、ハイパーバイザーがサーバー全体の状態(ストレージ+ RAM)のスナップショットを取得できるため、これはさらに簡単だと思います。

つまり、私が知る限り、メモリダンプを取り、暗号化キーをいつでも簡単に見つけることができるはずです。

これを防ぐ方法はありますか?

ハイパーバイザーを制御することは、データを盗もうとする誰かに大きな利点をもたらすことを知っています。そのため、ここでは完璧な解決策を探していません。しかし、私はむしろデータへのアクセスを取得することをできるだけ困難にしようとしているので、それらを取得するために時間とリソースを費やすことは経済的に実行可能ではありません。

暗号化キーは復号化のためにメモリにsome形式で格納する必要があるため、私はここではあまり楽観的ではありませんが、何かを見落としたと思います。


編集-説明

私の コメント 以下から:

悪意のある操作を実行するためにホスティング会社のハイパーバイザーが変更されていないことは確かです。彼らのビジネスはホスティングであり、物を盗むのではなく、会社は比較的信頼できる。私が保護しようとしているのは、従業員にデータのスナップショットを売るために賄賂を贈る人です。ストックハイパーバイザーが実行できるスナップショットから暗号化キーを復元できない限り、私はこのソリューションが私のユースケースに十分適していると考えています。

46
Benjamin

あなたはできません、プレーンでシンプルです。あなたがホスティング会社を信頼していない場合、あなたはそれらをホストしません。これは 10の不変の安全法則 の第3法則です。

法則3:悪意のあるユーザーがコンピュータに物理的に無制限にアクセスできる場合、それはもはやコンピュータではありません。

ハイパーバイザーは常に仮想化マシンよりも特権的な位置にあり、不正なハイパーバイザーから自分を守ることはできません。

ネットワークの場所を活用しながらコードを安全に保つ方法の1つは、コロケーションホスティングを行うことです。コロケーションホスティングでは、自分のマシンを他の人のデータセンターに持ってきます。

基本的なコロケーション自体は、ほとんどの日和見攻撃者を阻止するはずですが、ターゲット/決定された攻撃者がとにかくあなたのマシンに接続する可能性があります。これが問題になる場合は、マシンを改ざん防止用/改ざん防止用のサーバーケースに入れて、外へのロックが解除されたポートが電源ケーブルとネットワークケーブルだけであり、すべてのネットワークトラフィックが暗号化されるようにする必要があります。マシンに出入り。このようにして、マシンをネットワークに配置し、ネットワークの低レイテンシを活用できます。また、サーバーのシャーシを壊さない限り、サーバーからデータを盗むことはできません。

データの保護が非常に重要な場合は、ケースが改ざんされていない定期的な監査も行う必要があります。予算に限りがある場合は、さまざまなセンサーを備えた改ざん防止シャーシを設計して、シャーシが改ざんされたことを検出した場合にアラームを発してシャットダウン(すべての機密/暗号化キーを破棄する)を開始することもできますが、もちろんこれらは本当にすぐに高価になります。

109
Lie Ryan

それらを取得するために時間とリソースを費やすことは経済的に実行可能ではないでしょう。

私はあなたにそれを壊すのが嫌いですが、あなたは単にそれほど重要ではありません。誰もあなたやあなたのWebアプリを知りません。したがって、それはすでに経済的に実行可能ではありません。

費用便益を考えなさい。ホスティング会社の場合、これが発生するとonceになると、顧客が出血します。したがって、適切なログが記録されます。これを捕まえた従業員は解雇されるだけでなく逮捕されます。したがって、賄賂はseriousである必要があります。私たちは何百万人と話しています。なぜなら、投獄されて釈放されたときに二度と働けないことを従業員に補償する必要があるからです。そして、それが賄賂である場合、あなたの会社は少なくともそれの10倍の価値を持っている必要があります。それはあなたの会社を数千万、そしておそらくは数億と評価します。

正直なところ、あなたの会社はその価値がありますか?これまでに言ったことはすべて、そうではないと言っています。そうであれば、独自のサーバーを実行しない理由はありません。

19
Graham

理論的には、最新のCPUの信頼できるハードウェア機能を使用して、ディスクの暗号化を実行したり、CPUの改ざん防止機能を備えた部分内でVM全体を実行したりできるようにする必要があります。改ざんに強い信頼された飛び地内でのみアクセスできます。

IntelのSGX信頼コンピューティングシステムをVMに公開している間 ストックハイパーバイザーでは可能ではないようです 、AMDには Secure Encrypted Virtualization、またはSEV と呼ばれる機能があり、正確に聞こえます探しているもの:VMは、AMDまたはホストCPUを逆アセンブルできる意思がある人だけが知っているキーでハイパーバイザーから保護されるように設定できます。

残念ながら、使用する必要のある特定のホスティング会社がAMD SEVをサポートするホストを提供したり、クライアントがこの機能を利用できるようにすることはほとんどありません。

11
interfect

Microsoftはこれに対して Shielded VMs と呼ばれる可能性のある解決策を用意しています。これらは特に、一部の悪意のあるアクターがハイパーバイザーへの管理アクセス権を持つ攻撃ベクトルを対象としています。この例としては、クラウドまたはコロコロにデプロイされたマシンがあります。

欠点は、物理的な制御下でGuardian Serverを維持する必要があることです。それはあなたのニーズにとってはやり過ぎかもしれません。

4
Gaius

なんらかの理由で完全に信用していない

それらをどのように信頼しますか? 無能かもしれないと思いますか、それともmaliciousかもしれないと思いますか?

単に無能なら、おそらくあなたはあなたが説明した暗号化から妥当な保護を得るでしょう。もちろん、ホストマシンが危険にさらされ、攻撃者がRAMから現在の暗号化キーを取得する方法を見つけた可能性もありますが、通常のWebホストの侵害では、攻撃者はそれほど遠くまでは行きません。マルウェアをダンプしたり、パスワードを簡単に取得したりできる場所を見つけるだけです。

ただし、それらが悪意のあるものである場合、VM上のデータを保護することはできません。せいぜい、それをプロキシサーバーとして構成することで、データベースとソースコードを公開することなく、レイテンシのメリットを得ることができます。

4
jpa

Lie Ryanの答えは正しいですが、ホストの構内で物理的な攻撃面がまだあるコロケーションを超えて、もう1つの可能性は、パブリックプロバイダー向けIPアドレスを取得するためにホスティングプロバイダーを使用し、それをオンオーナーにトンネリングすることです。まともなホームまたはビジネスクラスのブロードバンドリンクを介したオンプレミスサーバー。

本当に豪華にしたい場合は、証明書の秘密キーが独自のオンプレミスサーバーを離れることがなく、ホスティングサイトのサーバーがセッションキーを生成するためのアクセス権しか持たない混合アプローチを実行することもできます。 Cloudflareはこのようなものを提供します。それがどのように機能するかは正確にはわかりません。ホスティングサイトにデータを持ち、ホスティングサイトには決してない対称キーで暗号化して、データを渡すことも可能です(彼らのものではありませんが、自分でロールする場合は暗号プリミティブを使います)。クライアントのみがデータを復号化できるような方法でのホスティングサイトへの接続。

クラウドは最終的には他の誰かのコンピューターであり、他の誰かのルールです。物理的なアクセスのセキュリティを探している場合、最善の方法は、独自の物理サーバーをホストするか、専用の物理サーバーを入手することです。今日、これを調整するために利用できるすべてのツールと、プロジェクトを長期間ホストすることを望んでいるという事実は、悪い考えではありません。

1
Jas Panesar

あなたの質問は数回ペースが入れ替わるようですが、あなたの主な懸念があなたの作品のクローンである場合、以下は簡単な保護であるべきです:

盗むのに面白いものがないことを確認してください

すべてのソースコードを自分のマシンに置くのではなく、別の環境でコードを操作し、バイナリのみをデプロイします。

これにより、バイナリを更新できないため、誰かがあなたの作業をコピーするのを防ぐことができます。あなたが本当に偏執的である場合、現在のバージョンをコピーしたとしても、動作が停止するようにロジックに時限爆弾を配置することもできます。

かなりの量のコードがサーバーに存在する必要がある場合でも、誰かが1つまたは2つのコアパーツを使用できないようにブロックできれば、すでに経済的に魅力がなくなります。もちろん、リバースエンジニアリングすることもできますが、これは非常に高価になる可能性があります。


もちろん、このソリューションはデータ漏洩に対する保護を提供しませんが、あなたの質問に基づいて、競争を防ぐことはデータが公開されることよりも懸念のように思われます。

0