Sharp4BypassWDAC:一种通过上传定制化策略文件绕过 Windows Defender
字数 1906 2025-08-29 22:41:10
Windows Defender Application Control (WDAC) 绕过技术研究
0x01 WDAC 介绍
Windows Defender Application Control (WDAC) 是微软在 Windows 10 及后续版本中引入的高级安全功能,其核心用途包括:
- 只允许经过授权的应用程序和代码在系统上运行
- 阻止所有未被授权的文件执行(无论恶意还是意外引入)
- 允许管理员制定精细的应用程序运行规则
WDAC 工作原理
- 策略创建:通过扫描系统收集受信任程序的签名或哈希信息,策略以 XML 文件或编译后的 .p7b 文件形式存在
- 策略部署:将策略文件放置到系统指定路径(如
C:\Windows\System32\CodeIntegrity\SiPolicy.p7b),需要重启系统后生效 - 执行控制:当尝试执行程序时,WDAC 内核组件检查其是否符合策略要求,不符合条件的程序被阻止
WDAC Wizard 工具
微软提供的可视化工具,在线访问地址:https://webapp-wdac-wizard.azurewebsites.net/
系统要求:
- Windows 10 专业版/企业版或 Windows 11
- 需要安装 .NET 8.0 Desktop Runtime (v8.0.15)
主要功能:
- 新建策略
- 编辑策略
- 合并策略
策略文件格式:
.xml:原始未签名的 WDAC 策略文件(可阅读、修改、删除).p7b:签名后的策略二进制文件(用于系统加载)
0x02 Code Integrity 机制
代码完整性(Code Integrity)是 Windows 从 Vista 开始引入的安全机制,主要目的:
- 验证二进制文件的签名有效性
- 防止恶意程序通过加载非法驱动或篡改系统模块来提权
关键系统目录:C:\Windows\System32\CodeIntegrity\
重要文件:
SiPolicy.p7b:应用控制(WDAC)策略文件BootSiPolicy.p7b:系统启动阶段使用的策略文件(比 SiPolicy.p7b 更早生效)ci.dll:核心的代码完整性验证模块(Windows 内核级驱动)
0x03 应用控制策略创建
PowerShell 命令
-
New-CIPolicy:
- 扫描机器上已存在的文件(如 C:\Windows、C:\Program Files 等)
- 提取签名信息或哈希
- 生成基于规则的 XML 文件(如 SiPolicy.xml)
-
ConvertFrom-CIPolicy:
- 将 XML 转换为二进制的 .p7b 文件
- 应用到 Code Integrity 系统
注意事项:
- Windows 家庭版不支持 New-CIPolicy
- 需要企业版、专业版或服务器版本
命令示例
-
检查 New-CIPolicy 命令是否存在:
Get-Command New-CIPolicy -
创建策略文件:
# 创建临时输出目录 New-Item -ItemType Directory -Force -Path "C:\WindowsTemp\SiPolicy" # 生成XML策略文件 New-CIPolicy -FilePath "C:\WindowsTemp\SiPolicy\SiPolicy.xml" -ScanPath "C:\Windows" -UserPEs # 转换为二进制p7b格式 ConvertFrom-CIPolicy "C:\WindowsTemp\SiPolicy\SiPolicy.xml" "C:\WindowsTemp\SiPolicy\SiPolicy.p7b"
0x04 绕过WDAC的技术实现
Sharp4BypassWDAC 工具原理
通过上传自定义 SiPolicy.p7b 文件并强制系统重启实现WDAC绕过
核心操作:
- 上传 SiPolicy.p7b 文件到目标机
- 强制远程或本地重启目标机
技术流程:
-
定位远程机器的 CodeIntegrity 目录:
\\host\C$\Windows\System32\CodeIntegrity\SiPolicy.p7b -
读取并写入自定义策略文件:
byte[] policy = Modules.Policy.ReadPolicy(); File.WriteAllBytes(target, policy); -
强制重启目标机:
- 使用系统自带的 shutdown.exe 命令
- 而非 InitiateSystemShutdownEx API
攻击执行步骤
- 获取目标机器名称
- 以管理员身份运行 Sharp4BypassWDAC.exe:
Sharp4BypassWDAC.exe -host <目标主机名> -warn false
攻击效果:
- SiPolicy.p7b 在 Windows 启动早期加载
- 成功替换并重启后,目标主机的防护被关闭
- 后续防护机制难以阻止这种攻击
防御建议
-
监控关键目录:
- 加强对
C:\Windows\System32\CodeIntegrity\目录的监控 - 特别关注 SiPolicy.p7b 文件的修改
- 加强对
-
限制策略修改权限:
- 严格控制对 WDAC 策略的修改权限
- 实施多因素认证进行策略变更
-
日志审计:
- 启用并监控 WDAC 相关事件日志
- 设置对策略文件修改的告警
-
系统加固:
- 启用 UEFI 安全启动
- 配置 HVCI (Hypervisor-Protected Code Integrity)
-
应急响应:
- 建立 WDAC 策略备份机制
- 制定策略被篡改后的恢复流程