补充WDAC策略无法覆盖基础WDAC策略(微软推荐阻止规则)中的WSL.exe阻止规则
补充WDAC策略无法覆盖基础WDAC策略(微软推荐阻止规则)中的WSL.exe阻止规则
看起来你碰到了WDAC补充策略里一个很容易踩坑的规则匹配优先级问题——虽然微软官方说“基础策略或补充策略允许的文件不会被阻止”,但实际执行时,明确的拒绝规则优先级会高于宽泛的允许规则,尤其是当基础策略里的拒绝是用文件名这种通用条件定义的时候。我来帮你拆解可能的问题和解决方向:
先分析你试过的三种补充策略的潜在问题
- 第一种哈希允许策略:你把哈希规则放在了
<SigningScenario>的<ProductSigners>里,这其实没必要——哈希规则是直接匹配文件本身的,不需要关联签名场景,这种错误的结构可能导致规则没有被WDAC正确识别。 - 第二种多哈希策略:同样存在规则关联错误的问题,而且你加了Page Hash,这一般用于驱动文件,对用户态的wsl.exe来说完全没必要,反而可能干扰规则匹配。
- 第三种文件名允许策略:基础策略里已经用
<Deny FileName="wsl.exe">做了全局文件名拒绝,WDAC的规则逻辑里,同级别匹配条件下,拒绝规则优先级高于允许规则,所以单纯用文件名允许根本覆盖不了基础的拒绝。
具体解决步骤
1. 先验证核心匹配条件:wsl.exe的哈希是否正确
打开PowerShell,执行以下命令获取当前系统中wsl.exe的SHA256哈希:
Get-FileHash "C:\Windows\System32\wsl.exe" -Algorithm SHA256
对比你补充策略里的哈希值,确保完全一致(注意64位系统里System32和SysWOW64下的wsl.exe是不同的,要匹配你实际运行的那个)。
2. 重构补充策略的XML结构(哈希允许方案,最可靠)
哈希是WDAC里优先级最高的匹配方式,能覆盖任何宽泛的拒绝规则,正确的补充策略结构应该是这样:
<PolicySchemaVersion>1.0.0</PolicySchemaVersion> <PolicyID>{你的补充策略GUID}</PolicyID> <PolicyName>Allow WSL Supplemental Policy</PolicyName> <Rules> <Rule> <Option>Enabled:UMCI</Option> </Rule> <Rule> <Option>Enabled:Allow Supplemental Policies</Option> </Rule> <!-- 如果基础策略开了HVCI,补充策略也要同步开启 --> <Rule> <Option>Enabled:HypervisorProtectedCodeIntegrity</Option> </Rule> </Rules> <FileRules> <Allow ID="ID_ALLOW_WSL_SHA256" FriendlyName="wsl.exe SHA256 Hash" Hash="CBDD7637A5E15F9A97CE2D94D2AD1557CAD51482C43D13836FB15686DD143276" /> <Allow ID="ID_ALLOW_WSLHOST_SHA256" FriendlyName="wslhost.exe SHA256 Hash" Hash="F5B963957EF92B833DFF05D17AEA9B71FC3939BBD91749672DBB69A75466FA89" /> </FileRules> <!-- 不需要SigningScenario节点,哈希规则直接生效 -->
3. 验证策略激活和合并状态
- 执行
Get-CIPolicyInfo -List,确认你的补充策略状态是Active,并且和基础策略的PolicyID关联正确。 - 检查基础策略的XML,确保
<SupplementalPolicySigners>里包含你用来签名补充策略的证书,没有这个的话补充策略根本不会被加载。
4. 排除HVCI和动态代码安全的干扰
- 如果你在调整补充策略时修改了HVCI选项,确保补充策略的HVCI设置和基础策略完全一致(基础开了HVCI,补充也必须开),可以用这条PowerShell命令设置:
Set-HVCIOptions -Enable -PolicyFilePath "你的补充策略XML路径" - 暂时关闭基础策略里的
Enabled:Dynamic Code Security选项测试,如果能正常运行WSL,再针对性调整动态代码安全的规则。
5. 极端情况:直接覆盖基础的拒绝规则
如果哈希方案还是不行,你可以尝试在补充策略里添加一个和基础拒绝规则完全一致的允许规则,利用补充策略的合并优先级覆盖:
<Allow ID="ID_ALLOW_WSL_OVERRIDE" FriendlyName="Override Deny wsl.exe" FileName="wsl.exe" MinimumFileVersion="0.0.0.0" MaximumFileVersion="65355.65355.65355.65355" />
这种方式和基础的拒绝规则匹配条件完全相同,补充策略的允许规则会覆盖基础的拒绝。
最后再检查几个容易忽略的点
- 确保签名后的补充策略文件放在了正确的EFI分区路径(
\EFI\Microsoft\Boot\CiPolicies\Active),并且文件名是{PolicyID}.cip。 - 用
RefreshPolicy.exe强制刷新后,重启系统再测试,有时候WDAC的策略合并需要完整重启才能生效。
备注:内容来源于stack exchange,提问作者TheCyberWarden




