PowerShellでWindows Defender Application Controlの監査モードを有効化し互換性をチェックする方法

Windows Defender Application Control (WDAC) は、Windows環境におけるセキュリティ強化のための重要な機能の一つです。WDACを適切に設定することで、信頼できるアプリケーションのみが実行されるようになり、マルウェアや不正なプログラムの実行を防ぐことができます。

しかし、WDACを強制モードで有効化すると、システム上の正規のアプリケーションがブロックされる可能性があります。そのため、事前に監査モードを有効化し、システム内で動作するアプリケーションの互換性を確認することが推奨されます。

本記事では、PowerShellを用いてWDACの監査モードを有効化する方法を詳しく解説し、適用後のログ確認や互換性チェックのポイントについても説明します。セキュリティの強化を図りつつ、業務に影響を与えないようにするための手順を理解しましょう。

目次

Windows Defender Application Control (WDAC)とは


Windows Defender Application Control (WDAC) は、Windows 10以降のエディションで利用できるアプリケーション制御機能であり、システムのセキュリティを強化するために設計されています。WDACは、実行可能なアプリケーションやスクリプトを制限し、信頼されたコードのみが実行されるようにすることで、マルウェアや不正なプログラムの実行を防ぎます。

WDACの主な特徴


WDACには、以下のような特徴があります。

  • コードの信頼性評価:WDACは、Microsoftによるコード署名、ポリシー設定、証明書の信頼性などを基に、実行可能なアプリケーションを判断します。
  • カーネルレベルの保護:WDACは、Windowsカーネルの保護機能と統合されており、不正なコードの実行を防ぎます。
  • ポリシーベースの制御:管理者は、許可するアプリケーションをポリシーとして定義でき、特定のアプリケーションのみを許可する制限をかけることができます。
  • 監査モードと強制モード:WDACは、事前に動作を確認できる監査モードと、ポリシーを厳格に適用する強制モードの2つのモードを備えています。

WDACの適用シナリオ


WDACは、以下のようなシナリオで有効に活用できます。

  • 企業環境でのセキュリティ強化:従業員が不要なソフトウェアをインストール・実行することを防ぎ、セキュリティリスクを低減します。
  • サーバー環境の保護:不正なアプリケーションの実行をブロックし、サーバーの安定性を確保します。
  • マルウェア対策:信頼されていないコードの実行を制限し、ランサムウェアやその他のマルウェアの拡散を防ぎます。

本記事では、WDACの導入にあたって、最初に監査モードを有効化し、システム内のアプリケーション互換性をチェックする方法を解説していきます。

監査モードと強制モードの違い

Windows Defender Application Control (WDAC) には、監査モード (Audit Mode) と 強制モード (Enforced Mode) の2つの動作モードがあります。これらのモードを理解し、適切に設定することで、システムの安全性を確保しつつ、業務に影響を与えないようにすることが可能です。

監査モード (Audit Mode) とは


監査モードは、WDACのポリシーがどのように機能するかを事前に確認するためのモードです。このモードを有効にすると、ポリシーに適合しないアプリケーションが実行された際に、ブロックはされず、ログに記録されるだけになります。

監査モードの特徴

  • アプリケーションの実行を妨げない:ポリシーに違反しているアプリケーションも実行可能。
  • イベントログに記録:ブロック対象となるアプリケーションの情報がログに保存される。
  • 互換性チェックに最適:強制モードへ移行する前に、システムの動作確認ができる。

監査モードの活用例

  • 新しいWDACポリシーを適用する前に、影響範囲を確認する。
  • 許可すべきアプリケーションがブロック対象になっていないかを調査する。
  • 特定の期間にわたってポリシーを評価し、必要な調整を行う。

強制モード (Enforced Mode) とは


強制モードは、WDACのポリシーを厳格に適用し、ポリシーに違反するアプリケーションの実行を完全にブロックするモードです。このモードでは、許可リストに含まれていないアプリケーションは起動できません。

強制モードの特徴

  • 厳格なアプリケーション制御:許可されたアプリケーションのみが実行可能。
  • ポリシーに準拠しないアプリは完全にブロック。
  • セキュリティが向上するが、業務に影響を及ぼす可能性あり。

