署名付きポリシーを使用して、Windows Defender アプリケーション制御を改ざんから保護する

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

署名されたWindows Defenderアプリケーション制御 (WDAC) ポリシーにより、組織は Windows で使用できる最高レベルの保護を提供します。 これらのポリシーは、管理者として実行されているマルウェアなど、ポリシーの管理上の改ざんを検出するように設計されており、ブートエラーやブルー スクリーンが発生します。 この目標を念頭に置いて、署名された WDAC ポリシーを削除する方がはるかに困難です。 署名された WDAC ポリシーに対してこの保護を提供するには、SecureBoot を有効にする必要があります。

現在、ポリシーの署名に使用できるコード署名証明書がない場合は、「 独自に使用するコード署名証明書を取得する」を参照してください。

Warning

署名証明書が次の規則に従っていない場合、ブート エラー (ブルー スクリーン) が発生する可能性があります。

  • 基本ポリシーと補足ポリシーを含むすべてのポリシーは、 PKCS 7 Standard に従って署名する必要があります。
  • RSA キーは、2K、3K、または 4K のキー サイズでのみ使用します。 ECDSA はサポートされていません。
  • SHA-256、SHA-384、または SHA-512 は、2022 年 11 月の累積的なセキュリティ更新プログラムを適用した後、Windows 11および Windows 10 および Windows Server 2019 以降のダイジェスト アルゴリズムとして使用できます。 その他のすべてのデバイスでは SHA-256 のみがサポートされます。
  • 証明書フィールドには UTF-8 エンコードを使用しないでください ("サブジェクトの共通名" や "発行者の共通名" など)。 これらの文字列は、PRINTABLE_STRING、IA5STRING、または BMPSTRING としてエンコードする必要があります。

署名済みポリシーの展開を試みる前に、まず署名されていないバージョンのポリシーをデプロイして、ポリシー ルールに関する問題を明らかにする必要があります。 また、ルール オプション 9 - Enabled:Advanced Boot Options Menu10 - Enabled:Boot Audit on Failure を有効にして、トラブルシューティング オプションを管理者が使用できるようにしておくことをお勧めします。 ルール オプションが有効になっていることを確認するには、オプションが既に有効になっているかどうかわからない場合でも、 などの Set-RuleOption -FilePath <PathAndFilename> -Option 9コマンドを実行できます。 その場合、コマンドは効果がありません。 エンタープライズ展開を検証し、その準備ができたら、これらのオプションを削除できます。 ルール オプションの詳細については、「アプリケーション制御ポリシールールのWindows Defender」を参照してください。

既存の補足ポリシーを持つ基本ポリシーに署名する場合は、すべての補足の署名済みポリシーにも切り替える必要があります。 基本ポリシーにルールを追加して、 <SupplementalPolicySigner> 署名された補足ポリシーを承認します。

