Sharp4XOMLLoader:通过执行XOML文件代码绕过安全防护

Sharp4XOMLLoader.exe是一款用于执行嵌入在XOML中.NET代码的工具。由于该程序出自于.NET SDK包,因此自带微软的数字签名,能够有效的绕过杀毒软件的监控,执行潜在的恶意代码,同时,该技术利用了XOML的合法性以及系统中对白名单程序的高度信任,使得恶意代码的执行更加隐蔽,难以被检测和阻止。

0x01 Sharp4XOMLLoader是什么

Sharp4XOMLLoader源自 WFC.exe,作为.NET Framework工具套件的一部分,专门用于编译Windows Workflow Foundation (WF) 以构建支持工作流程的应用程序。具体而言,Sharp4XOMLLoader.exe 的功能是将工作流文件,主要是.XOML文件,编译成可执行的.NET程序集。通常,您可以在cmd命令提示符中执行以下命令:

Sharp4XOMLLoader.exe MyWorkflow.xoml /out:MyWorkflow.dll

此命令将 MyWorkflow.xoml 文件编译成一个名为 MyWorkflow.dll 的程序集。

0x02 WF工作流是什么

WF(Windows Workflow Foundation)是Microsoft .NET Framework中的一项框架技术,通过编程能够定义、执行和管理工作流程,适用于从简单的任务自动化到复杂的业务流程管理,这些步骤可以是手动操作,也可以是自动化的系统任务。在企业应用中,工作流程常用于自动化重复性任务,例如办公审批流程、数据处理流水线等。WF工作流的核心概念,主要有如下几项:

  • 活动(Activity):活动是工作流程中的基本构建块,每个活动代表一个具体的操作或任务。例如,一个活动可以是发送电子邮件。
  • 工作流程(Workflow):工作流程是由一系列活动按一定顺序组成的逻辑流程。
  • 工作流程运行时(Workflow Runtime):这是WF中的核心组件,负责管理和执行工作流程,可以控制工作流程的启动、暂停、继续和终止。

0x03 详解XOML文件

XOML文件是一种基于XML的文件格式,专用于定义和描述Windows Workflow Foundation (WF) 中的工作流程。通过XOML文件,可以指定WF工作流的结构、活动及其行为,而无需在.cs文件中编写大量的代码。
通常一个典型的XOML文件和WPF里的XAML文件基本一致,以下是一段XOML文件的示例代码,主要展示了一个简单的顺序工作流程。包括以下几个主要部分

<SequentialWorkflowActivity x:Class="MyWorkflow" x:Name="foobarx"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow">
  <SequentialWorkflowActivity Enabled="False">
  </SequentialWorkflowActivity>
</SequentialWorkflowActivity>

SequentialWorkflowActivity是.NET早期的版本中XOML文件的根元素,定义了一个顺序工作流程。顺序工作流程意味着各个活动将按照它们在文件中的顺序依次执行。x:Class属性指定了工作流程的类名:MyWorkflow,x:Name属性为工作流程实例指定了一个名称叫foobarx。
xmlns 和 xmlns:x 用于声明XAML和工作流程相关的命名空间,这是为了确保XOML文件中的元素和属性能够正确地映射到.NET Framework中的类型和成员。
值得一提的是,XOML文件通过xml<x:Code>标签,可以在XOML文件中直接嵌入.NET代码,从而在工作流程执行过程中启动winver.exe进程。具体如下所示。

<x:Code>
      Object test = System.Diagnostics.Process.Start("cmd.exe", "/c winver");
</x:Code>

因为程序自带微软签名,如果把winver.exe换成启动恶意木马的进程,通过该工具能够绕过反病毒软件的监控,执行恶意代码。

0x04 原理分析

当 Sharp4XOMLLoader.exe 编译 XOML 文件时,依赖于内部的编译器组件和多个辅助类来完成整个编译流程。这些组件和方法共同作用,最终将 XOML 文件编译成可执行的 .NET 程序集。打开dnspy.exe,在调试参数处输入 1.xoml

首先使用 AppDomain.CreateInstanceAndUnwrap 方法在独立的 AppDomain 中创建 WorkflowCompilerInternal 的对象。这种方法可以隔离编译过程,确保编译操作不会影响其他应用程序域的状态。

其实,workflowCompilerInternal.Compile 方法是实际执行编译的核心步骤,parameters 包含了编译所需的配置和选项,files 则是待编译的 XOML 文件。

随后,通过GenerateLocalAssembly方法编译生成了一个临时的dll文件,通常路径位于:

@C:\Users\User\AppData\Local\Temp\oi0a1mun\1.dll

接着,XomlCompilerHelper.InternalCompileFromDomBatch 方法被调用,用于处理 XOML 文件的具体编译。如下图所示

最终,Sharp4XOMLLoader.exe 经过一系列的方法调用触发命令执行,从而启动winver.exe进程。如下图所示。

0x05 小结

综上,Sharp4XOMLLoader.exe工具凭借微软数字签名的掩护,巧妙地绕过安全防线,执行XOML文件内嵌的.NET恶意代码。其利用XOML的合法身份及系统对信任程序的宽松态度,实现了恶意行为的高度隐蔽性。

0 条评论
某人
表情
可输入 255