次の方法で共有


WDAC のデバッグとトラブルシューティング

Windows Defender アプリケーションコントロールの一部の機能は、特定の Windows バージョンでのみ使用できます。 Windows Defender アプリケーション制御機能の可用性について詳しくは、こちらをご覧ください。

この記事では、Windows Defender アプリケーション制御 (WDAC) を使用するときにアプリとスクリプトのエラーをデバッグしてトラブルシューティングする方法について説明します。

1 - WDAC 診断データを収集する

WDAC の問題をデバッグしてトラブルシューティングする前に、問題の動作を示すデバイスから情報を収集する必要があります。

管理者特権の PowerShell ウィンドウから次のコマンドを実行して、必要な診断情報を収集します。

  1. 一般的な WDAC 診断データを収集し、%userprofile%\AppData\Local\Temp\DiagOutputDir\CiDiag にコピーします。

    cidiag.exe /stop
    

    CiDiag.exe が Windows のバージョンに存在しない場合は、次の情報を手動で収集します。

  2. デバイスのシステム情報を CiDiag フォルダーに保存します。

    msinfo32.exe /report $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\SystemInformation.txt
    
  3. CiTool.exe を使用して、デバイス上の WDAC ポリシーの一覧をインベントリします。 CiTool.exe が Windows のバージョンに存在しない場合は、この手順をスキップします。

    citool.exe -lp -json > $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\CiToolOutput.json
    
  4. AppLocker レジストリ キー データを CiDiag フォルダーにエクスポートします。

    reg.exe query HKLM\Software\Policies\Microsoft\Windows\SrpV2 /s > $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerRegistry.txt; reg.exe query HKLM\Software\Policies\Microsoft\Windows\AppidPlugins /s >> $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerRegistry.txt; reg.exe query HKLM\System\CurrentControlSet\Control\Srp\ /s >> $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerRegistry.txt
    

    指定したレジストリ キーまたは値がシステムで見つからなかったというエラーが表示される場合があります。 このエラーは問題を示すので、無視できます。

  5. %windir%System32\AppLocker から CiDiag フォルダーに AppLocker ポリシー ファイルをコピーします。

    Copy-Item -Path $env:windir\System32\AppLocker -Destination $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\ -Recurse -Force -ErrorAction Ignore
    
  6. 前の手順で収集した AppLocker ポリシー ファイルのファイル情報を収集します。

    Get-ChildItem -Path $env:windir\System32\AppLocker\ -Recurse | select Mode,LastWriteTime,CreationTime,Length,Name >> $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerPolicyFiles.txt
    
  7. 有効な AppLocker ポリシーをエクスポートします。

    Get-AppLockerPolicy -xml -Effective > $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLocker.xml
    
  8. AppLocker サービスの構成と状態の情報を収集します。

    sc.exe query appid > $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerServices.txt; sc.exe query appidsvc >> $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerServices.txt; sc.exe query applockerfltr >> $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerServices.txt
    

コア WDAC イベント ログ

WDAC イベントは、次の 2 つの場所で生成されます。

  • アプリケーションとサービスのログ - Microsoft - Windows - CodeIntegrity - Operational
  • アプリケーションとサービスのログ - Microsoft - Windows - AppLocker - MSI とスクリプト

CiDiag 出力ディレクトリ内では、これらのイベント ログはそれぞれ CIOperational.evtx と ALMsiAndScript.evtx と呼ばれます。

役に立つ可能性があるその他の Windows イベント ログ

場合によっては、コア WDAC イベント ログに含まれる情報を、これらの他のイベント ログにある情報で補完できる場合があります。 CIDiag.exe は 斜体で示されたものを収集しません。

  • アプリケーションとサービス のログ - Microsoft - Windows - CodeIntegrity - Verbose
  • アプリケーションとサービス のログ - Microsoft - Windows - AppLocker - EXE と DLL
  • アプリケーションとサービス のログ - Microsoft - Windows - AppLocker - パッケージ化されたアプリの展開
  • アプリケーションとサービスのログ - Microsoft - Windows - AppLocker - パッケージ化されたアプリの実行
  • アプリケーションとサービスのログ - Microsoft - Windows - AppID - 運用
  • アプリケーションとサービス のログ - Microsoft - Windows - CAPI2 - 運用
  • アプリケーションとサービス のログ - Microsoft - Windows - DeviceGuard - 運用
  • アプリケーションとサービスのログ - Microsoft - Windows - PowerShell - *
  • Windows - アプリケーション
  • Windows - システム

