Lazarus APT攻击手法之利用Build Events特性执行代码复现

近日,Google

TAG安全部门披露了一起利用推特等社交媒体针对不同公司和组织从事漏洞研究和开发的安全研究人员的社会工程学攻击事件,经绿盟科技伏影实验室分析,确认此次事件为Lazarus组织针对网络安全行业的一次针对性网络攻击,并猜测其可能有更深层次的攻击意图和行动。绿盟科技攻击对抗技术研究团队M01N

Team也针对此次事件展开了全面的分析研判,认定本次事件是一个典型的“明修栈道、暗渡陈仓”社会工程学攻击事件,也将在本文中揭秘该事件中Lazarus组织使用的一种新型间接命令执行攻击技术。

Lazarus组织是一支来自朝鲜半岛的APT组织。该组织自2007年就开始活跃,长期对韩国、中国、美国、印度等国家进行攻击活动。据国外安全公司的调查显示,Lazarus组织与2014年索尼影业遭黑客攻击事件,2016

年孟加拉国银行数据泄露事件,2017年美国国防承包商、美国能源部门及英国、韩国等比特币交易所被攻击等事件有关。2017年席卷全球的最臭名昭著的安全事件“Wannacry”勒索病毒也被怀疑是该组织所为。

绿盟科技
https://mp.weixin.qq.com/s/7RwH5_h1rGn3MxGIngal6A

具体的攻击手法是”养号“,然后诱骗安全研究人员下载他们带有恶意代码的POC,在编译的时候会触发的恶意命令和代码。

Lazarus组织的攻击者伪装成安全研究人员建立了一个研究博客和多个Twitter账号,这些伪装账号大都打上了Web开发、浏览器漏洞挖掘、Windows内核安全甚至CTF选手等一些身份标签,并会发布一些安全研究动态,同时相互评论转发来扩大影响力。

微信图片_20210128231650.png

另外他们的博客(https://blog.br0vvnn[.]
io)发表了多个已公开披露的漏洞分析文章,还包含一些不知情安全研究人员的来访评论,以图在安全研究人员中建立更高的信任度。

微信图片_20210128231654.png

在建立了一定的研究影响力后,攻击者会主动寻找目标安全研究人员进行交流,并表达希望在漏洞研究方面进行更深入合作和交流的想法。此后攻击者便会向安全研究人员分享了一个Visual
Studio的项目工程文件,该项目文件明为一些漏洞的POC代码,暗则是包含了等待目标研究员编译执行来触发的恶意命令和代码。

绿盟科技
https://mp.weixin.qq.com/s/7RwH5_h1rGn3MxGIngal6A

从绿盟科技的文章中我们可以知道事件的背景和一些信息。

我们从公开的报告中可以知道Lazarus组织的利用编译事件(Build Events)的攻击方法,接下来我们一起复现一下这个手法吧。

我们先来查看一下在微软文档中关于编译事件(Build Events)的资料

By specifying a custom build event, you can automatically run commands
before a build starts or after it finishes. For example, you can run a
.bat file before a build starts or copy new files to a folder after
the build is complete. Build events run only if the build successfully
reaches those points in the build process.

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 元素,有兴趣的同学可以自行看看

微信截图_20210128235823.png

在Lazarus组织中是利用Visual Studio进行利用的,那么我们来复现一下利用手法:

1.打开Visual Studio
2.新建一个项目
3.进入项目的属性

就可以看到了,正如上面看到的具有3种事件

微信截图_20210129000159.png

我们来利用一下第一种事件看看

第一种可以直接执行命令行也可以执行宏代码:

微信截图_20210129004912.png

这里简单复现一下,就不讨论宏代码的一个情况了。

在cobalt strike种直接生成powershell的恶意脚本。

微信截图_20210129005452.png

把命令放在visual studio中

微信截图_20210129005618.png

应用然后编译

微信截图_20210129010912.png

可以看到直接上线。

然后是第2种,电脑比较卡,所以我就不上线cobalt strike了,我们使用弹计算器来证明可利用吧

微信截图_20210129012429.png

编译

微信截图_20210129012525.png

同理,第3种也是

微信截图_20210129012708.png

我们也可以在项目文件中直接添加我们需要执行的命令

打开项目目录可以看到

微信截图_20210130200247.png

其中以.vcxproj结尾的文件就是我们需要利用的文件。

*.vcxproj:VS2010以及VS2010之后版本的VS工程文件

这里使用notepad++打开,这个文件其实也是一个xml文件。

ok 我们直接查找PreBuildEvent,PreLinkEvent,PostBuildEvent这3个xml元素

这里以PreBuildEvent进行利用

微信截图_20210130203217.png

可以看到在PreBuildEvent 具有参数,这里就是可以执行命令的地方,

微信截图_20210130203649.png

保存一下然后导进vs中进行编译

微信截图_20210130203849.png

这里再分享一个手法吧
我看到网上的分析文章都是说PreBuildEvent,PreLinkEvent,PostBuildEvent这三个利用点,都是其实还有一个的地方可以给我们利用

我们可以回看到.vcxproj文件,然后全局查找一下Command可以发现具有4个Command参数,

微信截图_20210130210025.png

除了3个我们说过的之外,还有一个在中

添加我们需要执行的命令

微信截图_20210130210329.png

保存然后编译一下,但是发现并不能成功利用,通过查看微软文档知道我们还需要构建一个输出叁数。

微信截图_20210130210809.png

然后编译,弹出计算机

微信截图_20210130210755.png

图形化的利用在

微信截图_20210130211244.png

理论上所有的IDE都能这样利用,我们可以看一下在Microsoft Visual中的利用过程吧

打开vc然后新建一个工程,在上面的工具栏找到工程然后是设置