強制モードの適用シナリオ

  • 監査モードで十分な動作検証を行い、ポリシーが適切であることを確認後に適用する。
  • 重要なサーバー環境や、強固なセキュリティが求められる端末で利用する。
  • 許可されていないアプリの実行を厳しく制限し、組織のセキュリティを強化する。

監査モードと強制モードの比較

項目監査モード (Audit Mode)強制モード (Enforced Mode)
ポリシー違反アプリの実行許可される(ログ記録のみ)完全にブロックされる
イベントログの記録許可・ブロックの両方が記録されるブロックされたアプリのみ記録される
互換性チェック可能不可(即座にブロック)
セキュリティ強度低い(テスト向け)高い(本番環境向け)

どちらのモードを選択すべきか?


WDACの導入時には、まず監査モードを有効化し、互換性を確認することが推奨されます。十分な検証を行い、業務に支障が出ないことを確認した後に、強制モードへ移行するのが理想的な運用方法です。

次のセクションでは、監査モードを有効化するための事前準備について解説します。

WDACの監査モードを有効化する準備

WDACの監査モードを有効化する前に、いくつかの事前準備を行う必要があります。適切な環境設定を行うことで、スムーズにWDACを適用し、監査モードのログを正しく取得できます。

1. 管理者権限の確認


WDACの設定変更には管理者権限が必要です。PowerShellを管理者として実行しないと、ポリシーの適用や変更が制限されるため、以下の手順で管理者モードでPowerShellを起動してください。

  1. [スタート] メニューを開く
  2. 「PowerShell」と入力し、検索結果に表示される Windows PowerShell または PowerShell 7 を右クリック
  3. 「管理者として実行」を選択

2. PowerShellの実行ポリシーの確認


WDACのスクリプトを実行するために、PowerShellの実行ポリシーが適切に設定されているかを確認します。

以下のコマンドを実行し、現在の設定を確認してください。

Get-ExecutionPolicy

一般的な出力例:

Restricted  (スクリプトの実行がブロックされる)
RemoteSigned (リモートスクリプトのみ署名付きなら実行可能)
Unrestricted (すべてのスクリプトが実行可能)

もし Restricted になっている場合、スクリプトを実行できるようにするため、以下のコマンドで実行ポリシーを変更します。

Set-ExecutionPolicy RemoteSigned -Scope Process

※ セキュリティ上の理由から、ポリシー変更後は元の設定に戻すことを推奨します。

3. WDACのポリシーファイルの格納場所の確認


WDACのポリシーは *C:\Windows\System32\CodeIntegrity* 配下に保存されます。

現在のポリシーファイルが存在するか確認するには、以下のコマンドを実行してください。

Get-ChildItem -Path C:\Windows\System32\CodeIntegrity\ -Filter *.xml

もしポリシーファイルがない場合、新規作成する必要があります。次のセクションでは、WDACの監査モードをPowerShellで有効化する手順を詳しく解説します。

PowerShellでWDACの監査モードを有効化する手順

WDACの監査モードを有効化するには、PowerShellを使用してポリシーファイルを作成し、適用する必要があります。以下の手順に従って、PowerShellスクリプトを実行してください。

1. 監査モードの基本ポリシーを作成

まず、WDACの監査モードポリシーを作成するために、PowerShellで次のコマンドを実行します。

$PolicyPath = "C:\WDAC\AuditModePolicy.xml"
New-CIPolicy -FilePath $PolicyPath -Level SignedVersion -UserPEs 3 -ScanPath C:\Windows -Audit

このコマンドの意味:

  • New-CIPolicy: WDACの新しいポリシーを作成
  • -FilePath: ポリシーファイルを保存するパス
  • -Level SignedVersion: 署名付きのアプリケーションを基準にポリシーを作成
  • -UserPEs 3: ユーザーモードのPEファイル(実行可能ファイル)を含める
  • -ScanPath C:\Windows: C:\Windows ディレクトリをスキャン対象にする
  • -Audit: 監査モードでポリシーを適用