2 - 診断データとログ データを使用して問題を特定する

デバイスから必要な診断情報を収集したので、前のセクションで収集した診断データの分析を開始する準備ができました。

  1. アクティブで適用される WDAC ポリシーのセットを確認します。 アクティブになると予想されるポリシーのみが現在アクティブであることを確認します。 アクティブになっている可能性がある Windows 受信トレイ ポリシー に注意してください。 次のいずれかの方法を使用できます。

  2. Applications and Services ログ ( Microsoft - Windows - CodeIntegrity - Operational) にあるコア WDAC イベント ログから、実行可能ファイル、dll、ドライバーのブロック イベントを確認します。 CIDiag 出力ディレクトリ内では、このイベント ログは CIOperational.evtx と呼ばれます。 原因不明または予期しないブロックを調査するには、ブロック イベントとその関連する 3089 署名の詳細イベントの情報を使用します。 参照については、この記事で後述するブロックされた実行可能ファイルの例を参照してください。

  3. パッケージ化されたアプリ、MSI インストーラー、スクリプト、および COM オブジェクトのブロック イベントを、Applications and Services ログ ( Microsoft - Windows - AppLocker - MSI とスクリプト) にあるコア スクリプト適用イベント ログから確認します。 CIDiag 出力ディレクトリ内では、このイベント ログは ALMsiAndScript.evtx と呼ばれます。 原因不明または予期しないブロックを調査するには、ブロック イベントとその関連する 8038 署名詳細イベントの情報を使用します。

アプリやスクリプトのエラーなど、WDAC に関連するほとんどの問題は、前の手順を使用して診断できます。

ブロックされた実行可能ファイルの例のイベント分析

一般的な WDAC 強制モード ブロック イベント 3077 の詳細な EventData の例と、関連付けられた 3089 署名情報イベントの 1 つを次に示します。 各イベントのスクリーンショットに続くテーブルには、イベントに含まれる要素の一部が記述されています。 イベントの説明に従って、イベントを使用してブロックが発生した理由を理解する方法を説明するステップバイステップのチュートリアルです。

イベント 3077 - WDAC 強制ブロック イベント

例 3077 PowerShell.exe のブロック イベント。

