それではこれらの攻撃手法について、少し詳しく見ていきましょう。
例えば機密情報の漏洩を防ぐために、ファイルを暗号化する仕組みを導入していたとしましょう。確かにハードディスク内ではファイルは暗号化されているため、PCが盗難に遭ったとしても、暗号化鍵の管理さえ適切であればハードディスク上のファイルから情報が漏洩する可能性は極めて低くなります。しかしアプリケーションプログラムがそのファイルにアクセスしている場合(ワープロソフトで編集中など)、通常メモリ中にはデータは復号して格納されますので、その状態でハイバネーションを行うとハイバネーションファイルには機密情報が平文で保存されます。つまり暗号化していたつもりの情報が、ハイバネーションファイル経由で漏洩してしまう危険性があるというわけです。
図4 ハイバネーションファイル経由での機密情報の漏洩 |
さらに暗号化システムが暗号化鍵をメモリ中に保持しているような場合は、ハイバネーションファイルから暗号化鍵を探し出して抽出し、ハードディスク等の暗号化を解除する攻撃手法が考えられます。2008年に公開された「Cold Boot Attacks on Encryption Keys[2]」という論文では、物理メモリ中から暗号化鍵を抽出してBitLockerやTrueCryptといったディスク暗号化システムを攻撃する手法が紹介されていますが、この手法はハイバネーションファイル自体が暗号化されていない限り、ハイバネーションファイルに対して応用することも可能だと思われます。
近年、PCのメモリ内容を解析することで、マルウェアの存在を検出したり、あるいはコンピュータフォレンジックを効果的に実施したりするための研究が多数行われており、そのためのツールも各種開発されています[3]。オープンソースとして公開されている「Volatility Framework[4]」というツールもそのうちの一つですが、このようなツールを使えばハイバネーションファイルを物理メモリイメージに復元し、その内容をさまざまな角度で解析することが可能となります。
図5 ハイバネーション・パッチによるユーザ認証の回避 |
ハイバネーションファイルはメモリ内容を圧縮/エンコードした形で格納しているので、ハイバネーションファイル中のプログラムコードを改変する(パッチをあてる)ためには一旦デコードしてメモリ形式に変換し、パッチをあてた後にハイバネーション形式に戻す必要があります(前述のSandmanにはその機能が含まれています)。ですがハイバネーションファイルの圧縮方式はそれほど複雑ではないため、数バイト程度であれば特にデコード/エンコードを行わなくても直接パッチをあてることは多くの場合可能です。
2006年、オーストラリアで開催されたセキュリティカンファレンスで「Physical Access Attacks with Firewire[5]」というセッションが行われました。そこではスクリーンセーバなどでパスワードロックされている状態のPCに対し、FireWire(IEEE 1394)経由でメモリにDMAアクセスすることにより、直接メモリ内のプログラムコードを改変してパスワードロックを解除するという攻撃手法が報告されたのですが、ハイバネーション・パッチによる認証回避は、まさにこの攻撃手法の応用になります。ちなみにFireWireを使用してメモリパッチを行う攻撃プログラムは、「Firewire, DMA & Windows[6]」というサイトで公開されています。
ユーザ認証をバイパスしてログオン状態に復帰できるということは、極めて危険性が高いといえます。例えばWindowsのEFS(暗号化ファイルシステム)などは、ユーザがパスワードを入力してログオンすることによってはじめて暗号化したファイルにアクセスできるようになりますので、オフライン・パスワードリセットのような攻撃[7]で強制的にログオンできたとしても、ユーザのパスワードを知らない限りEFSファイルにアクセスすることはできません。またWindowsはSyskeyの設定を強化することにより、一般的なオフライン攻撃からシステムの機密情報を強固に保護することができるように設計されています。しかし、ハイバネーション・パッチによりユーザ認証なしで復帰できてしまうと、攻撃者はすでにOSが起動してユーザがログオンしている状態、つまり建物内の金庫の中にたどり着けてしまいます。当然そのユーザのEFSファイルにアクセスすることができますし、仮にSyskey設定が強化されていても、パスワードハッシュやLSAシークレットといったOS機密情報を正しくダンプすることが可能です。
オープンソースのTrueCrypt[9]という暗号化システムも、システムドライブ全体を暗号化する機能があります。Windows XPやVistaの他のエディション等、BitLockerが使えない場合には、このTrueCryptを利用するのも一つの手だと思われますし、他にハイバネーションに対応したドライブ暗号化の各種サードパーティ製品もいろいろと開発されています。
システムドライブ暗号化は優れた解決策ですが、導入のためにはいろいろな意味でコストがかかります。またハードウェア環境によっては導入できない場合もあるかも知れません。さらにTrueCryptの開発者によると、Windows OSのハイバネーション周りのAPIは公開されていないため、マイクロソフト以外のドライブ暗号化システムがハイバネーションに完全に対応することは現時点では困難だと言われています。ですのでシステムドライブ暗号化製品を導入する際には、ハイバネーションへの対応状況を事前に十分に確認した方がよいでしょう。
ハードディスクパスワードはATAの規格で定められているハードディスクのセキュリティ 機構で、設定したパスワードを入力しない限りハードディスクに対してアクセスすることができないというものです。もちろんある程度のツールや設備、そして技術と根性(もしくはお金)があれば、このセキュリティ機構を回避することは可能ですが、複雑なパスワードを設定することで一般的なハードディスクに対するアクセス制御としては十分役に立つと思われます。
システムドライブの暗号化が行われている(つまりハイバネーションファイルが暗号化されている)ケースでは、ハイバネーションの方が明らかに安全だといえます。スタンバイ状態は物理メモリ内にデータを保持していますので、前述したCold Boot Attackなど物理メモリに対する攻撃の脅威にさらされてしまいます。一方ハイバネーションはメモリ内容が暗号化状態でハードディスクに保持され、電源OFF後は物理メモリからデータは消失しますので、平文のメモリ情報はどこにも存在しなくなります。
システムドライブ暗号化を導入していないケースでは、個人的にはスタンバイの方がハイバネーションよりは安全性が高いと考えています。たとえハードディスクパスワードが破られたとしても、スタンバイの場合、攻撃者は物理メモリへの直接的なアクセス(DMA等)が必要となりますが、ハイバネーションの場合は攻撃者はディスクアクセスさえできれば事足りるからです。
※ ハイバネーション・パッチによるユーザ認証回避がいかに容易に実行できるかをご理解いただくため、デモ用の映像を用意しております(WMV形式、約2.7MB、約2.5分)。興味のある方はご覧ください。 |
[1] Sandman Project http://sandman.msuiche.net/ [2] Lest We Remember: Cold Boot Attacks on Encryption Keys http://citp.princeton.edu/memory/ [3] 稼動中システムの調査対応・メモリ分析 http://www.digitalforensic.jp/archives/2008/808.pdf [4] Volatility Framework https://www.volatilesystems.com/default/volatility [5] Hit by a Bus: Physical Access Attacks with Firewire http://www.ruxcon.org.au/files/2006/firewire_attacks.pdf [6] Firewire, DMA & Windows http://storm.net.nz/projects/16 [7] Offline NT Password & Registry Editor http://home.eunet.no/‾pnordahl/ntpasswd/ [8] BitLocker ドライブ暗号化 http://technet.microsoft.com/ja-jp/windows/aa905065.aspx [9] TrueCrypt http://www.truecrypt.org/
2009年4月執筆
塩月 誠人
ネットワークセキュリティコンサルタント
合同会社セキュリティ・プロフェッショナルズ・ネットワーク