web-dev-qa-db-ja.com

OracleのGuardedStringはヒープまたはメモリダンプから機密データを保護しますか?

Oracleのorg.identityconnectors.common.security.GuardedStringはそのことをドキュメントで述べています:

GuardedStringクラスは、文字を暗号化された形式でメモリに格納することにより、[文字列データがクリアテキストとしてメモリに保持される問題]を軽減します。暗号化キーはランダムに生成されたキーになります。

これはヒープまたはメモリダンプから保護しますか?一見すると、ランダムに生成されたキーをメモリ内に配置し、それを使用して機密データを復号化することは簡単です。

7
Chris Betti

実際の実装をさらに詳しく調べると、攻撃者がメモリダンプのデータ構造を理解するのに役立ちます。また、私が見つけたもの EncryptorImpl から、キーストレージメカニズムを難読化して時間を延ばすための努力はまったく行われていません。秘密をリバースエンジニアリングするために必要です。だから、これは記憶の露出に対する効果的な対策ではありません。

このクラスのより良い使用シナリオを提供しましょう:キー変数はプライベートなので、少なくとも開発者が攻撃者に誤ってキーで応答する方法を見つけることはほとんどありません(たとえば、制御フローのバグが原因です)。 Webサービスリクエストハンドラ)。したがって、このクラスは、キーを渡すのではなく、バックグラウンドで実際に復号化することによってのみコードが復号化に役立つことを保証するために使用されます。プログラムが停止またはオフラインにされると、攻撃者はシークレットを解読できなくなり、それまでに発生したすべての解読(攻撃者がプログラムを一種のOracleとして使用していたとき)がログに記録される機会がありました。どのデータが危険にさらされているかを突き止めるための事後分析に関連する場合があります。

5
Anton Kaiser