有关创建 WDAC 拒绝策略的指南

使用 Windows Defender 应用程序控制 (WDAC) ,可以创建策略来显式拒绝特定的驱动程序和应用程序。 若要创建有效的Windows Defender应用程序控制拒绝策略,应了解 WDAC 根据活动策略评估文件时应用的规则优先级顺序

独立拒绝策略

创建仅包含拒绝规则的策略时,除了显式拒绝规则外,还必须在策略的内核和用户模式部分包括“全部允许”规则。 “全部允许”规则可确保允许运行策略未显式拒绝的任何内容。 如果未能将“全部允许”规则添加到仅拒绝策略,则有可能阻止所有内容。 出现此结果是因为某些代码 被显式 拒绝,而所有其他代码被 隐式 拒绝,因为没有规则来授权它。 建议在创建独立拒绝策略时使用 AllowAll 策略模板

<FileRules>
  <Allow ID="ID_ALLOW_A_1" FriendlyName="Allow Kernel Drivers" FileName="*" />
  <Allow ID="ID_ALLOW_A_2" FriendlyName="Allow User mode components" FileName="*" />
</FileRules>
<SigningScenarios>
    <SigningScenario Value="131" ID="ID_SIGNINGSCENARIO_DRIVERS" FriendlyName="Kernel Mode Signing Scenario">
      <ProductSigners>
        <FileRulesRef>
          <FileRuleRef RuleID="ID_ALLOW_A_1" />
        </FileRulesRef>
      </ProductSigners>
    </SigningScenario>
    <SigningScenario Value="12" ID="ID_SIGNINGSCENARIO_WINDOWS" FriendlyName="User Mode Signing Scenario">
      <ProductSigners>
        <FileRulesRef>
          <FileRuleRef RuleID="ID_ALLOW_A_2" />
        </FileRulesRef>
      </ProductSigners>
    </SigningScenario>
</SigningScenarios>

添加上述“全部允许”规则不会影响已部署的任何其他应用显式允许列表的 WDAC 策略。 为了说明,请考虑以下示例:

Policy1 是 Windows 和 Microsoft 签名的应用程序的允许列表。

Policy2 是新的拒绝策略,它阻止 MaliciousApp.exe 以及 Windows 组件二进制 wmic.exe。 它还包括“全部允许”规则。

  • MaliciousApp.exe 被阻止,因为 Policy2 中存在显式阻止规则。 Policy1 也 隐式 阻止了它,因为没有允许规则覆盖该策略中的文件。
  • Windows 签名文件 wmic.exe 被阻止,因为 Policy2 中存在显式阻止规则。
  • 所有其他 Windows 和 Microsoft 签名的应用程序都是允许的,因为 Policy1 和 Policy2 中都有一个涵盖该文件的显式允许规则。
  • 所有其他应用程序均被隐式拒绝。 例如,不允许 ExampleApp.exe,因为它仅受 Policy2 (信任,因为“允许所有”规则) 而不是 Policy1。

混合允许和拒绝策略注意事项

如果要将拒绝规则集添加到包含显式允许规则的现有策略中,则不要包括前面的“全部允许”规则。 相反,应通过 WDAC 向导或使用以下 PowerShell 命令将拒绝规则与现有 WDAC 策略合并:

$DenyPolicy = <path_to_deny_policy>
$ExistingPolicy = <path_to_existing_policy>
Merge-CIPolicy -PolicyPaths $ DenyPolicy, $ExistingPolicy -OutputFilePath $ExistingPolicy

最佳做法

  1. 首先在审核模式下进行测试 - 与所有新策略一样,我们建议在审核模式下推出新的拒绝策略,并监视 3076 审核阻止事件 ,以确保仅阻止要阻止的应用程序。 有关通过事件查看器日志和高级搜寻监视块事件的详细信息:管理和故障排除Windows Defender应用程序控制策略

  2. 建议的拒绝规则类型 - 建议从安全性、可管理性和性能角度考虑签名者和文件属性规则。 仅在必要时才应使用哈希规则。 由于文件哈希随文件的任何更改而更改,因此很难跟上基于哈希的阻止策略,攻击者可以在其中简单更新文件。 虽然 WDAC 已优化哈希规则分析,但如果策略包含数万个或更多哈希规则,某些设备可能会在运行时评估中看到性能影响。

创建拒绝策略教程

可以使用 PowerShell cmdlet 或 WDAC 向导创建拒绝规则和策略。 建议尽可能 (PCACertificate、Publisher 和 FilePublisher) 创建签名者规则。 对于未签名的二进制文件,必须对文件的属性(如原始文件名或哈希)创建规则。

基于软件发布服务器的拒绝规则

$DenyRules += New-CIPolicyRule -Level FilePublisher -DriverFilePath <binary_to_block> -Fallback SignedVersion,Publisher,Hash -Deny

基于软件属性的拒绝规则

$DenyRules += New-CIPolicyRule -Level FileName -DriverFilePath <binary_to_block> -Fallback Hash -Deny

基于哈希的拒绝规则

$DenyRules += New-CIPolicyRule -Level Hash -DriverFilePath <binary_to_block> -Deny

将拒绝规则与 AllowAll 模板策略合并

创建拒绝规则后,可以将它们与 AllowAll 模板策略合并:

$DenyPolicy = <path_to_deny_policy_destination>
$AllowAllPolicy = $Env:windir + "\schemas\CodeIntegrity\ExamplePolicies\AllowAll.xml"
Merge-CIPolicy -PolicyPaths $AllowAllPolicy -OutputFilePath $DenyPolicy -Rules $DenyRules
Set-CiPolicyIdInfo -FilePath $DenyPolicy -PolicyName "My Deny Policy" -ResetPolicyID

部署拒绝策略

现在应准备好部署拒绝策略。 请参阅 WDAC 部署指南 ,了解如何将策略部署到托管终结点。