php エディターの Yuzai が今日、「ヒープ チェック」の脆弱性に関する Java の質問と回答をお届けします。ソフトウェア開発プロセスにおいて、ヒープ チェックは一般的なセキュリティ脆弱性であり、ハッカーによって悪意のある攻撃に簡単に悪用される可能性があります。この記事の Q&A 形式を通じて、ヒープ インスペクションの脆弱性の定義、原則、防止方法を深く理解し、ソフトウェア システムのセキュリティをより適切に保護できるようにします。
通話にパスワードを渡す必要があります。こうすれば
リーリーFortify がこのコードをスキャンしたところ、パスワードを文字列に割り当てているため、コードには「ヒープ チェック」の脆弱性があることが報告されました。
fortify は元のコードについて文句を言いません:
リーリーenv.getproperty() は文字列を返しますが。
強化推奨:
リーリーしかし、関数に文字列が必要な場合、パスワードとして char[] を使用するにはどうすればよいでしょうか?
はい...Base64でエンコードされたパスワードはまったく保護されません。半分の頭脳を持つハッカーは、base64 を識別してデコードする方法を知っています。したがって、あなたの「奇妙なbase64のもの」は役に立ちません。
しかし一方で、脆弱性スキャナーは、悪用が比較的難しく、おそらくいずれにせよ解決できない問題を指摘しました。
アプリケーションのある時点 (依存関係など) で、パスワードは Java String
...一部の API では String
が必要なため、パスワードは Java String
に変換されます。この時点で、スキャナーが通知するかどうかに関係なく、「ヒープ チェック」の脆弱性が存在します。たとえば、データ ソースで JDBC を使用する場合、パスワードをパラメータとして DriverManager.connect
呼び出しに渡す必要があります。
オーバーロードは 3 つあります...しかし、それらはすべてパスワードをクリア テキスト文字列として渡す必要があります。この問題を解決するのは現実的ではありません。
(どうやら、Fortify が提案したいわゆる修正は機能しないようです。そして、setPassword(env.getProperty("spring.datasource.password") への呼び出しに気づきません。 )
最も現実的な解決策は、これが「誤検知」であることをスキャナーに伝えることです。次に、ハッカーがデバッガーを接続したり、RAM、コア ダンプをチェックしたり、ディスクを交換したり、ヒープ内でパスワードを表す可能性のある String オブジェクトを検索したりすることを防ぐための措置を講じます。
String オブジェクトの型抽象化を通じて
String の表現は Java の存続期間中に何度も変更されており、変更のたびに
String場合によっては、
String のバッキング配列が他の
String パスワード
String が 別の
String機密情報を扱っている場合を除き、これは (IMO) やりすぎです。機密情報を扱う場合は、次の手順を実行する前にプラットフォームを保護してください。 (そして、セキュリティ監査のために愚かなセキュリティ スキャン ソフトウェアに依存しないでください!)
以上が「ヒープチェック」の脆弱性の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。