我正在创建 Windows Defender 应用程序控制 (WDAC) 补充策略,以补充基本策略。基本策略与Microsoft 推荐的阻止规则。这意味着基本策略默认阻止 WSL.exe(适用于 Linux 的 Windows 子系统)。
<Deny ID="ID_DENY_WSL_1_0" FriendlyName="wsl.exe" FileName="wsl.exe" MinimumFileVersion="0.0.0.0" MaximumFileVersion="65355.65355.65355.65355" />
微软官方声明“基本策略或补充策略允许的文件不会被阻止”。因此,我试图在补充策略中允许 WSL。但是,对于我尝试创建的三个补充策略,WSL 仍被阻止。 我尝试通过 Hash 和 FileName 来允许 WSL(FileName 是在基本策略中阻止它的方式。)
以下是我创建的补充政策中的一些选项/ XML 片段:
补充政策1:
<!--Rules section Empty for this one-->
<Rules />
<FileRules>
<Allow ID="ID_ALLOW_A_A0" FriendlyName="%OSDRIVE%\Windows\System32\wsl.exe Hash Sha256" Hash="CBDD7637A5E15F9A97CE2D94D2AD1557CAD51482C43D13836FB15686DD143276" />
<Allow ID="ID_ALLOW_A_A1" FriendlyName="%OSDRIVE%\Program Files\WSL\wslhost.exe Hash Sha256" Hash="F5B963957EF92B833DFF05D17AEA9B71FC3939BBD91749672DBB69A75466FA89" />
</FileRules>
<SigningScenario Value="12" ID="ID_SIGNINGSCENARIO_WINDOWS" FriendlyName="Auto generated policy on 11-17-2023">
<ProductSigners>
<FileRulesRef>
<FileRuleRef RuleID="ID_ALLOW_A_A0" />
<FileRuleRef RuleID="ID_ALLOW_A_A1" />
</FileRulesRef>
</ProductSigners>
</SigningScenario>
补充政策2:
<Rules>
<Rule>
<Option>Enabled:UMCI</Option>
</Rule>
</Rules>
<FileRules>
<Allow ID="ID_ALLOW_A_1_0_0" FriendlyName="C:\Windows\System32\wsl.exe Hash Sha1" Hash="FC085F2DC1905756BAE4A0214483C37BDEAE61AC" />
<Allow ID="ID_ALLOW_A_2_0_0" FriendlyName="C:\Windows\System32\wsl.exe Hash Sha256" Hash="CBDD7637A5E15F9A97CE2D94D2AD1557CAD51482C43D13836FB15686DD143276" />
<Allow ID="ID_ALLOW_A_3_0_0" FriendlyName="C:\Windows\System32\wsl.exe Hash Page Sha1" Hash="0AD1F7968A49FD372E319E79F01D23D8DCAE331A" />
<Allow ID="ID_ALLOW_A_4_0_0" FriendlyName="C:\Windows\System32\wsl.exe Hash Page Sha256" Hash="30D8D7D71B0FB2EB24CCD0CFEED91AF2D7719B50E58BBD515C6463CF9D915FA4" />
</FileRules>
<SigningScenario Value="12" ID="ID_SIGNINGSCENARIO_WINDOWS" FriendlyName="Auto generated policy on 11-17-2023">
<ProductSigners>
<FileRulesRef>
<FileRuleRef RuleID="ID_ALLOW_A_1_0_0" />
<FileRuleRef RuleID="ID_ALLOW_A_2_0_0" />
<FileRuleRef RuleID="ID_ALLOW_A_3_0_0" />
<FileRuleRef RuleID="ID_ALLOW_A_4_0_0" />
</FileRulesRef>
</ProductSigners>
</SigningScenario>
</SigningScenarios>
补充政策3:
<Rules>
<Rule>
<Option>Enabled:UMCI</Option>
</Rule>
</Rules>
<FileRules>
<Allow ID="ID_ALLOW_A_0_0_1" FriendlyName="Allow files based on file attributes: wsl.exe and wsl.exe" FileName="wsl.exe" InternalName="wsl.exe" />
</FileRules>
<!--Driver Signing Scenarios-->
<SigningScenarios>
<SigningScenario Value="131" ID="ID_SIGNINGSCENARIO_DRIVERS_1" FriendlyName="Auto generated policy on 11-17-2023">
<ProductSigners>
<FileRulesRef>
<FileRuleRef RuleID="ID_ALLOW_A_0_0_1" />
</FileRulesRef>
</ProductSigners>
</SigningScenario>
<SigningScenario Value="12" ID="ID_SIGNINGSCENARIO_WINDOWS" FriendlyName="Auto generated policy on 11-17-2023">
<ProductSigners>
<FileRulesRef>
<FileRuleRef RuleID="ID_ALLOW_A_0_0_1" />
</FileRulesRef>
</ProductSigners>
</SigningScenario>
</SigningScenarios>
值得注意的是,最后两项补充策略部分是在 WDAC 向导的帮助下创建的。
另请注意,基本政策和补充政策都是签WDAC 政策。
我尝试过的事情:
我已经验证了策略正在刷新和激活,通过验证事件查看器中是否存在事件 ID 3099(位于应用程序和服务日志 > Microsoft > Windows > CodeIntegrity)
我已验证策略已正确签名,并已正确放入 EFI 分区。(基本策略运行良好。)我在 PowerShell 中使用 ConvertFrom-CIPolicy 将 .XML 文件转换为 .CIP 文件。我使用 SignTool 签署策略,确保将其重命名回 .CIP 文件。
我已检查基本策略是否允许补充策略(即,验证了“已启用:允许补充策略”的存在),并包含 SupplementalPolicySigners 和 UpdatePolicySigners。(基本策略中启用的其他选项包括:“已启用:高级启动选项菜单”、“已启用:UMCI”、“已启用:更新策略无需重启”、“必需:WHQL”、“必需:强制商店应用程序”、“已启用:动态代码安全”)
我已经重启过设备几次,并且多次使用官方的 Microsoft Refresh Policy 工具。我的设备已启用安全启动。
我尝试打开和关闭补充策略的 Hypervisor-Protected-Code-Integrity 选项(使用 PowerShell 中的 Set-HVCIOptions)。HVCI 在基础策略中启用。
我注意到一个奇怪的怪癖是,如果你使用 WDAC 向导添加 WSL.exe 并选择文件属性,则文件名显示为“WSL.exe.mui”,所以我尝试创建带有和不带有这个特定 OriginalFileName 的补充策略(即 WSL.exe.mui 和 WSL.exe)。
我甚至尝试添加文件路径规则以允许 System32 中的所有内容,但这似乎不起作用:
<Allow ID="ID_ALLOW_PATH_0_0_1" FriendlyName="Allow by path: " FilePath="%SYSTEM32%\*" />
我正在Windows 10 专业版 22H2。