攻击者滥用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
研究人员用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流量
本文翻译自:https://isc.sans.edu/diary/rss/28180如若转载,请注明原文地址