コールドブート攻撃を防ぐためにシャットダウン時にRAMを消去する

コールドブート攻撃を防ぐためにシャットダウン時にRAMを消去する

私のシステムはフルディスク暗号化を使用して暗号化されており、/boot以外のすべてがdmcrypt/luksを使用して暗号化されています。コールドブート攻撃研究者が実証された、そのコンテンツは、約5分

以下の点についてご説明いただけますでしょうか:

  • シャットダウン/再起動プロセスの最後のステップで kexec を新しいカーネルにトリガーする方法 (クリーンなマウント解除を確実にし、ファイルシステムの破損を防ぎ、古いカーネルが上書きされるようにするため)
  • 全てのRAMを消去するカーネルを作成する方法

つまり、Ubuntu で同じことを実行する方法を説明していただけますか?

シャットダウンを検出するにはどうすればよいでしょうか? RAM ワイプを開始するにはどうすればよいでしょうか? ユーザーが「シャットダウン」をクリックするか、「パニック スクリプト」を開始すると、RAM がワイプされる必要があります。

ご尽力ありがとうございました!

これまでの仕事:

この機能が実現することを望むなら、Ubuntu Brainstorm で投票してください。

http://brainstorm.ubuntu.com/idea/30076/

答え1

DDR2、512 MB、1024 MB などの古い RAM を使用していない場合は、CBA について心配する必要はありません。

オリジナルの研究をご覧くださいここ(PDF)。

よく読んでみると、この攻撃を受けやすいのは DDR2 以前のみであることがわかります。DDR3 は電圧が急速に低下するため、コンピュータ ケースの取り外しやフリーズ プロセスを実行できません。そのため、ドアを開ける前にプラグを抜くだけで済みます。

また、この紙DDR3 が CBA の影響を受けないことを確認します。実際に DDR2 RAM を搭載しているためにセキュリティを確保したい場合は、BIOS で有効にします。

  1. 停電後の自動起動
  2. 起動時のRAMチェック

DDR3 の場合と同じように、プラグを抜いた後、再度差し込みます。コンピュータが自動的に起動し、RAM をチェックして消去します。消去が十分に効率的に行われない場合は、ブート プロセスによってシステムが RAM に再度ロードされます。CBA を許可するには速すぎます。

からリンクコメントで提供された内容:

したがって、結論として、コールド ブート攻撃は、疑わしいコンピュータ システムのメモリを取得するための主な方法と見なすべきではありません。代わりに、ソフトウェアとハ​​ードウェア ベースの取得 (FireWire など) の両方を含む他の手法を試してから、そのシステムに対してコールド ブート攻撃を実行する必要があります。ただし、前述の手法が利用できない (FireWire 接続がない、システム ログイン コンソールがない、またはリモート メモリの取得が不可能) 状況が発生した場合、または効果がない場合は、調査員が問題の発生方法と場所の両方を理解していると仮定して、コールド ブート攻撃を実行できます。
この調査で示されているように、コールド ブート攻撃は、特に法医学的に適切または信頼できるものとして確立することはできません。これは、ここで実行されたほとんどの実験で、メモリ常駐の暗号化キーが一貫して見つかったり抽出されたりしなかったためです。同じことは、ほとんどの実験で見つかったよりもはるかに多くの文字列とキーワードが見つかるはずのさまざまな文字列とキーワードの検索にも当てはまります。さらに、実証されているように、コンピュータ メモリをフラッシュ フリーズするだけでは、そのメモリの取得が成功する保証はありません。すでに調査された他の要因と変数は、これらの問題とその根本原因を十分に調査しています。したがって、コールド ブート攻撃は、場合によっては容疑者のシステムのメモリを取得するのに役立つ可能性がありますが、この方法は万能薬とは見なされず、他のすべての手段が尽きた場合の最後の手段として使用されるべきであるというのが、この研究の著者の意見です。
最後に、ほとんどまたはまったく劣化していない成功した取得であっても、少なくとも法廷で確実な証拠として立証される可能性は低く、少なくとも法廷で裁判が行われ、取得したメモリの整合性が健全で理解可能な方法を使用して損なわれていないことが証明されるまではそうでしょう。容疑者のコンピューターのメモリを取得するより適切で信頼性の高い方法を確立するための研究が続けられています...

また、実験結果を確認すると、システム 2 と 6 でのみ AES キーの抽出に成功し、システム 2 の仕様 (1024 MB RAM 533 MHz) を見ると、それらはウォーム ブート攻撃であったことがわかります。これは古い情報です。もう 1 つのシステム (256 RAM / 128 RAM のシステム 6) については、説明不要だと思います。

これがまさに彼らの結論が次のようなものであった理由です。

容疑者のコンピューターのメモリを取得するためのより適切かつ信頼性の高い方法を確立するための捜査が続けられています...

実際のところ、非常に非常に重要なデータがある場合は、フル ドライブ暗号化を使用するだけでなく、別の暗号化ファイルに保存する必要があると思います。カスケード アルゴリズムと、ディスク暗号化時に使用したパスワードとは異なるパスワードを使用して暗号化します。PC を安全にシャットダウンする方法をお探しですか? ここに方法があります:

  1. True Cryptカスケードアルゴリズム暗号化ファイルでデータを安全に保管
  2. サーペントを使用する
  3. シャットダウンを処理するスクリプトを作成します。

Windowsの場合:

truecrypt.exe /wipecache
shutdown -s -f -t 1

Linuxの場合:

truecrypt /wipecache
shutdown -h now

