4

C# (.Net 3.5) の子プロセスに SecureString (キャッシュされたパスフレーズ) を渡せるようにしたいのですが、最も安全な方法がわかりません。たとえば、SecureStringを通常の文字列に変換してコマンドライン引数として渡すと、その値はディスクページングを起こしやすくなる可能性があると思います. SecureString の使用について。

代わりに SecureString の IntPtr を渡すことはできますか? リスクを増やさずに名前付きパイプを使用できますか?

4

2 に答える 2

3

一般に、よりエキゾチックな攻撃について心配する前に、脅威モデルを定義する必要があります。この場合: 誰かがコンピュータをシャットダウンし、ハードドライブのフォレンジック分析を行うのではないかと心配していますか? アプリケーション メモリもスワップ アウトできるため、1 つのプロセスがメモリ内にアプリケーション メモリを持っているという単純な事実によって、そのプロセスがスワップ ファイルで終了する可能性があります。冬眠はどうですか?ハイバネーション中に、メモリの内容全体がハードディスクに書き込まれます (SecureString と、おそらく暗号化キーも含まれます!)。攻撃者が実行中のシステムにアクセスし、アプリケーションのメモリを検索できる場合はどうなるでしょうか?

一般に、クライアント側のセキュリティは非常に複雑で、専用のハードウェア (TPM チップなど) を使用しない限り、正しく行うことはほとんど不可能です。2つの解決策は次のとおりです。

  • 2 つの文字列が等しいかどうかのみをテストする必要がある場合 (つまり、この文字列が前に持っていたものと同じかどうか)、その (ソルト化された) ハッシュ値のみを保存します。
  • 2 回目に必要なときにユーザーに情報を再入力させる (あまり便利ではありませんが、セキュリティと利便性は相反するものです)
于 2008-09-06T08:17:42.093 に答える
0

子プロセスも SecureString の操作方法を理解していない限り、それを直接渡す方法はないと思います。たとえば、Process.Start() メソッドには SecureString を受け取る 2 つのオーバーロードがあるため、実際の文字列値が傍受されるリスクは最小限に抑えられます (途中で実際の値を取得/非整列化する必要があるため、可能です)。

これを行う方法の多くは、子プロセスが何であるか、およびそれがどのように開始されているかに依存すると思います。

于 2008-09-05T19:50:42.513 に答える