要素名 説明
システム - 相関関係 - [ActivityID] スクリーンショットに表示されない
相関 ActivityID を使用して、WDAC ブロック イベントを 1 つ以上の 3089 署名イベントと照合します。
ファイル名 実行がブロックされたディスク上のファイルのパスと名前。 ディスク上の名前は変更可能であるため、この値は を使用して WDAC ファイル 規則-Level FileNameを作成するときに使用される値ではありません。 代わりに、この表の後半の OriginalFileName 要素を参照してください。
プロセス名 ブロックされたファイルを実行しようとしたファイルのパスと名前。 親プロセスとも呼ばれます。
要求された署名レベル 実行するために渡す必要があるコードの Windows 署名承認レベル。 「要求済みおよび検証済みの署名レベル」を参照してください。
検証済みの署名レベル コードが指定された Windows 署名承認レベル。 「要求済みおよび検証済みの署名レベル」を参照してください。
状態 状態コードをWindows NTします。 を使用 certutil.exe -error <status> して、状態コードの意味を検索できます。
SHA1 ハッシュ ブロックされたファイルの SHA1 Authenticode ハッシュ。
SHA256 ハッシュ ブロックされたファイルの SHA256 Authenticode ハッシュ。
SHA1 フラット ハッシュ ブロックされたファイルの SHA1 フラット ファイル ハッシュ。
SHA256 フラット ハッシュ ブロックされたファイルの SHA256 フラット ファイル ハッシュ。
PolicyName ブロック イベントの原因となった WDAC ポリシーのフレンドリ名。 ファイルの実行をブロックするポリシーごとに、個別の 3077 ブロック イベント (または 3076 監査ブロック イベント) が表示されます。
PolicyId ブロック イベントの原因となった WDAC ポリシーのフレンドリ ID 値。
PolicyHash ブロック イベントの原因となった WDAC ポリシー バイナリの SHA256 Authenticode ハッシュ。
OriginalFileName ブロックされたファイルのリソース ヘッダーに開発者が設定する変更できないファイル名。 この値は、 を使用して WDAC ファイル ルール -Level FileNameを作成するときに使用される値です。
InternalName ブロックされたファイルのリソース ヘッダーで開発者によって設定されるもう 1 つの変更できない値。 この値は、ファイル ルールの OriginalFileName に 置き -Level FileName -SpecificFileNameLevel InternalName換えることができます。
FileDescription ブロックされたファイルのリソース ヘッダーで開発者によって設定されるもう 1 つの変更できない値。 この値は、ファイル ルールの OriginalFileName に 置き -Level FileName -SpecificFileNameLevel FileDescription換えることができます。
ProductName ブロックされたファイルのリソース ヘッダーで開発者によって設定されるもう 1 つの変更できない値。 この値は、ファイル ルールの OriginalFileName に 置き -Level FileName -SpecificFileNameLevel ProductName換えることができます。
FileVersion 署名済みポリシーのバージョン制御を適用するために使用されるポリシーの VersionEx 値。
PolicyGUID ブロック イベントの原因となった WDAC ポリシーの PolicyId。
UserWriteable ファイルがユーザーが書き込み可能な場所にあったかどうかを示すブール値。 この情報は、FilePath 規則で許可する場合の問題の診断に役立ちます。
PackageFamilyName ブロックされたファイルを含むパッケージ アプリ (MSIX) のパッケージ ファミリ名。

イベント 3089 - WDAC 署名情報イベント

PowerShell.exe の例 3089 署名情報イベント。

要素名 説明
システム - 相関関係 - [ActivityID] 相関 ActivityID を使用して、WDAC 署名イベントとそのブロック イベントを照合します。
TotalSignatureCount ブロックされたファイルに対して検出された署名の合計数。
署名 この 3089 イベントに示されている現在の署名のインデックス数は 0 から始まります。 ファイルに複数の署名がある場合は、他の署名の他の 3089 イベントが見つかります。
Hash WDAC がファイルの照合に使用したハッシュ値。 この値は、3077 または 3076 ブロック イベントに表示される 4 つのハッシュのいずれかと一致する必要があります。 ファイルにシグネチャが見つからなかった場合 (TotalSignatureCount = 0)、ハッシュ値のみが表示されます。
SignatureType 署名の種類
ValidatedSigningLevel 署名が満たされた Windows 署名承認レベル。 「要求済みおよび検証済みの署名レベル」を参照してください。
VerificationError この特定の署名が WDAC ポリシーに合格しなかった理由。 「VerificationError」を参照してください。
PublisherName リーフ証明書からの共通名 (CN) 値。
IssuerName 証明書チェーンで使用可能な最高の証明書からの CN 値。 このレベルは通常、ルートの下の 1 つの証明書です。
PublisherTBSHash リーフ証明書の TBS ハッシュ。
IssuerTBSHash 証明書チェーンで使用可能な最高の証明書の TBS ハッシュ。 このレベルは通常、ルートの下の 1 つの証明書です。

例 3077 イベントと 3089 イベントの詳細なチュートリアル

次に、例 3077 イベントと 3089 イベントのイベント データを使用して、WDAC ポリシーがこのファイルをブロックした理由を理解する方法について説明します。

ブロックされているファイルとブロック コンテキストを理解する

3077 イベントを参照して、ポリシー、ブロックされているファイル、およびポリシーを実行しようとした親プロセスを識別する情報を見つけます。 このコンテキスト情報を検討して、ブロックが予期され、必要かどうかを判断します。

