コールドブート攻撃
PCのハードリセットを実行しRAMのメモリダンプを実行するサイドチャネル攻撃
From Wikipedia, the free encyclopedia
コンピュータセキュリティにおいて、コールドブート攻撃(コールドブートこうげき、Cold boot attack)(または程度の低いものではプラットフォームリセット攻撃)は、コンピュータへの物理アクセスを持つ攻撃者が、ターゲットマシンのハードリセットを実行することにより、コンピュータのランダムアクセスメモリ (RAM)のメモリダンプを実行するサイドチャネル攻撃の一種である。通常、コールドブート攻撃は、悪意のある目的や犯罪捜査の理由で、実行中のオペレーティングシステムから暗号化鍵を取得するために使用される[1][2][3]。この攻撃は、電源オフ後数秒から数分間読み取り可能な状態を保つメモリの内容を取得するために、DRAMおよびSRAMのデータ残留特性に依存している[2][4][5]。
実行中のコンピュータへの物理アクセスを持つ攻撃者は通常、マシンをコールドブートし、リムーバブルディスクから軽量のオペレーティングシステムを起動して、起動前の物理メモリの内容をファイルにダンプすることにより、コールドブート攻撃を実行する[6][2]。その後、攻撃者はメモリからダンプされたデータを自由に分析し、様々な形態の鍵探索攻撃を使用して鍵などの機密データを見つけることができる[7][8]。コールドブート攻撃はランダムアクセスメモリを標的としているため、トラステッド・プラットフォーム・モジュールがインストールされている場合でも、フルディスク暗号化スキームはこの種の攻撃に対して無効である[2]。これは、問題が根本的にソフトウェアの問題ではなく、ハードウェア(安全でないメモリ)の問題であるためである。しかし、物理アクセスを制限し、機密データをランダムアクセスメモリに保存しない現代の技術を使用することで、悪意のあるアクセスを防ぐことができる。
概要
DIMMメモリモジュールは、電力を失うにつれて時間とともに徐々にデータを失うが、電力が失われた瞬間にすべてのデータを直ちに失うわけではない[2]。特定のメモリモジュールでは、コールドスプレーや液体窒素で冷却することにより、攻撃のタイムウィンドウを数時間、あるいは1週間にまで延長することができる。さらに、時間とともにメモリ内のビットが消失しても、予測可能な方法で消えていくため、再構築することができる[2]。結果として、攻撃者はコールドブート攻撃を実行することにより、その内容のメモリダンプを実行することができる。コールドブート攻撃を成功させる能力は、異なるシステム、メモリのタイプ、メモリメーカー、およびマザーボードの特性によって大きく異なり、ソフトウェアベースの方法やDMA攻撃よりも実行が難しい場合がある[9]。現在の研究の焦点はディスク暗号化にあるが、メモリに保持されているあらゆる機密データが攻撃に対して脆弱である[2]。
攻撃者は、ターゲットマシンを強制的かつ急激に再起動し、その後USBメモリ、CD-ROM、またはネットワーク経由でプレインストールされたオペレーティングシステムを起動することによって、コールドブート攻撃を実行する[3]。ターゲットマシンをハードリセットすることが現実的でない場合、攻撃者は代わりに元のシステムからメモリモジュールを物理的に取り外し、攻撃者の管理下にある互換性のあるマシンに素早く挿入し、起動してメモリにアクセスすることもある[2]。その後、RAMからダンプされたデータに対してさらなる分析を実行することができる。
同様の種類の攻撃は、FireWireなどの高速拡張ポートを介して物理メモリにアクセスすることを可能にするDMA攻撃のように、メモリからデータを抽出するためにも使用することができる[3]。ハードウェアの損傷リスクが高い場合など、特定のケースではコールドブート攻撃が好まれる場合がある。特定のケースでは、高速拡張ポートを使用するとショートしたり、ハードウェアを物理的に損傷させたりする可能性がある[3]。
用途
単なる遊びである可能性も否定できないが、コールドブート攻撃は通常、デジタル・フォレンジック調査、または窃盗やデータ復旧などの悪意のある目的で使用される[3]。
デジタル・フォレンジック
特定のケースでは、コールドブート攻撃はデジタル・フォレンジックの分野において、犯罪の証拠としてメモリ内に含まれるデータをフォレンジック的に保存するために使用される[3]。たとえば、他の手段でメモリ内のデータを保存することが現実的でない場合、ランダムアクセスメモリに含まれるデータのダンプを実行するためにコールドブート攻撃が使用されることがある。例えば、システムが保護されており、コンピュータにアクセスできない状況でコールドブート攻撃が使用される[3]。ハードディスクがフルディスク暗号化で暗号化されており、ディスクが犯罪行為の証拠を含んでいる可能性がある場合にも、コールドブート攻撃が必要になることがある。コールドブート攻撃はメモリへのアクセスを提供し、これによってどのようなプログラムが実行されているかなど、当時のシステム状態に関する情報を提供することができる[3]。
悪意のある意図
コールドブート攻撃は、悪意のある意図を持って財務情報や営業秘密などの暗号化された情報へのアクセスを得るために、攻撃者によって使用されることがある[10]。
フルディスク暗号化の回避
コールドブート攻撃の一般的な目的は、ソフトウェアベースのディスク暗号化を回避することである。コールドブート攻撃を鍵探索攻撃と組み合わせて使用した場合、トラステッド・プラットフォーム・モジュール (TPM) のセキュアな暗号プロセッサが使用されている場合であっても、さまざまなベンダーやオペレーティングシステムのフルディスク暗号化スキームを回避する効果的な手段であることが実証されている[2]。
オペレーティングシステムが起動前のPIN入力やハードウェアキーの存在なしで起動できるように構成可能なディスク暗号化アプリケーションの場合(たとえば、二要素認証PINやUSBキーなしでTPMを使用する単純な構成のBitLocker)、攻撃のための時間枠はまったく制限されない[2]。
BitLocker
デフォルト構成のBitLockerは、ディスクを復号するためにPINも外部キーも必要としないトラステッド・プラットフォーム・モジュールを使用している。オペレーティングシステムが起動するとき、BitLockerはユーザーの操作なしにTPMから鍵を取得する。結果として、攻撃者は単にマシンの電源を入れ、オペレーティングシステムが起動し始めるのを待ち、マシンに対してコールドブート攻撃を実行して鍵を取得することができる。このため、デフォルトのBitLocker実装のこの脆弱性を回避するには、起動前のPINや、TPMとともにスタートアップキーを含むリムーバブルUSBデバイスなどの二要素認証を使用する必要がある[11][5]。しかし、この回避策は、攻撃者が物理的なアクセス権を得る前にマシンの電源が切られていた場合にのみ、コールドブート攻撃を防ぐことができる。マシンがすでに起動して稼働している場合、攻撃者がメモリから機密データを取得したり、メモリにキャッシュされている暗号化鍵を取得したりするのを防ぐことはできない。
緩和策
コールドブート攻撃を実行することでメモリダンプを簡単に実行できるため、フルディスク暗号化の暗号化鍵のような機密データをRAMに保存することは安全ではない。ランダムアクセスメモリ以外の領域に暗号化鍵を保存するためのいくつかの解決策が提案されている。これらの解決策はフルディスク暗号化を破られる可能性を減らすかもしれないが、メモリに保存されている他の機密データの保護は提供しない。
レジスタベースの鍵保存
暗号化鍵をメモリ外に保持するための解決策の1つは、レジスタベースの鍵保存である。この解決策の実装には、TRESOR[12]およびLoop-Amnesiaがある[13]。これらの実装はどちらもオペレーティングシステムのカーネルを変更し、RAMの代わりにCPUレジスタ(TRESORの場合はx86デバッグレジスタ、Loop-Amnesiaの場合はAMD64またはEMT64のプロファイリングレジスタ)を使用して暗号化鍵を保存できるようにする。このレベルに保存された鍵は、ユーザー空間から容易に読み取ることができず、どのような理由であれコンピュータが再起動すると失われる。TRESORとLoop-Amnesiaはどちらも、この方法で暗号化トークンを保存するためのスペースが限られているため、オンザフライのラウンド鍵生成を使用しなければならない。セキュリティのため、両方とも暗号化または復号化が実行されている間にCPUレジスタからメモリに鍵情報が漏れるのを防ぐために割り込みを無効にし、またデバッグまたはプロファイルレジスタへのアクセスをブロックする。
最新のx86プロセッサには、鍵を保存するための2つの潜在的な領域がある。すべてのSSE命令(および必然的にそれに依存するすべてのプログラム)を無効にすることで事実上特権化できるSSEレジスタと、はるかに小さいがそのような問題がないデバッグレジスタである。
SSEレジスタ方式に基づく'paranoix'と呼ばれる概念実証ディストリビューションが開発された[14]。開発者たちは「AES-NIをサポートする64ビットCPUでTRESORを実行すると、AESの一般的な実装と比較してパフォーマンスの低下はない」と主張しており[15]、鍵の再計算が必要であるにもかかわらず、標準の暗号化よりもわずかに速く実行される[12]。TRESORと比較したLoop-Amnesiaの主な利点は、複数の暗号化ドライブの使用をサポートしていることである。主な欠点は、32ビットx86のサポートがないことと、AES-NIをサポートしていないCPUではパフォーマンスが低下することである。
キャッシュベースの鍵保存
「フローズンキャッシュ」(「RAMとしてのキャッシュ」とも呼ばれる)[16]は、暗号化鍵を安全に保存するために使用できる。これはCPUのL1キャッシュを無効にし、それを鍵の保管場所として使用することで機能するが、全体的なシステムパフォーマンスが大幅に低下し、ほとんどの目的において遅すぎる可能性がある[17]。
同様のキャッシュベースのソリューションがGuanら(2015)によって提案された[18]。これは、WB(ライトバック)キャッシュモードを採用してキャッシュ内にデータを保持し、公開鍵アルゴリズムの計算時間を短縮するものである。
IEEE S&P 2015のMimosa[19]は、コールドブート攻撃およびDMA攻撃に対する公開鍵暗号計算のより実用的な解決策を提示した。これは、元々マルチスレッドアプリケーションのパフォーマンスを向上させるための投機的メモリアクセスメカニズムとして提案されたハードウェアトランザクショナルメモリ (HTM) を採用している。HTMによって提供される強力な原子性の保証を利用して、機密データを含むメモリ空間への不正な並行アクセスを無効にする。RSA秘密鍵は、TRESORによって保護されたAES鍵によってメモリ内で暗号化される。要求に応じて、RSA秘密鍵の計算はHTMトランザクション内で実行される。秘密鍵は最初にメモリに復号され、次にRSA復号または署名が行われる。プレーンテキストのRSA秘密鍵はHTMトランザクション内で変更されたデータとしてのみ現れるため、これらのデータに対する読み取り操作はトランザクションを中止し、トランザクションは初期状態にロールバックされる。RSA秘密鍵は初期状態では暗号化されており、書き込み操作(またはAES復号)の結果であることに注意すること。現在、HTMはキャッシュまたはストアバッファに実装されており、どちらも外部RAMチップではなくCPU内にある。したがって、コールドブート攻撃は防止される。Mimosaは、メモリから機密データを読み取ろうとする攻撃(コールドブート攻撃、DMA攻撃、およびその他のソフトウェア攻撃を含む)を打ち破り、パフォーマンスのオーバーヘッドはわずかである。
暗号化ディスクのマウント解除
ベストプラクティスとしては、使用していないときに暗号化された非システムディスクをマウント解除することが推奨されている。これは、ほとんどのディスク暗号化ソフトウェアが使用後にメモリにキャッシュされた鍵を安全に消去するように設計されているためである[20]。これにより、攻撃者がコールドブート攻撃を実行することによってメモリから暗号化鍵を回収できるリスクを軽減できる。オペレーティングシステムのハードディスク上の暗号化された情報へのアクセスを最小限に抑えるには、使用していないときにマシンを完全にシャットダウンして、コールドブート攻撃が成功する可能性を減らすべきである[2][21]。しかし、マシンの物理RAMデバイスによっては、数十秒から数分間データが読み取り可能な状態を保つことがあり、攻撃者がメモリから一部のデータを取得できる可能性がある。スリープモードを使用する代わりに、使用していないときにシャットダウンまたは休止状態にするようにオペレーティングシステムを構成することで、コールドブート攻撃が成功するリスクを軽減できる。
効果的な対策
物理アクセスの防止
通常、コールドブート攻撃は、攻撃者のコンピュータへの物理アクセスを制限するか、攻撃の実行をますます困難にすることで防ぐことができる。1つの方法として、メモリモジュールをマザーボードにはんだ付けまたは接着し、ソケットから簡単に取り外して攻撃者の管理下にある別のマシンに挿入できないようにすることがある[2]。しかし、これによって攻撃者が被害者のマシンを起動し、リムーバブルUSBメモリを使用してメモリダンプを実行することは防げない。UEFI Secure Bootや同様のブート検証アプローチなどの緩和策は、攻撃者がカスタムソフトウェア環境を起動してはんだ付けされたメインメモリの内容をダンプするのを防ぐのに効果的である可能性がある[22]。
フルメモリ暗号化
ランダムアクセスメモリ (RAM) を暗号化することで、攻撃者がコールドブート攻撃によってメモリから暗号化鍵やその他の資料を取得できる可能性を緩和できる。このアプローチでは、オペレーティングシステム、アプリケーション、またはハードウェアへの変更が必要になる場合がある。ハードウェアベースのメモリ暗号化の一例は、マイクロソフトのXboxに実装されていた[23]。新しいx86-64ハードウェアでの実装はAMDから、およびIntel Willow Cove以降で利用可能である。
ソフトウェアベースのフルメモリ暗号化は、鍵データがメモリに公開されることがないためCPUベースの鍵ストレージと似ているが、すべてのメモリ内容が暗号化されるためより包括的である。一般に、即時ページのみがオペレーティングシステムによってオンザフライで復号され読み取られる[24]。ソフトウェアベースのメモリ暗号化ソリューションの実装には、PrivateCoreによる商用製品[25][26][27]、およびデータをメモリ内で暗号化し、TRESORと同様の方法で暗号化鍵をCPUレジスタに保存するLinuxカーネル用カーネルパッチのRamCryptが含まれる[12][24]。
バージョン1.24以降、VeraCryptは鍵とパスワードのRAM暗号化をサポートしている[28]。
さらに最近では、セキュリティが強化されたx86およびARMコモディティプロセッサの可用性を強調するいくつかの論文が発表されている[29][30]。その研究では、ARM Cortex A8プロセッサをフルメモリ暗号化ソリューションが構築される基盤として使用している。プロセスセグメント(たとえばスタック、コード、またはヒープ)は個別に、または合成して暗号化できる。この研究は、汎用コモディティプロセッサ上での最初のフルメモリ暗号化実装を記している。システムは、CPU境界外のすべての場所で暗号化されるコードとデータの機密性と完全性の両方の保護を提供する。
メモリの安全な消去
コールドブート攻撃は暗号化されていないランダムアクセスメモリを対象とするため、解決策の1つは使用されなくなったときにメモリから機密データを消去することである。この特定の攻撃に対する業界の対応である「TCG Platform Reset Attack Mitigation Specification」[31]は、オペレーティングシステムが正常にシャットダウンされなかった場合、POST中にBIOSにメモリを上書きさせる。しかし、この対策は、システムからメモリモジュールを取り外し、これらの対策をサポートしていない攻撃者の管理下にある別のシステムで読み戻すことによって回避することができる[2]。
効果的なセキュア消去機能とは、電力が遮断された場合、安全なBIOSおよびM-2およびSATAxポート上のデータを暗号化するハードドライブ/SSDコントローラと連携して、電力が失われる前の300ミリ秒未満にRAMがワイプされることである。もしRAM自体にシリアルプレゼンスやその他のデータが含まれておらず、タイミングがハードウェアキーによるフェイルセーフを伴ってBIOSに保存されているなら、データの回復はほぼ不可能であり、TEMPEST攻撃、man-in-the-RAM、その他の可能な侵入方法に対しても免疫を持つことになる[32]。
Tailsなどの一部のオペレーティングシステムは、コールドブート攻撃を緩和するために、オペレーティングシステムがシャットダウンされるときにシステムメモリにランダムデータを安全に書き込む機能を提供している[33]。しかし、ビデオメモリの消去は依然として不可能であり、2022年現在、Tailsフォーラムでは依然として未解決のチケットとなっている[34]。この欠陥を悪用する可能性のある攻撃は以下の通りである。
- GnuPGキーペアの生成およびテキストエディタでの秘密鍵の表示は、鍵が復元されることにつながる可能性がある[35]。
- 暗号通貨のシードが見られる可能性があり、それによって(暗号化されていても)ウォレットを迂回して資金へのアクセスを許す可能性がある。
- 可視性を有効にしてパスワードを入力すると、パスワードの一部または鍵全体が表示される可能性がある。キーファイルが使用されている場合、パスワード攻撃に必要な時間を短縮するために表示される可能性がある。
- もっともらしい否認を伴うマウントされたまたは開かれた暗号化ボリュームの痕跡が表示され、それらの発見につながる可能性がある。
- .onionサービスに接続している場合、URLが表示されて発見につながる可能性があるが、そうでない場合は非常に困難である[36][37]。
- 特定のプログラムの使用は、ユーザーのパターンを示す可能性がある。例えば、ステガノグラフィプログラムが使用および開かれている場合、ユーザーがデータを隠しているという推測がなされる可能性がある。同様に、インスタントメッセンジャーが使用されている場合、連絡先やメッセージのリストが表示される可能性がある。
外部鍵保存
コールドブート攻撃は、攻撃を受けているハードウェアによって鍵が保存されないことを保証することで防ぐことができる。
- ユーザーがディスク暗号化鍵を手動で入力する
- 暗号化鍵がハードディスクドライブとは別のハードウェアに保持されている完全に密閉された暗号化ハードディスクドライブを使用する。
無効な対策
メモリのスクランブル化は、最新のIntel Coreプロセッサの機能として、半導体の望ましくない寄生効果を最小限に抑えるために使用されることがある[38][39][40][41]。 しかし、スクランブル化はメモリ内容内の任意のパターンを非相関化するためにのみ使用されるため、メモリはデスクランブル化攻撃によってデスクランブルすることができる[42][43]。したがって、メモリのスクランブル化はコールドブート攻撃に対する実行可能な緩和策ではない。
スリープモードは、通常この状態ではデータがメモリに常駐しているため、コールドブート攻撃に対する追加の保護を提供しない。そのため、フルディスク暗号化製品は鍵がメモリに存在し、マシンが低電力状態から復帰した後に再入力する必要がないため、依然として攻撃に対して脆弱である。
BIOSでのブートデバイスのオプションを制限することで別のオペレーティングシステムを起動することはわずかに困難になる可能性があるが、現代のチップセットのファームウェアは、特定のホットキーを押すことによってPOST中にユーザーがブートデバイスを上書きできるようにする傾向がある[5][44][45]。ブートデバイスオプションを制限しても、システムからメモリモジュールを取り外して別のシステムで読み戻すことを防ぐことはできない。さらに、ほとんどのチップセットは、パスワードで保護されていてもBIOS設定をデフォルトにリセットできる回復メカニズムを提供している[10][46]。メモリの消去やブートデバイスのロックなど、それによって実施される保護を回避するために、システムの実行中にBIOS設定を変更することもできる[47][48][49]。
スマートフォン
コールドブート攻撃は適応され、Androidスマートフォン上でも同様の方法で実行することができる[50]。コールドブートは、電話のバッテリーを外してハードリセットを強制するか、電源ボタンを押し続けることによって実行できる[50]。その後、スマートフォンにはメモリダンプを実行できるオペレーティングシステムイメージが書き込まれる。通常、スマートフォンはUSBポートを使用して攻撃者のマシンに接続される。
通常、Androidスマートフォンは、電話がロックされているときに暗号化鍵をランダムアクセスメモリから安全に消去する[50]。これにより、攻撃者が電話に対してコールドブート攻撃を実行することに成功したとしても、メモリから鍵を取得できるリスクが軽減される。