具体的攻击手法是”养号“,然后诱骗安全研究人员下载他们带有恶意代码的POC,在编译的时候会触发的恶意命令和代码。
绿盟科技
https://mp.weixin.qq.com/s/7RwH5_h2rGn3MxGIngal6A
从绿盟科技的文章中我们可以知道事件的背景和一些信息。
我们从公开的报告中可以知道Lazarus组织的利用编译事件(Build Events)的攻击方法,接下来我们一起复现一下这个手法吧。
我们先来查看一下在微软文档中关于编译事件(Build Events)的资料
https://docs.microsoft.com/en-us/visualstudio/ide/specifying-custom-build-events-in-visual-studio?view=vs-2019
微软文档中说“通过指定自定义构建事件,我们可以在构建开始之前或构建完成之后自动运行命令,仅当构建成功达到构建过程中的那些点时,构建事件才会运行”,例如:
可以在构建开始之前运行.bat文件,或者在构建完成后将新文件复制到文件夹中。
这个不难理解。
我们继续看微软文档中的资料可以知道Build Events具有3种事件,分别为:
1.Pre-build event command line 预先生成事件;在编译前执行自定义任务
指定在构建开始之前要执行的所有命令,如果项目是最新的并且未触发任何构建,则预构建事件不会运行。
2.Post-build event command line 预链接事件;在链接前执行自定义任务
指定在构建结束后要执行的所有命令
3.Run the post-build event 后期生成事件;在编译完成后执行自定义任务
在这个中具有以下参数: 选项 结果 总是 无论构建是否成功,都会运行构建后事件。 成功构建 如果构建成功,则将运行构建后事件。因此,只要构建成功,该事件甚至将针对最新的项目运行。 当构建更新项目输出时 仅当编译器的输出文件(.exe或.dll)不同于先前的编译器输出文件时,才会运行构建后事件。因此,如果项目是最新的,则不会运行构建后事件。 https://docs.microsoft.com/en-us/visualstudio/ide/reference/build-events-page-project-designer-csharp?view=vs-2019
其中在微软文档中也给出了对应的XML 元素,有兴趣的同学可以自行看看
在Lazarus组织中是利用Visual Studio进行利用的,那么我们来复现一下利用手法:
就可以看到了,正如上面看到的具有3种事件
我们来利用一下第一种事件看看
第一种可以直接执行命令行也可以执行宏代码:
这里简单复现一下,就不讨论宏代码的一个情况了。
在cobalt strike种直接生成powershell的恶意脚本。
把命令放在visual studio中
应用然后编译
可以看到直接上线。
接着是第二种情况,我的电脑性能较差,因此我没有使用cobalt strike上线,我们使用弹计算器来验证可利用性
编译
同理,第3种也是
我们也可以在项目文件中直接添加我们需要执行的命令
打开项目目录可以看到
其中以.vcxproj结尾的文件就是我们需要利用的文件。
*.vcxproj:VS2010以及VS2010之后版本的VS工程文件
这里使用notepad++打开,这个文件其实也是一个xml文件。
ok 我们直接查找PreBuildEvent,PreLinkEvent,PostBuildEvent这3个xml元素
这里以PreBuildEvent进行利用
可以看到在PreBuildEvent 具有参数,这里就是可以执行命令的地方,
保存一下然后导进vs中进行编译
这里再分享一个手法吧 我看到网上的分析文章都是说PreBuildEvent,PreLinkEvent,PostBuildEvent这三个利用点,都是其实还有一个的地方可以给我们利用
我们可以回看到.vcxproj文件,然后全局查找一下Command可以发现具有4个Command参数,
除了3个我们说过的之外,还有一个在中
添加我们需要执行的命令
保存然后编译一下,但是发现并不能成功利用,通过查看微软文档知道我们还需要构建一个输出叁数。
然后编译,弹出计算机
图形化的利用在
理论上所有的IDE都能这样利用,我们可以看一下在Microsoft Visual中的利用过程吧
打开vc然后新建一个工程,在上面的工具栏找到工程然后是设置
在命令中填入我们需要执行的命令
我这里就弹计算机吧 然后编译成exe
在编译的时就会执行我们的命令。
当然这个也有3种:
在自定义步骤中的参数有2个
分别是命令和输出
命令可以放我们的shellcode 输出的话都可以的
同样也是可以执行我们的命令的
同理 post-bulid也是可以执行命令的
在后面翻资料的时候发现了一个有意思的文章
在前面的Visual Studio中我复现了这个APT的手法,我们可以再一次看微软文档发现在Visual Studio存在一个引擎--Microsoft Build Engine
不难理解,MSBuild可以在未安装Visual Studio的环境中编排和构建产品(可以简单理解为执行可以代码),而且Visual Studio使用MSBuild加载和生成托管项目。比如说,像在Visual Studio中,存在一些项目文件,像是.csproj、.vbproj、.vcxproj等等
在.NET Framework 4.0中支持了一项新功能”Inline Tasks”,被包含在元素UsingTask中,可用来在xml文件中执行c#代码
这里是不是看着很眼熟?哈哈哈
没错,前面我们在复现这个APT组织的手法中知道了我们那个利用点就是.vcxproj文件,那么我们可以脱离VS来进行利用。
我们去微软中下载msbuild.exe 当然在.net中我们也能查找到
利用起来也不难 在MSF中可以直接生成利用代码
具体的利用手法前辈们总结好了
https://www.cnblogs.com/backlion/p/10490573.html
这里补充一些利用手法吧
执行powershell命令
这里参考3gstudent和Casey的手法,但是Casey给出的POC挂了,所以我们可以使用3gstudent的POC来进行利用
https://github.com/3gstudent/msbuild-inline-task/blob/master/executes%20PowerShellCommands.xml
以上就是如何利用Build Events特性执行代码复现的详细内容,更多请关注Work网其它相关文章!