最后更新于2023年11月7日星期二16:33:39 GMT

技术分析:Thomas Elkins, 娜塔莉Zargarov
贡献:Evan McCann, Tyler McGraw

Recently, Rapid7观察到假浏览器更新引诱用户执行恶意二进制文件. 在分析被删除的二进制文件时, Rapid7决定使用一种新的加载器,以便在包括StealC和Lumma在内的受损系统上执行信息捕获.

IDAT装载机是Rapid7在2023年7月首次发现的一种新型复杂装载机. 在加载器的早期版本中, 它伪装成一个7-zip的安装程序,提供了SecTop RAT. Rapid7现在已经观察到用于传送诸如Stealc、Lumma和Amadey等信息的装载器. 它实现了几种规避技术,包括过程Doppelganging, DLL搜索命令劫持, 和天堂之门. IDAT加载器因将恶意负载存储在PNG文件格式的IDAT块中而得名.

在使用这种技术之前, Rapid7观察到诱饵背后的威胁行为者利用恶意JavaScript文件到达命令和控制(C2)服务器或投放网络支持远程访问木马(RAT)。.

下面的分析涵盖了整个攻击流程, 从一个新的ClearFake恶意软件开始, 几天前发现的, 最后,被窃取的信息落入了威胁行为者的手中.

技术分析

威胁参与者(TAs)经常以安全工具无法检测到的方式进行攻击,安全研究人员很难对其进行调查.

图1:攻击流

阶段1 -清除假货

ClearFake 一个新的恶意软件是几天前才被发现的吗. 该活动于7月19日开始,2023年,与Rapid7发现新的IDAT加载器分布的时间一致. 我们首先将最初的攻击流归因于SocGolish恶意软件, 然而ClearFake似乎没有那么复杂.

在这次竞选中, ClearFake恶意软件使用base64来混淆恶意Javascript, 哪一个可以很容易地去混淆 CyberChef. As spotted by Randy McEoin, “与SocGholish的一个明显区别是,它似乎没有通过IP或cookie跟踪访问. 作为一名分析人员,你可以一次又一次地从相同的IP访问受感染的站点,而不清除浏览器缓存. 这也意味着网站所有者更有可能看到感染.”

图2 -被混淆的JavaScript嵌入到受损域中

这个提示错误地将自己呈现为浏览器更新, 由于它似乎来自预期的领域,因此增加了一层可信度.

图3 -弹出窗口提示用户更新浏览器

一旦用户与“更新Chrome”按钮交互, 浏览器被重定向到另一个URL,其中二进制文件自动下载到用户的默认下载文件夹. 用户双击伪更新二进制文件后, 它将继续下载下一阶段的有效载荷. 在这次调查中,Rapid7识别了一个名为 ChromeSetup.exe这个文件名在以前的SocGholish攻击中广泛使用,现在被ClearFake所采用.

第二阶段- MSI下载程序

ChromeSetup.exe 从以下网址下载及执行微软软件安装程序包: hxxps: / / ocmtancmi2c5t [.xyz / 82 z2fn2afo / b3) /更新(.]msi.

在类似的调查中, Rapid7观察到,当用户访问受感染的网页时,初始dropper可执行文件的外观和文件名可能会因用户的浏览器而异. 在所有情况下, 可执行文件包含无效签名,并试图下载和安装MSI包.

Rapid7确定MSI包执行了几个旨在避免检测的开关:

  • /qn避免安装界面
  • /quiet防止用户交互
  • /norestart防止系统在感染过程中重启

当执行时,MSI滴管将写入一个合法的 VMwareHostOpen.exe 可执行文件、多个合法依赖项和恶意动态链接库(DLL)文件 vmtools.dll. 它还会丢失一个加密的 vmo.log 该文件具有PNG文件结构,稍后由恶意DLL解密.
Rapid7发现了一个附加版本的攻击,其中MSI丢弃了一个合法的 pythonw.exe、合法依赖项和恶意DLL文件 python311.dll. 在这种情况下,加密文件被命名 pz.log, 尽管执行流程保持不变.

图4 -内容 vmo.log

阶段3 -解密

执行时,合法 VMWareHostOpen.exe 加载恶意程序 vmtools.dll 从同一个目录中 VMWareHostOpen.exe is executed. 这种技术被称为 DLL搜索命令劫持.

