>운영 및 유지보수 >안전 >빌드 이벤트 기능을 사용하여 코드 복제를 수행하는 방법

빌드 이벤트 기능을 사용하여 코드 복제를 수행하는 방법

WBOY
WBOY앞으로
2023-05-25 20:41:001191검색


TAG 보안부는 다양한 기업 및 조직에서 취약점 연구 및 개발에 종사하는 보안 연구원을 대상으로 트위터 등 소셜 미디어를 활용한 소셜 엔지니어링 공격을 공개했습니다. NSFOCUS Fuying Laboratory의 분석 결과 해당 사건이 Lazarus 조직인 것으로 확인되었습니다. 사이버보안 업계를 대상으로 표적 사이버 공격을 감행해 더 깊은 공격 의도와 행동이 있을 수 있다고 추측했다. NSFOCUS의 공격대책기술연구팀 M01N
팀도 이번 사건에 대해 종합적인 분석과 판단을 실시한 결과, 이번 사건이 '노골적으로 판자길을 건설하고 몰래 천창을 횡단하는' 전형적인 사회공학적 공격 사건으로 판단하고, 이에 대한 실상도 밝힐 예정이다. 이번 글에서는 라자루스 조직이 사용한 새로운 간접 명령 실행 공격 기법에 대해 알아보겠습니다.

라자루스 조직은 한반도의 APT 조직입니다. 이 조직은 2007년부터 활동해 오랫동안 한국, 중국, 미국, 인도 등을 대상으로 공격을 해왔다. 외국 보안업체의 조사에 따르면 라자루스 조직은 2014년 소니 픽쳐스 해커 공격, 2016년 방글라데시 은행 데이터 유출 사건, 미국 방산업체, 미국 에너지부, 영국과 남한의 비트코인 ​​거래소에 연루됐다. 2017년 한국. 공격 및 기타 사건. 2017년 전 세계를 휩쓴 가장 악명 높은 보안 사건인 '워너크라이(Wannacry)' 랜섬웨어 바이러스 역시 이 조직의 소행으로 의심됐다.

구체적인 공격 방법은 "계정을 늘린 다음" 보안 연구원을 속여 악성 코드가 포함된 POC를 다운로드하도록 속여 컴파일 중에 악성 명령과 코드를 트리거하는 것입니다.

Lazarus 조직의 공격자는 보안 연구원으로 가장하여 연구 블로그와 여러 개의 트위터 계정을 만들었습니다. 이러한 위장 계정의 대부분은 웹 개발, 브라우저 취약점 마이닝, Windows 커널 보안, 심지어 CTF와 같은 ID 태그로 분류되었습니다. 참가자와 일부 보안 연구 업데이트를 게시하고 서로 댓글을 달고 전달하여 영향력을 확대할 것입니다.

如何利用Build Events特性执行代码复现

또한 해당 블로그(https://blog.br0vvnn[.]

io)에는 공개된 여러 취약점 분석 기사가 게시되었으며, 정보가 없는 일부 보안 연구원의 의견도 포함되어 있습니다. 연구원.

如何利用Build Events特性执行代码复现

공격자는 특정 연구 영향력을 확립한 후 대상 보안 연구자들과 적극적으로 소통을 모색하고 취약점 연구에 있어 보다 심층적인 협력과 교류에 대한 열망을 표명합니다. 이후 공격자는 Visual

Studio 프로젝트 파일을 보안 연구원과 공유합니다. 프로젝트 파일은 분명히 일부 취약점에 대한 POC 코드이지만 대상 연구원이 컴파일하고 실행하여 트리거하기를 기다리는 악성 명령과 코드가 비밀리에 포함되어 있습니다.

NSFOCUS Technology

https://mp.weixin.qq.com/s/7RwH5_h2rGn3MxGIngal6A

NSFOCUS Technology의 기사를 통해 사건의 배경과 일부 정보를 알 수 있습니다.

우리는 공개 보고서를 통해 빌드 이벤트를 사용한 Lazarus 조직의 공격 방법을 함께 재현해 보겠습니다.

먼저 Microsoft 설명서에서 빌드 이벤트(Build Events)에 대한 정보를 확인해 보겠습니다

사용자 지정 빌드 이벤트를 지정하면 빌드가 시작되기 전이나 완료된 후에 자동으로 명령을 실행할 수 있습니다

