攻击者滥用MSBuild绕过检测和植入恶意软件

攻击者滥用 MSBuild 绕过检测和植入 Cobalt Strike beacon 。
微软 Build Engine 是用于构建 Windows 应用的平台,主要用于未安装 Visual Studio 的环境中 。MSBuild 引擎可以为项目文件提供 XML 方案,以控制 build 平台如何处理和构建软件 。其中有一个名为 tasks 的项目文件元素是用于在项目构造过程中作为独立的可执行组件来运行 。研究人员发现 tasks 文件被攻击者滥用于运行恶意代码 。
这是研究人员一周内第二次发现滥用 MSBuild 的恶意软件活动 。攻击活动受限使用有效的账户来进行 RDP 访问,然后通过远程 Windows 服务(SCM)来在网络中传播,最后滥用 MSbuild task 特征来推送 Cobalt Strike beacon 到其他主机 。
滥用 MSBuild
图 1 是一个简单的 project 的 XML 文件,其中有一个名为 HelloWorld 的 task 可以在项目构造过程中编译和执行定制的 C# 代码 。
图 1 – MSBuild HelloWorld 项目
如图 2 所示,在使用 MSBuild 构造项目时,task HelloWorld 会执行,然后调用 Execute ( ) 和 Start ( ) 方法,最终打印出 hello world 消息 。其中 Execute ( ) 方法就来自于 helloworld 类实现的接口‘ ITask ’ 。
图 2 – 使用 MSBuild 构造 HelloWorld
图 3 是一个恶意 MSBuild 项目,在 MSBuild 调用时,会在受害者机器上编译和执行定制的 C# 代码、解码和执行 Cobalt Strike beacon 。
图 3 –恶意 MSBuild 项目文件
图 4 – 执行 Cobalt Strike beacon 的 MSBuild
如图 5 所示,可以看到 beacon 连接到了 C2 服务器(23 。227 。178 。115) 。
图 5 – Cobalt Strike beacon 连接到 C2 服务器
Cobalt Strike beacon 分析
为分析恶意 MSBuild 项目,研究人员首先解密了变量 buff,该变量是图 6 中 for 循环中 MSBuild 执行过程中解码的,会在 buff 的每个字节和 key_cide 数组中运行 XOR 函数 。最后,buff 字节数组会保存解密的恶意内容 。代码的其他部分会使用 Marshal 。GetDelegateForFunctionPointer 分配内存和执行 payload 。
图 6 – 解密 payload
【攻击者滥用MSBuild绕过检测和植入恶意软件】研究人员用 Python 实现了相同的解密函数来解密代码,如图 7 所示 。
图 7 – 解密的 Python 函数
研究人员使用工具分析了 Cobalt Strike beacon 并提取了其配置,如图 8 所示:
图 8 – Cobalt Strike beacon 配置
配置信息表明 C2 服务器 ( 23 。227 。178 。115 ) 会通过 HTTPS 加密流量在 tcp 8888 端口进行联系 。
然后研究人员通过运行 1768 工具从 Cobalt Strike beacon 中提取出了私钥信息,如图 9 所示:
图 9 – Cobalt Strike beacon 私钥
要使用使用来解密 Cobalt Strike 流量,还需要首先解密 HTTPS(SSL)的加密流量 。加密 C2 流量示例如图 10 所示:
图 10 –加密的 C2 流量
其中解密 SSL 流量的方法是使用中间人代理方法 。本文汇总,研究人员使用了 mitmproxy,其中证书安装过程如图 11 所示:
图 11 – MITMPROXY 证书安装
安装完成后就可以收集到未加密的 SSL 流量,如图 12 和图 13 所示:
图 12 – C2 流量收集
图 13 – C2 流量详情
解密的 metadata 如图 14 所示:
图 14 – 解密 metadata
解密的 TLS 流量如图 15 所示:
图 15 – 解密的 TLS 流量

    推荐阅读