2月21日にJ.Halderman氏らのプリンストン大学のCenter for Information Technology Policyの研究者らが、現在、広く使用されているディスク暗号化が簡単に破れると発表した。MicrosoftのBitLockerやAppleのFileVaultやLinuxで良く使用されているTrueCrypt、dm-cryptなども簡単に解読できたという。また、試してはいないが、原理的にこの手法のアタックはパスワードロックなどのその他のセキュリティーにも適用できるという。
個人情報などの管理がやかましく言われ、社外に持ち出すノートPCはディスクを暗号化しろというルールを決めている会社も少なくないのであるが、これが簡単に破られてしまうのでは、意味が無くなってしまう。
その解読法であるが、DRAMメモリに残っているキーを読み出し、それを使って暗号化されたディスクのデータを複号化するというものである。
DRAMメモリは、チップ上に作られた小さなキャパシタにビット情報を記憶する。キャパシタの電荷はリークで徐々に逃げてしまうので、データを維持するためには、リークで読めなくなる前に内容を読み出し、それを増幅して書き戻すリフレッシュという動作が欠かせない。このリフレッシュの周期は、DRAMの規格で数ミリ秒程度の時間と規定されている。
しかし、この規定は、もっともリークの大きい出来の悪いビットでもここまでは大丈夫という時間であり、チップ上の大多数のビットは、これよりもずっと長い時間情報を保持することができる。また、この規定は、許容される最高の温度でも大丈夫という時間であり、低温になると半導体のリーク電流が減少するので、情報の保持時間は大幅に長くなる。
Halderman氏らは、128Mbit SDRAMを使う1999年製のDELLのDimension 4100から、DDR DRAMのマシン2機種、そして最近の512MbitのDDR2 DRAMを使うマシン3機種の合計6機種のDRAMメモリの情報保持時間を調査した結果、最短では1秒、最長では10秒程度、半数のビットが保持されることが分かったという。そして、DRAMの世代間では、微細化の進んだ最近のメモリの方が保持時間は短くなる傾向という。また、データの化け方はキャパシタの電荷が無くなる方向であり、その逆に化けるビットは殆ど無い。
この保持時間は室温の場合の測定であるが、低温になると保持時間は大幅に長くなる。Halderman氏らは、市販されている埃取りのスプレー缶を逆様にして液の状態でDRAMチップに噴射することにより、表面温度を-50℃以下にすることができ、電源オフで1分を経過しても99.9%のビットは正しい情報を保持していたという。また、DIMMを取り出して液体窒素に漬けておくと、1時間後にマシンに戻したときのビットエラー率は、僅か0.17%であったという。
このようにDRAMはかなり長い時間情報を保持することができるので、ノートPCのバッテリを一瞬外すというような方法で異常終了させ、メモリの内容をダンプする機能を持つ小規模カーネルをUSBディスクやネットワークからブートさせると、直前のDRAMの内容が、あまりビット化けの無い状態で手に入るという。
ノートPCが電源オフの状態で長時間(常温で数分以上)放置されると、DRAMの情報は殆ど消えてしまい、この手法のアタックに対して安全であるが、スクリーンセーバーのパスワードロック状態やサスペンド状態ではDRAMの内容は消えていないので、この状態でノートPCが盗まれると、この手法でDRAMの内容も盗まれてしまう危険がある。筆者も出先でノートPCを使ってプレゼンなどをする場合は、ブート時間を短縮するためサスペンド状態で持ち歩いたりするが、これが危ないというのである。
Halderman氏らの開発した手法は、USBなどからメモリ内容を読み出すカーネルをブートして、USBにDRAMの内容をコピーする。そして、ネットブートの場合は、ネットワークを使って別のマシンにメモリの内容を転送すればよい。搭載しているメモリ量にもよるが、このダンプに要する時間は数分である。そして、このUSBを別のマシンに持っていって解析プログラムに掛ける。
AESやRSAなどの暗号では、標準のキー交換フォーマットが規格で決まっている。メモリ上のデータ形式は、この規格に従う必要はないが、同じフォーマットを使っているソフトが多い。
また、暗号化のキーの計算は複雑で時間の掛かる計算が必要なので、必要になった時に計算するのでは、レスポンスが遅くなってしまう。このため、次回以降に必要となる幾つかのキーの値をあらかじめ計算しておくという処理方法をとるのが一般的である。しかし、この次回以降のキー(キースケジュールと呼ばれる)は一定のアルゴリズムに従って生成されるので、全くランダムなビット列ではなく、規則性がある。従って、この規則性を持つデータや、それに近い値を持つメモリの番地をサーチすることによりキースケジュールの格納場所を見つけることができる。
解析プログラムは、単純にメモリイメージの全域を順番にチェックして、このような規則性に対する矛盾ビット数が少ないデータをもつ部分を見付け出す。メモリイメージがAll-0とかAll-1とかと言った番地はスキップ出来るので、この作業は短時間で終了し、高い確率で暗号化のキーや、暗号化されたパスワードを見付け出すことに成功したという。
この手法で発見したキースケジュールはDRAMのリークにより、ある程度のビット化けを含んでいるので、そのままではキーとしては使えない。全くランダムにビット化けが発生すると仮定すると、例えば1024ビットのキーの中の10ビットが化けていると想定すると、場合の数は10の24乗程度となり、全部の組み合わせをテストするのには膨大な時間がかかってしまう。
ここがHalderman氏らの手法の新しいところで、キースケジュールの格納されている部分が見つかると、キースケジュールの規則性と、DRAMのデータ化けが大部分は電荷が抜けるという一方向であることを利用して、正しいキースケジュールを見つけ出す。例えば、DRAMの"1"のビットが"0"に化ける確率が0.5と非常に高い状態でも、逆に"0"が"1"に化ける確率が0.001の場合、 112ビット長のトリプルDESの正しいキーを見つける確率は97%、168ビットのキーでも96%の確率で見つけられるという。AESのキーを見つけるアルゴリズムはより複雑であるが、一例として128ビットのAESキーは電荷抜け方向のデータ化けの確率が15%の場合は、1秒以下で正しいキーを得ることができ、アルゴリズムを拡張すれば、256ビットのAESでも実用的な時間でキーを見つけることが出来るようになるという。
また、データ抽出後にDRAMのデータの化け方を実験で調査すれば、どのビットがリークが多くて化け易いかを知ることが出来るので、この情報を利用すれば、さらに高い確率で正しいキーを見つけることが可能になるという。
この方法で、キーが見つかってしまえば、後はディスクのデータを、このキーを使って復号すれば、生データが得られてしまう。そして、開発したツールを使ってほぼ自動的にBitLocker、FileVault、TrueCrypt、dm-cryptの4種のディスク暗号化を解読することに成功したと述べている。また、このDRAMデータ横取り手法は、 SSL暗号通信行うApache Webサーバの暗号解読にも成功しており、その他の暗号化を利用したセキュリティーソフトに対しても有効なアタッックになると述べられている。
このDRAMデータ横取りアタックを防ぐには、数分以上電源をオフにして、十分にDRAMのデータを消すというのが安全な方法であるが、再起動に時間が掛かるのが欠点である。ECC付のメモリを搭載する機種では、POST(Power On Self Test)でECCのチェックビットを正しくするために全メモリをクリアするので、リブートした時にはDRAMの情報はオーバーライトされて消されてしまうので、単純なリブートに対しては安全であるが、スプレー缶冷却してDIMMを取り出して他のマシンに移されてしまうと効果がない。
企業向けのノートPCでは、TPM(Trusted Processing Module)を搭載し、キーを専用チップに格納して安全性を高めた機種があるが、TPMが搭載されていても、アプリケーションがキーシーケンスをメモリ上に作成してしまうと、このDRAMデータの横取りアタックには無力である。更に、皮肉なことには、VistaでBitLockerをベーシックモードで使用すると、TPMが搭載されている場合は、それを信用してパスワードが入力される前にディスクをマウントしてメモリ上にキーシーケンスを作ってしまうので、ノートPCの電源が切ってあっても安全では無くなってしまうという。但し、BitLockerをアドバンスモードで使用すれば、ディスクをマウントする前に、パスワード入力を要求するので、この危険はなくなるという。
また、メモリ上のキーシーケンスの格納を、更にもう一回暗号化して、横取りしたメモリのデータをスキャンしてもキーが見つからないようにすればリスクは減少するが、キーの暗号化や格納のアルゴリズムが公表されている場合やハックされて情報が出回ってしまうと、この方法も安全とは言えない。ということで、電源を切ってしばらく放置するという方法でDRAMの情報を消す以外に、確実な対策がないと述べている。