在执行期间 vmtools.dll, Rapid7观察到DLL从加载API库 kernel32.dll and ntdll.dll 使用API散列并将它们映射到内存. 在API函数被映射到内存之后,DLL读取十六进制字符串 83 59 eb Ed 50 60 e8 并使用按位异或操作对其进行解密 F5 34 84 c3 3c 0f 8f,显示字符串 vmo.log. 文件类似于 Vmo\log 目录,存放Vmware日志.

然后DLL从中读取内容 vmo.log 到内存中并搜索字符串 …IDAT. DLL占用4个字节 …IDAT 的十六进制值进行比较 C6 A5 79 EA. 如果4字节以下 …IDAT 等于十六进制值吗 C6 A5 79 EA, DLL继续复制以下所有内容 …IDAT into memory.

图5 -搜索十六进制值的函数 C6 A5 79 EA

一旦所有的数据被复制到内存中, DLL尝试使用带key的按位异或操作解密复制的数据 F4 B4 07 9A. 在对其他样本进行额外分析后, Rapid7确定XOR键始终存储为十六进制字符串后面的4个字节 C6 A5 79 EA.

图6 -在PNG文件中找到异或键 pz.log and vmo.log

一旦DLL解密了内存中的数据,就会使用RTLDecompressBuffer函数对其进行解压. 传递给函数的参数包括:

  • 压缩格式
  • 压缩数据的大小
  • 压缩缓冲区的大小
  • 未压缩数据的大小
  • 未压缩缓冲区的大小
图7 -传递给RTLDecompressBuffer函数的参数

The vmtools.dll DLL使用压缩算法LZNT1来解压缩文件中的解密数据 vmo.log file.

数据解压缩后,加载DLL mshtml.dll 写入内存并覆盖它的 .文本部分,其中包含解压后的代码. 覆盖之后, vmtools.dll 调用解压后的代码.

第四阶段- IDAT注入器

Similarly to vmtools.dll, IDAT加载器使用动态导入. 然后IDAT注入器扩展 %APPDATA% 环境变量 ExpandEnvironmentStringsW API call. 在下面创建一个新文件夹 %APPDATA%,根据…命名 QueryPerformanceCounter API调用输出并随机化其值.

所有被MSI删除的文件被复制到新创建的文件夹中. 的新实例 VMWareHostOpen.exe from the %APPDATA% by using CreateProcessW and exits.

的第二个例子 VMWareHostOpen.exe 在调用IDAT注入器代码的阶段之前,其行为都是相同的 mshtml.dll memory space. IDAT立即开始实施天门逃避技术, 它使用大多数API调用,直到infostealer的负载完成.

“天堂之门”被威胁行为者广泛用于逃避安全工具. 它指的是在32位进程中执行64位进程的方法,反之亦然, 允许32位进程在64位进程中运行. 这是通过使用保留选择器来初始化调用或跳转指令来完成的. 在我们的示例中,分析此技术的关键点是将进程模式从32位更改为64位, 选择器“0x0033”的规范要求,然后执行远调用或远跳转, 如图8所示.

图8 -天门技术实现


然后IDAT注入器扩展 %TEMP% 环境变量 ExpandEnvironmentStringsW API call. 类型创建一个字符串 QueryPerformanceCounter API调用输出并随机化其值.

接下来,IDAT加载程序通过调用 GetComputerNameW 调用,输出是随机化的 rand and srand API calls. 它使用随机化的值来设置一个新的环境变量 SetEnvironmentVariableW. 该变量设置为的组合 %TEMP% 路径与前面创建的随机字符串.

图9 -新环境变量- TCBEDOPKVDTUFUSOCPTRQFD set to %TEMP%\89680228

Now, the new cmd.exe 进程由加载器执行. 加载器然后创建并写入 %TEMP%\89680228 file.

接下来,IDAT将代码注入cmd.Exe进程 NtCreateSection + NtMapViewOfSection代码注入 technique. 使用这种技术,恶意软件:

  • 通过使用NtCreateSection API调用在远程进程中创建一个新的内存段
  • 将新创建的区段的视图映射到具有RW保护的本地恶意进程 NtMapViewOfSection API call
  • 将前面创建的部分的视图映射到具有RX保护的远程目标进程 NtMapViewOfSection API call
  • 使用shellcode填充本地进程中映射的视图 NtWriteVirtualMemory API call
  • 在本例中,IDAT加载器将主线程挂起 cmd.exe 使用 NtSuspendThread 调用API,然后使用 NtResumeThread API call
    的第二个实例 VMWareHostOpen.exe exits.

