如何无需参考文件,利用发布者与SHA256哈希值创建WDAC规则?
无实际文件时创建WDAC允许规则的方法
1. 手动创建哈希规则(最精准)
从事件日志提取目标文件的SHA256哈希值后,直接用PowerShell命令生成规则,无需本地文件:
# 创建单个哈希规则 $hashRule = New-CIPolicyRule -Hash "提取到的SHA256哈希字符串" -FriendlyName "允许[程序名称]运行" # 将规则添加到现有WDAC策略XML Add-CIPolicyRule -PolicyFilePath ".\现有策略文件.xml" -Rule $hashRule # 转换XML为可部署的二进制策略文件 ConvertFrom-CIPolicy -XmlFilePath ".\现有策略文件.xml" -BinaryFilePath ".\更新后的策略.bin"
哈希规则对所有文件格式(EXE、MSI、DLL、MSP等)都适用,且不会被文件名/路径变更影响。
2. 手动构建发布者规则(需完整证书链信息)
如果事件日志中能提取到完整的发布者证书链信息(如发布者CN、产品名称、证书序列号等),可以直接构造发布者规则:
# 示例:基于发布者+产品名创建规则 $publisherRule = New-CIPolicyRule -Publisher "CN=发布者名称" -ProductName "目标产品名" -FileVersionRange "*" -FriendlyName "允许[发布者]的[产品]系列程序" # 添加到策略并转换部署 Add-CIPolicyRule -PolicyFilePath ".\现有策略文件.xml" -Rule $publisherRule ConvertFrom-CIPolicy -XmlFilePath ".\现有策略文件.xml" -BinaryFilePath ".\更新后的策略.bin"
这种规则允许同一发布者签名的同系列程序运行,无需逐个添加哈希,适合频繁更新的软件。
3. 批量处理拦截事件生成规则
如果有多个需授权的拦截事件,可通过PowerShell解析事件日志批量生成规则:
# 筛选已审核通过的WDAC拦截事件(事件ID 1001) $approvedEvents = Get-WinEvent -LogName "Microsoft-Windows-Windows Defender Application Control/Operational" -FilterXPath "*[System[EventID=1001]]" | Where-Object { $_.Properties[1].Value -eq "已审核通过的程序名称" } # 批量生成哈希规则并添加到策略 foreach ($event in $approvedEvents) { $targetHash = $event.Properties[2].Value $ruleName = "允许被拦截程序: $($event.Properties[1].Value)" $newRule = New-CIPolicyRule -Hash $targetHash -FriendlyName $ruleName Add-CIPolicyRule -PolicyFilePath ".\现有策略文件.xml" -Rule $newRule } # 转换为二进制策略 ConvertFrom-CIPolicy -XmlFilePath ".\现有策略文件.xml" -BinaryFilePath ".\批量更新后的策略.bin"
注意提前过滤事件,只保留已审核通过的条目,避免误加未授权程序。
关键注意事项
- 哈希规则:程序更新后SHA256值会变化,需重新添加新哈希规则。
- 发布者规则:必须确保事件日志中提取的证书链信息完整准确,否则规则会失效。
- 策略部署:更新后的二进制策略文件需通过MDM、组策略或本地脚本推送到远程笔记本。
内容的提问来源于stack exchange,提问作者Evan01
相关产品推荐
相关产品推荐

