2

機密データ(この場合は暗号化キー)にアクセスする必要があるアプリケーションがあります。この時点で、スクリプトの処理中に読み取ることができるように、ファイルに保存しています。

ただし、サーバーのrootアカウントが侵害された場合、誰かがそれらを簡単に読み取ってコピーする可能性があるため、私が従わなければならないセキュリティ基準に従って十分に安全ではありません。

典型的な解決策は、外部メモリを含むキーをマウントし、アプリケーションを起動し、メモリをアンマウントして、RAMにキャッシュされたデータを使用して実行することです。もちろん、PHPなのでそれは不可能です。

他に解決策はありますか?この時点での私の唯一のアイデアは、キーを提供する小さなサイドアプリケーションですが、安全のためにどのように機能するかはわかりません。

4

1 に答える 1

0

すでにご存知のように、あなたが何をしても、キーがアプリケーションで利用可能であれば、サーバー上でルートアクセスを取得した悪意のあるコード、そしておそらく以下のUIDへのアクセスを取得したコードで利用可能になります。アプリケーションも実行します。それはそれがどれほど簡単かという問題です。

アプリケーションは長期間実行されないため、購入します。それを超えるレベルのリスクを受け入れる必要があるようです。

あなたの考えは、キーをRAMに保持し、アプリケーションによって照会できるある種のデーモンを使用することです。それは機能しますが、アプリケーションがクエリを実行できる場合は、悪意のあるコードもクエリを実行できることをすでにご存知でしょう。とにかくそのオプションを選択する場合は、memcachedの使用を検討してください(なぜ車輪の再発明をするのですか?)。

私が考えることができる他の唯一のオプションは、システムの起動時にシークレットをロードするApacheモジュール(C)(その後、シークレットの永続的なコピーがアンマウントされる)とPHP拡張機能(C)を記述して、同じプロセスに存在するApacheモジュールからの秘密。これは、PHPを外部プロセスとしてではなくApacheモジュールとして使用していることを前提としています。しかし、私にはこれはやり過ぎのように聞こえます。なぜなら、それは非常に複雑であり、実際にはリスクを取り除くことができないからです。

スワップスペースをどうするか考えましたか?(Cで)または同様のものを使用mlockして、秘密が限られた場所にある場合にスワップに書き込まれないようにすることができますが、PHPインタープリターに渡されると、この方法で保護することは困難です。したがって、スワップなしでシステムを実行することをお勧めします。

シークレットを長時間実行デーモン(おそらくPHPで記述されていない)の単一の場所に限定し、PHPアプリケーションにシークレットへのアクセスを必要とする暗号化機能をこのデーモンに委任させる設計変更を検討してください。

于 2012-06-28T01:18:51.663 に答える