6月中旬,Malwarebytes Labs的研究人员发现了一个伪装成简历的恶意Word文档,该文档使用模板注入来删除.Net Loader。研究人员认为这是与APT攻击有关的多阶段攻击的第一部分。在最后阶段,威胁行动者使用了Cobalt Strike’s Malleable C2功能来下载最终的有效载荷并执行C2通信。
此攻击特别“聪明”是因其规避技术。例如,研究人员观察到在恶意Word宏执行有效payload时有故意延迟。这种攻击的目标不是立即损害受害者,而是要等他们重新启动计算机后再进行攻击。另外,通过将shellcode隐藏在无害的JavaScript中并且不接触磁盘的加载它,该APT可以进一步逃过安全产品的检测。
一、诱使延迟代码执行
诱饵文件可能是通过鱼叉式网络钓鱼电子邮件分发的,该电子邮件是据称是“ Anadia Waleed”的人的简历。起初,原作者认为它的目标是印度,但目标受害者可能会更广泛。
图1:简历
恶意文档使用模板注入,从以下URL下载远程模板:
https://yenile[.]asia/YOOMANHOWYOUDARE/indexb.dotm
图2:模版注入
用于托管远程模板的域名于2020年2月29日由来自香港的某人注册,该文档的创建时间是在此域名注册后15天。
下载的模板“ indexa.dotm”具有一个包含五个函数的嵌入式宏:
Document_Open
VBA_and_Replace
Base64Decode
ChangeFontSize
FileFolderExist.
下面是嵌入宏的函数调用图:
图3:宏函数图
主要函数是DOCUMENT_OPEN,它在打开文件时执行。此函数将三个文件放入受害者的计算机:
Ecmd.exe UserForm1和UserForm2包含两个Base64编码的有效payload。根据受害者计算机上安装的.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。
图4:DOCUMENT_OPEN
图5:自定义base64解码函数
ChangeFontSize和VBA_AND_REPLACE函数不是恶意的,可能是从公共资源[1,2]复制来误导静态扫描程序。
公共资源1,2:
http://www.your-save-time-and-improve-quality-technologies-online-resource.com/vba-and-replace.html
https://www.vitoshacademy.com/vba-ms-word-tricks-with-vba/
二、中间装载机
Ecmd.exe是伪装成ESET命令行实用程序的.Net可执行文件。下图显示了二进制证书、调试器和版本信息。该可执行文件已使用无效的证书签名以模拟ESET,其版本信息显示这是一个“ESET命令行界面”工具(图6-图8)。
图6:证书信息
图7:版本信息
图8:调试信息
ecmd.exe是一个小型加载程序,用于解密和执行前面提到的AES加密的cf.ini文件。它通过向“http://ip-api.com/xml”发出HTTP post请求来检查受害者机器所在国家。然后,它解析XML响应数据并提取国家代码。
图9:Getcon函数:向“ip-api.com”发出http post请求
图10:ip-api.com 输出
如果国家代码是“RU”或“US”,则退出;否则,它开始使用硬编码密钥和IV对解密“cf.ini”的内容。
图10:ecmd.exe主函数
解密的内容被复制到分配的内存区域,并使用VirtualAlloc和CreateThread API作为新线程执行。
图11:runn函数
三、ShellCode (cf.ini)
可扩展C2是攻击者为了避免被发现而混淆指挥和控制通信(受害者和服务器之间的信标)的一种方式,可以为每个目标创建自定义配置文件。
shell代码使用带有jQuery可延展性C2配置文件的Cobalt Strike可延展性C2特性从“time.updateeset[.]com”下载第二个有效payload。
图12:可延展的C2请求
Shellcode首先使用PEB查找ntdll.exe的地址,然后调用LoadLibrayExA加载Winint.dll。然后它使用InternetOpenA,InternetConnectA,HttpOpenRequestA,InternetSetOptionA和HttpSendRequestA API来下载第二个有效payload。
API调用在两个循环内解析,然后使用跳转到解析的API调用的地址来执行。
图13:构建API调用
恶意payload由InternetReadFile下载并复制到分配的内存区域。
图14:InternetReadFile
考虑到通信是通过HTTPS进行的,Wireshark并不能发现恶意payload,Fiddler也不能提供有效payload。
图15:Fiddler输出
使用BurpSuite代理,能够成功验证并捕获从time.updateeset[.]com/jquery-3.3.1.slim.min.js下载的正确有效payload。如图16所示,有效payload包含在HTTP响应中返回的jQuery脚本中:
图16:发生在jQuery末尾的有效负载
将有效payload复制到内存中的缓冲区后,shellcode跳到缓冲区的开始处并继续执行。这包括向“time.updateeset[.]com/jQuery-3.3.1.min.js”发送连续的信标请求,并等待来自C2的潜在命令。
图17:C2通信
使用Hollow Hunter,我们能够从ecmd的存储空间中提取最终的有效payload,即Cobalt Strike。
四、溯源
这起攻击的确切溯源分析正在进行中,在这里提供一些关于谁可能是这起攻击的幕后黑手的见解。分析显示,袭击者排除了俄罗斯和美国。前者可能是一个虚假的信号,而后者可能是为了避免美国恶意软件分析师的注意。
如前所述,托管远程模板的域名是在香港注册的,而C2域名“time.updateeset[.]com”是在2020年2月29日以一家名为Ehtesham Rayan的伊朗公司的名称注册的。该公司过去提供反病毒软件,现在似乎已经关闭。然而,这些都不是强有力或可靠的溯源指标。
图18:updateeset.com whois注册信息
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 payload7963ead16b6277e5b4fbd5d0b683593877d50a6ea7e64d2fc5def605eba1162a
原文:https://blog.malwarebytes.com/threat-analysis/2020/06/multi-stage-apt-attack-drops-cobalt-strike-using-malleable-c2-feature/
编译:CNTIC情报组
本文为CNTIC编译,不代表本公众号观点,转载请保留出处与链接。
联系信息进入公众号后点击“论坛信息”可见。