2. 監査モードポリシーをバイナリ形式に変換

作成したXML形式のポリシーファイルを、Windowsが読み込めるバイナリ形式 (.bin) に変換します。

ConvertFrom-CIPolicy -XmlFilePath $PolicyPath -BinaryFilePath "C:\WDAC\AuditModePolicy.bin"

3. 監査モードポリシーをシステムに適用

ポリシーファイルを適用するために、C:\Windows\System32\CodeIntegrity\ フォルダにコピーします。

Copy-Item -Path "C:\WDAC\AuditModePolicy.bin" -Destination "C:\Windows\System32\CodeIntegrity\SIPolicy.p7b"

システムを再起動すると、WDACの監査モードが有効になります。

4. 監査モードの適用状況を確認

WDACのポリシーが適用されたか確認するには、以下のコマンドを実行します。

Get-SystemDriver -Verbose

また、ポリシーの詳細を確認する場合は、以下のコマンドで適用済みのポリシーを一覧表示できます。

Get-CIPolicy -FilePath "C:\Windows\System32\CodeIntegrity\SIPolicy.p7b"

次のステップ

監査モードを有効化したら、イベントログを使用してどのアプリケーションがブロックされるかを確認できます。次のセクションでは、ログの確認方法とイベントビューアの活用について詳しく解説します。

ログの確認方法とイベントビューアの活用

WDACの監査モードを有効化すると、ブロック対象となるアプリケーションがイベントログに記録されます。これを活用することで、どのアプリケーションがポリシーに違反しているのかを把握し、必要な修正を加えることができます。

1. イベントビューアを使用したログの確認

WDACの監査ログは、Windowsのイベントビューア (Event Viewer) に記録されます。以下の手順でログを確認できます。

  1. [スタート]メニューを開く
  2. 「イベントビューア」と入力し、起動する
  3. 「アプリケーションとサービスログ」 → 「Microsoft」 → 「Windows」 → 「CodeIntegrity」 を展開
  4. 「Operational」ログを開く

このログには、監査モードで検出されたアプリケーションの情報が記録されます。

2. PowerShellを使用したイベントログの取得

イベントビューアを手動で開かなくても、PowerShellを使用してWDACの監査ログを取得することができます。以下のコマンドを実行すると、直近の監査イベントを表示できます。

Get-WinEvent -LogName "Microsoft-Windows-CodeIntegrity/Operational" | Select-Object -First 10

また、特定のエラーイベント(イベントID 3076 や 3089)を検索する場合は、以下のコマンドを使用します。

Get-WinEvent -LogName "Microsoft-Windows-CodeIntegrity/Operational" | Where-Object {$_.Id -eq 3076}

3. ログの内容の解釈

イベントログには、ブロックされたアプリケーションの詳細が記録されています。以下のような情報が含まれます。

  • Event ID 3076:ポリシー違反が記録されたアプリケーション(監査モード)
  • Event ID 3089:WDACポリシーがシステムで適用されたことを示す
  • Event ID 3023:許可されていないアプリケーションが実行されようとした

典型的なログの例:

Event ID: 3076
Source: Microsoft-Windows-CodeIntegrity
Message: Code Integrity determined that a process attempted to load an unsigned file
File Name: C:\Program Files\ExampleApp\example.exe

この場合、example.exe はWDACのポリシーにより「未署名」と判断され、監査ログに記録されています。

4. 監査結果をCSVファイルにエクスポート

複数の監査ログを取得して、エクセルなどで分析したい場合は、CSVファイルにエクスポートすることができます。

Get-WinEvent -LogName "Microsoft-Windows-CodeIntegrity/Operational" | Export-Csv -Path "C:\WDAC_Audit_Log.csv" -NoTypeInformation

このCSVファイルを使えば、どのアプリケーションがブロック対象となるか、事前に精査することができます。

次のステップ

監査ログを確認したら、許可すべきアプリケーションを把握し、ポリシーを適切に修正する必要があります。次のセクションでは、互換性チェックのポイントについて詳しく解説します。

互換性チェックのポイント

