Microsoft Windowsの暗号化ファイルシステム( EFS )は、 NTFSバージョン 3.0 [ 1 ]で導入された機能で、ファイルシステムレベルの暗号化を提供します。この技術により、ファイルを透過的に暗号化して、コンピュータに物理的にアクセスできる攻撃者から機密データを保護できます。
EFS は、 Windows 2000以降、ホーム バージョンを除くすべてのバージョンの Windows で使用できます (下記の「サポートされているオペレーティング システム」を参照) 。[ 2 ]デフォルトではファイルは暗号化されませんが、暗号化はユーザーがファイルごと、ディレクトリごと、またはドライブごとに有効にできます。一部の EFS 設定は、Windows ドメイン環境でグループ ポリシーを介して強制することもできます。 [ 3 ]
他のオペレーティングシステム用の暗号化ファイルシステムの実装は利用可能ですが、Microsoft EFS はそれらのどれとも互換性がありません。[ 4 ]暗号化ファイルシステムのリストも参照してください。
ファイル暗号化のないシステムでオペレーティングシステムが動作している場合、ファイルへのアクセスは通常、OSが制御するユーザー認証とアクセス制御リストを経由します。しかし、攻撃者がコンピュータに物理的にアクセスした場合、この障壁は容易に回避できます。例えば、ディスクを取り外して、ファイルシステムを読み取ることができるOSがインストールされている別のコンピュータに挿入する方法や、ローカルファイルシステムへのアクセスに適したOSを含むブートCDからコンピュータを再起動する方法などが考えられます。
この問題に対する最も広く受け入れられている解決策は、ファイルを暗号化して物理メディア(ディスク、USBメモリ、テープ、CDなど)に保存することです。
Microsoft Windowsファミリーのオペレーティングシステムでは、EFSはこの対策を可能にしているが、NTFSドライブのみで、公開鍵暗号と対称鍵暗号を組み合わせることで、正しい鍵がなければファイルを復号化することを極めて困難にしている。
しかし、EFSの暗号化キーは実際にはユーザーアカウントのパスワードによって保護されているため、ほとんどのパスワード攻撃に対して脆弱です。つまり、ファイルの暗号化の強度は、復号キーを解除するためのパスワードの強度に依存します。

