署名付きポリシーを使用して、App Control for Business を改ざんから保護する

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

ビジネス向け署名付きアプリ制御ポリシーを使用すると、組織は Windows で使用できる最高レベルの保護を提供します。 これらのポリシーは、管理者として実行されているマルウェアなど、ポリシーの管理上の改ざんを検出するように設計されており、ブートエラーやブルー スクリーンが発生します。 この目標を念頭に置いて、署名されたアプリコントロールポリシーを削除することははるかに困難です。 署名されたアプリ制御ポリシーに対してこの保護を提供するには、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 のみがサポートされます。

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

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

署名のためにアプリ制御ポリシーを準備する

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

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

    この例では、参照コンピューターの記事の「 ビジネス向けアプリコントロールポリシーを作成する」で作成した適用バージョンのアプリ制御ポリシーを 使用します。 別のポリシーに署名する場合は、 $PolicyPath$PolicyName 変数を正しい情報で更新してください。

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

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

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

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

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

    重要

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

  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 を使用してアプリ制御ポリシー ファイルに署名できます。

  1. 署名が行われるコンピューター上のユーザーの個人用ストアに .pfx コード署名証明書をインポートします。 この例では、「 省略可能: App Control for Business のコード署名証明書を作成する」で作成された証明書を使用します。

  2. SignTool.exe を使用してアプリ制御ポリシーに署名します。

    <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 拡張子を持つ署名済みポリシー ファイルを出力する必要があります。 ファイルの名前を、元のアプリコントロール ポリシー XML から "{GUID}" が <PolicyId> である{GUID}.cipに変更する必要があります。

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

certutil.exe または PowerShell を使用して、署名されたファイルを確認できます。 出力を確認して、この記事の上部にある「警告」の説明に従って署名アルゴリズムを確認します。

certutil.exe -asn <path to signed policy file>
$CIPolicyBin = 'path to signed policy file'
Add-Type -AssemblyName 'System.Security'
$SignedCryptoMsgSyntax = New-Object -TypeName System.Security.Cryptography.Pkcs.SignedCms
$SignedCryptoMsgSyntax.Decode([System.IO.File]::ReadAllBytes($CIPolicyBin))
$SignedCryptoMsgSyntax.Certificates | Format-List -Property *

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

署名済みポリシーを確認したら、お好みのデプロイ方法を使用してデプロイします。 ポリシーの展開の詳細については、「 App Control for Business ポリシーの展開」を参照してください。

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