使用已簽署原則保護 Windows Defender 應用程式控制不受篡改

注意

Windows Defender 應用程式控制的某些功能僅在特定 Windows 版本上可用。 如需詳細資訊,請參閱 Windows Defender 應用程控功能可用性

已簽署的 Windows Defender 應用程控 (WDAC) 原則可為組織提供 Windows 中可用的最高層級保護。 這些原則的設計目的是要偵測原則的系統管理竄改,例如以系統管理員身分執行的惡意代碼,並會導致開機失敗或藍色畫面。 考慮到此目標,移除已簽署的 WDAC 原則會更加困難。 必須啟用 SecureBoot,才能為已簽署的 WDAC 原則提供此保護。

如果您目前沒有可用來簽署原則的程式代碼簽署憑證,請參閱 取得程式碼簽署憑證以供您自己使用

警告

如果您的簽署憑證未遵循下列規則,可能會發生開機失敗或藍色畫面:

  • 所有原則,包括基底和補充原則,都必須根據 PKCS 7 標準進行簽署
  • 僅使用 2K、3K 或 4K 金鑰大小的 RSA 金鑰。 不支援ECDSA。
  • 套用 2022 年 11 月累積安全性更新之後,您可以使用 SHA-256、SHA-384 或 SHA-512 作為 Windows 11 的摘要演算法,以及 Windows 10 和 Windows Server 2019 及更新版本。 所有其他裝置僅支援SHA-256。
  • 請勿將UTF-8編碼用於憑證欄位,例如「主體通用名稱」和「簽發者通用名稱」。 這些字串必須編碼為 PRINTABLE_STRING、IA5STRING 或 BMPSTRING。

在您嘗試部署已簽署的原則之前,您應該先部署不帶正負號的原則版本,以發現原則規則的任何問題。 我們也建議您啟用規則選項 9 - 啟用:進階開機選項功能表10 - 啟用:失敗時開機稽 核,讓系統管理員可以使用疑難解答選項。 若要確保已啟用規則選項,您可以執行 命令,例如 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> 原則簽署憑證的規則,您必須新增它。 至少有一個 <UpdatePolicySigner> 規則必須存在,才能使用 ConvertFrom-CiPolicy 來轉換原則 XML。

    使用 Add-SignerRule ,並從憑證檔案建立 <UpdatePolicySigner> 規則 (.cer) 。 如果您已購買程式代碼簽署憑證,或從自己的公鑰基礎結構 (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 重設原則識別碼並變更原則名稱。

  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 應用程式控制的程式碼簽署憑證一節建立的憑證。

  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 ,其中 “{GUID}” 是 <原始 WDAC 原則 XML 中的 PolicyId> 。

確認並部署已簽署的原則

您可以使用 certutil.exe 來驗證已簽署的檔案。 檢閱輸出以確認憑證欄位的簽章演算法和編碼方式,例如「主體通用名稱」和「簽發者通用名稱」,如本文頂端的警告所述。

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

在繼續部署之前,請先在一組代表性計算機上徹底測試已簽署的原則。 請務必在套用已簽署的 WDAC 原則之後,至少重新啟動測試計算機兩次,以確保您不會遇到開機失敗。

確認已簽署的原則之後,請使用您慣用的部署方法進行部署。 如需部署原則的詳細資訊,請參閱部署 Windows Defender 控件原則

注意

在簽署的原則套用至計算機之後,第一次重新啟動之後,已簽署原則的反竄改保護就會生效。 此保護僅適用於已啟用 UEFI 安全開機的電腦。