システムエンジニアXの「プログラミング以外」の話 50代会社員SEのお仕事・副業・システム運用の経験談

【CFA運用】コントロールされたフォルダーアクセスを監査モードで導入する手順

公開:

※本記事には広告を含みます。

はじめに

ランサムウェア対策としてMicrosoft Defenderの「コントロールされたフォルダーアクセス(Controlled Folder Access:以下、CFA)」を有効化したところ、社内の業務システムや独自マクロ、プリンターのスキャン保存ツールまでが「承認されていない変更」として片っ端からブロックされ、ヘルプデスクに問い合わせが殺到して即日ロールバックする羽目になった経験はないでしょうか。

私も過去に、セキュリティ監査の指摘対応でいきなりCFAを「有効(ブロックモード)」で全社展開してしまい、経理部門の会計ソフトがドキュメントフォルダへCSV出力できなくなる業務停止トラブルを引き起こした苦い経験があります。その後、まず「監査モード(値:2)」で2週間運用してイベントログから正当なアプリを洗い出すプロセスへ切り替えた結果、業務影響ゼロで本番ブロックへ移行できるようになりました。

この記事では、EnableControlledFolderAccess の4つの設定値(0〜3)の仕様と、監査モードで記録される イベントID 1124 をPowerShellで集計して許可アプリリスト(ホワイトリスト)を自動生成する実践手順を解説します。

読み終えるころには、ユーザーの業務を一切止めることなく、段階的かつ安全にランサムウェア保護を全社展開できるようになります。

この記事の要点

  • CFAをいきなり「有効(値:1)」にすると、未署名の社内ツールやスクリプトによる保護フォルダーへの書き込みがすべて遮断される
  • 導入時はまず 「監査モード(値:2)」 で展開し、ブロックせずに イベントID 1124 のログだけを2〜4週間蓄積するのが鉄則
  • 収集したイベントID 1124 から正当な業務アプリのフルパスを抽出し、ControlledFolderAccessAllowedApplications に登録してから本番有効化する
項目 動作確認・検証環境
検証年月 2026年9月
対象OS Windows 11 Pro / Enterprise 23H2・24H2
設定箇所 PowerShell (Set-MpPreference) / GPO / Intune
参照イベントログ Microsoft-Windows-Windows Defender/Operational (ID: 1123 / 1124)

結論:CFAは「監査モード(値:2)」から段階的に導入するのが唯一の正解

結論からお伝えすると、コントロールされたフォルダーアクセス(CFA)を社内展開する際は、必ず第1フェーズとして EnableControlledFolderAccess を 2(監査モード)に設定して配布 してください。

CFAは「Microsoftが信頼していると判定した有名アプリ(Office等)」以外のすべての実行ファイル(.exe / .scr / .dll 等)による保護対象フォルダー(ドキュメント、デスクトップ、ピクチャ等)およびディスクセクターへの書き込みを無条件で遮断します。つまり、自社開発の業務アプリやベンダー製のマイナーな会計・CADソフトは、初期状態では確実に「不審なプログラム」として弾かれます。

EnableControlledFolderAccess の4つの設定値と挙動比較

PowerShellやレジストリ、GPOで指定する EnableControlledFolderAccess の設定値には、0 から 3 までの4段階が存在します。

設定値 モード名称(定数名) 保護フォルダーへの書き込み ディスクセクターへの直接書き込み 記録されるイベントID 推奨される利用フェーズ
0 無効 (Disabled) 許可(何もしない) 許可(何もしない) なし 初期状態
1 有効 (Enabled) ブロック(遮断) ブロック(遮断) ID 1123 第2フェーズ(除外登録後の本番運用)
2 監査モード (AuditMode) 許可(ログのみ記録) 許可(ログのみ記録) ID 1124 第1フェーズ(導入前の事前調査・必須)
3 ディスク変更のみブロック (BlockDiskModificationOnly) 許可 ブロック(遮断) ID 1123 特殊用途(MBR破壊型のみ防ぎたい場合)
4 ディスク変更のみ監査 (AuditDiskModificationOnly) 許可 許可(ログのみ記録) ID 1124 特殊用途

特に注目すべきは値 2(監査モード) と値 3(BlockDiskModificationOnly) です。まずは値 2 で全体の書き込み傾向を調査し、どうしてもフォルダー単位の例外管理が難しい開発部門の端末などには、ブートセクター(MBR)改ざん型ランサムウェアだけを防ぐ値 3 を適用するといった柔軟な使い分けが可能です。


ステップ別実践手順:監査モードの展開からイベントID 1124の抽出まで

実際に業務影響ゼロでCFAを導入するための3ステップ手順を解説します。

ステップ1:監査モード(値「2」)をPowerShellまたはGPOで展開する

