Windows XP Professional のスタンドアロン環境 (ドメイン環境でないシステム) で暗号化ファイルシステム (EFS: Encrypting File System) を使う場合の注意点


〔目次〕  〔全項展開〕



モバイル PC に EFS を使う場合の注意点

ノートパソコンなど、モバイル PC 全体を持ち運ぶ場合の盗難・紛失対策として EFS を使おうとする場合は注意が必要である。OS のあるハードディスクの中には、ユーザーの秘密鍵も入っている。これを簡単に使われないようにしなければならない。つまり、PC に簡単にログオンされないようにしておく必要がある。例えば PC を起動するだけでパスワードなしで自動ログオンできるようになっていると、EFS による暗号化は全く意味がなくなってしまう。ログオン パスワードは十分に長くて推測されにくいものにするとともに、ノートパソコンを閉じるだけでスタンバイ・休止状態にする運用をしている場合、スタンバイ・休止状態からの復帰には必ずパスワードが必要になるよう設定する。

また、Windows XP ではユーザーの EFS 秘密鍵はユーザーのパスワードを使って(正確には、ユーザーのパスワードで暗号化されたマスター キーを使って)暗号化されてユーザー プロファイルに保存されていて他の場所にはないので、ユーザーのパスワードが破られなければ、秘密鍵も安全であるといえる。だが、その安全性は、パスワードの強さ (判明しにくさ) に依存している。パスワードが十分に長くて推測しにくいものでなければ、安全性は大幅に落ちてしまう。

(ちなみに、Windows 2000 では秘密鍵のコピー(正確には、秘密鍵を暗号化しているユーザーのマスター キーのコピー)が LSA Secrets という場所にも格納されていた。この理由は、管理者がユーザーのパスワードをリセットしてもユーザーが再び秘密鍵を使えるようにするためであった。LSA Secrets は「システム キー」と呼ばれるマスター・パスワード (Windows インストール時に自動生成される) で暗号化されている。ところがデフォルトではこのシステム キーはハードディスク上に保存されており、PC ごと盗難にあった場合に何らかの方法でログオンに成功されると、システム キーは自動的に使用可能になってしまうため、まったく秘密鍵の保護にならない。攻撃者はハードディスクへの直接書き込みによって OS を大幅に改変し、SAM データベースというログオン パスワードのハッシュ値の保存場所を別のもので置き換えることによって、Administrator や任意の管理者のパスワードをリセットできるからである。その後、システム キーを使って LSA Secrets からマスター キー、ひいては秘密鍵を取り出すことができてしまう。システム キーをハードディスクから削除し、Windows 起動のたびに入力 (手入力またはフロッピーからの読み込み) するようにしておけば、たとえ攻撃者がハードディスク上の OS を強引に改変して (パスワード解読作業なしで) ログオンに成功しても、EFS 秘密鍵を手に入れることはできなくなる (システム キー で暗号化された LSA Secrets の解読作業か、ユーザー プロファイル内にあるユーザーのマスター キー(これはユーザーのログオン パスワードで暗号化されている)の解読作業、あるいはマスター キーで暗号化された秘密鍵そのものの解読作業が必要になる)。そのため、Windows 2000 では syskey というコマンドを使ってハードディスクからシステム キーを削除しておくことが必須であった。逆に、Windows XP ではユーザーがパスワードを忘れたために管理者がユーザーのパスワードをリセットした場合、新しいパスワードでログオンしたユーザーは元の秘密鍵にアクセスできないので暗号化ファイルを復号化できなくなる。もちろん、ユーザーが正しいパスワードを使ってログオン後に自分でパスワードを変更した場合はきちんと秘密鍵にも反映される。)

一般にユーザーが作るパスワードは、せいぜい6〜8文字程度で、しかも英小文字しか使っておらず、あろうことか辞書に載っている単語だったりする。パスワードに工夫を凝らしているつもりでも、複数の単語を並べ、一部を大文字にし、i→1 o→0 といった陳腐な置き換えをしただけだったりする。このようなパスワードは、攻撃者から見れば存在しないに等しい。パスワードから暗号鍵を生成して「256ビットの暗号化」と謳ったりする暗号化ソフトがたまにあるが、パスワードが40ビット程度の強さしかなければ、その暗号化ソフトの強さは40ビットである。40ビットは256ビットに比べて2の-216乗、つまり10進数で-65桁、すなわち一億分の一の一億分の一の…と8回繰り返しただけの強さしかない。

EFS がユーザーのパスワードを暗号鍵として直接使用しない(パスワードから暗号鍵を生成しない)理由もここにあり、ユーザーのパスワードの強さは、ランダムに自動生成されたユニークな非常に長い暗号鍵に比べて一般に大幅に(天文学的な差で)劣るからである。自動生成された暗号鍵を使用していれば、暗号化ファイルだけが (例えば外付けハードディスクだけが) 流出した場合の安全性は十分に高い。しかし (パスワードで暗号化された) 暗号鍵と一緒に流出した場合は、暗号化ファイルの安全性もパスワードの安全性に依存することになる。従って、PC ごと盗難にあった場合の安全性は、パスワードの解読がどれだけ困難であるかにかかっている。

例えば、システム キーはユーザー パスワードのハッシュ値を格納している SAM データベースという領域を暗号化するのにも使われているので、Windows XP でも syskey コマンドを使ってシステム キーをハードディスクから削除すればパスワードの解読が少し困難になる (SAM データベースの解読とハッシュ値の解読の両方が必要になるから)。しかしこれは解読の困難さを増やすという点ではあまり効果的ではない。パスワード保護を二重に掛けても、解読の困難さはせいぜい2倍にしかならないからである。これは暗号鍵の長さが1ビット増えたのと同等にすぎない。パスワードに使う文字が英数記号で64種類とすれば、一文字で6ビットあるので、パスワード保護を二重にするよりもパスワードを一文字伸ばす方がずっと解読が困難になる。

