2016-02-29 9 views
9

http://processhacker.sourceforge.netのようなツールを使用してランタイムアプリケーションのメモリを調べることができるjavaプロセスの問題について、最近私はつまずきました。ツール - アプリケーションで認証に使用されたパスワードが表示されます。問題を調査したところ、パスワードは使用後にゼロになっているようです。 Java Mission Control(GCが無効)を使用してヒープダ​​ンプを行い、パスワードを取得できるかどうかを確認しようとしました。 Eclipseのメモリツールを使用した私のような単純なクエリを実行しました:プロセスメモリのパスワードはヒープダンプにはありません

SELECT * FROM char[] c WHERE toString(c).startsWith("mypasswordsample") 

しかし、それはすべての結果が得られなかった、とパスワードは時間かそこら後もプロセスのハッカーで見えました。 GCを有効にしてヒープダ​​ンプを実行すると、プロセスのハッカーはパスワードを見つけられなくなったようです。

舞台裏でJVMは何をしていますか?ライブオブジェクトでパスワードが見つからないのはなぜですか?このパスワードがどこに保存されているのか、誰が作成したのか、なぜゼロにしていないのかを確認するために何らかのダンプを実行できますか?

+0

"誰がそれを作成したのですか?なぜゼロ化されなかったのですか" - それは完全にアプリケーションにあります。その質問に対するメモリダンプの回答 – f1sh

+0

あなたは正しいですが、属性の名前やコードで問題を追跡するのに役立つ何かの名前を見つけることを望んでいました。 –

+2

パスワードのデータは、まだアクティブではない生き残りスペースに存在する可能性があります。 YoungGen、ネイティブメモリ、またはhに応じて他の場所それは使用され、クリアされます。関連するコードを提供するかどうかは簡単に言えます。 Process Hackerはデータを検出したアドレスを表示しますか? – apangin

答えて

1

これはあまりにも具体的ですが、多くのパスワード(特にJAASの場合)は文字列ではなく文字配列を使用し、使用後に文字を明示的にゼロにします。したがって、ログオンしている間にヒープダンプを取得した場合は、それを見ることができます。しかしそうでなければ、あなたはしません。このメカニズムを使用するJAASのPasswordCallbackを参照してください。

(配列が変更可能であるため、文字の配列が使用されるため、後で通過して各文字をスペースに設定するか、または\0を認証に使用しています。メモリの内容がすばやくスヌーピングするためのデータを保持すべきではありません。

関連する問題