特定のアプリケーションのメモリの割り当てを解除するたびに、その寿命が終了した直後、またはそれ以上に、特定のアプリケーションのメモリをランダム化または細断処理することは可能ですか?
このようなコマンドラインユーティリティは完璧です:
シュレッドメモリ[オプション] [{アプリケーションへのパラメータ...}]
Linux(最近のマルチプロセスOSと同様に、私は願っています)は、プロセスがメモリを割り当てるときにのみページがゼロになることを保証します。したがって、プロセスは、以前に別のプロセスによって使用されていたメモリを読み取ることができません。
Linuxでは、ゼロ化は、ページが解放されたときではなく、割り当てられたときに発生します。これにより、以前はプロセスで使用されていたメモリを読み取る2つの方法が残ります。
解放されるとすぐにページをゼロにすることを可能にするLinuxカーネルへのパッチが提案されました( sanitize_mem
エピソード1 、 sanitize_mem
エピソード2 ) 、しかし私が知る限り受け入れられません。
実際には、攻撃の最大のウィンドウはスワップスペース(データを長期間保持できる)であり、それでも攻撃者(ディスクを盗んでページの寄せ集めを整理する必要がある)にとっては些細なことではありません。修正するのも最も簡単です。スワップスペースをdm-crypt
で暗号化します。
Gillesの答えに加えて:
free
関数をオーバーライドして、LD_LIBRARY_PRELOAD
を使用して手動でメモリをサナタイズすることができます。メモリを消去するためのユーティリティがありますが、問題のプログラムが終了してメモリを解放した後です。特定のプログラムによって割り当てられたメモリを具体的に消去するものは何も知りません。
ライブシステムの空きメモリを消去するには、 thc.org の「secure_delete」スイートから「smem」(とりわけ)をチェックしてください。