屏幕截图 2021-01-30
155318.png

微信截图_20210130155605.png

在命令中填入我们需要执行的命令

我这里就弹计算机吧 然后编译成exe

屏幕截图 2021-01-30
155848.png

在编译的时就会执行我们的命令。

微信截图_20210130160125.png

当然这个也有3种:

1.自定义构建
2.pre-link步骤
3.Post-bulid步骤

在自定义步骤中的参数有2个
分别是命令和输出

命令可以放我们的shellcode 输出的话都可以的

微信截图_20210130162045.png

同样也是可以执行我们的命令的

微信截图_20210130162120.png

同理 post-bulid也是可以执行命令的
微信截图_20210130162257.png

在后面翻资料的时候发现了一个有意思的文章

在前面的Visual Studio中我复现了这个APT的手法,我们可以再一次看微软文档发现在Visual Studio存在一个引擎–Microsoft
Build Engine

The Microsoft Build Engine is a platform for building applications.
This engine, which is also known as MSBuild, provides an XML schema
for a project file that controls how the build platform processes and
builds software. Visual Studio uses MSBuild, but MSBuild doesn’t
depend on Visual Studio. By invoking msbuild.exe on your project or
solution file, you can orchestrate and build products in environments
where Visual Studio isn’t installed.

Visual Studio uses MSBuild to load and build managed projects. The
project files in Visual Studio (.csproj, .vbproj, .vcxproj, and
others) contain MSBuild XML code that executes when you build a
project by using the IDE. Visual Studio projects import all the
necessary settings and build processes to do typical development work,
but you can extend or modify them from within Visual Studio or by
using an XML editor.

不难理解,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中我们也能查找到

屏幕截图 2021-02-01
162009.png

利用起来也不难 在MSF中可以直接生成利用代码

我们使用Microsoft

VisualStudio创建以MSBuild格式保存的、带有*.csproj后缀的C#代码,以便可以使用MSBuild平台将其编译为可执行程序。借助于一个恶意的构建的过程,我们可以获得受害者计算机的反向shell。接下来,我们要生成file.csproj文件,为此,首先需要通过msfvenom生成一个基于C#的shellcode。之后,将该shellcode放入我们的file.csproj中,具体如下所示。

具体的利用手法前辈们总结好了

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

未完。。。。。。。。

//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

未完。。。。。。。。

学习网络安全技术的方法无非三种:

第一种是报网络安全专业,现在叫网络空间安全专业,主要专业课程:程序设计、计算机组成原理原理、数据结构、操作系统原理、数据库系统、 计算机网络、人工智能、自然语言处理、社会计算、网络安全法律法规、网络安全、内容安全、数字取证、机器学习,多媒体技术,信息检索、舆情分析等。

第二种是自学,就是在网上找资源、找教程,或者是想办法认识一-些大佬,抱紧大腿,不过这种方法很耗时间,而且学习没有规划,可能很长一段时间感觉自己没有进步,容易劝退。

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

第三种就是去找培训。

image.png

接下来,我会教你零基础入门快速入门上手网络安全。

网络安全入门到底是先学编程还是先学计算机基础?这是一个争议比较大的问题,有的人会建议先学编程,而有的人会建议先学计算机基础,其实这都是要学的。而且这些对学习网络安全来说非常重要。但是对于完全零基础的人来说又或者急于转行的人来说,学习编程或者计算机基础对他们来说都有一定的难度,并且花费时间太长。

第一阶段:基础准备 4周~6周

这个阶段是所有准备进入安全行业必学的部分,俗话说:基础不劳,地动山摇
image.png

第二阶段:web渗透

学习基础 时间:1周 ~ 2周:

① 了解基本概念:(SQL注入、XSS、上传、CSRF、一句话木马、等)为之后的WEB渗透测试打下基础。
② 查看一些论坛的一些Web渗透,学一学案例的思路,每一个站点都不一样,所以思路是主要的。
③ 学会提问的艺术,如果遇到不懂得要善于提问。
image.png

配置渗透环境 时间:3周 ~ 4周:

① 了解渗透测试常用的工具,例如(AWVS、SQLMAP、NMAP、BURP、中国菜刀等)。
② 下载这些工具无后门版本并且安装到计算机上。
③ 了解这些工具的使用场景,懂得基本的使用,推荐在Google上查找。

渗透实战操作 时间:约6周:

① 在网上搜索渗透实战案例,深入了解SQL注入、文件上传、解析漏洞等在实战中的使用。
② 自己搭建漏洞环境测试,推荐DWVA,SQLi-labs,Upload-labs,bWAPP。
③ 懂得渗透测试的阶段,每一个阶段需要做那些动作:例如PTES渗透测试执行标准。
④ 深入研究手工SQL注入,寻找绕过waf的方法,制作自己的脚本。
⑤ 研究文件上传的原理,如何进行截断、双重后缀欺骗(IIS、PHP)、解析漏洞利用(IIS、Nignix、Apache)等,参照:上传攻击框架。
⑥ 了解XSS形成原理和种类,在DWVA中进行实践,使用一个含有XSS漏洞的cms,安装安全狗等进行测试。
⑦ 了解一句话木马,并尝试编写过狗一句话。
⑧ 研究在Windows和Linux下的提升权限,Google关键词:提权
image.png
以上就是入门阶段

第三阶段:进阶

已经入门并且找到工作之后又该怎么进阶?详情看下图
image.png

给新手小白的入门建议:
新手入门学习最好还是从视频入手进行学习,视频的浅显易懂相比起晦涩的文字而言更容易吸收,这里我给大家准备了一套网络安全从入门到精通的视频学习资料包免费领取哦!

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

![](https://img-blog.csdnimg.cn/3e9a39bf040d46da93e80689b407bb25.png)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值