原文链接:Multi-stage APT attack drops Cobalt Strike using Malleable C2 feature
译者:知道创宇404实验室翻译组

6月10日,我们发现了一个伪装成简历的恶意Word文档,它使用模板注入来删除一个Net Loader。这是我们认为是APT攻击的一个部分,在最后阶段,威胁者使用Cobalt Strike的C2特性下载最终的有效载荷并执行C2通信。

这次袭击因为它的躲避技巧显得特别聪明。如我们观察到在执行来自恶意Word宏的有效负载时存在故意延迟。此外,通过将shell代码隐藏在一个无害的 JavaScript中并在不触及磁盘的情况下加载它,APT可以进一步阻止安全检测。

诱使代码执行延迟

诱饵文件可能是通过鱼叉式钓鱼邮件(Anadia Waleed)分发的,起初,我们认为它的目标是印度,但实际上的受害者可能会更广泛。

恶意文档使用模板注入从以下URL下载远程模板:

https:// yenile [。] asia / YOOMANHOWYOUDARE / indexb.dotm

用于托管远程模板的域是由某香港人于2020年2月29日进行注册的,在注册该域后,文档需要在15天内进行创建。

下载的模板“indexa.dotm”是一个包含五个功能的嵌入式宏:

  • Document_Open
  • VBA_and_Replace
  • Base64解码
  • 更改字体大小
  • FileFolderExist

下面显示了嵌入式宏的功能

主要功能是Document_open,它在打开文件时执行。此功能将三个文件放入受害者的计算机中:

  • Ecmd.exe:UserForm1和UserForm2包含两个Base64编码的有效负载。根据受害者计算机上安装的.Net框架的版本,UserForm1(对于.Net v3.5)和UserForm2(其他版本)的内容将被解码并存储在“C:\ProgramData”中。
  • cf.ini:“cf.ini”文件的内容是从UserForm3中提取的,经过AES加密,随后由ecmd.exe解密。
  • ecmd.exe.lnk:这是“ecmd.exe”的快捷文件,在Base64解码UserForm4的内容后创建。该文件作为触发器和持久性机制放置在“启动”目录中。

直到计算机重新启动后,才会执行Ecmd.exe。

ChangeFontSize和VBA_and_Replace都没有恶意功能。

中间装载机

Ecmd.exe是一个.Net可执行文件,它伪装成ESET命令行实用程序。下图显示了二进制证书、调试器和相关版本信息。

可执行文件使用无效的证书进行了签名以模仿ESET,其版本信息显示这是一个“ESET命令行界面”工具。

ecmd.exe是一个小型加载程序,它解密并执行前面提到的AES加密cf.ini文件。通过向http://ip-api.com/xml发出HTTP请求来检查受害者国家的机器,接着解析XML并提取国家代码。

如果国家/地区代码是“RU”或“US”,则退出;反之将使用硬编码密钥和IV对“cf.ini”的内容进行解密。

解密的内容将复制到分配的内存区域,并使用VirtualAlloc和CreateThread API作为新线程执行。

ShellCode(cf.ini)

C2是攻击者发布命令和控制流量(受害者和服务器之间的信标)的一种方式,目的是避免检测,并能为每个目标创建自定义配置文件。

外壳程序代码将Cobalt Strike Malleable C2功能与jquery Malleable C2配置文件结合使用,从“time.updateeset[.]com”下载第二个有效负载。

此技术已被其他两个中国的APT(Mustang Panda和APT41)使用。

Shellcode首先使用PEB 查找ntdll.exe的地址,然后调用LoadLibrayExA加载Winint.dll。接着使用InternetOpenA、InternetConnectA、HttpOpenRequestAI、nternetSetOptionA和HttpSendRequestA API来下载第二个有效负载。

在两个循环内解析API调用,然后跳转到已解析API调用的地址来进行执行。

恶意有效负载由InternetReadFile下载,并复制到分配的内存区域。

考虑到通信是通过HTTPS进行的,Wireshark不能帮助发现恶意负载。

使用Burp Suite代理能够成功地验证并捕获从time.updateeset[.]com/jquery-3.3.1.slim.min.js下载的正确负载。如图所示,有效负载包含在HTTP响应返回的jQuery脚本中:

将有效负载复制到内存中的缓冲区后,shellcode跳到缓冲区的开头并继续执行。这包括向“time.updateeset[.]com/jquery-3.3.1.min.js” 发送连续的请求,并等待来自C2的潜在命令。

使用Hollow Hunter,我们能够从ecmd的内存空间中提取最终的有效载荷。

归因

这次攻击的确切归因尚在研究中,但在这里,我们将提供一些关于谁可能是这次攻击的幕后黑手的见解。我们的分析表明,攻击者不包括俄罗斯和美国。前者可能是一个错误标志,后者可能是为了避免引起美国恶意软件分析师的注意。

如前所述,承载远程模板的域在香港注册,而C2域“time.updateeset[.]在2020年2月29日以一家名为Ehtesham Rayan的伊朗公司的名义注册。这家公司过去提供AV软件,现在似乎已经关闭了。然而,这些都不是强有力的归因指标。

就TTPs的使用而言,众所周知,中国的APT组合如Mustang Panda和APT41使用了jQuery和 Cobalt Strike的C2特性。 具体来说,Mustang Panda最新的活动使用了同样的Cobalt Strike功能和同样的jQuery配置文件来下载最终的有效载荷。这与我们在这次活动中看到的非常相似,但是在我们的案例中,初始感染媒介和第一个有效载荷是不同的。

IOCs

Anadia Waleed resume.doc
259632b416b4b869fc6dc2d93d2b822dedf6526c0fa57723ad5c326a92d30621

Remote Template: indexa.dotm
7f1325c5a9266e649743ba714d02c819a8bfc7fd58d58e28a2b123ea260c0ce2

Remote Template Url:
https://yenile[.]asia/YOOMANHOWYOUDARE/

C2:
time.updateeset[.]com

Ecmd.exe:
aeb4c3ff5b5a62f5b7fcb1f958885f76795ee792c12244cee7e36d9050cfb298 dcaaffea947152eab6572ae61d7a3783e6137901662e6b5b5cad82bffb5d8995 5f49a47abc8e8d19bd5ed3625f28561ef584b1a226df09d45455fbf38c73a79c

cf.ini:
0eba651e5d54bd5bb502327daef6979de7e3eb63ba518756f659f373aa5f4f8b

Cf.ini shell-code after decryption:
5143c5d8715cfc1e70e9db00184592c6cfbb4b9312ee02739d098cf6bc83eff9

Cobalt Strike downloaded shellcode:
8cfd023f1aa40774a9b6ef3dbdfb75dea10eb7f601c308f8837920417f1ed702

Cobalt Strike payload
7963ead16b6277e5b4fbd5d0b683593877d50a6ea7e64d2fc5def605eba1162a


Paper 本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/1250/