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的合法身份及系统对信任程序的宽松态度,实现了恶意行为的高度隐蔽性。