2017-05-30 3 views
1

私は、Windowsフォームのテキストボックスから文字列を受け取り、その文字列をパラメータとして使用するAPIに渡すアプリケーションを持っています。私は、文字列がタスクの完了後にプロセスメモリから依然として照会できることを知っています。私は文字列メモリ管理機能のためにSecureStringを使うことを提案しました。しかし、私が正しく理解していれば、安全な文字列が文字列から構築されるか、安全な文字列の値が最終的に文字列に格納される場合、文字列の目的は無効になります。プロセスメモリから文字列を削除するには?

可能な限り最適な解決策を提案してください。

+0

しかし、時間メモリによって解析ツールは、リサイズアプリの要因です、キーロガーを使用するか、または単にレンチを取るとパスワードの誰かを脅すために容易になるだろうそれはワイヤで暗号化されていますか?もしそうでなければ、あなたはなぜそれについて思い出にいらっしゃるのですか? –

+0

任意のパラメータは、実行スタック上のメソッドに渡されます。メソッドが終了すると、メソッドが呼び出される前に実行スタックポイントが場所に戻されます。したがって、メソッドによって使用される変数はスタック上にあり、アクセスできません。呼び出し元のメソッドは、スタックからオブジェクトを削除するために戻る前に変数を破棄する必要があります。 – jdweng

+0

WinFormsの「TextBox」コントロールからのものであれば、どこにいてもその文字列の未知の/認識できない数のコピーが既に存在します。このリークは修正できません。これを再エンジニアリングして、「SecureString」を全面的に使用するか、このコードが実行されているマシンへの十分なアクセス権を持つ人がこのデータをプロセスメモリから読み込む可能性があります。しかし、そのようなレベルのアクセス権を持つ人は、とにかくキーロガーを簡単にインストールできたことに留意してください。 –

答えて

5

SecureStringは安全とはみなされません。 にこれを行うにはが必要な場合は、char[]を使用して一度データを上書きするか、コードを使用してstringを上書きすることができます(ちょうど...中止されていないか、 ;呼び出しスタック内のどこにでもが適用されることに注意してください。 OSがさまざまな理由でページをコピーした可能性があり、メモリがでない場合には、ディスク上に(スワップファイルの場合でも)非常にが慎重に割り当てられている可能性があります。

+0

好奇心を要して、安全であるとは考えられないほど詳しく説明できますか? – Rob

+1

@Robそれは、それを自明に逆転させる方法がよく知られており、10年以上続いています。 「HawkEye」は、少なくとも2006年までこれを行うことができます:https://corneliutusnea.wordpress.com/2006/10/25/hawkeye-i-can-see-your-securestrings/-最終的に、オブジェクトは便利な方法を公開すると、悪質なコードが悪用される可能性があります。 –

+1

@Rob:[MSDN](https://msdn.microsoft.com/en-us/library/system.security.securestring()このような文字列は、未処理のメモリにアクセスできるプロセスや操作にさらされている可能性があります(例:v = vs.110).aspx#HowSecure): "全体的に、SecureStringはStringよりも安全です。プロセスのダンプ、またはユーザーが表示可能なスワップファイルなど、SecureStringを使用してパスワードを保護する代わりに、プロセスの外部に格納されている資格情報に不透明なハンドルを使用することをお勧めします" – Brian

関連する問題