WDACの監査モードを有効化した後、システム内でどのアプリケーションがブロック対象となるのかを確認し、必要な調整を行うことが重要です。ここでは、互換性チェックのポイントと、許可すべきアプリケーションの特定方法について解説します。

1. 監査ログからブロック対象のアプリケーションを特定

前のセクションで説明したイベントログの取得方法を利用し、監査ログを解析します。特に、Event ID 3076 や 3023 に注目し、WDACポリシーによりブロック対象となるアプリケーションを特定します。

PowerShellを使用して、ブロックされたアプリの一覧を取得するには、以下のコマンドを実行します。

Get-WinEvent -LogName "Microsoft-Windows-CodeIntegrity/Operational" | Where-Object {$_.Id -eq 3076} | Format-Table TimeCreated, Message -AutoSize

この出力を分析し、ブロックされた実行ファイル (.exe や .dll など) のパスを確認します。

2. 許可すべきアプリケーションの判断基準

監査ログに記録されたアプリケーションが、組織やシステムにとって必要不可欠なものであるかどうかを以下の基準で判断します。

  • 公式のベンダー製か?(Microsoft、Adobe、企業が導入した業務用アプリケーションなど)
  • デジタル署名があるか?(署名付きアプリは許可しやすい)
  • 業務上、必須のアプリケーションか?(生産性に影響があるかどうか)
  • 不要なプログラムではないか?(不要なソフトウェアやリスクのあるツールを誤って許可しない)

デジタル署名の確認方法
ブロックされたアプリケーションのデジタル署名を確認するには、以下のコマンドを使用します。

Get-AuthenticodeSignature "C:\Program Files\ExampleApp\example.exe"

出力結果の Status が Valid であれば、署名が正しく適用されています。署名がない (NotSigned) アプリケーションは、特別な許可が必要になります。

3. 許可リスト(ホワイトリスト)の作成

互換性チェックが完了したら、ポリシーを修正し、必要なアプリケーションを許可する設定を行います。特定のアプリケーションや証明書を許可する方法には以下の3つがあります。

(1)アプリケーションのパスベースで許可


特定の実行ファイル (.exe) を許可するには、WDACポリシーにパスを追加します。

$PolicyPath = "C:\WDAC\AuditModePolicy.xml"
Set-CIPolicyRule -FilePath $PolicyPath -Rule FilePathRule -Value "C:\Program Files\ExampleApp\example.exe"

(2)デジタル署名を基に許可


特定のベンダーのアプリケーション(Microsoft、Adobeなど)を許可する場合は、証明書ベースのルールを追加します。

Set-CIPolicyRule -FilePath $PolicyPath -Rule SignedVersion

(3)ハッシュベースで許可


署名がないアプリケーションを許可する場合、ファイルのハッシュを使用して許可できます。

$Hash = Get-FileHash "C:\Program Files\ExampleApp\example.exe" -Algorithm SHA256
Set-CIPolicyRule -FilePath $PolicyPath -Rule Hash -Value $Hash.Hash

4. ポリシーの適用と再テスト

新しいポリシーを適用したら、再度監査モードで動作確認を行い、ブロックされるアプリケーションがないかをチェックします。許可漏れがないかを確認し、最終的に強制モードに移行するかどうかを決定します。

次のステップ

ここまでで、監査モードを活用して互換性をチェックし、適切なポリシー調整を行う方法を学びました。次のセクションでは、監査モードから強制モードへの移行について詳しく解説します。

監査モードから強制モードへの移行

WDACの監査モードで十分な動作検証を行った後、ポリシーを強制モード (Enforced Mode) に移行することで、許可されていないアプリケーションの実行を完全にブロックできます。ここでは、安全に強制モードへ移行するための手順と考慮すべきポイントを解説します。

1. 監査モードでの最終チェック

強制モードに移行する前に、監査ログを確認し、ブロックされるアプリケーションが問題ないかを最終チェックします。以下のPowerShellコマンドを実行し、ブロック対象のアプリがないか確認してください。

