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 工作原理

  1. 策略创建:通过扫描系统收集受信任程序的签名或哈希信息,策略以 XML 文件或编译后的 .p7b 文件形式存在
  2. 策略部署:将策略文件放置到系统指定路径(如 C:\Windows\System32\CodeIntegrity\SiPolicy.p7b),需要重启系统后生效
  3. 执行控制:当尝试执行程序时,WDAC 内核组件检查其是否符合策略要求,不符合条件的程序被阻止

WDAC Wizard 工具

微软提供的可视化工具,在线访问地址:https://webapp-wdac-wizard.azurewebsites.net/

系统要求

  • Windows 10 专业版/企业版或 Windows 11
  • 需要安装 .NET 8.0 Desktop Runtime (v8.0.15)

主要功能

  1. 新建策略
  2. 编辑策略
  3. 合并策略

策略文件格式

  • .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 命令

  1. New-CIPolicy

    • 扫描机器上已存在的文件(如 C:\Windows、C:\Program Files 等)
    • 提取签名信息或哈希
    • 生成基于规则的 XML 文件(如 SiPolicy.xml)
  2. ConvertFrom-CIPolicy

    • 将 XML 转换为二进制的 .p7b 文件
    • 应用到 Code Integrity 系统

注意事项

  • Windows 家庭版不支持 New-CIPolicy
  • 需要企业版、专业版或服务器版本

命令示例

  1. 检查 New-CIPolicy 命令是否存在:

    Get-Command New-CIPolicy
    
  2. 创建策略文件:

    # 创建临时输出目录
    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绕过

核心操作

  1. 上传 SiPolicy.p7b 文件到目标机
  2. 强制远程或本地重启目标机

技术流程

  1. 定位远程机器的 CodeIntegrity 目录:
    \\host\C$\Windows\System32\CodeIntegrity\SiPolicy.p7b

  2. 读取并写入自定义策略文件:

    byte[] policy = Modules.Policy.ReadPolicy();
    File.WriteAllBytes(target, policy);
    
  3. 强制重启目标机:

    • 使用系统自带的 shutdown.exe 命令
    • 而非 InitiateSystemShutdownEx API

攻击执行步骤

  1. 获取目标机器名称
  2. 以管理员身份运行 Sharp4BypassWDAC.exe:
    Sharp4BypassWDAC.exe -host <目标主机名> -warn false
    

攻击效果

  • SiPolicy.p7b 在 Windows 启动早期加载
  • 成功替换并重启后,目标主机的防护被关闭
  • 后续防护机制难以阻止这种攻击

防御建议

  1. 监控关键目录

    • 加强对 C:\Windows\System32\CodeIntegrity\ 目录的监控
    • 特别关注 SiPolicy.p7b 文件的修改
  2. 限制策略修改权限

    • 严格控制对 WDAC 策略的修改权限
    • 实施多因素认证进行策略变更
  3. 日志审计

    • 启用并监控 WDAC 相关事件日志
    • 设置对策略文件修改的告警
  4. 系统加固

    • 启用 UEFI 安全启动
    • 配置 HVCI (Hypervisor-Protected Code Integrity)
  5. 应急响应

    • 建立 WDAC 策略备份机制
    • 制定策略被篡改后的恢复流程
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 命令是否存在: 创建策略文件: 0x04 绕过WDAC的技术实现 Sharp4BypassWDAC 工具原理 通过上传自定义 SiPolicy.p7b 文件并强制系统重启实现WDAC绕过 核心操作 : 上传 SiPolicy.p7b 文件到目标机 强制远程或本地重启目标机 技术流程 : 定位远程机器的 CodeIntegrity 目录: \\host\C$\Windows\System32\CodeIntegrity\SiPolicy.p7b 读取并写入自定义策略文件: 强制重启目标机: 使用系统自带的 shutdown.exe 命令 而非 InitiateSystemShutdownEx API 攻击执行步骤 获取目标机器名称 以管理员身份运行 Sharp4BypassWDAC.exe: 攻击效果 : SiPolicy.p7b 在 Windows 启动早期加载 成功替换并重启后,目标主机的防护被关闭 后续防护机制难以阻止这种攻击 防御建议 监控关键目录 : 加强对 C:\Windows\System32\CodeIntegrity\ 目录的监控 特别关注 SiPolicy.p7b 文件的修改 限制策略修改权限 : 严格控制对 WDAC 策略的修改权限 实施多因素认证进行策略变更 日志审计 : 启用并监控 WDAC 相关事件日志 设置对策略文件修改的告警 系统加固 : 启用 UEFI 安全启动 配置 HVCI (Hypervisor-Protected Code Integrity) 应急响应 : 建立 WDAC 策略备份机制 制定策略被篡改后的恢复流程