最近,Rapid7 观察到假浏览器更新诱骗用户执行恶意二进制文件。在分析丢失的二进制文件时,Rapid7 确定使用了一个新的加载程序,以便在包括 StealC 和 Lumma 在内的受感染系统上执行信息窃取程序。
IDAT 加载程序是 Rapid7 于 2023 年 7 月首次发现的一种新型、复杂的加载程序。在该加载程序的早期版本中,它被伪装成提供 SecTop RAT 的 7-zip 安装程序。Rapid7 现已观察到用于传送 Stealc、Lumma 和 Amadey 等信息窃取程序的加载程序。它实现了多种规避技术,包括进程分身、DLL 搜索顺序劫持和天堂之门。IDAT 加载程序因威胁行为者将恶意负载存储在 PNG 文件格式的 IDAT 块中而得名。
在此技术之前,Rapid7 观察到诱饵背后的威胁参与者利用恶意 JavaScript 文件来访问命令和控制 (C2) 服务器或删除网络支持远程访问特洛伊木马 (RAT)。
以下分析涵盖了整个攻击流程,从几天前发现的新 ClearFake 恶意软件开始,到威胁行为者手中被盗信息结束。
技术分析
威胁行为者 (TA) 经常以安全工具无法检测到的方式发起攻击,而安全研究人员也很难对其进行调查。
图 1 - 攻击流程
第 1 阶段 - ClearFake
ClearFake是一种新的恶意软件,几天前首次被识别。该活动于 2023 年 7 月 19 日开始,与 Rapid7 发现新的 IDAT 加载程序分布的时间一致。我们首先将最初的攻击流归因于 SocGolish 恶意软件,但 ClearFake 似乎不太复杂。
在此活动中,ClearFake 恶意软件使用 base64 来混淆恶意 Javascript,可以使用CyberChef轻松反混淆。正如Randy McEoin所指出的,“与 SocGholish 的一个显着区别是,似乎没有通过 IP 或 cookie 来跟踪访问。作为一名分析师,您可以从同一 IP 一遍又一遍地返回受感染的站点,而不清除浏览器缓存。这也意味着网站所有者也更有可能看到感染。”
图 2 - 受感染域中嵌入的混淆 JavaScript
这个提示错误地表现为浏览器更新,因为它似乎来自预期的域名,也增加了一层可信度。
图 3 - 弹出窗口提示用户更新浏览器
一旦用户与“更新 Chrome”按钮交互,浏览器就会重定向到另一个 URL,其中二进制文件会自动下载到用户的默认下载文件夹。用户双击假更新二进制文件后,它将继续下载下一阶段的有效负载。在这次调查中,Rapid7 发现了一个名为ChromeSetup.exe的二进制文件,该文件名在之前的 SocGholish 攻击中广泛使用,现在被 ClearFake 采用。
第 2 阶段 - MSI 下载器
ChromeSetup.exe从以下位置下载并执行 Microsoft 软件安装程序 (MSI) 包:
hxxps://ocmtancmi2c5t[.]xyz/82z2fn2afo/b3/update[.]msi
在类似的调查中,Rapid7 观察到,初始植入程序可执行文件的外观和文件名可能会根据用户访问受感染网页时的浏览器而有所不同。在所有情况下,可执行文件都包含无效签名,并尝试下载并安装 MSI 包。
Rapid7 确定 MSI 包使用多个开关执行,旨在避免检测:
1、/qn 以避免安装 UI
2、/quiet 以防止用户交互
3、/norestart 防止系统在感染过程中重新启动
执行时,MSI dropper 将写入合法的VMwareHostOpen.exe可执行文件、多个合法依赖项以及恶意动态链接库 (DLL) 文件vmtools.dll。它还会删除一个加密的vmo.log文件,该文件具有 PNG 文件结构,稍后会被恶意 DLL 解密。Rapid7 发现了该攻击的另一个版本,其中 MSI 删除了合法的pythonw.exe、合法的依赖项和恶意 DLL 文件python311.dll。 在这种情况下,加密文件被命名为pz.log, 但执行流程保持不变。
图 4 - vmo.log的内容
第 3 阶段 - 解密器
执行时,合法的VMWareHostOpen.exe会从执行VMWareHostOpen.exe的同一目录加载恶意vmtools.dll 。这种技术称为DLL 搜索顺序劫持。
在执行vmtools.dll期间,Rapid7 观察到 DLL使用 API 哈希从kernel32.dll和ntdll.dll加载 API 库,并将它们映射到内存。API 函数映射到内存后,DLL 读取十六进制字符串83 59 EB ED 50 60 E8并使用密钥F5 34 84 C3 3C 0F 8F进行按位异或运算对其进行解密,从而显示字符串vmo.log。该文件类似于Vmolog目录,其中存储了 Vmware 日志。
然后,DLL 将vmo.log中的内容读取到内存中并搜索字符串…IDAT。DLL 占用…IDAT之后的 4 个字节,并将它们与C6 A5 79 EA的十六进制值进行比较。如果…IDAT后面的 4 个字节等于十六进制值C6 A5 79 EA,则 DLL 继续将…IDAT后面的所有内容复制到内存中。
图 5 - 搜索十六进制值C6 A5 79 EA的函数
将所有数据复制到内存后,DLL 会尝试使用密钥F4 B4 07 9A进行按位 XOR 运算来解密复制的数据。根据对其他样本的额外分析,Rapid7 确定 XOR 密钥始终存储为十六进制字符串C6 A5 79 EA后面的 4 个字节。
图 6 - 在 PNG 文件pz.log和vmo.log中找到的 XOR 密钥
一旦 DLL 解密了内存中的数据,就会使用 RTLDecompressBuffer 函数对其进行解压缩。传递给函数的参数包括:
1、压缩格式
2、压缩数据的大小
3、压缩缓冲区的大小
4、未压缩数据的大小
5、未压缩缓冲区的大小
图 7 - 传递给 RTLDecompressBuffer 函数的参数
vmtools.dll DLL 使用压缩算法 LZNT1 来解压缩vmo.log文件中的解密数据。
数据解压缩后,DLL 将mshtml.dll加载到内存中,并用解压缩的代码覆盖其 .text 部分。覆盖后,vmtools.dll调用解压后的代码。
第 4 阶段 - IDAT 注入器
与vmtools.dll类似, IDAT 加载程序使用动态导入。然后,IDAT 注入器使用ExpandEnvironmentStringsW API 调用来扩展%APPDATA%环境变量。它在%APPDATA%下创建一个新文件夹,根据QueryPerformanceCounter API 调用输出对其进行命名并随机化其值。
MSI 删除的所有文件都将复制到新创建的文件夹中。然后,IDAT使用CreateProcessW从%APPDATA%创建VMWareHostOpen.exe的新实例并退出。
VMWareHostOpen.exe的第二个实例的 行为相同,直到从mshtml.dll 内存空间调用 IDAT 注入器代码的阶段。IDAT 立即开始实施天堂之门规避技术,该技术用于大多数 API 调用,直到信息窃取程序加载完成。
天堂之门被威胁行为者广泛用来逃避安全工具。它指的是一种在32位进程中执行64位进程或反之亦然的方法,允许32位进程在64位进程中运行。这是通过使用保留选择器启动调用或跳转指令来完成的。在我们的例子中,分析该技术的关键点是将进程模式从32位更改为64位,需要指定选择器“0x0033”,然后执行远调用或远跳转,如下所示图 8.
图 8 - 天堂之门技术实现
然后,IDAT 注入器使用ExpandEnvironmentStringsW API 调用来扩展%TEMP%环境变量。它根据QueryPerformanceCounter API 调用输出创建一个字符串并随机化其值。
接下来,IDAT 加载程序通过调用GetComputerNameW API 调用来获取计算机名称,并使用rand 和srand API 调用对输出进行随机化。它使用该随机值通过SetEnvironmentVariableW设置新的环境变量。 该变量设置为%TEMP%路径与之前创建的随机字符串的组合。
图 9 - 新环境变量 - TBCEDOPKVDTUFUSOCPTRQFD设置为%TEMP%89680228
现在,新的cmd.exe进程由加载程序执行。然后加载程序创建并写入%TEMP%89680228文件。
接下来,IDAT使用NtCreateSection + NtMapViewOfSection代码注入 技术将代码注入到cmd.exe进程中。使用这种技术,恶意软件:
1、使用 NtCreateSection API 调用在远程进程内创建新的内存部分
2、使用NtMapViewOfSection API 调用将新创建的部分的视图映射到具有 RW 保护的本地恶意进程
3、使用NtMapViewOfSection API 调用将先前创建的部分的视图映射到具有 RX 保护的远程目标进程
4、通过使用NtWriteVirtualMemory API 调用,使用 shellcode 填充本地进程中映射的视图
5、在我们的示例中,IDAT 加载程序使用NtSuspendThread API 调用挂起cmd.exe 进程上的主线程,然后使用NtResumeThread API 调用恢复该线程。完成注入后,VMWareHostOpen.exe的第二个实例退出。
第 5 阶段 - IDAT 加载程序:
注入的加载器代码以与 IDAT 注入器完全相同的方式实现天堂之门规避技术。它检索TCBEDOPKVDTUFUSOCPTRQFD环境变量,并将%TEMP%89680228文件数据读入内存。然后将数据与3D ED C0 D3密钥进行递归异或运算。
解密的数据似乎包含配置数据,包括应加载信息窃取程序的进程、应动态检索哪些 API 调用、附加代码等等。然后,加载程序使用DeleteFileW删除初始恶意DLL ( vmtools.dll ) 。加载程序最终使用 Process Doppelgänging 注入技术将 infostealer 代码注入到explorer.exe进程中。
Process Doppelgänging 方法利用 Windows 操作系统中的事务性 NTFS 功能。此功能旨在确保发生意外错误时数据的完整性。例如,当应用程序需要写入或修改文件时,如果写入过程中发生错误,则存在数据损坏的风险。为了防止此类问题,应用程序可以以事务模式打开文件以执行修改,然后提交修改,从而防止任何潜在的损坏。修改要么完全成功,要么不开始。
Process Doppelgänging 利用此功能将合法文件替换为恶意文件,从而导致进程注入。恶意文件在事务中创建,然后提交给合法文件,然后执行。我们样本中的过程 Doppelgänging 是由以下人员执行的:
1、使用NtCreateTransaction API 调用启动事务
2、使用NtCreateFile API 调用创建新文件
3、使用NtWriteFile API 调用写入新文件
4、使用NtCreateSection API 调用将恶意代码写入本地进程的一部分
5、使用NtRollbackTransaction API 调用丢弃事务
6、使用NtCreateProcessEx API 调用运行 explorer.exe 进程的新实例
7、使用NtCreateThreadEx API 调用在 explorer.exe 进程内运行恶意代码
如果事务中创建的文件被回滚(而不是提交),但文件部分已经映射到进程内存中,则仍将执行进程注入。
Rapid7将注入explorer.exe进程的最终有效负载识别为 Lumma Stealer。
图 10 - 进程树
在整个攻击流程中,恶意软件通过使用NtDelayExecution来延迟执行,这是一种通常用于逃避沙箱的技术。
如前所述,Rapid7 调查了多个 IDAT 加载程序样本。主要区别是:
1、加载恶意 DLL 的合法软件。
2、在%APPDATA%中创建的暂存目录的名称。
3、IDAT注入器将Loader代码注入到的进程。
4、infostealer/RAT 加载到的进程。
5、Rapid7 观察到 IDAT 加载程序已用于加载以下信息窃取程序和 RAT:Stealc、Lumma 和 Amadey 信息窃取程序以及 SecTop RAT。
图 11 - 对 StealC C2 域的 HTTP POST 请求的一部分
图 12 - 对 Lumma Stealer C2 域的 HTTP POST 请求
结论
IDAT Loader 是一种新型复杂加载程序,它利用多种规避技术来执行各种商品恶意软件,包括 InfoStealers 和 RAT。假更新活动背后的威胁参与者已将 IDAT Loader 打包到 DLL 中,这些 DLL 由 VMWarehost、Python 和 Windows Defender 等合法程序加载。
MITRE ATT&CK Techniques:
IOC
转载来源:https://www.rapid7.com/blog/post/2023/08/31/fake-update-utilizes-new-idat-loader-to-execute-stealc-and-lumma-infostealers/
图片来源网络侵权可联系删除