Get-WinEvent -LogName "Microsoft-Windows-CodeIntegrity/Operational" | Where-Object {$_.Id -eq 3076} | Format-Table TimeCreated, Message -AutoSize

また、ポリシー適用後の影響を最小限にするため、特定の業務アプリケーションを許可リスト (ホワイトリスト) に追加することを推奨します。(前のセクション「互換性チェックのポイント」参照)

2. 強制モード用のポリシーファイルの作成

監査モードから強制モードへ移行するには、現在の監査モードポリシーを強制モードに変換する必要があります。以下の手順でバイナリポリシーを作成します。

$PolicyPath = "C:\WDAC\EnforcedPolicy.xml"
Set-CIPolicySetting -FilePath $PolicyPath -Option Enabled:Enforce

上記のコマンドにより、ポリシーファイルが監査モードから強制モードに変更されます。

次に、バイナリ形式に変換します。

ConvertFrom-CIPolicy -XmlFilePath $PolicyPath -BinaryFilePath "C:\WDAC\EnforcedPolicy.bin"

3. 強制モードのポリシーを適用

作成した強制モードポリシーをシステムのCodeIntegrityフォルダに配置し、システムに適用します。

Copy-Item -Path "C:\WDAC\EnforcedPolicy.bin" -Destination "C:\Windows\System32\CodeIntegrity\SIPolicy.p7b"

適用後、システムを再起動するとWDACの強制モードが有効になります。

4. 強制モード適用後の確認

システム再起動後、イベントビューアやPowerShellで適用状況を確認します。

Get-SystemDriver -Verbose

また、特定のアプリケーションがブロックされていないかをイベントログで確認します。

Get-WinEvent -LogName "Microsoft-Windows-CodeIntegrity/Operational" | Where-Object {$_.Id -eq 3023}

このログに必要なアプリケーションがブロックされた記録が残っていた場合、ポリシーを修正し、必要なアプリケーションを許可する設定を追加してください。

5. トラブルシューティングの準備

強制モードを有効にすると、ポリシーで許可されていないアプリは完全にブロックされるため、緊急時の対応手段を用意しておくことが重要です。

  • ポリシーを一時的に無効化する方法
    万が一、強制モードの影響で重要なアプリが動作しなくなった場合、セーフモードで起動し、ポリシーファイルを削除することでWDACを無効化できます。
  1. PCをセーフモードで起動
  2. PowerShellを管理者モードで実行
  3. 以下のコマンドでポリシーファイルを削除
  Remove-Item -Path "C:\Windows\System32\CodeIntegrity\SIPolicy.p7b" -Force
  1. システムを再起動し、ポリシーを再設定

6. 強制モード運用のベストプラクティス

強制モードを安定して運用するために、以下のポイントを押さえておきましょう。

  • 監査モードで十分に検証してから移行する
  • ポリシー適用前に、許可すべきアプリをすべてホワイトリストに追加する
  • バックアップ用の回復手段(セーフモードからの解除方法など)を準備しておく
  • イベントログを定期的に確認し、新しいアプリがブロックされていないかをチェックする

次のステップ

これで監査モードから強制モードへ移行する方法を学びました。しかし、強制モードを適用すると予期せぬ問題が発生することがあります。次のセクションでは、よくあるトラブルシューティングについて解説します。

よくあるトラブルシューティング

WDACの強制モードを適用すると、特定のアプリケーションが実行できなくなる、システムの挙動が変わるなどの問題が発生する可能性があります。ここでは、よくあるトラブルとその解決策について解説します。

1. 重要なアプリケーションがブロックされる

症状:
WDACの強制モードを有効にした後、一部の業務アプリケーションが起動できなくなる。

解決策:
イベントビューアでブロックされたアプリを確認し、許可リストに追加する。

① ブロックされたアプリを特定

Get-WinEvent -LogName "Microsoft-Windows-CodeIntegrity/Operational" | Where-Object {$_.Id -eq 3076} | Format-Table TimeCreated, Message -AutoSize

② 必要なアプリを許可リストに追加

Set-CIPolicyRule -FilePath "C:\WDAC\EnforcedPolicy.xml" -Rule FilePathRule -Value "C:\Program Files\ExampleApp\example.exe"