第5阶段- IDAT加载器:

注入的加载器代码以与IDAT注入器完全相同的方式实现了天堂之门规避技术. 它检索 TCBEDOPKVDTUFUSOCPTRQFD 环境变量,并读取 %TEMP%\89680228 文件数据到内存. 类递归地xor数据 3D ED C0 D3 key.  

解密的数据似乎包含配置数据, 包括应该加载哪个进程, 应该动态检索哪些API调用, additional code,and more. 然后加载程序删除初始恶意DLL (vmtools.dll) by using DeleteFileW. 加载器最后将信息处理器代码注入 explorer.exe 过程中使用的过程Doppelgänging注入技术.

The 过程Doppelganging 方法利用了Windows操作系统中的事务性NTFS特性. 该特性旨在确保在发生意外错误时数据的完整性. For instance, 当应用程序需要写入或修改文件时, 如果在写过程中发生错误,则存在数据损坏的风险. 为了防止这些问题, 应用程序可以在事务模式下打开文件以执行修改,然后提交修改, 从而防止任何潜在的腐败. 修改要么完全成功,要么不开始.

进程Doppelgänging利用此特性将合法文件替换为恶意文件, 导致流程注入. 恶意文件是在事务中创建的, 然后提交到合法文件, 随后被执行. 过程Doppelgänging 在我们的样本中是由:

  • 初始化事务 NtCreateTransaction API call
  • 创建一个新文件 NtCreateFile API call
  • 写入新文件 NtWriteFile API call
  • 将恶意代码写入本地进程的一部分 NtCreateSection API call
  • 使用来丢弃事务 NtRollbackTransaction API call
  • 运行资源管理器的新实例.Exe进程 NtCreateProcessEx API call
  • 在浏览器中运行恶意代码.Exe进程 NtCreateThreadEx API call

如果在事务中创建的文件被回滚(而不是提交), 但是文件段已经映射到进程内存中了, 流程注入仍将执行.

最后的有效载荷注入 explorer.exe Rapid7鉴定为Lumma Stealer.

图10 -流程树

在整个攻击流程中,恶意软件通过使用 NtDelayExecution这是一种通常用于逃离沙盒的技术.

如前所述,Rapid7研究了几个IDAT加载器示例. 主要的区别是:

  1. 加载恶意DLL的合法软件.
  2. 中创建的暂存目录的名称 %APPDATA%.
  3. IDAT注入器将Loader代码注入的进程.
  4. infostealer/RAT加载到的进程.
  5. Rapid7观察到IDAT加载器已用于加载以下植骨剂和RAT: Stealc, Lumma和Amadey infosteators和SecTop RAT.
图11 -对StealC C2域的部分HTTP POST请求
图12 -对Lumma Stealer C2域的HTTP POST请求

Conclusion

IDAT Loader是一种新的复杂的加载器,它利用多种逃避技术来执行各种商品恶意软件,包括InfoStealers和RAT. 假更新活动背后的威胁行为者已经将IDAT加载器打包到由合法程序(如VMWarehost)加载的dll中, Python和Windows卫士.

Rapid7客户

适用于Rapid7 MDR和insighttidr客户, 以下攻击者行为分析(ABA)规则目前正在部署,并对本博客中描述的活动发出警报:

  • 攻击者技术- MSIExec通过HTTP加载对象
  • 可疑进程-仍然将文件归零
  • 可疑进程-用户脚本生成Cmd并将输出重定向到临时文件
  • 可疑进程-可能从用户下载目录执行droppper脚本
  • 可疑进程- WScript从临时或下载目录运行JavaScript文件

MITRE ATT&CK Techniques:

Initial Access 飞车妥协(T1189) ClearFake使用Drive-by Compromise技术来攻击用户的网络浏览器
国防逃税 系统二进制代理执行:Msiexec (T1218 ..007) 的ChromeSetup.下载并执行C9094685AE4851FD5A5B886B73C7B07EFD9B47EA0BDAE3F823D035CF1B3B9E48 .msi file
Execution 用户执行:恶意文件(T1204.002) Update.msi (53 c3982f452e570db6599e004d196a8a3b8399c9d484f78cdb481c2703138d47)删除并执行VMWareHostOpen.exe
国防逃税 劫持执行流程:DLL搜索命令劫持(T1574.001) VMWareHostOpen.Exe加载恶意vmtools.dll (931 d78c733c6287cec991659ed16513862bfc6f5e42b74a8a82e4fa6c8a3fe06)
国防逃税 解混淆/解码文件或信息(T1140) vmtools.(931年d78c733c6287cec991659ed16513862bfc6f5e42b74a8a82e4fa6c8a3fe06)解密vmo.日志(51 cee2de0ebe01e75afdeffe29d48cb4d413d471766420c8b8f9ab08c59977d7)文件
国防逃税 伪装(T1036) vmo.日志(51 cee2de0ebe01e75afdeffe29d48cb4d413d471766420c8b8f9ab08c59977d7)文件伪装成 .png file
Execution 本地API (T1106) IDAT注入器和IDAT装载机使用天堂之门技术逃避检测
国防逃税 工艺注入(T1055) IDAT注入器实现NtCreateSection + NtMapViewOfSection代码注入技术注入到cmd.exe process
国防逃税 工艺注入:工艺Doppelgänging (T1055.013) IDAT加载器实现了过程Doppelganging技术来加载InfoStealer
国防逃税 虚拟化/沙盒规避:基于时间的规避(T1497).003) 执行延迟在整个攻击流中由几个阶段执行

IOCs

IOC SHA-256 Notes
InstaIIer.exe A0319E612DE3B7E6FBB4B71AA7398266791E50DA0AE373C5870C3DCAA51ABCCF MSI downloader
ChromeSetup.exe C9094685AE4851FD5A5B886B73C7B07EFD9B47EA0BDAE3F823D035CF1B3B9E48 MSI downloader
Mlcrоо英尺Еdgе年代涂ер.exe 3 bf4b365d61c1e9807d20e71375627450b8fea1635cb6ddb85f2956e8f6b3ec3 MSI downloader
update.msi 53 c3982f452e570db6599e004d196a8a3b8399c9d484f78cdb481c2703138d47 MSI滴管,扔下了蟒蛇.exe, python311.dll and pz.log files
update.msi D19C166D0846DDAF1A6D5DBD62C93ACB91956627E47E4E3CBD79F3DFB3E0F002 MSI drop, drop VMWareHostOpen.exe, vmtools.dll and vmo.log files
DirectX12AdvancedSupport.msi B287C0BC239B434B90EEF01BCBD00FF48192B7CBEB540E568B8CDCDC26F90959 MSI滴管,丢弃MpCopyAccelerator.exe, MpClient.Dll和virginium.flac file
python311.dll BE8EB5359185BAA8E456A554A091EC54C8828BB2499FE332E9ECD65639C9A75B pythonw加载的恶意dll.exe
vmtools.dll 931年d78c733c6287cec991659ed16513862bfc6f5e42b74a8a82e4fa6c8a3fe06 VMWareHostOpen加载的恶意dll.exe
MpClient.dll 5 f57537d18adcc1142294d7c469f565f359d5ff148e93a15ccbceb5ca3390dbd MpCopyAccelerator加载的恶意dll.exe
vmo.log 51 cee2de0ebe01e75afdeffe29d48cb4d413d471766420c8b8f9ab08c59977d7 vmtools解密的加密载荷.dll
pz.log 8 ce0901a5cf2d3014aaa89d5b5b68666da0d42d2294a2f2b7e3a275025b35b79 由python311解密的加密有效载荷.dll
virginium.flac B3D8BC93A96C992099D768BEB42202B48A7FE4C9A1E3B391EFBEEB1549EF5039 MpClient解密的加密载荷.dll
ocmtancmi2c5t[.]xyz MSI包的主机
lazagrc3cnk[.]xyz MSI包的主机
omdowqind[.]site 方便下载MSI下载程序的域
weomfewnfnu[.]site 方便下载MSI下载程序的域
winextrabonus[.]life 方便下载MSI下载程序的域
bgobgogimrihehmxerreg [.]site 方便下载MSI下载程序的域
pshkjg[.]db[.]files[.]1drv[.]com 方便下载MSI下载程序的域
ooinonqnbdqnjdnqwqkdn [.]space 方便下载MSI下载程序的域
hello-world-broken-dust-1f1c [.] brewasigfi1978 [.]workers[.]dev 方便下载MSI下载程序的域
doorblu[.]xyz C&C server
costexcise[.]xyz C&C server
buyerbrand[.]xyz C&C server
94.228.169[.]55 C&C server
gapi-node[.]io C&C server
gstatic-node[.]io C&C server

References:

http://zeltser.com/media/docs/malware-analysis-lab.pdf