2

これは一見ひどいアイデアのように思えるかもしれませんが、これが私のシナリオです。ユーザー名認証を使用して複数の WCF エンドポイントを公開する Windows サービスがあります。カスタム オーセンティケーターは、ローカル データベースでユーザーの資格情報を検索するか (パスワードはソルト化された SHA-1 として格納されます)、別のサービスに WCF 要求を送信してパスワードを検証します。(ユーザー オブジェクトには、使用する認証ソースを示す、内部または外部の列挙型があります)。

ルックアップ + ハッシュ チェックを実行するか、WCF 呼び出しを行うと、サービスへのすべての要求に対して実行するのにコストがかかることがわかりました。そのため、ユーザー名とパスワードの情報をキャッシュしたいと考えています。キャッシュ内の各アイテムには有効期間があるため、たとえば、キャッシュ内のアイテムが 60 秒経過している場合、次の要求時にオーセンティケーターはキャッシュではなく元のソースに対して資格情報を検証し、それを更新します。

ローカル データベースの場合、ユーザー名と SHA1 のペアをディクショナリに格納するだけで済み、「内部」ユーザーからの要求ごとに、提供されたパスワードを再ハッシュして比較するだけで済みます。「外部」ユーザーの場合、プレーンテキストのパスワードのみをオーセンティケーターに送信するため、それをハッシュしてキャッシュの一部として保存するのは私次第です。これにより、データベース要求やリモート サービス呼び出しのオーバーヘッドが確実に節約されますが、それでも毎回ハッシュ操作を実行する必要があります。

問題のサービスは、物理的セキュリティとネットワーク セキュリティが良好な内部サーバーで実行されます。ハッシュ化されたバージョンを保存する代わりに、プレーンテキストのパスワードをキャッシュに保存することは許容される慣行ですか? その場合、私のリスクは、プロセスのメモリをダンプしてパスワードを取得する攻撃者のようです。そのリスクを許容できると考える場合、プレーンテキストのパスワードをメモリに保持しないようにする必要がある他の理由はありますか?

プレーンテキストのパスワードを使用することを選択した場合、SecureString によってリスクがある程度制限される可能性があると思います。SecureString を使用するのに苦労する価値はありますか (実装は非常に遠回りに思えます)。ハッシュ化されていないパスワードを永続的に保存することのリスクは十分に認識していますが、平文パスワードの揮発性ストレージに関するコンセンサスがどのように見えるかはわかりません。

4

2 に答える 2

2

SecureString は暗号化されたメモリを使用するため、毎回自分でハッシュを行うよりもパフォーマンスが向上する可能性があります。ただし、環境でプロファイルする必要があります。

平文のパスワードをメモリに保存するリスクについては、このコンテキストで答えられる質問ではありません。はい、大丈夫です。それは私の状況のた​​めであり、さまざまな理由があります。しかし、それはあなたのものと同じではありません。

ここに私が提案するものがあります: パスワード漏洩の影響を考えてみてください -- 基本的に、ハッカーがパスワードを所有することは、どれくらいの価値 ($ または $$$?) でしょうか? 最近のセキュリティ問題のほとんどは、金銭的なインセンティブから生じています。相対的に言えば、純粋な荒らし行為は、これらの人たちに勝っています。

これを、SQL インジェクションやユーザーに電話して「アカウントを確認する」など、まったく異なる方法でセキュリティが侵害される可能性と比較してください。いくつかのパスワードの $ 値が高く、それらを取得する方法が他にない場合は、おそらくそれらを暗号化し続ける必要があります (これで、より強力なサーバーのコストが正当化されました!)。そして、必ず暗号鍵を保護してください。ハッカーがサーバーを手に入れたら、それらの鍵はプログラム メモリと同じくらい簡単にアクセスできる可能性があります。

一方、値が低く、すぐに利用可能な他のエクスプロイトが存在する場合 (実際に存在する場合が多い)、ハッカーがサーバーを侵害してメモリをダンプするのに時間をかける価値がないという合理的な議論を行うことができます。

幸運を。

于 2010-03-24T17:34:27.293 に答える
1

問題のサービスは、物理的セキュリティとネットワーク セキュリティが良好な内部サーバーで実行されます。

それが今から永遠(または次のパッチのいずれか早い方)まで真実である限り、キャッシュされたパスワードをRAMにプレーンテキストとして保存しても問題ありません。パスワード DB 全体を RAM に保存する場合 (たとえば、永続的なストレージが遅すぎるとします)、それらを安全な文字列として保存する方がよいと思いますが、保存するパスワードはせいぜい 1 分間だけなので、問題はないと思います。

于 2010-03-24T17:35:16.653 に答える