キャッシュを消去すると、シャットダウン後に脆弱なデータが RAM に残らないようになります。誰かがコールド ブート攻撃を実行した場合、せいぜいシステムにアクセスできる程度です。データは別途暗号化されたファイルに保存されません。

答え2

UCLAのピーター・A・H・ピーターソンは概念実証技術を書き、暗号化されたRAMでシステムを安全に実行するための理論を開発しました。その解決策は次のとおりです。明示的にコールドブート攻撃を防ぐように設計されています。彼の論文の名前は Cryptkeeper です。彼がソフトウェアをダウンロード可能にしているかどうか、または UCLA からライセンスを取得できるかどうかはわかりません。ただし、少なくとも原理的には、RAM の内容全体が公開されても安全な RAM 用の暗号システムを設計することは可能であるようです。

このソリューションの測定されたパフォーマンスへの影響は、9%のオーバーヘッドから10%の速度低下までの範囲です。9シナリオがどの程度「異常」であるかによって異なります。9% という数字は Firefox で Web を閲覧する場合に当てはまるとされていますが、どのような使用例でパフォーマンスが 9 倍遅くなるのかは明記されていません。

Peterson のソリューションは、あなたが提案したように RAM を「消去」するものではありません。むしろ、RAM の内容を取得するだけでは復号キーが公開されないように、「安全なキー隠蔽メカニズム」を使用します。実装の詳細はわかりませんが、論文で説明されていると思います。

この論文は2010年に発表されました。

IEEE の ieeexplore Web サイトから購入できます。また、誰かの Web サイトから PDF として無料で直接ダウンロードすることもできます。これは、「cryptkeeper RAM」の Google 検索結果に表示されますが、その結果がどのくらい長く表示されるかはわかりません。

このソリューションは、あなたが尋ねたように RAM を「消去」しないので、回答ではなくコメントにしたいと思いました。しかし、ピーターソンの研究が技術的に正しい場合、これは RAM を消去するのと同じ、あるいは「より良い」効果をもたらすと思います。その理由は、熟練した物理的な攻撃者が、そのような操作が発生することを予期している場合、システム プログラムによる RAM の消去の試みを妨害できる可能性があるからです。たとえば、ユニットからバッテリーを取り外したり、操作が完了する前に電源ボタンを押し続けたりします。ピーターソンのソリューションは、消去を完了するためにコンピューターが命令の実行を継続できる必要な時間枠に基づいていないため、より安全です。代わりに、メモリは常にたとえ攻撃者に反応する機会さえ与えられないうちに、CPU 自体が驚くべき技術力によって瞬時に破壊されたとしても、保護されます。

ここで言う「驚くべき技術の偉業」とは、Stuxnet のようなものを意味します。

答え3

私は想像するメムテスト86RAM を消去するのにかなり良いでしょう。私はいつも以下のものを試してみたかったのですが、まだ試していません。試したら更新します。

kexecマニュアルページを読むkexec.iso は試さないでください。iso を解凍して、起動可能なバイナリを入手する必要があります。上記の memtest86 サイトでは、バイナリをダウンロードできます。

kexec最初に起動するものをロードするには、コマンドを使用する必要があります。

だから、できることは次の通りだと思います:

kexec -l {path-to-memtest86-bootable-binary} --append=console=ttyS0,115200n8

そして引き金を引く準備ができたら:

kexec -e

私は、memtest86 をシリアル ポート経由で動作させると考えています (ただし、間違っている可能性があります) --append=console=ttyS0,115200n8。そのため、シリアル ポートをお持ちの場合は、ビデオ出力に表示されなくても動作していることを確認できます。memtest86 はビデオの初期化を実行しないため、これは起こり得ます。実行中の X インスタンスをすべて終了することは、おそらく良い考えです。

Debiankexec-toolsパッケージ (Ubuntu でも利用可能) はこれをシャットダウン スクリプトに組み込むため、編集すると、再起動ではなく最後に/etc/default/kexecシャットダウン プロセスを呼び出すように指示できますkexec。つまり、クリーンなシャットダウンを希望する場合です。

緊急時には、 がsync; kexec -e機能します。

ただし、一部のチップセットでは、初期化後に特定のメモリ領域がアドレス指定されるとロックアップが発生する可能性があります。これが実際にどのように機能するかはわかりません。

うまくいかない場合の良い妥協策は、kexecブートローダに memtest86 をインストールし、それをデフォルトのブート項目として設定し、自動的に選択されるまで 1 秒の遅延を設けることです (または遅延なしで、キーを押すことで memu を起動します)。これにより、すぐにではなく、かなり早く「フレッシュブート」状態から memtest86 に入ることができます。

これはビデオRAMを考慮していないことに注意してください。その解決策はビデオRAMをブロックデバイスとして設定する、そして/dev/random数回の反復でブロックデバイスに出力します。

答え4

問題は、コンピュータが動作中で画面がロックされている場合です。この時点で、AES キーは RAM に保存されており、ユーザーはコンピュータから離れています。侵入者はコンピュータのケースを開け、電源を入れたまま RAM モジュールを取り外し、その内容を読み取る別のデバイスに配置することができます。取り出す前にシステムをシャットダウンしたり、モジュールをフリーズしたりする必要はありません。RAM は AES キーを保持するのに信頼できませんが、TRESOR というソリューションのように、プロセッサのキャッシュは信頼できます。残念ながら、そのためには古い Linux カーネルと、カーネルのパッチ適用とコンパイルに関する高度な知識が必要です。

関連情報