利用微软Workflow.Comiler.exe执行未签名的任意代码

2018 年 10 月 6 日 FreeBuf

绕过技术简介

Microsoft.Workflow.Comiler.exe是.NET Framework默认自带的一个实用工具,用户能够以XOML工作流文件的形式提供一个序列化工作流来执行任意未签名的代码。这种绕过技术跟CaseySmith的msbuild.exe绕过技术的工作机制非常类似。Microsoft.Workflow.Comiler.exe需要两个命令行参数,第一个参数必须是一个XML文件(由一个序列化CompilerInput对象构成)的路径,第二个参数则是写入序列化编译结果的文件路径。

执行向量的根节点是Microsoft.Workflow.Comiler.exe调用攻击者提供的Assembly.Load(byte[])方法,但是仅仅加载编译文件并不能实现代码执行,当攻击者以XOML文件的形式提供C#或VB.Net代码时,系统在汇编过程中会调用类构造器,这里唯一的限制是类构造器必须派生自System.Workflow.ComponentModel.Activity类。

这种技术可以绕过目前很多安全产品上的代码完整性控制机制,例如WindowsDefender应用程序控制(包括Windows 10S)、AppLocker以及其他基于应用白名单的产品。但是这里我们并不是要担心如何绕过应用白名单,我们需要关注的是如何通过已签名且受信任程度高的内置应用程序来执行任意未签名的代码。

下面给大家提供了一个演示视频,在这个视频中我们会在最新版本的Windows 10S系统(已安装完所有更新补丁)上实现任意代码执行:

演示视频


绕过技术PoC

攻击流程如下:

1.将制作的XOML文件存储到目标磁盘中,XOML文件中应包含攻击者提供的C#或VB.Net代码以供编译、加载和调用。攻击逻辑需在类构造函数中实现,该类派生自System.Workflow.ComponetModel.Activity类。

2.将包含序列化CompilerInput对象的XML文件存储到目标磁盘中。

3.提供XML路径,执行Microsoft.Workflow.Comiler.exe。

下面给出的是Microsoft.Workflow.Comiler.exe的调用样例:

test.xml文件的内容如下:

test.xoml文件的内容如下:

调用Microsoft.Workflow.Compiler.exe之后,它将会编译其中的C#代码、加载已编译的DLL、并调用“Foo”构造器。

漏洞的发现过程

我个人比较喜欢去研究关于.NET Framework方法的安全问题,比如说其中一个不安全的方法就是Assembly.Load(byte[])。这里我选择使用dnSpy工具来进行扫描判断,并在System.Workflow.ComponentModel.Compiler.WorkflowCompilerInternal.Compile方法中找到了如下所示的代码段:

分析GenerateLocalAssembly方法的工作流程之后,我发现这个方法最终会调用标准的.NET编译/加载方法【相关资料点击阅读原文查看】:

仅仅加载一个汇编程序并不能实现任意代码执行,不过幸运的是,System.Workflow.ComponentModel.Compiler.XomlCompilerHelper.InternalCompileFromDomBatch方法会遍历所有已加载的汇编程序,然后实例化所有继承了System.Workflow.ComponentModel.Activity类的实例:

现在,我们几乎已经看到了任意代码执行的“希望了”,接下来我们需要弄清楚到底使用哪种代码格式,才能让程序的编译器接收输入数据以及XOML工作流文件。

当Microsoft.Workflow.Compiler.exe启动时,会将第一个参数传递给ReadCompilerInput方法,该方法接收到文件路径之后,会将其反序列化为CompilerInput对象:

那么现在的问题就在于,如何才能生成序列化的CompilerInput对象呢?这里我找到了一个名叫Microsoft.Workflow.Compiler.CompilerWrapper.SerializeInputToWrapper的内部方法:

我还专门编写了一个PowerShell函数来实现XML文件的自动生成:

实际上我们只需要改变序列化CompilerInput对象中XOML文件的路径/文件名即可。

最后,我们需要将生成的C#代码嵌入到XOML文件中,最后通过Microsoft.Workflow.Compiler.exe来调用我们的恶意函数。

整个过程就是这样,不过我现在仍不清楚Microsoft.Workflow.Compiler.exe的真正用途到底是什么,而且XOML文件的意义我也不清楚,但是我感觉这个程序可能主要是给微软内部人员使用的。

检测方法

