Windows Defender Application Control をサポートするためのカタログ ファイルを展開する
注
Windows Defender アプリケーションコントロールの一部の機能は、特定の Windows バージョンでのみ使用できます。 詳細については、「アプリケーション制御機能の可用性Windows Defender」を参照してください。
署名のプロセスが困難な署名されていない基幹業務 (LOB) アプリケーションがある場合、カタログ ファイルは、Windows Defender アプリケーション制御 (WDAC) の展開で重要になる可能性があります。 また、カタログ ファイルを使用して、その ISV によって署名されたすべてのコードを信頼したくない場合に、独立系ソフトウェア ベンダー (ISV) から取得するアプリに独自の署名を追加することもできます。 このようにして、カタログ ファイルは、WDAC で管理される環境で使用するアプリを "祝福" するための便利な方法を提供します。 また、元のソース コードにアクセスしたり、コストのかかる再パッケージ化を必要としたりすることなく、既存のアプリのカタログ ファイルを作成できます。
独自に使用するためにコード署名証明書を取得し、それを使用してカタログ ファイルに署名する必要があります。 次に、優先するコンテンツ展開メカニズムを使用して、署名されたカタログ ファイルを配布します。
最後に、署名証明書の WDAC ポリシーに署名者ルールを追加します。 その後、署名済みカタログ ファイルの対象となるアプリは、アプリが以前に署名されていない場合でも実行できます。 この基盤を使用すると、ほとんどのマルウェアが署名されていないため、署名されていないすべてのコードをブロックする WDAC ポリシーをより簡単に構築できます。
パッケージ インスペクターを使用してカタログ ファイルを作成する
既存のアプリのカタログ ファイルを作成するには、Windows に付属する Package Inspector というツールを使用できます。
パッケージ インスペクターを実行するコンピューターに 監査モード でポリシーを適用します。 パッケージ インスペクターでは、監査イベントを使用して、インストール プロセス中にコンピューターに追加および削除された一時インストール ファイルのハッシュをカタログ ファイルに含めます。 監査モード ポリシーでは、アプリのバイナリを許可 しない か、カタログ ファイルに必要な重要なファイルが見つからない可能性があります。
注
適用されたポリシーによってアプリの実行が既に許可されていない限り、ポリシーが適用されたシステムで実行されている場合、このプロセスを完了することはできません。
この PowerShell サンプルを使用して、DefaultWindows_Audit.xml テンプレートのコピーを作成できます。
Copy-Item -Path $env:windir\schemas\CodeIntegrity\ExamplePolicies\DefaultWindows_Audit.xml -Destination $env:USERPROFILE\Desktop\ $PolicyId = Set-CIPolicyIdInfo -FilePath $env:USERPROFILE\Desktop\DefaultWindows_Audit.xml -PolicyName "Package Inspector Audit Policy" -ResetPolicyID $PolicyBinary = $env:USERPROFILE+"\Desktop\"+$PolicyId.substring(11)+".cip"
次に、「スクリプトを使用してアプリケーション制御ポリシー Windows Defender展開する」の説明に従ってポリシーを適用します。
パッケージ インスペクターを起動して、アプリをインストールする ローカル ドライブ (ドライブ C など) でのファイルの作成を監視します。
PackageInspector.exe Start C:
重要
パッケージ インスペクターで監視しているドライブに書き込まれるすべてのファイルは、作成されたカタログに含まれます。 ドライブ上でファイルを実行および作成している可能性があるその他のプロセスに注意してください。
パッケージ インスペクターで見ているドライブにインストール メディアをコピーして、実際のインストーラーが最終的なカタログ ファイルに含まれるようにします。 この手順をスキップすると、 アプリ の実行を許可できますが、実際にはインストールできません。
アプリをインストールします。
アプリを起動して、初回起動時に作成されたファイルがカタログ ファイルに含まれていることを確認します。
通常どおりにアプリを使用して、通常の使用中に作成されたファイルがカタログ ファイルに含まれるようにします。 たとえば、一部のアプリでは、アプリ内の機能を最初に使用すると、より多くのファイルがダウンロードされる場合があります。 アプリにその機能がある場合は、アプリの更新プログラムもチェックしてください。
アプリケーションを閉じてもう一度開き、スキャンによってすべてのバイナリがキャプチャされていることを確認します。
必要に応じて、パッケージ インスペクターが引き続き実行されている状態で、カタログに含める他のアプリに対して前の手順を繰り返します。
前の手順が完了したことを確認したら、次のコマンドを使用してパッケージ インスペクターを停止します。 指定した場所にカタログ ファイルとカタログ定義ファイルを作成します。 カタログ ファイルの名前付け規則を使用して、デプロイされたカタログ ファイルを時間の経過と同時に管理しやすくします。 この例で使用するファイル名は 、LOBApp-Contoso.cat (カタログ ファイル) と LOBApp.cdf (定義ファイル) です。
パッケージ インスペクターを停止する最後のコマンドでは、パッケージ インスペクターで監視していたのと同じローカル ドライブ (例:
C:
) を指定してください。$ExamplePath=$env:userprofile+"\Desktop" $CatFileName=$ExamplePath+"\LOBApp-Contoso.cat" $CatDefName=$ExamplePath+"\LOBApp.cdf" PackageInspector.exe Stop C: -Name $CatFileName -cdfpath $CatDefName
注
パッケージ インスペクターは、検出された各ファイルのハッシュ値をカタログ化します。 スキャンされたアプリケーションが更新された場合は、このプロセスをもう一度完了して、新しいバイナリのハッシュ値を信頼します。
完了すると、ツールによってファイルがデスクトップに保存されます。 テキスト エディターでファイルを *.cdf
表示し、パッケージ インスペクターに含まれているファイルを確認できます。 ファイルを*.cat
ダブルクリックして、その内容を確認し、特定のファイル ハッシュのチェックすることもできます。
カタログ ファイルに署名する
アプリのカタログ ファイルを作成したので、署名する準備ができました。 カタログ署名には、Microsoft の信頼された署名 サービスを使用することをお勧めします。 必要に応じて、次の手順に従って Signtool を使用してカタログに手動で署名できます。
SignTool.exe を使ったカタログへの署名
コード署名証明書を購入した場合、または独自の公開キー 基盤 (PKI) から発行した場合は、SignTool.exe を使用してカタログ ファイルに署名できます。
あなたには必要です:
- SignTool.exe。 Windows ソフトウェア開発キット (SDK) にあります。
- 前に作成したカタログ ファイル。
- 内部証明機関 (CA) または購入したコード署名証明書から発行されたコード署名証明書。
カタログ ファイルの署名に使用するコード署名証明書については、署名ユーザーの個人用ストアにインポートします。 次に、次の各コマンドを管理者特権のWindows PowerShell セッションにコピーして、既存のカタログ ファイルに署名します。
使用する変数を初期化します。 必要に
$ExamplePath
応じて、 変数と$CatFileName
変数を置き換えます。$ExamplePath=$env:userprofile+"\Desktop" $CatFileName=$ExamplePath+"\LOBApp-Contoso.cat"
Signtool.exe を使ってカタログに署名します。
<path to signtool.exe> sign /n "ContosoSigningCert" /fd sha256 /v $CatFileName
注
変数は
<Path to signtool.exe>
、Signtool.exe ユーティリティへの完全なパスである必要があります。ContosoSigningCert
は、カタログ ファイルの署名に使用する証明書のサブジェクト名を表します。 この証明書は、カタログ ファイルへの署名を実行するコンピューター上にある個人用の証明書ストアにインポートする必要があります。Signtool.exe とその他のすべてのスイッチの詳細については、「 Sign Tool」を参照してください。
カタログ ファイルのデジタル署名を確認します。 カタログ ファイルを右クリックし、[プロパティ] を選択 します。 図 1 のように、[デジタル署名] タブで、sha256 アルゴリズムの署名証明書が存在することを確認します。
図 1。 署名証明書が存在することを確認します。
カタログ ファイルをマネージド エンドポイントにデプロイする
Windows のカタログ ファイルは、 の下に %windir%\System32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}
格納されます。
テスト目的で、署名されたカタログ ファイルをこのフォルダーに手動でコピーできます。 署名付きカタログ ファイルを大規模に展開するには、グループ ポリシー ファイルの基本設定またはエンタープライズ システム管理製品 (Microsoft Configuration Managerなど) を使用します。
グループ ポリシーを使用してカタログ ファイルを展開する
カタログ ファイルの管理を簡略化するために、グループ ポリシーの基本設定を使用して、カタログ ファイルをorganization内の適切なコンピューターに展開できます。
次のプロセスでは、Contoso カタログ ファイル GPO テストという GPO を使用して、LOBApp-Contoso.cat という署名付きカタログ ファイルを WDAC 対応 PC と呼ばれるテスト OU に展開する手順について説明します。
ドメイン コントローラーまたはリモート サーバー管理ツールがインストールされているクライアント コンピューターから、GPMC.MSC を実行するか、グループ ポリシー管理を検索してグループ ポリシー管理コンソールを開きます。
新しい GPO を作成する: WDAC 対応 PC OU などの OU を右クリックし、図 2 に示すように [ このドメインに GPO を作成し、ここにリンクする] を選択します。
注
任意の OU 名を使用できます。 また、セキュリティ グループのフィルター処理は、WDAC ポリシーを組み合わせるさまざまな方法を検討する場合のオプションです。
図 2。 新しい GPO を作成します。
新しい GPO に、 Contoso カタログ ファイル GPO テストなどの名前を付けます。任意の名前を指定します。
[グループ ポリシー管理] エディターを開きます。新しい GPO を右クリックし、[編集] を選択します。
選択した GPO 内で、[ コンピューターの構成]、[基本設定]、[Windows 設定]、[ファイル] の順に移動します。 図 3 に示すように、[ ファイル] を右クリックし、[ 新規] をポイントし、[ ファイル] を選択します。
図 3. 新しいファイルを作成します。
カタログ ファイル共有を構成します。
この設定を使って、カタログ ファイル (この例では LOBApp-Contoso.cat) の一貫した展開を実現するには、展開の対象となるすべてのコンピューター アカウントからアクセスできる共有にソース ファイルが保存されている必要があります。 この例では、 というWindows 10
\\Contoso-Win10\Share
を実行しているコンピューター上の共有を使用します。 展開されるカタログ ファイルは、この共有にコピーされます。バージョンの一貫性を維持するには、図 4 に示すように [新しいファイルのプロパティ] ダイアログ ボックスで、[アクション] ボックスの一覧から [置換] を選択して、常に最新バージョンが使用されるようにします。
図 4: 新しいファイル プロパティを設定します。
[ ソース ファイル ] ボックスに、アクセス可能な共有の名前を入力し、カタログ ファイル名を含めます。 例:
\\Contoso-Win10\share\LOBApp-Contoso.cat
。[宛先ファイル] ボックスに、パスとファイル名を入力します。次に例を示します。
C:\Windows\System32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\LOBApp-Contoso.cat
カタログ ファイル名には、デプロイするカタログの名前を使用します。
[新しいファイルのプロパティ] ダイアログ ボックスの [共通] タブで、[適用できなくなった場合はこの項目を削除する] オプションをオンにします。 このオプションを有効にすると、このアプリケーションの信頼を停止する必要がある場合に備えて、カタログ ファイルがすべてのシステムから確実に削除されます。
[ OK] を選択 して、ファイルの作成を完了します。
グループ ポリシー管理エディターを閉じ、GPUpdate.exe を実行して、Windows 10またはWindows 11を実行しているテスト コンピューターのポリシーを更新します。 ポリシーが更新されたら、Windows 10を実行しているコンピューターにカタログ ファイルが存在
C:\Windows\System32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}
することを確認します。
Microsoft Configuration Managerを使用してカタログ ファイルをデプロイする
グループ ポリシーの代わりに、Configuration Managerを使用して、環境内のマネージド コンピューターにカタログ ファイルを展開できます。 この方法により、複数のカタログ ファイルの展開と管理を簡略化し、各クライアントまたはコレクションが展開したカタログに関するレポートを提供できます。 これらのファイルの展開に加えて、Configuration Managerを使用して、レポートとコンプライアンスの目的で現在展開されているカタログ ファイルのインベントリを作成することもできます。
カタログ ファイル用の新しい展開パッケージを作成するには、次の手順を実行します。
注
次の例では、カタログ ファイルのソースとしてという名前 \\Shares\CatalogShare
のネットワーク共有を使用します。 コレクション固有のカタログ ファイルがある場合、または個別に展開する場合は、organizationに最適なフォルダー構造を使用します。
Configuration Manager コンソールを開き、[ソフトウェア ライブラリ] ワークスペースを選びます。
[概要]\[アプリケーション管理] に移動し、[ パッケージ] を右クリックし、[ パッケージの作成] を選択します。
パッケージの名前を指定し、組織を製造元として設定して、適切なバージョン番号を選びます。
図 5: 新しいパッケージに関する情報を指定します。
[ 次へ] を選択し、プログラムの種類として [ 標準プログラム ] を選択します。
[ 標準プログラム ] ページで名前を選択し、 コマンド ライン プロパティを次のコマンドに設定します。
XCopy \\Shares\CatalogShare C:\Windows\System32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE} /H /K /E /Y
[ 標準プログラム ] ページで、図 6 に示すように、次のオプションを選択します。
- [名前] に、「Contoso Catalog File Copy Program」などの名前を入力します。
- [コマンドライン] で、プログラムの場所を参照します。
- [ スタートアップ フォルダー] に「」と入力します
C:\Windows\System32
。 - [実行] ボックスから [非表示] を選びます。
- [プログラムの実行条件] ボックスから [ユーザーのログオン状態に関係なし] を選びます。
- [ドライブ モード] ボックスから [UNC 名で実行する] を選びます。
図 6. 標準プログラムに関する情報を指定します。
ウィザードの残りの部分では既定値をそのまま使い、ウィザードを閉じます。
展開パッケージを作成したら、クライアントがカタログ ファイルを受け取ることができるように、そのパッケージをコレクションに展開します。 この例では、作成したパッケージをテスト コレクションにデプロイします。
[ソフトウェア ライブラリ] ワークスペースで、[概要]\[アプリケーション管理]\[パッケージ] の順に移動し、カタログ ファイル パッケージを右クリックし、[配置] を選択 します。
[ 全般 ] ページで、テスト コレクションを選択し、[ 次へ] を選択します。
[ コンテンツ ] ページで、[ 追加 ] を選択して、選択したコレクションにコンテンツを提供する配布ポイントを選択し、[ 次へ] を選択します。
[展開設定] ページで、[目的] ボックスの [必須] を選びます。
[スケジュール] ページ で 、[新規] を選択 します。
[ 割り当てスケジュール ] ダイアログ ボックスで、[ このイベントの直後に割り当てる] を選択し、値を できるだけ早くに設定し、[ OK] を選択します。
[スケジュール] ページ で 、[ 次へ] を選択します。
図 7 に示すように [ ユーザー エクスペリエンス ] ページで、次のオプションを設定し、[ 次へ] を選択します。
[ソフトウェアのインストール] チェック ボックスをオンにします。
[メンテナンスの期限または期間中の変更を確定する (再起動が必要)] チェック ボックスをオンにします。
図 7. ユーザー エクスペリエンスを指定します。
[ 配布ポイント ] ページの [ 展開オプション ] ボックスで、[ 配布ポイントからプログラムを実行する] を選択し、[ 次へ] を選択します。
[ 概要 ] ページで、選択内容を確認し、[ 次へ] を選択します。
ウィザードを閉じます。
Microsoft Configuration Managerを含むインベントリ カタログ ファイル
カタログ ファイルが環境内のコンピューターに展開されている場合は、グループ ポリシーまたはConfiguration Managerを使用して、Configuration Managerのソフトウェア インベントリ機能を使用してインベントリを作成できます。
新しいクライアント設定ポリシーを作成して展開することで、マネージド システム上のカタログ ファイルを検索するようにソフトウェア インベントリを構成できます。
注
カタログ ファイルの標準の名前付け規則により、カタログ ファイル ソフトウェア インベントリ プロセスが大幅に簡略化されます。 この例では、-Contoso がすべてのカタログ ファイル名に付加されています。
Configuration Manager コンソールを開き、[管理] ワークスペースを選びます。
[概要]\[クライアント設定] に移動し、[クライアント設定] を右クリックし、[カスタム クライアント デバイス設定の作成] を選択します。
図 8 のように、新しいポリシーの名前を指定し、[クライアント デバイスのカスタム設定を選択して構成する] で、[ソフトウェア インベントリ] チェック ボックスをオンにします。
図 8. カスタム設定を選択します。
ナビゲーション ウィンドウで、[ ソフトウェア インベントリ] を選択し、図 9 に示すように [ 種類の設定] を選択します。
図 9. ソフトウェア インベントリを設定します。
[ クライアント設定の構成 ] ダイアログ ボックスで、[ スタート ] ボタンを選択して [ インベントリ ファイルのプロパティ ] ダイアログ ボックスを開きます。
[ 名前 ] ボックスに、 などの
*Contoso.cat
名前を入力し、[ 設定] を選択します。注
名前を入力するときは、カタログ ファイルの名前付け規則に従います。
[ パスのプロパティ ] ダイアログ ボックスで、[ 変数またはパス名] を選択し、図 10 に示すようにボックスに「」と入力
C:\Windows\System32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}
します。図 10. パスのプロパティを設定します。
[OK] を選択します。
クライアント設定ポリシーを作成したので、新しいポリシーを右クリックし、[ 展開] を選択し、カタログ ファイルのインベントリを作成するコレクションを選択します。
次のソフトウェア インベントリ サイクルの時点で、対象のクライアントが新しいクライアント設定ポリシーを受け取ると、組み込みのConfiguration Manager レポートまたはリソース エクスプローラーでインベントリされたファイルを表示できます。 インベントリ作成の対象となったクライアントのファイルをリソース エクスプローラーで確認するには、次の手順を実行します。
Configuration Manager コンソールを開き、[資産とコンプライアンス] ワークスペースを選びます。
[概要]\[デバイス] に移動し、インベントリされたファイルを表示するデバイスを検索します。
コンピューターを右クリックし、[スタート] をポイントし、[リソース エクスプローラー] を選択します。
[リソース エクスプローラー] で、[ソフトウェア]\[ファイルの詳細] に移動して、インベントリされたカタログ ファイルを表示します。
注
このビューに何も表示されない場合は、[リソース エクスプローラーのソフトウェア\最後のソフトウェア スキャン] に移動して、クライアントがソフトウェア インベントリ スキャンを最近完了したことを確認します。
WDAC ポリシーでカタログ署名証明書によって署名されたアプリを許可する
署名済みカタログ ファイルが作成されたので、署名者ルールをポリシーに追加して、その証明書で署名されたものを許可できます。 WDAC ポリシーをまだ作成していない場合は、Windows Defender アプリケーション制御設計ガイドを参照してください。
署名付きカタログ ファイルが展開されているコンピューターでは、 New-CiPolicyRule を使用して、そのカタログに含まれる任意のファイルから署名者ルールを作成できます。 次に 、Merge-CiPolicy を使用して、ポリシー XML にルールを追加します。 次のサンプルのパス値は必ず置き換えてください。
$Rules = New-CIPolicyRule -DriverFilePath <path to the file covered by the signed catalog> -Level Publisher
Merge-CIPolicy -OutputFilePath <path to your policy XML> -PolicyPaths <path to your policy XML> -Rules $Rules
または、 Add-SignerRule を使用して、証明書ファイル (.cer) から署名者ルールをポリシーに追加することもできます。 署名済みカタログ ファイルから.cer ファイルを簡単に保存できます。
- カタログ ファイルを右クリックし、[プロパティ] を選択 します。
- [ デジタル署名 ] タブで、一覧から署名を選択し、[詳細] を選択 します。
- [ 証明書の表示] を選択して、リーフ証明書のプロパティを表示します。
- [ 詳細 ] タブを選択し、[ ファイルにコピー] を選択します。 この操作により、証明書のエクスポート ウィザードが実行されます。
- [ ファイル形式のエクスポート ] の既定のオプションを使用し、.cer ファイルを保存する場所とファイル名を指定して、ウィザードを完了します。
注
これらの手順では、"リーフ" 証明書とも呼ばれる証明書チェーンの最下位レベルを選択します。 代わりに、証明書の中間発行者証明書またはルート発行者証明書を使用することもできます。 チェーンで別の証明書を使用するには、上記の手順 3 の後で [ 証明書パス ] タブに切り替え、使用する証明書レベルを選択し、[ 証明書の表示] を選択します。 次に、残りの手順を完了します。
次の例では、.cer ファイルを使用して、ユーザー モードとカーネル モードの両方の署名シナリオに署名者ルールを追加します。 次のサンプルのパス値は必ず置き換えてください。
Add-SignerRule -FilePath <path to your policy XML> -CertificatePath <path to your certificate .cer file> -User -Kernel
パッケージ インスペクターを使用した既知の問題
パッケージ インスペクターを使用してカタログ ファイルをビルドする既知の問題の一部を次に示します。
USN ジャーナル サイズが小さすぎて、インストーラーによって作成されたすべてのファイルを追跡するには
- パッケージ インスペクターを実行した後、USN ジャーナル サイズが問題かどうかを診断するには、
- reg キーの値を HKEY_CURRENT_USER/PackageInspectorRegistryKey/c: で取得します (この USN は PackageInspector の起動時に最新のものでした)。 次に、fsutil.exe を使用して、その開始場所を読み取る。 次のコマンドの "RegKeyValue" を reg キーの値に置き換えます。
fsutil usn readjournal C: startusn=RegKeyValue > inspectedusn.txt
- 上記のコマンドは、オーバーフローのために古い USN が存在しなくなった場合にエラーを返す必要があります
- 新しいサイズと割り当てデルタを使用して
fsutil usn createjournal
、USN ジャーナル サイズを拡張できます。Fsutil usn queryjournal
は現在のサイズと割り当てデルタを示しているため、 の倍数を使用すると役立つ可能性があります。
- reg キーの値を HKEY_CURRENT_USER/PackageInspectorRegistryKey/c: で取得します (この USN は PackageInspector の起動時に最新のものでした)。 次に、fsutil.exe を使用して、その開始場所を読み取る。 次のコマンドの "RegKeyValue" を reg キーの値に置き換えます。
- パッケージ インスペクターを実行した後、USN ジャーナル サイズが問題かどうかを診断するには、
CodeIntegrity - 操作イベント ログが小さすぎて、インストーラーによって作成されたすべてのファイルを追跡するには
- パッケージ インスペクターを実行した後、Eventlog サイズが問題かどうかを診断するには、
- イベント ビューアーを開き、Application and Services//Microsoft//Windows//CodeIntegrity//Operational を展開します。 初期インストーラーの起動に関する 3076 監査ブロック イベントを確認します。
- イベント ログのサイズを大きくするには、操作ログイベント ビューアー右クリックし、[プロパティ] を選択し、新しい値を設定します。
- パッケージ インスペクターを実行した後、Eventlog サイズが問題かどうかを診断するには、
アプリがインストールまたは実行されるたびにハッシュを変更するインストーラーまたはアプリ ファイル
- 一部のアプリでは、実行時にハッシュ値が毎回異なるファイルが生成されます。 この問題を診断するには、生成される 3076 監査ブロック イベント (または 3077 強制イベント) のハッシュ値を確認します。 ファイルを実行しようとするたびに、別のハッシュを持つ新しいブロック イベントが観察される場合、パッケージはパッケージ インスペクターでは機能しません。
無効な署名 BLOB を含むファイル、またはその他の "ハッシュ不可" ファイル
- この問題は、署名されたファイルがファイルの PE ヘッダーを無効にする方法で変更された場合に発生します。 このように変更されたファイルは、Authenticode 仕様に従ってハッシュできません。
- これらの "ハッシュ不可" ファイルは PackageInspector によって作成されたカタログ ファイルに含めることはできませんが、ファイルのフラット ファイル ハッシュを使用するポリシーにハッシュ ALLOW 規則を追加することで許可できる必要があります。
- この問題は、カスタム アクションで署名付き DLL ファイルを使用する InstallShield パッケージの一部のバージョンに影響します。 InstallShield は追跡マーカーをファイルに追加します (署名後に編集します)。