この例では、ブロックされているファイルが PowerShell.exe されています。これは Windows の一部であり、通常は実行されることが想定されています。 ただし、この場合、ポリシーは、攻撃対象領域を制限する方法としてスクリプト ホストの実行を許可しない、S モードの Windows ポリシー テンプレートに基づいていました。 S モードの場合、このブロック イベントは成功です。 ただし、ポリシー作成者がテンプレートを選択したときに、その制約を認識していなかったと仮定し、このブロックを予期しないものとして扱ってみましょう。

WDAC がファイルを拒否した理由を確認する

3077 イベントを参照すると、要求された署名レベル 2 が表示されます。これは、コードが WDAC ポリシーに合格する必要があるということです。 ただし、検証済み署名レベル 1 は、コードが署名されていないかのように扱われることを意味します。 "Unsigned" は、ファイルが本当に署名されていないが、無効な証明書で署名されているか、署名されているが WDAC ポリシーで許可されている証明書が存在しなかったことを意味する可能性があります。

次に、ブロックされたファイルの相関 3089 イベントを調べてみましょう。 この例では、複数の署名を持つファイルで見つかった最初の署名 (署名インデックス 0) のみを確認しています。 この署名の場合、ValidatedSigningLevel は 12 です。つまり、Microsoft Windows 製品署名があります。 21 の VerificationError は、署名が WDAC ポリシーに合格しなかったことを意味します。

各署名に異なる ValidatedSigningLevel と VerificationError が含まれる場合があるため、相関する 3089 イベントごとに情報を確認することが重要です。

重要

3077 イベントの検証済み署名レベルが、3089 イベントの ValidatedSigningLevel とは大きく異なる方法で解釈されていることに注目してください。

3077 イベントの場合、検証済み署名レベルは、バイナリが実際に Windows によって処理された方法を示します。

一方、3089 イベントの場合、ValidatedSigningLevel は、署名が受け取る可能性のある 最大 レベルを示します。 署名が拒否された理由を理解するには、VerificationError を使用する必要があります。

3 - 一般的な問題を解決する

WDAC 診断データを分析したら、問題を解決するための手順を実行したり、デバッグ手順をさらに実行したりできます。 一般的な問題と、根本問題の解決またはさらに特定を試みることができる手順を次に示します。

問題: 許可するファイルがブロックされました

  • コア WDAC イベント ログのデータを使用して、ブロックされたファイルを許可するルールを追加します。
  • ポリシーでマネージド インストーラーが信頼されている場合は、マネージド インストーラーを使用してファイルまたはアプリを再デプロイします。

問題: 予期しないポリシーがアクティブである

この条件は、次の場合に存在する可能性があります。

  • ポリシーは削除されましたが、システムは再起動されていません。
  • ポリシーは部分的に削除されましたが、ポリシーのコピーはシステムパーティションまたは EFI パーティションに存在します。
  • PolicyId {A244370E-44C9-4C06-B551-F6016E563076} (単一ポリシー形式) を持つポリシーが、アクティブ化前に複数ポリシー形式のポリシーの場所にコピーされ、ディスク上のポリシー バイナリが重複する結果になりました。 System パーティションと EFI パーティション内の SiPolicy.p7b ファイルと {A244370E-44C9-4C06-B551-F6016E563076}.cip ファイルの両方を確認します。
  • ポリシーがデバイスに誤って展開されました。
  • 管理者アクセス権を持つ攻撃者は、一部の重要なプロセスに対してサービス拒否を引き起こすポリシーを適用しました。

このような問題を解決するには、特定されたポリシーの WDAC ポリシーを削除する 手順に従います。

問題: 未処理のアプリエラーが発生しており、WDAC イベントが観察されない

一部のアプリでは、ユーザー モードの WDAC ポリシーがアクティブな場合に動作が変更され、予期しないエラーが発生する可能性があります。 また、スクリプト ホストによって実装される適用動作を適切に処理しないアプリに対するスクリプトの適用の副作用になる可能性もあります。