まず、対象端末に対してCFAを監査モードで有効化します。管理者権限のPowerShellで実行する場合は以下のコマンドを使用します。

# コントロールされたフォルダーアクセスを「監査モード(2)」に設定
Set-MpPreference -EnableControlledFolderAccess AuditMode
# (数値で Set-MpPreference -EnableControlledFolderAccess 2 と指定しても同じです)

# 現在の設定値を確認(2 になっていれば監査モード有効)
(Get-MpPreference).EnableControlledFolderAccess

グループポリシー(GPO)で全社配布する場合は、以下のパスを構成します。

ポリシーパス: コンピューターの構成 > 管理用テンプレート > Windows コンポーネント > Microsoft Defender ウイルス対策 > Microsoft Defender Exploit Guard > コントロールされたフォルダー アクセス
設定項目名: コントロールされたフォルダー アクセスを構成する
設定値: 「有効」を選択し、オプションのドロップダウンから「監査モード」を選択

レジストリ上では、以下のキーに 2 が書き込まれます。

キー: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender\Windows Defender Exploit Guard\Controlled Folder Access
名前: EnableControlledFolderAccess
種類: REG_DWORD
値: 2

ステップ2:イベントID 1124から「ブロック対象プロセス」を一覧抽出する

監査モードで2週間〜1ヶ月ほど通常業務を行わせると、本来ならブロックされていたはずのファイル書き込み動作が、イベントビューアーの Microsoft-Windows-Windows Defender/Operational ログに イベントID 1124 として蓄積されます。

このイベントID 1124 のXMLデータから、「どのプログラム(Process Name)が、どの保護フォルダー(Folder)に書き込もうとしたか」を重複なしで集計するPowerShellスクリプトが以下です。

# イベントID 1124(CFA監査ログ)からブロック候補アプリを抽出・集計するスクリプト
$Events = Get-WinEvent -FilterHashtable @{
    LogName = 'Microsoft-Windows-Windows Defender/Operational'
    Id      = 1124
} -ErrorAction SilentlyContinue

if (-not $Events) {
    Write-Host "イベントID 1124(CFA監査検出)の記録はありません。" -ForegroundColor Green
    return
}

$ParsedList = foreach ($Event in $Events) {
    $Xml = [xml]$Event.ToXml()
    $EventData = @{}
    foreach ($Data in $Xml.Event.EventData.Data) {
        $EventData[$Data.Name] = $Data.'#text'
    }
    [PSCustomObject]@{
        TimeCreated = $Event.TimeCreated
        ProcessName = $EventData['Process Name']
        TargetFile  = $EventData['Folder']
        UserSid     = $EventData['User']
    }
}

# プロセスパスごとに発生回数を集計して表示
$ParsedList | Group-Object ProcessName | Select-Object @{N='実行ファイルパス';E={$_.Name}}, @{N='検出回数';E={$_.Count}} | Sort-Object 検出回数 -Descending

このスクリプトを実行すると、例えば以下のように社内で使われている業務アプリやバッチツールのパスが一覧で浮かび上がります。

実行ファイルパス                                       検出回数
----------------                                       --------
C:\Program Files (x86)\CorpAccounting\AccExport.exe          42
C:\Tools\ScannerUtility\ScanToDoc.exe                        15

ステップ3:正当な業務アプリを許可リストに登録して「有効(1)」へ切り替える

抽出されたパスのうち、業務上正当なアプリケーションであることを確認したら、CFAの許可アプリケーションリストへ追加します。

# 正当な業務アプリをCFAの許可リストに追加
Add-MpPreference -ControlledFolderAccessAllowedApplications "C:\Program Files (x86)\CorpAccounting\AccExport.exe", "C:\Tools\ScannerUtility\ScanToDoc.exe"

# 十分な監査期間と除外登録が完了したら、本番の「有効(1:ブロックモード)」へ切り替え
Set-MpPreference -EnableControlledFolderAccess Enabled

これで、登録した業務アプリの動作を一切妨げることなく、未知のランサムウェアによるファイル暗号化だけを確実に遮断できるようになります。


現場でハマる「CFA除外設計」3つの落とし穴

CFAの許可リストを設計する際、セキュリティ穴を作ってしまったり、除外したはずなのに弾かれたりする3つの落とし穴があります。

落とし穴1:powershell.exe や cmd.exe 自体を許可リストに入れてしまう危険性

社内バッチが保護フォルダーにファイルを出力するからといって、C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe や cmd.exe、cscript.exe そのものをCFAの許可アプリに登録してしまうのは 絶対にNG です。

