Windows Defender应用控制WDAC安全策略完全指南:构建零信任应用白名单防护体系(2026版)
更新时间:2026-07-06
来源:晨枫U盘
阅读:1000次
一、WDAC简介与工作原理
Windows Defender应用控制(WDAC),前身为Device Guard UMCI(用户模式代码完整性),是Windows 10/11企业版和教育版内置的安全功能。它通过代码完整性策略控制哪些代码可以在系统上执行。
1.1 WDAC的核心功能
- 应用白名单:只允许受信任的应用程序运行
- 脚本控制:控制PowerShell、VBScript等脚本的执行
- 驱动保护:阻止未签名的内核模式驱动加载
- 智能安全图:基于微软云端情报评估应用信誉
- 审计模式:在不阻止应用的情况下收集策略数据
1.2 WDAC vs AppLocker
| 特性 | WDAC | AppLocker |
|---|---|---|
| 控制粒度 | 更细(文件级别) | 较粗(路径/发布者/哈希) |
| 管理方式 | XML策略文件 | 组策略规则 |
| 默认拒绝 | 支持 | 支持 |
| 智能安全图 | 支持 | 不支持 |
| 脚本控制 | 更强大 | 基础支持 |
| 部署复杂度 | 较高 | 较低 |
| 适用版本 | 企业版/教育版 | 企业版 |
1.3 适用场景
- 高安全环境:金融、政府、医疗等对安全要求极高的场景
- 终端防护:防止员工安装未授权软件
- 恶意软件防护:阻止未知恶意程序执行
- 合规要求:满足等保、ISO 27001等安全标准
二、WDAC策略创建
2.1 使用策略向导创建基础策略
Windows提供了ConfigCI PowerShell模块来创建WDAC策略:
# 以管理员身份运行PowerShell
# 导入ConfigCI模块
Import-Module ConfigCI
# 创建基础策略(允许Windows和Microsoft签名的应用)
New-CIPolicy -Level MicrosoftSignedOnly -UserPEs -FilePath "C:\Policies\BasePolicy.xml"
# 查看策略内容
Get-CIPolicy -FilePath "C:\Policies\BasePolicy.xml"
2.2 策略级别说明
| 级别 | 说明 | 安全性 | 易用性 |
|---|---|---|---|
| AllowMicrosoft | 只允许Microsoft签名的应用 | ★★★★★ | ★★ |
| MicrosoftSignedOnly | 允许Microsoft和受信任根签名的应用 | ★★★★ | ★★★ |
| SignedAndReputable | 允许签名且信誉良好的应用 | ★★★★ | ★★★★ |
| Installed | 允许已安装的应用 | ★★★ | ★★★★★ |
| FilePath | 基于路径允许 | ★★ | ★★★★★ |
| Hash | 基于哈希允许 | ★★★★★ | ★ |
2.3 创建自定义策略
# 创建自定义策略
$PolicyID = "{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}"
$PolicyName = "Custom WDAC Policy"
New-CIPolicy -Level SignedAndReputable -UserPEs -FilePath "C:\Policies\CustomPolicy.xml" -PolicyID $PolicyID -PolicyName $PolicyName
# 添加特定应用允许规则
# 允许特定路径下的应用
$Rule = New-CIPolicyRule -FilePathRule "C:\ApprovedApps\*"
Add-CIPolicyRule -FilePath "C:\Policies\CustomPolicy.xml" -Rule $Rule
# 允许特定发布者的应用
$PublisherRule = New-CIPolicyRule -PublisherRule -Publisher "CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US"
Add-CIPolicyRule -FilePath "C:\Policies\CustomPolicy.xml" -Rule $PublisherRule
三、WDAC策略部署
3.1 本地部署策略
# 将XML策略转换为二进制格式
ConvertFrom-CIPolicy -XmlFilePath "C:\Policies\CustomPolicy.xml" -BinaryFilePath "C:\Policies\CustomPolicy.bin"
# 部署到本地计算机
# 将策略文件复制到Code Integrity策略目录
Copy-Item "C:\Policies\CustomPolicy.bin" "C:\Windows\System32\CodeIntegrity\CIPolicies\Active\"
# 重启生效
Restart-Computer
3.2 通过组策略部署
- 打开组策略管理编辑器
- 导航到:计算机配置 → 管理模板 → 系统 → 设备防护
- 启用"打开基于虚拟化的代码完整性服务"
- 启用"配置代码完整性策略"
- 指定策略文件路径(UNC路径或本地路径)
3.3 通过MDM/Intune部署
<!-- OMA-URI策略配置 -->
<Replace>
<Item>
<Target>
<LocURI>./Device/Vendor/MSFT/Policy/Config/ApplicationGuard/ConfigureAppGuard</LocURI>
</Target>
<Meta>
<Format xmlns="syncml:metinf">chr</Format>
<Type>text/plain</Type>
</Meta>
<Data>Enabled</Data>
</Item>
</Replace>
四、WDAC策略审计与调优
4.1 审计模式部署
在正式部署前,建议先使用审计模式收集数据:
# 创建审计模式策略
New-CIPolicy -Level SignedAndReputable -UserPEs -AuditMode -FilePath "C:\Policies\AuditPolicy.xml"
# 部署审计策略
ConvertFrom-CIPolicy -XmlFilePath "C:\Policies\AuditPolicy.xml" -BinaryFilePath "C:\Policies\AuditPolicy.bin"
Copy-Item "C:\Policies\AuditPolicy.bin" "C:\Windows\System32\CodeIntegrity\CIPolicies\Active\"
4.2 分析审计日志
# 收集审计事件
$Events = Get-WinEvent -LogName "Microsoft-Windows-CodeIntegrity/Operational" |
Where-Object { $_.Id -eq 3077 -or $_.Id -eq 3076 }
# 导出被阻止的应用
$Events | Select-Object TimeCreated,
@{Name="FileName";Expression={$_.Properties[1].Value}},
@{Name="RequestedPolicy";Expression={$_.Properties[4].Value}} |
Export-Csv "C:\Reports\AuditResults.csv" -NoTypeInformation
# 统计被阻止的应用
$Events | Group-Object { $_.Properties[1].Value } |
Sort-Object Count -Descending |
Select-Object Count, Name -First 20
4.3 基于审计结果创建允许规则
# 从审计日志创建允许规则
$AuditEvents = Get-WinEvent -LogName "Microsoft-Windows-CodeIntegrity/Operational" |
Where-Object { $_.Id -eq 3077 }
# 为被阻止的合法应用创建允许规则
New-CIPolicyRule -FilePath "C:\ApprovedApps\LegitApp.exe" |
Add-CIPolicyRule -FilePath "C:\Policies\CustomPolicy.xml"
# 或使用哈希规则
New-CIPolicyRule -HashRule "C:\ApprovedApps\LegitApp.exe" |
Add-CIPolicyRule -FilePath "C:\Policies\CustomPolicy.xml"
五、WDAC高级配置
5.1 智能安全图(ISG)配置
智能安全图利用微软云端情报动态评估应用信誉:
<!-- 在策略XML中启用ISG -->
<Settings>
<Setting Provider="PolicyConfig" Key="Authorized" ValueName="AllowSupplementalPolicies">
<Value>True</Value>
</Setting>
<Setting Provider="PolicyConfig" Key="Authorized" ValueName="UseISG">
<Value>True</Value>
</Setting>
</Settings>
5.2 补充策略
补充策略可以在主策略基础上添加额外的允许规则:
# 创建补充策略
$SupplementalPolicyID = "{B2C3D4E5-F6A7-8901-BCDE-F12345678901}"
New-CIPolicy -Level FilePath -UserPEs -SupplementalPolicyName "Dev Tools" -FilePath "C:\Policies\SupplementalPolicy.xml" -PolicyID $SupplementalPolicyID
# 添加开发工具允许规则
$Rule = New-CIPolicyRule -FilePathRule "C:\DevTools\*"
Add-CIPolicyRule -FilePath "C:\Policies\SupplementalPolicy.xml" -Rule $Rule
# 部署补充策略
ConvertFrom-CIPolicy -XmlFilePath "C:\Policies\SupplementalPolicy.xml" -BinaryFilePath "C:\Policies\SupplementalPolicy.bin"
Copy-Item "C:\Policies\SupplementalPolicy.bin" "C:\Windows\System32\CodeIntegrity\CIPolicies\Active\"
5.3 脚本控制配置
# 启用PowerShell脚本控制
# 在策略XML中添加
<Macros>
<Macro Id="ID_MACRO_AUDIT" Value="1"/>
</Macros>
<Rules>
<Rule>
<Option>Enabled:Audit Mode</Option>
</Rule>
<Rule>
<Option>Enabled:UMCI</Option>
</Rule>
<Rule>
<Option>Enabled:Inherit Default Policy</Option>
</Rule>
</Rules>
六、WDAC常见兼容性问题解决
6.1 合法应用被阻止
问题: 已知的合法应用程序无法运行
解决方法:
# 查看被阻止的应用详情
Get-WinEvent -LogName "Microsoft-Windows-CodeIntegrity/Operational" -MaxEvents 10 |
Where-Object { $_.Id -eq 3077 } |
Select-Object TimeCreated, Message
# 为特定应用创建哈希允许规则
$BlockedApp = "C:\Program Files\LegitApp\app.exe"
$Hash = Get-FileHash -Path $BlockedApp -Algorithm SHA256
New-CIPolicyRule -HashRule $BlockedApp |
Add-CIPolicyRule -FilePath "C:\Policies\CustomPolicy.xml"
6.2 更新后应用无法运行
问题: 应用更新后哈希值改变,被WDAC阻止
解决方法:
- 使用发布者规则而非哈希规则
- 使用路径规则允许整个目录
- 定期更新策略以包含新版本应用的哈希
6.3 性能影响
优化建议:
- 使用缓存减少重复检查
- 避免过于细粒度的路径规则
- 使用发布者规则代替大量哈希规则
- 定期清理过时的允许规则
七、PE环境下的WDAC策略修复
当WDAC策略配置错误导致系统无法正常使用时,可以在PE环境中进行修复:
7.1 使用PE工具箱移除策略
- 使用晨枫U盘启动盘启动电脑
- 进入PE系统后打开文件资源管理器
- 导航到系统盘的
Windows\System32\CodeIntegrity\CIPolicies\Active\目录 - 删除或重命名策略文件(
.bin文件) - 重启电脑,WDAC策略将不再生效
7.2 通过注册表禁用WDAC
# 在PE命令提示符中
# 加载目标系统的注册表
reg load HKLM\TempSystem D:\Windows\System32\config\SYSTEM
# 禁用代码完整性
reg add "HKLM\TempSystem\ControlSet001\Control\CI" /v UmciPolicyState /t REG_DWORD /d 0 /f
# 卸载注册表
reg unload HKLM\TempSystem
7.3 备份和恢复策略
# 在PE中备份当前策略
xcopy "D:\Windows\System32\CodeIntegrity\CIPolicies\Active\*" "E:\WDAC-Backup\" /E /H
# 恢复策略
xcopy "E:\WDAC-Backup\*" "D:\Windows\System32\CodeIntegrity\CIPolicies\Active\" /E /H
八、WDAC最佳实践
8.1 部署策略
- 先审计后执行:始终先在审计模式下运行至少2-4周
- 逐步收紧:从宽松策略开始,逐步增加限制
- 充分测试:在测试环境验证策略后再部署到生产环境
- 定期审查:定期审查审计日志,更新允许规则
- 文档记录:记录所有策略变更和例外情况
8.2 监控与维护
# 创建监控脚本
$BlockedEvents = Get-WinEvent -LogName "Microsoft-Windows-CodeIntegrity/Operational" -MaxEvents 100 |
Where-Object { $_.Id -eq 3077 }
if ($BlockedEvents.Count -gt 0) {
# 发送告警邮件
Send-MailMessage -To "admin@company.com" -From "wdac@company.com" -Subject "WDAC Blocked Events Alert" -Body "Found $($BlockedEvents.Count) blocked events"
}
8.3 与其他安全工具配合
- Windows Defender AV:提供实时保护,与WDAC互补
- AppLocker:可以与WDAC同时使用,提供更灵活的控制
- 攻击面减少(ASR):与WDAC配合减少攻击面
- 受控文件夹访问:防止勒索软件加密重要文件
九、总结
Windows Defender应用控制(WDAC)是构建零信任安全架构的强大工具,通过严格控制应用程序的执行,可以有效阻止恶意软件和未授权程序的运行。虽然WDAC的配置和管理相对复杂,但通过合理的审计、调优和部署策略,可以在保证安全性的同时最小化对用户体验的影响。当策略配置出现问题时,晨枫PE工具箱可以作为可靠的恢复手段,确保系统始终可用。
