2012-05-01 2 views
1

私は、埋め込みJettyを使用しているLinux上で実行されている既存のJava Webアプリケーションを持っています。アプリケーションは、rootとして実行されるjsvcを使用してロードされ、ポート443でリッスンし、ポート8443のあまり特権のないユーザー "appname"の下で実行されるJavaアプリケーションにリクエストをリレーします。jsvcからJetty(または他のアプリケーションサーバー)へのメッセージのセキュリティ

現在、私たちは "secrets.properties"と呼ばれるファイルから暗号化キーを取得します。これは "root"によって書き込み可能であり、 "appname"によって読み取り可能です(技術的には、 "appname"グループのメンバーによって)。しかし、私の好みは、ファイルが "root"によってのみ読み込み可能であり、jsvcがファイルを読み込んで、そのファイルの内容(または単一のプロパティ)をアプリケーションに渡すということです。私の目標は、誰かがアプリを破壊し、アプリの「appname」アカウントでシステムアクセス権を取得できた場合、そのキーを取得できないということです。

"ps -ex"を実行している誰かに鍵が表示されていなくても可能ですか?

答えて

1

彼らはキーを取得することができないかもしれないが、彼らはまだ、攻撃者が現在のアプリケーションを制御するので、彼らは彼らが望む任意のメッセージを送ることができ、それ

を使用することができるだろうし、それらを暗号化/でしょう署名されているものアプリケーションが妥協しなかったと信じて、忠実に署名または暗号化してください。アプリケーションからのデータを単に認証しようとしているだけの場合は、これを行うのにはほとんど意味がありません。

サーバが侵害された場合でも、あなたの鍵を取り消すことは賢明でしょう。

攻撃者が以前に送信された(しかし、もはやアプリケーションに保存されていない)メッセージを読むことを許す、長寿命の鍵の妥協を心配するならば、それは別の問題です。 perfect forward secrecyの暗号システムを使用することをお勧めします。 TLS/SSLは、ECDHEまたはDHEのスキームである認証済みDiffie-Helmen key exchange(たとえば、ECDHE-ECDSA-AES128-GCM-SHA256またはTLS-DHE-RSA-AES-256-CBC-SHA)を使用する場合、これを持っています。

何らかの理由でキーが侵害されていると心配している場合は、プロキシを作成できます。それはルートとして実行されるか、別のグループとして実行され、そのグループに鍵が渡されます。 TLS/SSLの場合、これは簡単です。いくつかのカスタム暗号化/署名システムでは、誰が知っていますか。しかし、もう一度、これをしたいと思う理由はほとんどありません。

+0

+1はよく考えられたアイデアです。私の懸念事項は、暗号化され、アプリケーションサーバーによってデータベースに格納されているデータを保護することです。ネットワークとサーバーのファイアウォール、HIDS、監視ログ、定期監査とペンテスト、厳密なアクセス制御、行ごとの派生キー、およびよく知られた信頼できる管理者など、複数の安全対策が用意されています。アプリケーションサーバーとデータベースのルートレベルの侵害さえも、既存のデータを解読するのには十分ではありませんが、私が必要としない根拠はあきらめたくありません。派生キーのその部分は私です興味の焦点。 – phatfingers

+0

Ok、暗号化されていない状態でデータを扱っていたので、あなたの質問で私の答えを伝えることができなかったので、私の答えは一般的でした。あなたが何をしていても、アプリがデータを読み取ることが許可されている場合、攻撃者はアプリを制御するとデータを読み取ることができます。ただし、キーにアクセスする特権を持つ別のプロセスで実行された別のアプリケーション/プロキシにすべてを転送することで、アプリが復号化できるレコードの数を制限することができます。 – imichaelmiers

+0

実際には、レート制限は望んでおらず、要求が特定のしきい値を超えた場合はすべてのアクセスを拒否します。あなたが本当に不快なら、あなたはハードウェアセキュリティモジュール(HSM)に投資し、おそらくこのレート制限を行うようにプログラムすることができます。 – imichaelmiers

関連する問題