EFS は、ファイル暗号化キー (FEK) とも呼ばれるバルク対称キーを使用してファイルを暗号化することで機能します。対称暗号化アルゴリズムを使用するのは、非対称キー暗号を使用する場合よりも大量のデータの暗号化と復号化にかかる時間が短いためです。使用される対称暗号化アルゴリズムは、オペレーティングシステムのバージョンと構成によって異なります。以下の「Windows バージョンで使用されるアルゴリズム」を参照してください。FEK (ファイルの暗号化に使用される対称キー) は、ファイルを暗号化したユーザーに関連付けられた公開キーで暗号化され、この暗号化された FEK は、暗号化されたファイルの $EFS 代替データ ストリームに格納されます。 [ 5 ]ファイルを復号化するために、EFS コンポーネント ドライバーは、EFS デジタル証明書 (ファイルの暗号化に使用) と一致する秘密キーを使用して、$EFS ストリームに格納されている対称キーを復号化します。次に、EFS コンポーネント ドライバーは、対称キーを使用してファイルを復号化します。暗号化および復号化処理はNTFSより下位のレイヤーで行われるため、ユーザーおよびすべてのアプリケーションにとって透過的です。
ファイルシステムによって暗号化されるフォルダーには、暗号化属性が付与されます。EFS コンポーネント ドライバーは、この暗号化属性を NTFS におけるファイルアクセス許可の継承と同様の方法で処理します。つまり、フォルダーが暗号化対象としてマークされている場合、デフォルトではそのフォルダーの下に作成されるすべてのファイルとサブフォルダーも暗号化されます。暗号化されたファイルが NTFS ボリューム内で移動されても、ファイルは暗号化されたままです。ただし、ユーザーが明示的に Windows に復号化を要求しなくても、ファイルが復号化されるケースがいくつかあります。
ファイルやフォルダは、 FAT32などの別のファイルシステムでフォーマットされたボリュームにコピーされる前に復号化されます。最後に、暗号化されたファイルがSMB/CIFSプロトコルを使用してネットワーク経由でコピーされる場合、ファイルはネットワーク経由で送信される前に復号化されます。
コピー時の復号化を防ぐ最も効果的な方法は、「Raw」APIに対応したバックアップアプリケーションを使用することです。これらのRaw APIを実装したバックアップアプリケーションは、暗号化されたファイルストリームとEFS代替データストリームを単一のファイルとしてコピーします。つまり、ファイルは暗号化された状態で(例えばバックアップファイルに)「コピー」され、バックアップ中に復号化されることはありません。
Windows Vista以降、ユーザーの秘密鍵をスマートカードに保存できるようになりました。データ復旧エージェント(DRA)の鍵もスマートカードに保存できます。[ 6 ]
Windows 2000 EFSには2つの重大なセキュリティ脆弱性が存在し、以来、様々な攻撃の標的となってきた。
Windows 2000 では、ローカル管理者がデフォルトのデータ復旧エージェントであり、ローカルユーザーによって EFS で暗号化されたすべてのファイルを復号化できます。Windows 2000 の EFS は復旧エージェントなしでは機能しないため、ユーザーの暗号化されたファイルを復号化できる人が常に存在します。ドメインに参加していない Windows 2000 コンピューターは、ローカル管理者アカウントを乗っ取ることができる人による不正な EFS 復号化の影響を受けやすく、インターネット上で無料で入手できるツールが多数あることを考えると、これは容易です。[ 7 ]
Windows XP以降では、デフォルトのローカルデータ復旧エージェントは存在せず、インストールする必要もありません。SYSKEYをモード2または3(起動時に入力するか、フロッピーディスクに保存する)に設定すると、ローカル管理者アカウントによる不正な復号のリスクを軽減できます。これは、SAMファイルに保存されているローカルユーザーのパスワードハッシュがSyskeyで暗号化されており、Syskeyのパスフレーズやフロッピーディスクを持っていなければ、オフラインの攻撃者はSyskeyの値にアクセスできないためです。
Windows 2000 では、ユーザーの RSA 秘密鍵は完全に暗号化された形式で保存されるだけでなく、保護がより弱い RSA 秘密鍵のバックアップも存在します。攻撃者が Windows 2000 コンピュータに物理的にアクセスし、ローカル ユーザー アカウントのパスワードをリセットした場合、[ 7 ]攻撃者はそのユーザー (または回復エージェント) としてログインし、すべてのファイルを復号できる RSA 秘密鍵にアクセスできます。これは、ユーザーの RSA 秘密鍵のバックアップが LSA シークレットで暗号化されており、ローカル システムにログイン権限を昇格できる攻撃者であれば誰でもアクセスできるためです (インターネット上に多数のツールが存在するため、これも容易です)。
Windows XP以降では、ユーザーのRSA秘密鍵はオフラインの公開鍵を使用してバックアップされます。この公開鍵に対応する秘密鍵は、次の2つの場所のいずれかに保存されます。Windows XPがドメインに参加していない場合、パスワードリセットディスク。Windows XPがドメインに参加している場合、Active Directory。つまり、LocalSystemとしてWindows XPに認証できる攻撃者であっても、PCのハードドライブに保存されている復号鍵にはアクセスできません。
Windows 2000、XP、またはそれ以降のバージョンでは、ユーザーのRSA秘密鍵は、ユーザーのNTLMパスワードハッシュとユーザー名を組み合わせたハッシュを使用して暗号化されます。ソルト付きハッシュを使用することで、ユーザーのパスフレーズを知らなくても、このプロセスを逆算して秘密鍵を復元することは極めて困難になります。また、Syskeyをモード2または3(起動時にSyskeyを入力するか、フロッピーディスクに保存する)に設定すると、ローカルユーザーのパスワードハッシュがSAMファイルに暗号化されて保存されるため、この攻撃を軽減できます。
ユーザーが一度正常にログオンすると、EFS で暗号化された自身のデータへのアクセスには追加の認証は不要となり、復号化は透過的に行われます。そのため、ユーザーのパスワードが漏洩すると、自動的にそのデータにアクセスできてしまいます。Windows は、可逆暗号化されたユーザー アカウント パスフレーズのバージョンを保存できますが、これはもはや既定の動作ではありません。また、ローカル ユーザー アカウント パスフレーズの Lan Manager ハッシュを保存するように構成することもできます (Windows XP 以前のバージョンでは既定で保存されます)。これは簡単に攻撃され、解読される可能性があります。さらに、ローカル ユーザー アカウント パスフレーズはNTLMハッシュとしても保存されますが、パスワードが弱い場合は「レインボー テーブル」を使用して比較的簡単に攻撃される可能性があります(Windows Vista 以降のバージョンでは、既定で弱いパスワードは許可されていません)。ローカルパスフレーズに対する単純な総当たり攻撃の脅威を軽減するには、古いバージョンのWindowsでは、グループポリシーのセキュリティ設定を使用してLMハッシュを保存しないように構成し、もちろん、レジストリに平文のパスフレーズを保存する自動ログオンを有効にしないようにする必要があります。さらに、14文字を超えるローカルユーザーアカウントのパスフレーズを使用すると、WindowsがSAMにLMハッシュを保存するのを防ぐことができ、NTLMハッシュに対する総当たり攻撃をより困難にするという利点もあります。
EFS でファイルを暗号化する場合、つまり平文ファイルを暗号化ファイルに変換する場合、平文ファイルは消去されず、単に削除されます (つまり、ファイルシステムで「使用されていない」とフラグが付けられたデータ ブロックになります)。これは、たとえばTRIMをサポートするSSDに保存されていない限り、上書きされない限り簡単に復元できることを意味します。EFS に対する既知の、難易度の低い技術的攻撃を完全に軽減するには、暗号化をフォルダー レベルで構成する必要があります (これらのディレクトリに作成される Word 文書のバックアップなどの一時ファイルもすべて暗号化されるようにします)。個々のファイルを暗号化する場合は、暗号化されたフォルダーにコピーするか、「その場で」暗号化してから、ディスク ボリュームを安全に消去する必要があります。Windows の Cipher ユーティリティ (/W オプション付き) を使用して、削除された平文ファイルが残っている領域を含む空き領域を消去できます。さまざまなサードパーティ ユーティリティも同様に機能する場合があります。[ 8 ]
管理者権限を取得できるユーザーは誰でも、データ復旧エージェントの設定を上書き、オーバーライド、または変更できます。これは非常に深刻な問題です。攻撃者は、例えば(サードパーティ製のツールを使用して)管理者アカウントをハッキングし、データ復旧エージェントとして任意のDRA証明書を設定して待機することができます。これは、紛失または盗難されたPCによるリスクとは大きく異なるシナリオであるものの、悪意のある内部関係者によるリスクを浮き彫りにする、いわゆる「二段階攻撃」と呼ばれることもあります。
ユーザーがこのような攻撃の最初の段階の後でファイルを暗号化すると、FEKは指定されたDRAの公開鍵で自動的に暗号化されます。攻撃者は、管理者としてコンピュータにもう一度アクセスするだけで、その後EFSで暗号化されたすべてのファイルへの完全なアクセス権を取得できます。Syskeyモード2または3を使用しても、この攻撃から保護されません。攻撃者は暗号化されたファイルをオフラインでバックアップし、別の場所に復元して、DRAの秘密鍵を使用してファイルを復号化できるからです。このような悪意のある内部関係者がコンピュータに物理的にアクセスできる場合、すべてのセキュリティ機能は無意味であると考えられます。なぜなら、ルートキット、ソフトウェアまたはハードウェアキーロガーなどをコンピュータにインストールできるからです。これは、DRAポリシーを上書きするよりもはるかに興味深く効果的な可能性があります。
EFSで暗号化されたファイルは、以前使用された公開鍵と一致するRSA秘密鍵を使用した場合のみ復号化できます。保存されているユーザーの秘密鍵のコピーは、最終的にユーザーのログオンパスワードによって保護されます。Windows以外のオペレーティングシステム(Linuxなど)から暗号化されたファイルにアクセスすることはできません。これは、現在サードパーティ製のEFSコンポーネントドライバが存在しないことが大きな理由です。さらに、特別なツールを使用してユーザーのログインパスワードをリセットすると、ユーザーの秘密鍵を復号化できなくなり、ユーザーの暗号化されたファイルにアクセスできなくなります。この重要性は、ユーザーがパスワードを忘れたり、暗号化キーのバックアップを怠ったりした場合にデータ損失につながるため、時折見落とされがちです。このことから、経験の浅いユーザーがファイルを暗号化した場合にデータ損失が避けられないように見える状況を表すために、「遅延ごみ箱」という用語が生まれました。
EFSが公開鍵基盤(PKI)によって発行された鍵を使用するように構成されており、かつPKIが鍵のアーカイブと復元を有効にするように構成されている場合、暗号化されたファイルは、まず秘密鍵を復元することで復元できます。
EFSをネイティブにサポートしているオペレーティングシステムやファイルシステムは他にありません。
Windows EFSは、ファイルの暗号化時に使用されているWindowsのバージョンに応じて、さまざまな暗号化アルゴリズムをサポートしています。
注:
Vista SP1 および Windows Server 2008 では、暗号化ファイルシステム (EFS) グループ ポリシー設定を使用して、システム ページ ファイルを暗号化できます。
FAT および EXFAT のサポートは、Windows 10 v1607 オペレーティングシステムおよび Windows Server 2016 以降で追加されました。