web-dev-qa-db-ja.com

データベース暗号化セキュリティ

WebアプリケーションAPIからデータベースデータを暗号化および復号化しています。 Webサーバーが危険にさらされている場合、誰かが同じ方法を使用してデータを取得しないようにするにはどうすればよいですか?

たとえば、データベースの暗号化/復号化を実行するPHPアプリケーションが私のWebサーバーにあるとします。Webサーバーが侵害された場合、誰かがキーにアクセスしてデータを復号化することを妨げるもの。

問題は言語固有ではありません。問題は、Webアプリケーションが使用できるが、サーバーへの管理アクセス権を持つユーザーからの安全なキーを保存することです。

16
ksexton

これを実行したら、暗号化をWebサーバーから完全に移動しました。基本的に私は次のシナリオを持っています

  • 暗号化されたデータを保存するデータベースサーバー
  • アプリケーションを実行し、暗号化されたデータを保存/取得するWebサーバー
  • 暗号化と復号化を実行し、ロックダウンされる暗号サーバー

基本的に、Webサーバーは、内部ネットワークでのみ利用可能な暗号サーバー上のWebサービスを呼び出し、「ここにデータとデータの種類があります」と表示します。暗号サーバーは、データのタイプに基づいてキーサイズ、キーの有効期限などを決定し、新しい対称キーとソルトで暗号化して、バイナリBLOBとキー識別子を返します。暗号化サーバーは独自のSQLデータベースにキーを保存しますが、最初に暗号化サービスのみがアクセスできるX509証明書でキーを保護します。したがって、リモートでデータベースにアクセスできたとしても、OSアクセスは必要ないので役に立ちません。 X509証明書を取得してキーを復号化します。いずれにしても、データは別の場所に保持されます。

暗号サーバーの管理者パスワードは「ブレークボックス」に保管され、2人の別々の人がそれぞれの部分を組み合わせてパスワードを取得する必要があります。

つまり、開発者は使用するアルゴリズムについて心配する必要がなく、暗号化サーバーによって処理されるため、キーストレージを保護する必要がなく、プロセスの変更や新しいルールが出てきたときに使用されるアルゴリズムを更新することができ、何も更新する必要がありません。暗号サーバー以外。 Webアプリケーションを実行しているプロセスだけが暗号化サーバーを呼び出すことができ、通常のユーザーアカウントを呼び出すことも、管理者アカウントを呼び出すこともできません。 Webデータベースを表示できるデータベース管理者は、暗号化されたデータのみを表示し、キーにもアクセスできません。

Webサーバーが危険にさらされている場合でも、Webサーバーの機能は制限されています。暗号化サーバーを呼び出してキーを取得し、データストレージデータベースを呼び出してキーが参照するデータを取得します。これらがどのように発生するか、またはサーバーが内部ネットワークのどこにあるかを知らずに、任意のコードを実行する能力が侵害である場合、実行は困難です。

もちろん、妥協策が根付きであり、攻撃者がコードを入手してプロセスを偽装できる場合、すべての賭けはうまくいっていませんが、それは常に当てはまります。

5
blowdart

ここでの答えは良い(@blowdartと@Tateの両方)ですが、考慮すべき重要な点は、Webサイトが侵害された場合、セキュリティに関する限りゲームオーバーになるということです。

悪意のある乗っ取りコードは、コードへのアクセス、実行中のプロセス、データベースなどを含めて、サイトで可能なことanyを実行できます。つまり、暗号化の方法に関係なく、どこにキーを配置しても彼らはそれに到達し、あなたのデータも解読することができます。何をしようとしても、せいぜいあいまいであり、最悪の場合、最悪の場合、コードがハード復号化作業を実行し、後でそれを傍受するだけです。

7
AviD

データベースのセキュリティに関するすべてのことに関して、私の意見で現時点で利用できる最良のリソースは、Securosisの論文です。

データベース暗号化またはトークン化ソリューションの理解と選択
このペーパーには、主要なデータベース暗号化およびトークン化テクノロジーの説明、どのタイプの暗号化が最適かを判断するのに役立つ決定木、および実際のデプロイメントから得られた使用例が含まれています。データベースの暗号化またはトークン化プロジェクトを検討している場合、このペーパーを使用すると、研究とアーキテクチャ開発の時間を節約できます。

http://securosis.com/research/publication/understanding-and-selecting-a-database-encryption-or-tokenization-solution/

PDFへの直接リンク: http://securosis.com/reports/Securosis_Understanding_DBEncryption.V_.1_.pdf

5
Tate Hansen

まず、これは非常に難しい問題です。基本的な問題は、Webアプリケーションにデータを復号化するための十分な知識がある場合、ハイジャックされると、データを復号化するために十分な情報が得られることです。あなたは本当にそこから始めなければなりません。これはいくつかのことを意味します。

  1. アプリケーションがデータの復号化を信頼している場合、データが引き継がれると、すべてのデータを復号化できます。

  2. アプリケーションがデータを復号化することを信頼していない場合、おそらくプレーンテキストのセットで信頼されます。

1つのオプションは、アプリケーションとデータベースの間に、暗号化と復号化を処理するサービスを提供することです。これは、2人が協力してキーをメモリに格納する必要があるように設計できますが、そうでない場合でも、ある程度の防御を得ることができます。 Webアプリケーションが引き継がれた場合、復号化サービスが取得できるものにのみアクセスできるため、緩和策はその戦略の一部となります。攻撃者は、生データにアクセスするために復号化/暗号化サービスを危険にさらす必要があります(詳細な防御)。

(正直に言うと、この暗号化/復号化サービスをデータベースとマージする傾向がありますが、特定のRDBMSに対してこれを安全に行う方法について本を書くことができ、簡単な解決策ではありません。)

2
Chris Travers

このスレッドでかなり良い答え。これは基本的に、2つの主要な問題、つまり暗号化方式と暗号化キーのストレージになります。

私はDB暗号化ベンダーで働いており、私たちのソリューション D'Amo をデプロイする多くの同様のプロジェクトに取り組みました。通常、DBタイプに応じてDBレベルでデータを暗号化しますが、このような場合は、リモートで監視できるenc/decポリシーを設定するためにリモートで監視できる暗号化/復号化セキュリティエージェント(モジュール)をWebサーバーにインストールします操作。

私たちの一般的なアドバイスは、キーを個別の専用のキー管理サーバー(KMS)に格納して、それを提供することです:一部のお客様は、追加の手順を踏んだり、サードパーティ企業からハードウェアセキュリティモジュール(HSM)キー管理。私たちのソリューションは列ベースであるため、暗号化された列ごとに異なるキーがありました。また、セキュリティエージェントがKMSからキーを取得しているときにMITM攻撃を回避するには、セキュリティエージェントとKMS間の通信を保護する必要があります。

開示:私はPenta Security Systems Inc.のエンジニアです。

1
NA AE