1.首先,检查当前系统中Microsoft.Workflow.Compiler.exe的使用情况,一般来说系统几乎不会用到这个工具。在Microsoft.Workflow.Compiler.exe每次运行时都产生警报,由于攻击者可以对该工具进行重命名,因此我们还需要构建相应的检测规则 

2.攻击者在结合Microsoft.Workflow.Compiler.exe运行恶意软件时,会生成一个csc.exe或vbc.exe子进程,可以通过检测这两个子进程来判断系统的安全状况。

3.在构建和部署Yara规则时,如果文件中包含CompilerInput标签,那么该文件则可以标记为“可疑文件”。

针对上述的三种检测方法,我开发了一个Payload生成/测试工具,大家可以利用该工具来判断各自系统中安全检测方法的有效性:【下载地址】

*参考来源:specterops,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

登录查看更多
0

相关内容

序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
192+阅读 · 2020年6月29日
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
57+阅读 · 2020年6月26日
【干货书】现代数据平台架构,636页pdf
专知会员服务
253+阅读 · 2020年6月15日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【WWW2020-微软】理解用户行为用于文档推荐
专知会员服务
35+阅读 · 2020年4月5日
【GitHub实战】Pytorch实现的小样本逼真的视频到视频转换
专知会员服务
35+阅读 · 2019年12月15日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
87+阅读 · 2019年11月25日
注意力机制介绍,Attention Mechanism
专知会员服务
168+阅读 · 2019年10月13日
用 Python 开发 Excel 宏脚本的神器
私募工场
26+阅读 · 2019年9月8日
msf实现linux shell反弹
黑白之道
49+阅读 · 2019年8月16日
“黑客”入门学习之“windows系统漏洞详解”
安全优佳
8+阅读 · 2019年4月17日
Linux挖矿病毒的清除与分析
FreeBuf
14+阅读 · 2019年4月15日
Python用于NLP :处理文本和PDF文件
Python程序员
4+阅读 · 2019年3月27日
基于Web页面验证码机制漏洞的检测
FreeBuf
7+阅读 · 2019年3月15日
如何编写完美的 Python 命令行程序?
CSDN
5+阅读 · 2019年1月19日
CVE-2018-7600 - Drupal 7.x 远程代码执行exp
黑客工具箱
14+阅读 · 2018年4月17日
微软发布Visual Studio Tools for AI
AI前线
4+阅读 · 2017年11月20日
Arxiv
3+阅读 · 2018年11月29日
Knowledge Based Machine Reading Comprehension
Arxiv
4+阅读 · 2018年9月12日
Doubly Attentive Transformer Machine Translation
Arxiv
4+阅读 · 2018年7月30日
Arxiv
3+阅读 · 2018年3月21日
Arxiv
3+阅读 · 2017年11月21日
VIP会员
相关VIP内容
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
192+阅读 · 2020年6月29日
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
57+阅读 · 2020年6月26日
【干货书】现代数据平台架构,636页pdf
专知会员服务
253+阅读 · 2020年6月15日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【WWW2020-微软】理解用户行为用于文档推荐
专知会员服务
35+阅读 · 2020年4月5日
【GitHub实战】Pytorch实现的小样本逼真的视频到视频转换
专知会员服务
35+阅读 · 2019年12月15日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
87+阅读 · 2019年11月25日
注意力机制介绍,Attention Mechanism
专知会员服务
168+阅读 · 2019年10月13日
相关资讯
用 Python 开发 Excel 宏脚本的神器
私募工场
26+阅读 · 2019年9月8日
msf实现linux shell反弹
黑白之道
49+阅读 · 2019年8月16日
“黑客”入门学习之“windows系统漏洞详解”
安全优佳
8+阅读 · 2019年4月17日
Linux挖矿病毒的清除与分析
FreeBuf
14+阅读 · 2019年4月15日
Python用于NLP :处理文本和PDF文件
Python程序员
4+阅读 · 2019年3月27日
基于Web页面验证码机制漏洞的检测
FreeBuf
7+阅读 · 2019年3月15日
如何编写完美的 Python 命令行程序?
CSDN
5+阅读 · 2019年1月19日
CVE-2018-7600 - Drupal 7.x 远程代码执行exp
黑客工具箱
14+阅读 · 2018年4月17日
微软发布Visual Studio Tools for AI
AI前线
4+阅读 · 2017年11月20日
相关论文
Top
微信扫码咨询专知VIP会员