web-dev-qa-db-ja.com

ヒープ検査のセキュリティの脆弱性

セキュリティの脆弱性についてcheckmarxツールに対してJavaアプリを実行しましたが、文字配列を使用するパスワードフィールドに対して、常に問題が発生しています-ヒープ検査。これ以上は発生しません。パスワードフィールドの宣言を指摘するだけではありません。

private char[] passwordLength;

誰かがここで私を助けてくれますか、これを解決するためにこれ以上何を探すことができますか?

9
Gaurav Sachdeva

ヒープ検査は、暗号化されていないマシンメモリに保存されている機密情報に関するものであるため、攻撃者がメモリダンプを実行すると(たとえば、Heartbleedバグ)、その情報が危険にさらされます。したがって、その情報を保持するだけで脆弱になります。

Stringやchar配列の代わりにGuardedStringオブジェクトなどの安全な方法でこのような機密情報を保存するか、暗号化して元の情報をすぐにスクラブすることで、これを軽減できます。

詳細については、 this CWE (C/C++について説明していますが、Javaとの関連性は同じです)を参照してください。

7

JVMメモリに秘密情報を格納するためのアプローチ例

私見では、SealedObjectを使用して、暗号化された資格情報データをJVMメモリ内に格納する必要があります。

次のパッケージが必要です。

  • Java.security.SecureRandom
  • javax.crypto.Cipher
  • javax.crypto.KeyGenerator
  • javax.crypto.SealedObject
  • javax.crypto.SecretKey

だからあなたは作成します

  • 秘密鍵を作成する初期化された鍵ジェネレータ
  • キーと安全なランダムによって初期化される暗号
  • 次に、暗号を使用して新しい封印されたオブジェクトを作成します
  • 資格情報のすべての保存と(一時的な)ロードは、char配列を置き換える封印されたオブジェクトとの間で行われます。

実用的な例は次の場所にあります: https://github.com/Daimler/sechub/blob/develop/sechub-adapter/src/main/Java/com/daimler/sechub/adapter/CryptoAccess.Java

0
hexadez

「char []の値を上書きする方が安全ですか?」という質問については、 この回答 onsecurity.stackexchange.comを参照してください。文字列"。

TLDR:あなたはそれについて多くをすることはできません。

PS:姉妹のstackexchangeサイトです。ここでは答えをコピーしていません(また、長すぎます)。モデレーターが同意しない場合は、自由にコピーして貼り付けてください。

0
David Balažic