.
.bat 파일을 빌드 시작 전 또는
빌드가 완료된 후 폴더에 새 파일을 복사합니다. 빌드 이벤트는 빌드가 성공적으로
빌드 프로세스에서 해당 지점에 도달한 경우에만 실행됩니다.

https://docs.microsoft.com/en-us/visualstudio/ide/specifying-custom-build-events-in-visual-studio?view=vs-2019
Microsoft 설명서에는 "사용자 지정을 지정하여 빌드 이벤트는 빌드가 시작되기 전이나 빌드가 완료된 후에 자동으로 명령을 실행할 수 있으며, 빌드 이벤트는 빌드가 빌드 프로세스의 해당 지점에 성공적으로 도달한 경우에만 실행됩니다. 예:

빌드가 시작되기 전에 수행할 수 있습니다. .bat 파일을 사용하거나 빌드가 완료된 후 새 파일을 폴더에 복사합니다.

이것은 이해하기 어렵지 않습니다.

Microsoft 문서의 정보를 계속 살펴보면 빌드 이벤트에 다음과 같은 3가지 유형의 이벤트가 있음을 알 수 있습니다.

1. 사전 빌드 이벤트 명령줄은 컴파일 전에 사용자 지정 작업을 사전 생성합니다.

指定在构建开始之前要执行的所有命令,如果项目是最新的并且未触发任何构建,则预构建事件不会运行。
2.빌드 후 이벤트 명령줄 사전 링크 이벤트, 링크하기 전에 사용자 정의 작업 수행

指定在构建结束后要执行的所有命令
3. 빌드 후 이벤트 실행 빌드 후 이벤트 실행, 컴파일이 완료된 후 사용자 정의 작업 수행

在这个中具有以下参数:
选项                                结果
总是                            无论构建是否成功,都会运行构建后事件。
成功构建                            如果构建成功,则将运行构建后事件。因此,只要构建成功,该事件甚至将针对最新的项目运行。
当构建更新项目输出时     仅当编译器的输出文件(.exe或.dll)不同于先前的编译器输出文件时,才会运行构建后事件。因此,如果项目是最新的,则不会运行构建后事件。
https://docs.microsoft.com/en-us/visualstudio/ide/reference/build-events-page-project-designer-csharp?view=vs-2019
Microsoft 문서 관심 있는 학생들은 해당 XML 요소를 직접 살펴볼 수 있습니다

如何利用Build Events特性执行代码复现

Lazarus 조직에서는 Visual Studio를 사용하므로 사용 방법을 재현해 보겠습니다.

1 Open Visual Studio

2. 새 프로젝트
3. 프로젝트 속성을 입력하면

위에 보이는 것처럼 세 가지 종류의 이벤트가 있습니다

如何利用Build Events特性执行代码复现

첫 번째 이벤트를 살펴보겠습니다

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

如何利用Build Events特性执行代码复现

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

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

如何利用Build Events特性执行代码复现

把命令放在visual studio中

如何利用Build Events特性执行代码复现

应用然后编译

如何利用Build Events特性执行代码复现

可以看到直接上线。

接着是第二种情况,我的电脑性能较差,因此我没有使用cobalt strike上线,我们使用弹计算器来验证可利用性

如何利用Build Events特性执行代码复现

编译

如何利用Build Events特性执行代码复现

同理,第3种也是

如何利用Build Events特性执行代码复现

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

打开项目目录可以看到

如何利用Build Events特性执行代码复现

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

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

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

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

这里以PreBuildEvent进行利用

如何利用Build Events特性执行代码复现

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

如何利用Build Events特性执行代码复现

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

如何利用Build Events特性执行代码复现

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

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

如何利用Build Events特性执行代码复现

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

添加我们需要执行的命令

如何利用Build Events特性执行代码复现

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

如何利用Build Events特性执行代码复现

然后编译,弹出计算机

如何利用Build Events特性执行代码复现

图形化的利用在

如何利用Build Events特性执行代码复现

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

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

如何利用Build Events特性执行代码复现

如何利用Build Events特性执行代码复现

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

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

如何利用Build Events特性执行代码复现

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

如何利用Build Events特性执行代码复现

当然这个也有3种:

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

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

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

如何利用Build Events特性执行代码复现

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

如何利用Build Events特性执行代码复现

同理 post-bulid也是可以执行命令的
如何利用Build Events特性执行代码复现

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

在前面的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中我们也能查找到

如何利用Build Events特性执行代码复现

利用起来也不难 在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

위 내용은 빌드 이벤트 기능을 사용하여 코드 복제를 수행하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제