导语:迈克菲实验室发现CactusTorch无文件威胁使用了DotNetToJScript技术,在2018年其使用迅速增长。
迈克菲实验室注意到,部分攻击者在攻击系统方面发生了重大转变,更多的使用受信任的Windows可执行文件而非外部恶意软件。最流行的技术之一是“无文件”攻击(“fileless” attack.)。因为这些攻击是通过信誉良好的可执行文件发起的,所以很难检测到。消费者和企业用户都可能成为此威胁的受害者。在企业环境中,攻击者使用此攻击向量在网络中横向移动。
CactusTorch无文件威胁使用DotNetToJScript技术,该技术直接从内存加载和执行恶意.NET程序集。这些程序集是应用程序部署的最小单元,例如.dll或.exe。与其他无文件攻击技术一样,DotNetToJScript不会在计算机硬盘上写入任何恶意.NET程序集的;因此传统的文件扫描程序无法检测到这些攻击。
2018年,CactusTorch的使用迅速增长,CactusTorch可以在Windows系统上执行自定义shellcode。下图显示了CactusTorch变种在野外的兴起。
Source: McAfee Labs.
DotNetToJScript工具集
编译DotNetToJScript工具可以得到.NET可执行文件DotNetToJScript.exe,它接受.NET程序集的路径并输出JavaScript文件。
图1:使用DotNetToJScript.exe创建恶意JavaScript文件
DotNetToJScript工具包并没有附带恶意软件。创建的唯一组件是输出JavaScript文件,该文件由wscript.exe在目标系统上执行。在分析中,我们运行了一些基本的反混淆,并找到了一些在线工具隐藏的CactusTorch:
图2:CactusTorch代码
在深入研究此代码之前,我们需要了解.NET及其COM exposure。在系统上安装.NET框架时,通过Microsoft的组件对象模型(COM)公开了几个.NET库。
图3:COM公开.NET库System.Security.Cryptography.FromBase64Transform的COM
查看公开的接口,可以看到IDispatch,它允许从script host或浏览器访问COM对象。
图4:.NET库中的公开接口。
要使用DotNetToJScript向量执行恶意代码,攻击使用以下COM对象:
· Text.ASCIIEncoding
· Security.Cryptography.FromBase64Transform
· IO.MemoryStream
· Runtime.Serialization.Formatters.Binary.BinaryFormatter
· Collections.ArrayList
现在,让我们回到图2中看到的JavaScript代码。函数base64ToStream()将Base64编码的序列化对象转换为stream。在我们完全理解JavaScript代码背后的逻辑之前,我们需要检查Base64编码的序列化对象的功能。因此,下一步是对嵌入的序列化对象进行逆向工程并重新创建类定义。完成后,类定义看起来像下面的代码,它负责执行恶意shellcode。(特别感谢Casey Smith,@ subTee,关于这一步的重要指示)。
图5:嵌入式序列化对象的类定义
现在我们有了CactusTorch的开源组件,图2中的JavaScript代码是有意义的。可以看到恶意shellcode如何在目标系统上执行。在图2的第29行中,代码使用两个参数调用flame(x,x) 函数:要启动的可执行文件和shellcode。
嵌入在CactusTorch脚本中的.NET程序集运行以下步骤来执行恶意shellcode:
· 使用CreateProcessA(托管shellcode)启动新的挂起进程
· 使用具有EXECUTE_READWRITE权限的VirtualAllocEx分配一些内存
· 使用WriteProcessMemory在目标进程内存中写入shellcode
· 使用CreateRemoteThread创建一个新线程来执行shellcode
结论
无文件恶意软件利用了安全软件与正版签名Windows应用程序之间的信任关系。由于此类攻击是通过信誉良好的可信任可执行文件启动的,因此很难检测到这些攻击。McAfee Endpoint Security(ENS)和Host Intrusion Prevention System(HIPS)客户可通过Signature ID 6118免受此类无文件攻击。
参考
· https://ruxcon.org.au/assets/2017/slides/NET-Interop-Full.pdf
· https://github.com/tyranid/DotNetToJScript
· https://github.com/mdsecactivebreach/cactustorch
Hashes
· 4CF9863C8D60F7A977E9DBE4DB270819
· 5EEFBB10D0169D586640DA8C42DD54BE
· 69A2B582ED453A90CC06345886F03833
· 74172E8B1F9B7F9DB600C57E07368B8F
· 86C47B9E0F43150FEFF5968CF4882EBB
· 89F87F60137E9081F40E7D9AD5FA8DEF
· 8A33BF71E8740BDDE23425BBC6259D8F
· 8DCCC9539A499D375A069131F3E06610
· 924B7FB00E930082CE5B96835FDE69A1
· B60E085150D53FCE271CD481435C6E1E
· BC7923B43D4C83D077153202D84EA603
· C1A7315FB68043277EE57BDBD2950503
· D2095F2C1D8C25AF2C2C7AF7F4DD4908
· D5A07C27A8BBCCD0234C81D7B1843FD4
· E0573E624953A403A2335EEC7FFB1D83
· E1677A25A047097E679676A459C63A42
· F0BC5DFD755B7765537B6A934CA6DBDC
· F6526E6B943A6C17A2CC96DD122B211E
· CDB73CC7D00A2ABB42A76F7DFABA94E1
· D4EB24F9EB1244A5BEAA19CF69434127