③ ポリシーを再適用

ConvertFrom-CIPolicy -XmlFilePath "C:\WDAC\EnforcedPolicy.xml" -BinaryFilePath "C:\WDAC\EnforcedPolicy.bin"
Copy-Item -Path "C:\WDAC\EnforcedPolicy.bin" -Destination "C:\Windows\System32\CodeIntegrity\SIPolicy.p7b"
Restart-Computer

2. Windowsが正常に起動しない

症状:
WDACを強制モードにした後、Windowsの起動時にエラーが発生し、ログインできない。

解決策:
セーフモードで起動し、WDACのポリシーを削除する。

① セーフモードでPCを起動(Shiftキーを押しながら再起動)
② PowerShellを管理者モードで開く
③ 以下のコマンドを実行し、ポリシーファイルを削除

Remove-Item -Path "C:\Windows\System32\CodeIntegrity\SIPolicy.p7b" -Force

④ PCを再起動し、ポリシーを修正

3. ドライバーが読み込まれない

症状:
WDACを有効化した後、一部のデバイスドライバーが読み込まれず、周辺機器が使用できない。

解決策:
ドライバーの署名を確認し、許可リストに追加する。

① 署名の確認

Get-AuthenticodeSignature "C:\Windows\System32\drivers\example.sys"

② 証明書ベースでドライバーを許可

Set-CIPolicyRule -FilePath "C:\WDAC\EnforcedPolicy.xml" -Rule SignedVersion

③ ポリシーを再適用し、システムを再起動

4. 新しいアプリをインストールできない

症状:
強制モードを適用した後、新しいアプリケーションのインストールができなくなった。

解決策:
一時的に監査モードに戻して、許可するアプリをリストアップ。

① 監査モードのポリシーに変更

Set-CIPolicySetting -FilePath "C:\WDAC\EnforcedPolicy.xml" -Option Enabled:Audit
ConvertFrom-CIPolicy -XmlFilePath "C:\WDAC\EnforcedPolicy.xml" -BinaryFilePath "C:\WDAC\AuditModePolicy.bin"
Copy-Item -Path "C:\WDAC\AuditModePolicy.bin" -Destination "C:\Windows\System32\CodeIntegrity\SIPolicy.p7b"
Restart-Computer

② インストール後、アプリケーションを許可リストに追加し、再び強制モードに戻す。

5. WDACのポリシーをリセットしたい

症状:
WDACのポリシーを適用したが、元の状態に戻したい。

解決策:
以下の手順でポリシーを削除し、リセットする。

Remove-Item -Path "C:\Windows\System32\CodeIntegrity\SIPolicy.p7b" -Force
Restart-Computer

この操作後、WDACの設定は無効化され、初期状態に戻ります。

まとめ

WDACの強制モードを適用すると、アプリケーションやドライバーの実行制限が厳しくなるため、問題が発生する可能性があります。監査モードで十分にテストを行い、影響を把握してから適用することが重要です。次のセクションでは、本記事のまとめを解説します。

まとめ

本記事では、PowerShellを使用してWindows Defender Application Control (WDAC) の監査モードを有効化し、互換性をチェックする方法を詳しく解説しました。

この記事で学んだポイント

  • WDACとは何か:アプリケーションの実行を制御し、セキュリティを強化する機能
  • 監査モードと強制モードの違い:監査モードでログを確認し、互換性をチェックしてから強制モードへ移行
  • PowerShellを使った監査モードの有効化:スクリプトを使用してポリシーファイルを作成・適用
  • イベントログの活用:監査モードでブロックされたアプリを特定し、適切な許可リストを作成
  • 強制モードへの移行とトラブルシューティング:安全にポリシーを適用し、問題が発生した際の対処法

最後に

WDACを適切に導入することで、セキュリティを強化しながらも業務に影響を与えない環境を構築できます。まずは監査モードを活用して慎重にテストを行い、許可リストを作成した後に強制モードへ移行することを推奨します。

本記事を参考にして、Windows環境のセキュリティ向上に役立ててください。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次