ホームページ  >  記事  >  「ヒープチェック」の脆弱性

「ヒープチェック」の脆弱性

WBOY
WBOY転載
2024-02-22 12:46:06469ブラウズ

php エディターの Yuzai が今日、「ヒープ チェック」の脆弱性に関する Java の質問と回答をお届けします。ソフトウェア開発プロセスにおいて、ヒープ チェックは一般的なセキュリティ脆弱性であり、ハッカーによって悪意のある攻撃に簡単に悪用される可能性があります。この記事の Q&A 形式を通じて、ヒープ インスペクションの脆弱性の定義、原則、防止方法を深く理解し、ソフトウェア システムのセキュリティをより適切に保護できるようにします。

質問内容

通話にパスワードを渡す必要があります。こうすれば

リーリー

Fortify がこのコードをスキャンしたところ、パスワードを文字列に割り当てているため、コードには「ヒープ チェック」の脆弱性があることが報告されました。

fortify は元のコードについて文句を言いません:

リーリー

env.getproperty() は文字列を返しますが。

強化推奨:

リーリー

しかし、関数に文字列が必要な場合、パスワードとして char[] を使用するにはどうすればよいでしょうか?

解決策

はい...Base64でエンコードされたパスワードはまったく保護されません。半分の頭脳を持つハッカーは、base64 を識別してデコードする方法を知っています。したがって、あなたの「奇妙なbase64のもの」は役に立ちません。

しかし一方で、脆弱性スキャナーは、悪用が比較的難しく、おそらくいずれにせよ解決できない問題を指摘しました。

アプリケーションのある時点 (依存関係など) で、パスワードは Java String...一部の API では String が必要なため、パスワードは Java String に変換されます。この時点で、スキャナーが通知するかどうかに関係なく、「ヒープ チェック」の脆弱性が存在します。たとえば、データ ソースで JDBC を使用する場合、パスワードをパラメータとして DriverManager.connect 呼び出しに渡す必要があります。

connect

オーバーロードは 3 つあります...しかし、それらはすべてパスワードをクリア テキスト文字列として渡す必要があります。この問題を解決するのは現実的ではありません。 (どうやら、Fortify が提案したいわゆる修正は機能しないようです。そして、setPassword(env.getProperty("spring.datasource.password") への呼び出しに気づきません。 )

は、あなたが現在行っていることが「悪い」だけです。それは「パフォーマンスの安全性」です...)

最も現実的な解決策は、これが「誤検知」であることをスキャナーに伝えることです。次に、ハッカーがデバッガーを接続したり、RAM、コア ダンプをチェックしたり、ディスクを交換したり、ヒープ内でパスワードを表す可能性のある String オブジェクトを検索したりすることを防ぐための措置を講じます。 String オブジェクトの型抽象化を通じて

を破壊し、そのバッキング配列をオーバーライドする必要がある「厄介な」解決策もあります。しかし、このアプローチは脆弱です。
  • String の表現は Java の存続期間中に何度も変更されており、変更のたびに String
  • オーバーライド コードが破損する可能性があります。
  • 場合によっては、String のバッキング配列が他の String
  • オブジェクトと共有されており、バッキング配列を破棄するとこれらのオブジェクトが損傷します。
  • パスワード String 別の String
  • オブジェクトにコピーまたは挿入されている可能性があるすべての状況を見つけるには問題があります。

機密情報を扱っている場合を除き、これは (IMO) やりすぎです。機密情報を扱う場合は、次の手順を実行する前にプラットフォームを保護してください。 (そして、セキュリティ監査のために愚かなセキュリティ スキャン ソフトウェアに依存しないでください!)

以上が「ヒープチェック」の脆弱性の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。