次のアクションを実行して、根本原因を特定してみてください。

  • この記事のセクション 1 に記載されている他のイベント ログで、予期しないアプリのエラーに対応するイベントがないか確認します。
  • WDAC ポリシーを、スクリプトの適用と再テスト を無効にする別の ポリシーに一時的に置き換えます。
  • WDAC ポリシーを、 すべての COM オブジェクト と再テストを許可する別のポリシーに一時的に置き換えます。
  • WDAC ポリシーを、他のポリシー 規則を緩和して再テストする別の ポリシー に一時的に置き換えます。

問題: マネージド インストーラーによってデプロイされたアプリが動作しない

マネージド インストーラーを使用して問題をデバッグするには、次の手順を試してください。

  • アプリをブロックしている WDAC ポリシーに、マネージド インストーラーを有効にするオプションが含まれていることを確認します。
  • マネージド インストーラーによってデプロイされたアプリを自動的に許可する」の説明に従って、有効な AppLocker ポリシー $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLocker.xml が正しいことを確認します。
  • AppLocker サービスが実行されていることを確認します。 この情報は、この記事のセクション 1 で作成env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerServices.txt$ にあります。
  • MANAGEDINSTALLER という AppLocker ファイルが存在することを確認します。APPLOCKER は、先ほど作成した CiDiag フォルダーに存在します。 そうでない場合は、手順を繰り返して、マネージド インストーラー AppLocker 構成をデプロイして有効にします。
  • マネージド インストーラー プロセスを再起動し、PolicyName = MANAGEDINSTALLER を使用して、管理対象インストーラー プロセスの AppLocker - EXE および DLL イベント ログで 8002 イベントが観察されることをチェックします。 代わりに、PolicyName = MANAGEDINSTALLER で 8003 または 8004 のイベントが表示される場合は、AppLocker ポリシー XML で ManagedInstaller 規則をチェックし、ルールがマネージド インストーラー プロセスと一致することを確認します。
  • fsutil.exeを使用して 、マネージド インストーラー プロセスによって書き込まれたファイルに、マネージド インストーラーの配信元の拡張属性があることを確認します。 そうでない場合は、マネージド インストーラーを使用してファイルを再デプロイし、もう一度チェックします。
  • マネージド インストーラーを使用して、別のアプリのインストールをテストします。
  • 別のマネージド インストーラーを AppLocker ポリシーに追加し、他のマネージド インストーラーを使用してインストールをテストします。
  • マネージド インストーラーでアプリに既知の制限が発生しているかどうかを確認します。 その場合は、他の方法を使用してアプリを承認する必要があります。

問題: インテリジェント セキュリティ グラフ (ISG) で許可する必要があるアプリが機能していない

ISG を使用して問題をデバッグするには、次の手順を試してください。

  • アプリをブロックしている WDAC ポリシーに、インテリジェント セキュリティ グラフを有効にするオプションが含まれていることを確認します。
  • AppLocker サービスが実行されていることを確認します。 この情報は、この記事のセクション 1 で作成env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerServices.txt$ にあります。
  • fsutil.exeを使用して 、ファイルに ISG 配信元の拡張属性があることを確認します。 そうでない場合は、マネージド インストーラーを使用してファイルを再デプロイし、もう一度チェックします。
  • アプリで ISG に関する 既知の制限が発生しているかどうかを確認します。

4 - 必要に応じて Microsoft に問題を報告する

この記事で説明されているガイダンスに従った後で、製品の問題が特定されたと思われる場合は、問題を Microsoft に報告してください。

  • Microsoft Premier サポートをお持ちのお客様は、通常のチャネルを通じてサービス要求をログに記録する必要があります。
  • 他のすべてのお客様は、Windows フィードバック ハブを介して WDAC 製品チームに直接問題を報告できます。 [ セキュリティ] & [プライバシー - アプリケーション制御] カテゴリを選択して、問題が WDAC 製品チームに適切にルーティングされていることを確認します。

問題を報告するときは、次の情報を必ず入力してください。

  • 前に説明したすべての WDAC 診断データ
  • 可能であれば、ブロックされたファイル。
  • 問題を再現するための手順をクリアします。