web-dev-qa-db-ja.com

アプリケーションのメモリをランダム化または細断処理す​​る

特定のアプリケーションのメモリの割り当てを解除するたびに、その寿命が終了した直後、またはそれ以上に、特定のアプリケーションのメモリをランダム化または細断処理す​​ることは可能ですか?

このようなコマンドラインユーティリティは完璧です:

シュレッドメモリ[オプション] [{アプリケーションへのパラメータ...}]

4
Matej

Linux(最近のマルチプロセスOSと同様に、私は願っています)は、プロセスがメモリを割り当てるときにのみページがゼロになることを保証します。したがって、プロセスは、以前に別のプロセスによって使用されていたメモリを読み取ることができません。

Linuxでは、ゼロ化は、ページが解放されたときではなく、割り当てられたときに発生します。これにより、以前はプロセスで使用されていたメモリを読み取る2つの方法が残ります。

  • カーネルのバグを悪用する
  • RAMまたはスワップ(ルートまたは物理アクセスが必要)の内容をダンプします)

解放されるとすぐにページをゼロにすることを可能にするLinuxカーネルへのパッチが提案されました( sanitize_memエピソード1sanitize_memエピソード2 ) 、しかし私が知る限り受け入れられません。

実際には、攻撃の最大のウィンドウはスワップスペース(データを長期間保持できる)であり、それでも攻撃者(ディスクを盗んでページの寄せ集めを整理する必要がある)にとっては些細なことではありません。修正するのも最も簡単です。スワップスペースをdm-cryptで暗号化します。

Gillesの答えに加えて:

  • メモリ内のページをロックする スワッピングを防ぐことができます(パスワードの保存など、何をしているのかを理解していない限り、これは悪い考えであり、システムのパフォーマンスに影響を与える可能性があります)
  • free関数をオーバーライドして、LD_LIBRARY_PRELOADを使用して手動でメモリをサナタイズすることができます。
1

メモリを消去するためのユーティリティがありますが、問題のプログラムが終了してメモリを解放した後です。特定のプログラムによって割り当てられたメモリを具体的に消去するものは何も知りません。

ライブシステムの空きメモリを消去するには、 thc.org の「secure_delete」スイートから「smem」(とりわけ)をチェックしてください。

0
Geoff Fritz