2009-04-24 6 views
6

WinAPIにSecureZeroMemory()関数があります。この関数は、バッファが不要になったときにパスワード/暗号化キー/同様のものを格納するために使用されるメモリを消去するように設計されています。 ZeroMemory()との違いは、呼び出しがコンパイラによって最適化されない点です。SecureZeroMemory()を使用すると、アプリケーションをより安全にするのに本当に役立ちますか?

機密データを保存するために使用するメモリを消去することは本当に必要ですか?実際にアプリケーションをより安全にしますか?

データがスワップファイルまたはハイバネーションファイルに書き込まれ、他のプロセスがプログラムのメモリを読み取る可能性があることを理解しています。しかし、データがまだ使用されているときにも同様のことが起こる可能性があります。 を使用しているのはなぜですかよりもちょうどを使用してください。を使用しますか?

答えて

9

です。例えば、ハイバネーションファイルは暗号化されていない。メモリを安全にクリアしないと、トラブルが発生する可能性があります。しかしそれは単なる一例です。あなたはいつも秘密のものを必要なだけ長く記憶しておくべきです。

+0

私は理解していますが、パスワードを使用中にswapfile/hibernatedにコピーすることも可能です。違いは何ですか?それをメモリに保存する期間ですか? – sharptooth

+6

はい。あなたは攻撃面を減らしています。覚えておいてください:セキュリティはすべて、バーを上げることです。バーを上げるほど良いです。 –

4

これは、アプリケーションに与える前にメモリをゼロにしないことがあります。つまり、アプリケーションがランダムにメモリを要求し、興味深いコンテンツをスキャンして何かを行う可能性があります。

もしそのアプリケーションがゼロのメモリしか得られないならば、興味深いデータを取得しようとするのは難しいでしょう。

+4

Windowsの場合 - Russinovich&Solomon、Windows Internals、4th Ed。、Chap。ページが提供され、予約され、コミットされるサービス:ページがプロセスに対して非公開で以前にアクセスされたことがない場合、最初のアクセス時にゼロ初期化ページ(または要求ゼロ)として作成されます。これをやっていないと、かなり大きなセキュリティホール(プロセスが他のプロセスから古くなったものを読む可能性があります)になります。私は、現代のオペレーティングシステムのほとんどが同じことを賭けても構わないと思う。 –

5

これは理由があります。 :) 機密データをメモリに保存すると、他のプロセスが潜在的にそれを読み取る可能性があります。

もちろん、アプリケーションでは、パスワードやその他の安全なデータは、これが必須ではない場合もあります。しかし、アプリケーションによっては、悪意のあるコードがパスワードやクレジットカード番号、またはアプリケーションが使用するその他のデータをスヌープすることができないことが非常に重要です。

+0

データが使用中にデータをスヌーピングできないのはなぜですか? "use、erase"が単なる "use"より優れているのはなぜですか? – sharptooth

+3

"use、then erase"は、アプリケーションが終了するまで、多分もっと長くなるのではなく、ほんの一瞬の間、データをメモリに残すためです。(OSがメモリをゼロにしないという上記の答えを参照してください) 。長期間メモリに残っていれば、マルウェアはデータを見つけるのに幸運を祈る必要があります。 –

3

SecureZeroMemory()は、アプリケーションを完全に安全にするものではありません。パスワードが既にメモリに入っているという事実は、すでにセキュリティホールです。 SecureZeroMemory()を使用すると、パスワードを取得する可能性は低くなります。私はそれを使用しない理由は何もないので、どうしてですか?他にも心配しなければならないことがたくさんあることを覚えておいてください。

3

実際にパスワードデータやその他の秘密がある場合は、それらのメモリがスワップアウトされないようにする必要があります。スワップファイルが問題になることがありますWindowsアプリの場合は「VirtualLock」が必要です)。さらに、ヒブレンテートに入るウィンドウを検出し、その時点でデータを消去する必要があります。私は、Windowsがすべてのアプリにメッセージを送信すると思う。

関連する問題