RAMが完全に消去されたことをどのように確認できますか?再起動(Power On Self Test)はクリアされますか?システムを起動する前にメモリ全体を使用するか、それともLinuxカーネルは続行する前にメモリをゼロにするか?
コールドブートアタック と TRESOR対策 に精通しています。私は、メモリをクリアする他のそれほど複雑ではない方法に単に興味があります。
[〜#〜] post [〜#〜] の間、BIOSは従来、物理RAM全体への書き込みと再読み取りを伴う「メモリテスト」を実行します。ただし、このプロセスは無視できないほどの時間がかかる可能性があり、不良メモリの検出にはかなり劣っています(very不良メモリのみを確実に検出します)。多くの場合(コンピューターのベンダーまたはユーザーによって)無効になっています。したがって、最後の起動前のRAMコンテンツのスクラップがまだ残っている可能性があると想定する必要があります。したがって、データの量はRAMテクノロジーによって異なります。新しい起動前の電源切断時間と温度。
Linuxカーネルは、他のほとんどの最新のオペレーティングシステム(Windowsを含み、 "95"行からWindowsを除く)と同様に、RAMページをアプリケーションに渡す前にゼロ化します。したがって、物理= RAMコンテンツには過去のデータの興味深い残骸が含まれている可能性があります。これはカーネルコードからのみアクセスできます。ユーザーランドにはゼロしか表示されません。
オン テイルス します!
それ以外は、デフォルトでこれを実行する他の一般的なオペレーティングシステムは知らないので、誰かがあなたのRAMを挿入すると、データを覗き見する目的で書かれたある種のOSに突き刺さります(それはRAM書き込み操作)を回避するために、本質的に特注のカーネルである必要があります。それらは、その甘い、ジューシーなメモリをすべて取得することができます。
ユーザーモードアプリケーションが未加工のRAMにアクセスできないというヒントを提供してくれたThomas Porninに感謝します。
リブートしないでください。
今日のシステムは、RAMコンテンツをスタンバイ/スリープ/休止状態またはあらゆるタイプの一時停止状態、および永続的なRAMディスク。ソフトウェアが特別な処理を行ってRAM=コンテンツを消去しない限り(TrueCryptがtruecrypt/wipecacheを実行した場合のように))、データは上書きされるまでそこにあります。
電源から切断する手順については、はい、RAMの内容はクリアで、DDR3以上では非常に高速であるため、システムが何らかの統合システムで設計されていない限り、実質的に空白になりますバックアップバッテリー(一部のストレージシステムまたはサーバー用など)。
RAMを意図的にワイプしたい場合は、プラグを抜くなどの野蛮な手段を使わずに、memtestを起動すると、とてもきれいになります。
また、初期のオペレーティングシステムでテストの目的で別の方法を使用しました。システムのRAM)と同じ大きさのテストファイル(ランダムデータまたは1文字だけの繰り返し)を持っています。ファイル全体をRAMに読み込むエディターで開いて編集します。ある時点で、RAM不足エラーが発生します。エディターを閉じて作業を続行します。
再起動時にメモリがクリアされない(Macbookでテスト済み)。これをLinuxで簡単に確認するには、プログラムを実行し、再起動してプログラムが実行されないようにします。次に、/dev/mem
のgrep
を使用して、プログラムメモリに含まれる文字列のハッシュを確認します。例えば:
次にrootとしてログイン
# sums=$(strings /dev/mem | while read s; do echo $s | sha256sum; done)
# echo "${sums}" | grep 79b4f11b6ccf3a7c397fbfd032672c65d825bdb38eae1aa445183b0b3934be6b
これは、メモリ内のすべての文字列のsha256チェックサムを計算します。次に、echo THUNAR_ZOOM_LEVEL | sha256sum
によって生成されたsha256チェックサムのチェックサムがgrepされます。 THUNAR_ZOOM_LEVEL
は/ usr/bin/thunarからの構成文字列です(thunarはXFCEデスクトップのファイルマネージャーです)。このLinuxブートはシングルユーザーモードだったため、Xorgは実行されず、Xアプリも起動されないため、この文字列は現在のブートからのものではありません。メモリ内のXorgアプリケーション文字列は、前回の起動時から保持されていました。
dd
を付けて/dev/mem
をダンプするか、strings
を実行すると、GUIで実行されていたすべてのグラフィカルプログラム(再起動前に実行されていたプログラム)のメモリが表示されます。シングルユーザーモードで実行されていません。
仮想マシンでは、メモリがクリアされていないようです。 IncludeOS(includeos.org)では、これを使用してクラッシュデータをメモリに保存し(IPスタックとIOシステムが機能していない可能性があるため))、システムの再起動後にクラッシュレポートを取得します。
これをqemu/kvmおよびVmware ESXiでテストしました。ベアメタルではテストしていません。