(直感的に分かりにくいので単純な例を挙げると、例えば暗証番号の桁数が4桁の場合、0000 〜 9999 の一万個の場合を試せば、暗証は破られる。暗証の保護を二重に掛けて、合計8桁の数字を覚えることにしても、攻撃者は最初の暗証に一万回、次の暗証に一万回の合計二万回の試行で暗証を破ることができる。これに対し、暗証の保護が一つしかなくても桁数を5桁に伸ばした場合は、攻撃者は 00000 〜 99999 の十万回の試行が必要になる。)

つまり、パスワードの解読を困難にするには、パスワードの長さが重要なのである。パスワードの長さが長くなるにつれ、解読の困難さは指数関数的に増大するので、少しでも長いパスワードを付けることが重要である。目安としては16文字以上。

以上のことから、モバイル PC のデータ保護に関しては、EFS の使用だけでなく以下のことが必要である。

更にセキュリティに万全を期すなら、仮想メモリのページングファイルと休止状態のハイバネーションファイルから情報が漏れることを防ぐため、これらをハードディスク上に残さないようにする。ページングファイルは pagefile.sys という名で、ハイバネーションファイルは hiberfil.sys という名で C: ドライブのトップに置かれている (隠しファイル属性が付いている)。これらのファイルは、メモリの内容をそのままハードディスクに書き出したもので、アプリケーションで暗号化ファイルを開いていると、アプリケーションに読み込まれた状態 (復号化された状態) のファイル内容が書き出されている。これらのシステムファイルは暗号化されていないので、このファイルを読み取ることにより、アプリケーションで開いていた内容が読み取られる可能性がある。仮想メモリのページングファイル容量はデフォルトでは物理メモリ容量の 1.5 倍あり (最大 3 倍まで自動的に拡張される)、ページングファイルに書き出されたデータは次に別のデータで上書きされるまでファイル上に残ったままになるので、たとえアプリケーションをすべて閉じてからシャットダウンしても、ページングファイルに機密データが残ったままになる可能性がある。一方、休止状態のハイバネーションファイルは、メモリの容量と同じサイズで、休止状態に入ったときの状態が書き出されるので、アプリケーションを閉じてから休止状態にするようにすれば、機密データの漏洩は防げる。しかしそれでは休止状態を使うメリットがほとんどない上、アプリケーションを閉じることを忘れる可能性もあるので、休止状態を無効にすることが望ましい。

仮想メモリのページングファイルは、シャットダウン時に自動的に上書きクリアするように設定できる。休止状態のハイバネーションファイルは、休止状態を無効にする以外に削除する方法がない。

仮想メモリのページングファイルをシャットダウン時に自動的に上書きクリアするように設定するには、

  1. [スタート] - [コントロール パネル] - [パフォーマンスとメンテナンス] - [管理ツール] - [ローカル セキュリティ ポリシー] を起動する。
  2. [ローカル ポリシー] - [セキュリティ オプション]を開き、ポリシーのリストで「シャットダウン: 仮想メモリのページ ファイルをクリアする」をダブルクリックする。
  3. 設定値の「有効」を選択して「OK」をクリックする。

の操作をする。ただし、この設定をすると、シャットダウン時にページングファイル全体を上書きするため、シャットダウンに長い時間がかかるようになる。

休止状態を無効にするのは、[スタート] - [コントロール パネル] - [パフォーマンスとメンテナンス] - [電源オプション] の「休止状態」タブで行う。

【セキュリティに関する 10 の鉄則】
http://www.microsoft.com/japan/technet/archive/community/columns/security/essays/10imlaws.mspx
【Windows XP Professional でモバイル コンピュータのセキュリティを保護】
http://www.microsoft.com/japan/technet/prodtechnol/winxppro/evaluate/mblsecxp.mspx
【Windows 2000 Syskey および暗号化ファイル システムにおいて噂されている脆弱性の分析】
http://www.microsoft.com/japan/technet/archive/security/news/efs.mspx
【Strengthening Key and File Security (Taking Recovery Precautions)】
【Increasing Security for Open Encrypted Files (Taking Recovery Precautions)】
http://www.microsoft.com/technet/prodtechnol/winxppro/reskit/c18621675.mspx#E4SAE
【DPAPI (データ保護 API) のトラブルシューティング】
http://support.microsoft.com/kb/309408/ja/
【パスワードのリセット後に証明書の EFS、資格情報、秘密キーが使用できなくなる】
http://support.microsoft.com/kb/290260/ja/
【Windowsにおける物理アクセス対策 − EFSとSYSKEY】
http://www.st.rim.or.jp/~shio/csm/efs/
【パスワード設定のホントとウソ】
http://www.itmedia.co.jp/enterprise/0310/03/epn15.html
【Windows でパスワードの LAN Manager ハッシュが Active Directory とローカル SAM データベースに保存されないようにする方法】
http://support.microsoft.com/kb/299656/ja/
【SysKey ユーティリティを使用して Windows 2000 セキュリティ アカウント マネージャ データベースをセキュリティで保護する方法】
http://support.microsoft.com/kb/310105/ja/
【シャットダウン :仮想メモリのページファイルをクリアする (セキュリティ オプション)】
http://www.microsoft.com/japan/technet/security/topics/serversecurity/tcg/tcgch05.mspx
【[システムのシャットダウン時に仮想メモリのページ ファイルをクリアする] 設定で Windows 2000 のシャットダウンが遅くなる】
http://support.microsoft.com/kb/320423/ja/


〔目次〕  〔全項展開〕