注
App Control for Business の一部の機能は、特定の Windows バージョンでのみ使用できます。 アプリ コントロール機能の可用性に関する詳細情報。
この記事では、App Control for Business を使用する際のアプリとスクリプトのエラーのデバッグとトラブルシューティングの方法について説明します。
1 - アプリ コントロールの診断データを収集する
アプリ コントロールの問題をデバッグおよびトラブルシューティングする前に、問題の動作を示すデバイスから情報を収集する必要があります。
管理者特権の PowerShell ウィンドウから次のコマンドを実行して、必要となる可能性のある診断情報を収集します。
一般的なアプリ コントロール診断データを収集し、%userprofile%\AppData\Local\Temp\DiagOutputDir\CiDiag にコピーします。
cidiag.exe /stopお使いのバージョンの Windows に CiDiag.exe が存在しない場合は、この情報を手動で収集します。
- Windows および EFI システム パーティションからのアプリ制御ポリシー バイナリ
- アプリ コントロールのイベント ログ
- AppLocker イベント ログ
- 他の Windows アプリやサービスからの有用な情報が含まれている可能性があるその他のイベント ログ
デバイスのシステム情報を CiDiag フォルダーに保存します。
msinfo32.exe /report $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\SystemInformation.txtCiTool.exe を使用して、デバイス上のアプリ コントロール ポリシーの一覧のインベントリを作成します。 お使いのバージョンの Windows に CiTool.exe が存在しない場合は、この手順をスキップします。
citool.exe -lp -json > $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\CiToolOutput.jsonAppLocker レジストリ キー データを 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注
システムが指定されたレジストリ キーまたは値を見つけることができなかったというエラーが表示される場合があります。 このエラーは問題を示すものではなく、無視しても問題ありません。
AppLocker ポリシー ファイルを %windir%System32\AppLocker から CiDiag フォルダーにコピーします。
Copy-Item -Path $env:windir\System32\AppLocker -Destination $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\ -Recurse -Force -ErrorAction Ignore前の手順で収集した AppLocker ポリシー ファイルのファイル情報を収集します。
Get-ChildItem -Path $env:windir\System32\AppLocker\ -Recurse | select Mode,LastWriteTime,CreationTime,Length,Name >> $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerPolicyFiles.txt有効な AppLocker ポリシーをエクスポートします。
Get-AppLockerPolicy -xml -Effective > $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLocker.xmlAppLocker サービスの構成と状態情報を収集します。
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
コア アプリ コントロール イベント ログ
App Control イベントは、次の 2 つの場所で生成されます。
- アプリケーションとサービスのログ - Microsoft - Windows - CodeIntegrity - 運用
- アプリケーションとサービスのログ - Microsoft - Windows - AppLocker - MSI とスクリプト
CiDiag 出力ディレクトリ内では、これらのイベント ログはそれぞれ CIOperational.evtx と ALMsiAndScript.evtx と呼ばれます。
役立つかもしれないその他の Windows イベント ログ
場合によっては、コア アプリ コントロール イベント ログに含まれる情報を、これらの他のイベント ログにある情報で補足できる場合があります。 CiDiag.exe は 斜体で表示されている値は収集しません。
- アプリケーションとサービスのログ - Microsoft - Windows - CodeIntegrity - 詳細
- アプリケーションとサービスのログ - 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 - 診断データとログ データを使用して問題を特定する
デバイスから必要な診断情報を収集したら、前のセクションで収集した診断データの分析を開始する準備が整いました。
アクティブで適用されているアプリ コントロール ポリシーのセットを確認します。 現在、アクティブになると予想されるポリシーのみがアクティブであることを確認します。 アクティブな可能性のある Windows 受信トレイ ポリシー にも注意してください。 以下の 2 つの方法を使用できます。
- CiToolOutput.jsonとして CiDiag 出力ディレクトリに保存された CiTool.exe -lp からの出力を確認します (該当する場合)。 「 Microsoft Edge を使用して書式設定された json ファイルを表示する」を参照してください。
- [アプリケーションとサービス] のログ - Microsoft - Windows - CodeIntegrity - Operational にあるコア アプリ コントロール イベント ログから、すべてのポリシーのアクティブ化イベントを確認します。 CiDiag 出力ディレクトリ内では、このイベント ログは CIOperational.evtx と呼ばれます。
「アプリケーションとサービスのログ - Microsoft - Windows - CodeIntegrity - 運用可能」にあるコア アプリ コントロール イベント ログから、実行可能ファイル、dll およびドライバーのブロック イベントを確認します。 CiDiag 出力ディレクトリ内では、このイベント ログは CIOperational.evtx と呼ばれます。 ブロック イベントとそれに関連する 3089 署名詳細イベントからの情報を使用して、原因不明または予期しないブロックを調査します。 参考までに、この記事で後述するブロックされた実行可能ファイルの例を参照してください。
「アプリケーションとサービス ログ - Microsoft - Windows - AppLocker - MSI およびスクリプト」にあるコア スクリプト強制イベント ログから、パッケージ アプリ、MSI インストーラー、スクリプト、および COM オブジェクトのブロック イベントを確認します。 CiDiag 出力ディレクトリ内では、このイベント ログは ALMsiAndScript.evtx と呼ばれます。 ブロック イベントとその相関関係のある 8038 署名詳細イベントからの情報を使用して、原因不明または予期しないブロックを調査します。
アプリやスクリプトのエラーなど、ほとんどのアプリ制御関連の問題は、上記の手順を使用して診断できます。
ブロックされた実行可能ファイルの例のイベント分析
一般的なアプリ コントロール強制モード ブロック イベント 3077 からの詳細な EventData の例と、関連する 3089 署名情報イベントの 1 つです。 各イベントのスクリーンショットの後ろにある表では、イベントに含まれる要素の一部について説明します。 イベントの説明に従って、ブロックが発生した理由を理解するためにイベントを使用する方法を説明するステップバイステップのチュートリアルがあります。
イベント 3077 - アプリ コントロール適用ブロック イベント
| 要素名 | 説明 |
|---|---|
| システム - 相関 - [ActivityID] |
スクリーンショットに表示されていません 関連付け ActivityID を使用して、アプリ コントロール ブロック イベントを 1 つ以上の 3089 署名イベントと照合します。 |
| ファイル名 | 実行がブロックされたディスク上のファイルのパスと名前。 ディスク上の名前は変更可能であるため、この値は、-Level FileName を使用してアプリ制御ファイル ルールを作成するときに使用される値ではありません。 代わりに、この表で後述する OriginalFileName 要素を参照してください。 |
| プロセス名 | ブロックされたファイルの実行を試行したファイルのパスと名前。 親プロセスとも呼ばれます。 |
| 要求された署名レベル | 実行するために渡す必要のあるコードの Windows 署名承認レベル。 「 要求され、検証された署名レベル」を参照してください。 |
| 署名レベルの検証 | コードが指定された Windows 署名承認レベル。 「 要求され、検証された署名レベル」を参照してください。 |
| 状態 | Windows NT 状態コード。
certutil.exe -error <status> を使用すると、状態コードの意味を調べることができます。 |
| SHA1 ハッシュ | ブロックされたファイルの SHA1 Authenticode ハッシュ。 |
| SHA256 ハッシュ | ブロックされたファイルの SHA256 Authenticode ハッシュ。 |
| SHA1 フラット ハッシュ | ブロックされたファイルの SHA1 フラット ファイル ハッシュ。 |
| SHA256 フラット ハッシュ | ブロックされたファイルの SHA256 フラット ファイル ハッシュ。 |
| PolicyName | ブロック イベントの原因となったアプリ制御ポリシーのフレンドリ名。 ファイルの実行をブロックするポリシーごとに、個別の 3077 ブロック イベント (または 3076 監査ブロック イベント) が表示されます。 |
| PolicyId | ブロック イベントを発生させたアプリ コントロール ポリシーのフレンドリ ID 値。 |
| PolicyHash | ブロック イベントの原因となったアプリ コントロール ポリシー バイナリの SHA256 Authenticode ハッシュ。 |
| OriginalFileName | ブロック ファイルのリソース ヘッダーで開発者によって設定された不変ファイル名。 この値は、 -Level FileName を使用してアプリ コントロール ファイル ルールを作成するときに使用される値です。 |
| InternalName | ブロックされるファイルのリソース ヘッダーで開発者によって設定されたもう 1 つの不変の値。 ファイル ルール内の OriginalFileName のこの値を -Level FileName -SpecificFileNameLevel InternalName に置き換えることができます。 |
| ファイルの説明 | ブロックされるファイルのリソース ヘッダーで開発者によって設定されたもう 1 つの不変の値。 ファイル ルール内の OriginalFileName のこの値を -Level FileName -SpecificFileNameLevel FileDescription に置き換えることができます。 |
| ProductName | ブロックされるファイルのリソース ヘッダーで開発者によって設定されたもう 1 つの不変の値。 ファイル ルール内の OriginalFileName のこの値を -Level FileName -SpecificFileNameLevel ProductName に置き換えることができます。 |
| FileVersion | 署名されたポリシーにバージョン管理を適用するために使用されるポリシーの VersionEx 値。 |
| PolicyGUID | ブロック イベントを発生させたアプリ コントロール ポリシーの PolicyId。 |
| UserWriteable | ファイルがユーザーによる書き込み可能な場所にあるかどうかを示すブール値。 この情報は、ファイルパス規則によって許可する際の問題を診断するのに役立ちます。 |
| PackageFamilyName | ブロックされたファイルを含むパッケージ アプリ (MSIX) のパッケージ ファミリ名。 |
イベント 3089 - アプリ コントロールの署名情報イベント
| 要素名 | 説明 |
|---|---|
| システム - 相関 - [ActivityID] | 関連付け ActivityID を使用して、アプリ コントロール署名イベントとそのブロック イベントを照合します。 |
| TotalSignatureCount | ブロックされたファイルで検出された署名の合計数。 |
| 署名 | この 3089 イベントに表示される現在の署名のインデックス カウント (0 から始まる)。 ファイルに複数の署名がある場合は、その他の署名の他の 3089 イベントが表示されます。 |
| Hash | App Control がファイルの照合に使用したハッシュ値。 この値は、3077 または 3076 ブロック イベントに表示される 4 つのハッシュのいずれかと一致する必要があります。 ファイルの署名が見つからなかった場合 (TotalSignatureCount = 0)、ハッシュ値のみが表示されます。 |
| SignatureType | 署名の種類。 |
| ValidatedSigningLevel | 署名が満たした Windows 署名承認レベル。 「 要求され、検証された署名レベル」を参照してください。 |
| VerificationError | この特定の署名がアプリ コントロール ポリシーに合格できなかった理由。 「VerificationError」を参照してください。 |
| 発行元名 | リーフ証明書の共通名 (CN) 値。 |
| 発行者名 | 証明書チェーン内にある最上位の利用可能な証明書からの CN 値。 このレベルは、通常、ルート下の 1 つの証明書です。 |
| PublisherTBSHash | リーフ証明書の TBS ハッシュ。 |
| 発行者TBSHash | 証明書チェーン内にある最上位の証明書の TBS ハッシュ。 このレベルは、通常、ルート下の 1 つの証明書です。 |
例の 3077 イベントと 3089 イベントのステップ バイ ステップ チュートリアル
それでは、例の 3077 イベントと 3089 イベントでイベント データを使用する方法を見て、アプリ コントロール ポリシーによってこのファイルがブロックされた理由を理解しましょう。
ブロックされているファイルとブロック コンテキストを理解する
3077 イベントを参照して、ポリシー、ブロックされているファイル、およびそのポリシーを実行しようとした親プロセスを識別する情報を見つけます。 このコンテキスト情報を考慮して、ブロックが予期されているかどうか、およびブロックが必要なかどうかを判断します。
この例では、ブロックされているファイルは PowerShell.exe です。これは Windows の一部であり、通常は実行されることが想定されます。 ただし、この場合のポリシーは S モードの Windows ポリシー テンプレートに基づいており、攻撃対象領域を制限する方法としてスクリプト ホストを実行することはできません。 S モードの場合、このブロック イベントは成功です。 ただし、ポリシーの作成者がテンプレートを選択したときにその制約に気付いていなかったと仮定し、このブロックを予期しないものとして扱います。
App Control がファイルを拒否した理由を特定する
もう一度 3077 イベントを参照すると、要求された署名レベル 2 は、コードがアプリ コントロール ポリシーに合格する必要があることを意味します。 ただし、検証済み署名レベル 1 は、コードが署名されていないかのように扱われたことを意味します。 "署名なし" は、ファイルが本当に署名されていない、署名されているが無効な証明書を使用している、または署名されているがアプリコントロール ポリシーで許可されている証明書がないことを意味する可能性があります。
次に、ブロックされたファイルの相関関係のある 3089 イベントを調べてみましょう。 この例では、複数の署名を含むファイルで見つかった最初の署名 (署名インデックス 0) のみを調べています。 この署名の場合、ValidatedSigningLevel は 12 です。これは、Microsoft Windows 製品署名があることを意味します。 VerificationError 21 は、署名がアプリ コントロール ポリシーに合格しなかったことを意味します。
各署名に異なる ValidatedSigningLevel と VerificationError が含まれる可能性があるため、相関する各 3089 イベントの情報を確認することが重要です。
重要
3077 イベントの検証済み署名レベルが、3089 イベントの ValidatedSigningLevel とはまったく異なる方法で解釈されることに注意してください。
3077 イベントの場合、検証済みの署名レベルは、バイナリが Windows によって実際にどのように処理されたかを示します。
一方、3089 イベントの場合は、ValidatedSigningLevel によって、署名が受け取る可能性のある 最大 レベルが示されます。 署名が拒否された理由を理解するには、VerificationError を使用する必要があります。
3 - 一般的な問題を解決する
アプリ コントロールの診断データを分析したら、問題を解決するための手順を実行するか、さらにデバッグ手順を実行できます。 以下に、一般的な問題と、根本的な問題を解決または分離するために試すことができる手順を示します。
問題: ファイルがブロックされたため、許可する
- コア アプリ コントロール イベント ログのデータを使用して、ブロックされたファイルを許可する規則を追加します。
- ポリシーがマネージド インストーラーを信頼している場合は、マネージド インストーラーを使用してファイルまたはアプリを再展開します。
問題: 予期しないアクティブなポリシーです
この状態は次の場合に存在する可能性があります。
- ポリシーは削除されましたが、システムは再起動されていません。
- ポリシーは部分的に削除されましたが、ポリシーのコピーがシステム パーティションまたは EFI パーティションのいずれかにまだ存在しています。
- PolicyId が {A244370E-44C9-4C06-B551-F6016E563076} (単一ポリシー形式) のポリシーが、アクティブ化前に複数ポリシー形式のポリシーの場所にコピーされたため、ディスク上にポリシー バイナリが重複しました。 システム パーティションと EFI パーティションに SiPolicy.p7b ファイルと {A244370E-44C9-4C06-B551-F6016E563076}.cip.cip ファイルがあるかどうかを確認します。
- ポリシーがデバイスに誤って展開されました。
- 管理者アクセス権を持つ悪意のある人物が、一部の重要なプロセスに対してサービス拒否を引き起こすポリシーを適用しています。
このような問題を解決するには、「識別されたポリシーの アプリ コントロール ポリシーを削除する 」の手順に従ってください。
問題: ハンドルされないアプリ エラーが発生しており、アプリ コントロール イベントは観察されません
一部のアプリでは、ユーザー モードのアプリ制御ポリシーがアクティブなときに動作が変更され、予期しないエラーが発生する可能性があります。 また、スクリプト ホストによって実装される強制動作を適切に処理しないアプリについては、スクリプト強制の副作用になる可能性もあります。
次のアクションを実行して、根本原因を特定します。
- この記事のセクション 1 に記載されている他のイベント ログで、予期しないアプリ エラーに対応するイベントがないか調べます。
- アプリ コントロール ポリシーを、スクリプトの適用と再テスト を無効にする 別のポリシーに一時的に置き換えます。
- App Control ポリシーを、 すべての COM オブジェクトと再テストを許可 する別のポリシーに一時的に置き換えます。
- App Control ポリシーを、他の ポリシー ルール を緩和する別のポリシーに一時的に置き換え、再テストします。
問題: マネージド インストーラーによってデプロイされたアプリが動作しない
マネージド インストーラーを使用して問題をデバッグするには、次の手順を実行します。
- アプリをブロックしているアプリ制御ポリシーに、マネージド インストーラーを有効にするオプションが含まれていることを確認します。
- 「 マネージド インストーラーによって展開されたアプリを自動的に許可する」で説明されているように、有効な 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 構成を展開して有効にします。
- マネージド インストーラー プロセスを再起動し、マネージド インストーラー プロセスの AppLocker - EXE および DLL イベント ログに PolicyName = MANAGEDINSTALLER で 8002 イベントが検出されていることをチェックします。 代わりに、PolicyName = MANAGEDINSTALLER の 8003 または 8004 のイベントが表示される場合は、AppLocker ポリシー XML で ManagedInstaller ルールチェックし、ルールがマネージド インストーラー プロセスと一致していることを確認してください。
- fsutil.exeを使用して 、マネージド インストーラー プロセスによって書き込まれたファイルにマネージド インストーラーの origin 拡張属性があることを確認します。 修復されていない場合は、マネージド インストーラーを使用してファイルを再デプロイし、もう一度チェックします。
- マネージド インストーラーを使用して別のアプリのインストールをテストします。
- AppLocker ポリシーに別のマネージド インストーラーを追加し、他のマネージド インストーラーを使用してインストールをテストします。
- マネー ジド インストーラーでアプリで既知の制限が発生していないか確認します。 その場合は、他の方法を使用してアプリを承認する必要があります。
問題: インテリジェント セキュリティ グラフ (ISG) が許可することを期待していたアプリが動作しない
ISG を使用して問題をデバッグするには、次の手順を実行します。
- アプリをブロックしているアプリ制御ポリシーに、インテリジェント セキュリティ グラフを有効にするオプションが含まれていることを確認します。
- AppLocker サービスが実行されていることを確認します。 この情報は、この記事のセクション 1 で作成された $env:USERPROFILE\AppData\Local\Temp\DiagOutputDir\CiDiag\AppLockerServices.txt にあります。
- fsutil.exeを使用して 、ファイルに ISG origin 拡張属性があることを確認します。 修復されていない場合は、マネージド インストーラーを使用してファイルを再デプロイし、もう一度チェックします。
- アプリで ISG の既知の制限が発生していないか確認します。
問題: アプリ コントロールまたは ISG を有効にした後、Microsoft Defender ウイルス対策がパッシブ モードになっている
ISG またはスマート アプリ コントロールを使用してアプリ コントロールを有効にすると、Microsoft Defender ウイルス対策をパッシブ モードまたはハイブリッド モードで実行できます。 この状態は、失敗ではなく、予期される動作です。 アプリ コントロールでは、コード実行の決定の一環として、Defender から提供された評判情報が使用されます。 この状態は、システム上での Defender の動作を変えることはありません。 ウイルス対策のリアルタイム保護は、選択したウイルス対策ソリューションによって引き続き提供されます。
Defender の動作モードをチェックするには、PowerShell で次のコマンドを実行し、AMRunningMode値を確認します。
Get-MpComputerStatus | Select-Object AMRunningMode
ISG またはスマート アプリ コントロールがオンになっている状態でアプリ コントロールを意図的に有効にした場合は、パッシブ モードまたはハイブリッド モードの値が必要です。 調査が必要なのは、ISG またはスマート アプリ コントロールでアプリ コントロールを有効にしておらず、このモードを予期していない場合、またはサード パーティのウイルス対策ソフトウェアもインストールされていない場合のみです。 その場合は、どのアプリ コントロール ポリシーがアクティブであるかを確認し、Microsoft Defender ウイルス対策とアプリ コントロールを確認します。
4 - 必要に応じて Microsoft に問題を報告する
この記事で説明するガイダンスを実行した後、製品の問題が特定されたと思われる場合は、問題を Microsoft に報告します。
- Microsoft Premier Support を使用しているお客様は、通常のチャネルを通じてサービス要求をログに記録する必要があります。
- その他のすべてのお客様は、Windows フィードバック Hub を使用して、App Control 製品チームに直接問題を報告できます。 [セキュリティ & プライバシー] - [アプリケーション制御] カテゴリを選択して、問題がアプリ コントロール製品チームに適切にルーティングされるようにします。
問題を報告する際は、必ず次の情報を提供してください。
- 前述のすべての アプリ コントロール診断データ 。
- 可能な場合は、ブロックされたファイル。
- 問題を再現するための明確な指示。