これらOS標準のスクリプトエンジン自体を許可してしまうと、ランサムウェアがPowerShellを呼び出してファイルを暗号化する攻撃(Living off the Land攻撃)が素通りしてしまい、CFAを有効化する意味が完全に失われます。スクリプトでファイル出力を行う場合は、出力先を「保護対象外の業務専用フォルダー(例:C:\WorkData\ 等)」に変更する設計を見直してください。

落とし穴2:アプリ更新でフォルダパスに「バージョン番号」が入るソフトの除外切れ

C:\Users\<ユーザー名>\AppData\Local\Programs\App\v1.2.3\app.exe のように、アップデートごとにフォルダ名(バージョン番号)が変わるアプリケーションをフルパスで登録すると、ソフトが更新された瞬間にパスが不一致となり、再びCFAにブロックされます。

CFAの許可アプリ指定ではワイルドカード(*)が使用可能です。ただし、C:\Users\*\AppData\* のように広げすぎるとマルウェアの温床になるため、最小限のスコープに絞るか、コード署名証明書による許可(MDE / Intune連携)を検討してください。

落とし穴3:SYSTEM権限で動くバックグラウンドサービスもCFAの制限を受ける

「管理者権限や NT AUTHORITY\SYSTEM 権限で動く管理スクリプトならCFAに弾かれないだろう」と思い込むのも危険な罠です。CFAは実行ユーザーの権限レベルに関係なく、プロセス自身が許可リストに入っていなければ SYSTEM 権限であっても書き込みをブロック します。


よくある質問(FAQ)

Q: 既定でCFAの保護対象になっているフォルダーはどこですか?また削除できますか?

A: 既定ではユーザーの「ドキュメント」「ピクチャ」「ビデオ」「ミュージック」「デスクトップ」「お気に入り」の標準ライブラリフォルダーが自動的に保護対象となります。これらの既定フォルダーは保護対象から削除(解除)することはできません。追加で特定のフォルダー(例:D:\SharedData)を保護したい場合は、Add-MpPreference -ControlledFolderAccessProtectedFolders "D:\SharedData" で追加できます。

Q: 実際にブロックされた場合(有効モード時)、イベントログのIDは何番になりますか?

A: 本番の有効モード(値:1)で書き込みがブロックされた場合は、同じ Microsoft-Windows-Windows Defender/Operational ログに イベントID 1123(警告レベル)が記録されます。また、MDE環境ではAdvanced Huntingの DeviceEvents テーブルにて ActionType == "ControlledFolderAccessViolationBlocked"(監査時は ControlledFolderAccessViolationAudited)で全端末横断検索が可能です。

Q: 特定のフォルダーだけCFAの保護から除外することはできますか?

A: CFAには「特定のサブフォルダーだけを保護対象から除外する」という設定項目はありません。保護対象である「ドキュメント」や「デスクトップ」配下にプログラムの一時ファイルを書き出す仕様のアプリがある場合は、アプリの保存先設定を C:\AppWork などの非保護フォルダーへ変更するか、該当アプリの実行ファイルを許可リストに登録してください。


まとめ

コントロールされたフォルダーアクセス(CFA)を安全に社内導入するための要点は以下の通りです。

  • いきなりブロックモード(値:1)にせず、必ず EnableControlledFolderAccess = 2(監査モード) から開始する
  • 監査期間中にイベントログの イベントID 1124 を収集し、社内で稼働している正当な業務アプリのパスを洗い出す
  • powershell.exe や cmd.exe などの汎用エンジンは許可リストに入れず、スクリプト側の出力先パスを見直す
  • 除外リストの登録とテストが完了した段階で、値 1(有効)へ切り替えてランサムウェア防御を完成させる

この段階的アプローチを踏むことで、「セキュリティを強化したら業務が止まった」という情シス部門の失敗を確実に防ぐことができます。

関連記事

免責規定

この記事で提供される情報は、一般的なガイダンスを目的としており、すべての環境やシステムでの動作を保証するものではありません。

OSのバージョンやリリースによっては、記載されている事が実行できない、または異なる結果をもたらす可能性があります。 また、会社所有のパソコン、スマホ、タブレットなどでは、ポリシーや権限によって実行できない場合があります。

この記事の情報を使用することによって生じる問題や結果について、筆者およびサイト管理者は責任を負いません。 すべての操作は自己責任で行ってください。

最後までお読みいただきありがとうございました。
またお会いしましょう!

著者のおすすめ教材 & note実践記事

公式教材 豪華4大特典付き

PowerShell実務スクリプト50選

AD・Windows運用・障害対応をコマンド一発で自動化する現役SEの実務スクリプト集。

最新note 毎日定時で帰る現場ハック

ググっても出ない実務テク20選

社内SE現場の地味で細かすぎる面倒作業を一撃で解消する実践テクニック集。