署名のために WDAC ポリシーを準備する

  1. 管理者特権のWindows PowerShell セッションを開き、使用する変数を初期化します。

    $PolicyPath=$env:userprofile+"\Desktop\"
    $PolicyName="FixedWorkloadPolicy_Enforced"
    $LamnaServerPolicy=$PolicyPath+$PolicyName+".xml"
    

    この例では、「参照コンピューターからのWindows Defender アプリケーション制御ポリシーの作成」で作成した強制バージョンの WDAC ポリシーを使用します。 別のポリシーに署名する場合は、 $PolicyPath$PolicyName 変数を正しい情報で更新してください。

  2. デスクトップに移動し、作業ディレクトリとして使います。

    cd $PolicyPath
    
  3. WDAC ポリシーにポリシー署名証明書の規則がまだ含 <UpdatePolicySigner> まれていない場合は、それを追加する必要があります。 ConvertFrom-CiPolicy を使用してポリシー XML を変換するには、少なくとも 1 つの<UpdatePolicySigner>ルールが存在する必要があります。

    Add-SignerRule を使用し、証明書ファイル (.cer) からルールを作成<UpdatePolicySigner>します。 コード署名証明書を購入した場合、または独自の公開キー 基盤 (PKI) から発行した場合は、証明書ファイルをエクスポートできます。

    ポリシーで補足ポリシーが許可されていない場合は、次のコマンドから -補足 スイッチを省略する必要があります。

    Add-SignerRule -FilePath $LamnaServerPolicy -CertificatePath <Path to exported .cer certificate> -Update -Supplemental
    

    重要

    この手順を実行しないと、このポリシーを変更または無効にできず、起動エラーが発生します。 ブート エラーの原因となっている署名付きポリシーを無効にする方法の詳細については、「ブート停止エラーの原因となっているWindows Defenderアプリケーション制御ポリシーを削除する」を参照してください。

  4. 署名されていないポリシー規則オプションを削除するには、Set-RuleOption を使用します。

    Set-RuleOption -FilePath $LamnaServerPolicy -Option 6 -Delete
    
  5. (省略可能) Set-CIPolicyIdInfo を使用してポリシー ID をリセットし、ポリシー名を変更します。

  6. (省略可能) Set-CIPolicyVersion を使用して、ポリシー VersionEx を変更します。

    重要

    署名済みポリシーを更新する場合、更新されたポリシーの VersionEx は現在のポリシー以上である必要があります。 署名済みポリシーを下位バージョンに置き換えると、起動エラーが発生します。

  7. ポリシーをバイナリ形式に変換するには、ConvertFrom-CIPolicy を使用します。

    $PolicyID= Set-CIPolicyIdInfo -FilePath $LamnaServerPolicy  -ResetPolicyID
    $PolicyID = $PolicyID.Substring(11)
    $CIPolicyBin = $env:userprofile + "\Desktop\" + $PolicyID + ".cip"
    ConvertFrom-CIPolicy $LamnaServerPolicy $CIPolicyBin
    

ポリシーに署名する

signtool.exe を使用したポリシー署名

コード署名証明書を購入した場合、または独自の PKI から発行した場合は、 SignTool.exe を使用して WDAC ポリシー ファイルに署名できます。

  1. 署名が行われるコンピューター上のユーザーの個人用ストアに .pfx コード署名証明書をインポートします。 この例では、「オプション: Windows Defender Application Control 用のコード署名証明書を作成する」セクションで作成した証明書を使います。

  2. SignTool.exe を使って、WDAC ポリシーに署名します。

    <Path to signtool.exe> sign -v -n "ContosoSigningCert" -p7 . -p7co 1.3.6.1.4.1.311.79.1 -fd sha256 $CIPolicyBin
    

    <Path to signtool.exe> 変数には、SignTool.exe ユーティリティへの完全パスを指定します。 ContosoSigningCert は、ポリシーの署名に使用される証明書のサブジェクト名です。 この証明書を、ポリシーへの署名に使うコンピューター上にある個人用の証明書ストアにインポートします。

完了すると、コマンドは拡張子を持つ署名済みポリシー ファイルを出力する .p7 必要があります。 ファイルの名前を{GUID}.cip、元の WDAC ポリシー XML の PolicyId> である <"{GUID}" に変更する必要があります。

署名済みポリシーを確認して展開する

certutil.exe を使用して、署名されたファイルを確認できます。 出力を確認して、証明書フィールドの署名アルゴリズムとエンコードを確認します(この記事の上部にある警告に関する記事の説明に従って、"サブジェクト共通名" や "発行者共通名" など)。

certutil.exe -asn <path to signed policy file>

展開を続行する前に、代表的な一連のコンピューターで署名済みポリシーを徹底的にテストします。 署名された WDAC ポリシーを適用した後、少なくとも 2 回テスト コンピューターを再起動して、ブート エラーが発生しないようにしてください。

署名済みポリシーを確認したら、お好みのデプロイ方法を使用してデプロイします。 ポリシーの展開の詳細については、「アプリケーション制御ポリシー Windows Defender展開する」を参照してください。

署名済みポリシーの改ざん防止保護は、署名済みポリシーがコンピューターに適用されると、最初の再起動後に有効になります。 この保護は、UEFI セキュア ブートが有効になっているコンピューターにのみ適用されます。