特定のアプリケーションの寿命が終わった後、またはより良い方法では、一部のメモリを解放するたびに特定のアプリケーションのメモリをランダム化または破砕することは可能ですか?
次のコマンドラインユーティリティは完璧です。
シュレッドメモリ[オプション] [{アプリケーションパラメータ...}]
答え1
Linux(私が望むすべての最新のマルチプロセスOSと同様)は、メモリ割り当て時にページが0としてのみ処理されるようにします。したがって、あるプロセスは、以前に別のプロセスで使用されていたメモリを読み取ることができません。
Linuxでは、ページが解放されるのではなく、ページが割り当てられたときにゼロ化が発生します。これにより、プロセスで以前に使用されていたメモリを読み取る2つの方法が残ります。
- カーネルバグの悪用
- RAMまたはスワップのコンテンツダンプ(ルートまたは物理アクセスが必要)
誰かがページが解放されるとすぐにページをゼロにできるLinuxカーネルパッチを提案しました(sanitize_mem
エピソード1、sanitize_mem
エピソード2)しかし、私が知っている限り、それは受け入れられません。
実際、最大の攻撃ウィンドウはスワップスペース(長い間データを保持するスペース)であり、これも攻撃者にとってはマイナーな問題ではありません(ディスクを盗んで乱雑なページを整理する必要があります)。最も解決しやすい方法でもあります。暗号化されたスワップスペースを使用してくださいdm-crypt
。
答え2
Gilesの答えに加えて:
- あなたはできますメモリにロックされたページスワッピングの防止(何をしているのかわからない場合(パスワードの保存など)は悪い考えであり、システムのパフォーマンスに影響を与える可能性があります。)
free
以下を使用して、手動でメモリをクリーンアップする機能をオーバーライドできます。LD_LIBRARY_PRELOAD
答え3
メモリを消去するユーティリティがありますが、関連プログラムが終了してメモリが解放された後にのみ可能です。特定のプログラムによって割り当てられたメモリを具体的に消去する方法はありません。
次のサイトで「secure_delete」スイートの「smem」(およびその他)を確認してください。thc.orgライブシステムで使用可能なメモリを消去するために使用されます。