Jia Yu ChanElastic Security Labs

MaaS 呼吁:信息窃取者从灰烬中重生

NOVABLIGHT 是一种 NodeJS 信息窃取程序,作为 MaaS 产品开发和销售;它主要用于窃取凭证和破坏加密钱包。

阅读需18分钟恶意软件分析
MaaS 呼吁:信息窃取者从灰烬中重生

NOVABLIGHT 概览

NOVABLIGHT 是一个基于 NodeJS 的恶意软件即服务 (MaaS) 信息窃取程序,由一个精通法语的威胁组织开发和销售。这在他们主要销售和支持平台 Telegram 和 Discord 上的讨论和运营沟通中显而易见。

根据我们对 NOVABLIGHT 最新发布版本的分析,以下代码片段表明, Nova Sentinel 和 MALICORD背后的组织 Sordeal 集团也对 NOVABLIGHT 负责。

关键要点

  • NOVABLIGHT 是一种信息窃取程序,被描述为一种教育工具,但 Telegram 频道消息会泄露敏感信息和未编辑的屏幕截图。
  • NOVABLIGHT 许可证有效期最长为一年,二进制文件可通过 Telegram 或 Discord 生成。
  • 具有多种功能且高度混淆的代码。

发现

Elastic 安全实验室发现了多个利用虚假视频游戏安装程序下载作为互联网用户 MaaS 感染的初始访问诱饵的活动。在一个示例中,URL http://gonefishe[.]com提示用户下载二进制文件并安装法语版本的游戏,该游戏的名称和说明与 Steam 上最近发布的游戏类似。

分销、货币化和社区

该集团在各种在线平台上宣传和销售他们的产品,之前是 Sellix 和 Sellpass,现在是 Billgang。

该团体出售 API 密钥,其有效期为 1 至 12 月。然后可以使用该密钥通过 Telegram 机器人或 Discord 构建 NOVABLIGHT 实例。

该组织在其 Discord 频道上推广推荐计划,并以 API 密钥作为奖励。

用户可以访问该组织托管的仪表板,其中显示从受害者收集的信息。已确定以下域名,但可能还存在其他域名:

  • api.nova-blight[.]top
  • shadow.nova-blight[.]top
  • nova-blight[.]site
  • nova-blight[.]xyz
  • bamboulacity.nova-blight[.]xyz

仪表板中使用的部分图像托管在与不同帐户关联的 GitHub 存储库中,这有助于揭示有关该组织的更多详细信息。

GitHub 帐户KSCHcuck1是一个与 MALICORD 前作者相似的假名,MALICORD 是窃取病毒的早期版本的免费版本,托管在 GitHub 帐户KSCH-58下( WEB ARCHIVE LINK )。X 帐户@KSCH_dsc也具有相似之处,并且直到 2023 年还在积极宣传其“有史以来最好的窃取者”。

已确定与该组织有关的 GitHub 帐户如下:

他们的公共 Telegram 频道提供教程和用户社区。在下面的图像捕获中,用户正在分享构建过程的屏幕截图。

信息窃取程序的用户公开分享奢侈品和汇款的图片,值得注意的是,NOVABLIGHT 被描述为仅用于教育目的。

NOVABLIGHT分析

NOVABLIGHT 是一个基于 NodeJS 和 Electron 框架构建的模块化、功能丰富的信息窃取器。它的功能不仅限于简单的凭证盗窃,还包含数据收集和泄露、沙盒检测和重度混淆的方法。

该恶意软件构建过程的一个显著方面是其模块化配置。虽然客户可以选择禁用特定功能,但这些功能的底层代码仍保留在最终有效负载中;它处于休眠状态,不会根据构建的配置标志执行。

当实现细节与 2.2 版样本匹配时,本报告中的代码片段来自非混淆的 2.0 版样本,当实现细节与 2.2 版样本不同时,本报告中的代码片段来自我们手动去混淆的 2.2 版样本代码。

代码结构

从初始设置到数据窃取,信息窃取者被组织成一个清晰的、多阶段的管道,由高级“流”控制器管理。主要阶段包括:

  • flow/init:飞行前检查(正在运行的实例、管理员权限、互联网连接)、反分析检查、系统信息枚举、建立持久性等。
  • 流/注入:应用程序注入和修补(Atomic、Mullvad、Discord 等)
  • flow/grabb :数据收集
  • flow/ClipBoard :剪贴板劫持
  • 流/发送:数据泄露
  • flow/disable :系统破坏(禁用 Windows Defender、系统防重置、断开 Internet 连接等)
  • 流程/清洁:渗漏后清理

要深入了解代码结构,请查看此 GitHub Gist ,其中列出了 NOVABLIGHT 每个核心模块和执行流程的直接依赖关系。

反调试和沙盒检测

NOVABLIGHT 结合多种技术来检测和逃避分析环境,将环境指纹识别与主动对策相结合。这些检查包括:

  • 检测与 VM 相关的 GPU 名称(vmware、virtualbox、qemu)
  • 检查黑名单用户名(沙盒、测试、恶意软件)
  • 识别虚拟机特定的驱动程序文件(balloon.sys、qemu-ga
  • 检查屏幕分辨率是否较低以及是否缺少 USB 设备
  • 查询 GitHub 的 IP、HWID、用户名、程序、组织、GPU 名称、PC 名称和操作系统的黑名单
  • 主动终止远程列表中发现的已知分析和调试工具

黑名单托管在 GitHub 上:

禁用 Defender 并尝试禁用任务管理器

NOVABLIGHT 尝试通过下载并执行批处理脚本DisableWD.bat来禁用 Windows Defender 和相关的 Windows 安全功能,来自公共 GitHub 存储库。

该恶意软件声称能够禁用任务管理器,使非技术用户难以识别和终止恶意程序。它使用regedit-rs包中的setValuesHKCU\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\System下的DisableTaskMgr值设置为1

但是,查看regedit-rs存储库(匹配 v1.0.3),没有名为setValues的导出函数,只有putValue 。此功能可能无法按预期工作。

禁用互联网访问

为了破坏受害者的互联网连接,该恶意软件采用了两种不同的方法。第一个方法是利用外部 npm 包wifi-control及其resetWiFi函数,通过快速循环反复重置来持续禁用 Wi-Fi 适配器。

第二种方法是使用netsh命令禁用主“以太网”网络适配器,每 5 秒运行一次该命令以禁用重新启用尝试。

失败系统恢复

当配置中启用antireset标志时,恶意软件可以通过禁用 Windows 恢复环境 ( reagentc /disable ) 并删除所有卷影副本 ( vssadmin delete shadows /all ) 来破坏系统恢复。

阻止文件删除

受害者可能察觉到的另一个系统破坏功能涉及通过icacls “${filePath}” /deny ${currentUser}:(DE,DC)修改恶意软件的安全权限,使恶意软件自己的可执行文件无法删除,其中DE 拒绝删除权限,DC 阻止通过父文件夹进行删除,并可选择创建包含“恶意”消息的弹出消息框。

在锁定自身之前,它还会执行 PowerShell 命令从以下系统组中删除受害者的帐户: AdministratorsPower UsersRemote Desktop UsersAdministrateurs

剪贴板地址替换

该恶意软件实现了一个“剪辑器”模块,该模块主动监视机器剪贴板上的任何 Crypto 或 Paypal 地址,并将其替换为配置中定义的地址,如果构建有效载荷的用户未提供自己的地址,则恶意软件默认为硬编码集,大概是由开发人员控制的,以从经验不足的用户那里获取资金。

电子应用注入

NOVABLIGHT 可以将恶意代码注入几种流行的基于 Electron 的应用程序中。有效载荷是从端点https://api.nova-blight[.]top/injections/*targeted_application*/*some_key*动态获取的,针对的应用程序包括:

  • Discord 客户端
  • Exodus 钱包
  • Mullvad VPN客户端
  • 原子钱包
  • Mailspring 电子邮件客户端

我们能够从公共 GitHub存储库中检索所有模块。

注入实现是 Electron App 重新打包的经典示例:解压 ASAR 文件,重写任何目标源文件,然后重新打包。查看涉及 Mullvad 客户端的示例,它首先将Program Files\\Mullvad VPN\\resources\\app.asar解压到临时目录中,从https://api.nova-blight[.]top/injections/mullvad/dVukBEtL8rW2PDgkwdwfbNSdG3imwU8bZhYUygzthir66sXXUuyURunOin9s获取account.js的后门版本,覆盖源文件account.js ,最后重新打包。虽然它可能仍然适用于较旧版本的 Mullvad(例如2025.4) ,这似乎不适用于最新版本的 Mullvad。

在 Exodus 客户端的类似情况下,NOVABLIGHT 开发人员修改了 Exodus 应用程序主模块中的 setPassphrase 函数,并添加了凭证窃取功能。
在 Exodus 25.28.4 的合法版本中, main/index.js看起来如下:

在被木马感染的index.js中,用户输入的密码通过可配置的 Discord webhook 和 Telegram 泄露 - 使用官方 Telegram API 或自定义 Telegram API 代理。

Chrome敏感数据提取

为了针对运行版本 137 的基于 Chromium 的浏览器(Brave、Chrome、Edge),该恶意软件从https://github.com/Hyutop/pandakmc-auto-vote/blob/main/bin.zip下载一个包含 Chrome 数据解密工具的 zip 文件。

GitHub 存储库试图伪装成 Minecraft 投票管理工具。

然而,zip文件bin.zip 中包含了 xaitax 开发的Chrome应用绑定解密器PoC项目0.11.0版本的编译代码( decrypt.exe chrome_decrypt.dll )。

系统枚举

一旦激活,NOVABLIGHT 就会执行一整套系统枚举功能,旨在构建受害者机器和用户活动的完整配置文件。每个模块针对特定的信息,然后将其保存到本地目录,再上传到命令和控制服务器。检测工程师应该注意每种技术的具体实现,以及哪些数据源提供了足够的可见性。

  • captureSystemInfo():收集大量硬件和软件规格来对设备进行指纹识别。这包括硬件 ID (HWID)、CPU 和 GPU 型号、RAM 大小、磁盘信息、Windows 操作系统版本以及所有连接的 USB 设备的列表。
  • 输出: *configured_path*/System Info.txt

  • captureScreen():捕获受害者桌面的完整屏幕截图,立即了解用户当前的活动。
    • 方法:利用screenshot-desktop库。
    • 输出:带时间戳的图像文件(例如, configured_path / hostname _2025-10-26_14-30-00.png)。
  • captureTaskList():获取所有当前正在运行的进程的列表以了解情况,从而使攻击者能够看到哪些应用程序和安全工具处于活动状态。
    • 方法:执行命令tasklist /FO CSV /NH
    • 输出: *configured_path*/TaskManagerInfo.txt
  • captureAVDetails():通过查询 Windows 安全中心来识别已安装的防病毒或端点保护产品。
    • 方法:执行 PowerShell 命令 Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct | Format-List
    • 输出: *configured_path*/Avdetails.txt
  • captureClipboardContent():转储用户剪贴板的当前内容,其中可能包含敏感的、瞬时的信息,如密码或复制的消息。
    • 方法:执行 PowerShell 命令Get-Clipboard
    • 输出: *configured_path*/Clipboard.txt
  • captureWebcamVideo():使用系统的主要网络摄像头秘密录制视频,提供有关受害者及其周围环境的视觉情报。
    • 方法:利用direct-synch-show库进行视频捕获。
    • 输出: *configured_path*/Bighead.avi
  • captureWifiPasswords():泄露设备上所有已保存的 Wi-Fi 网络的密码,从而允许潜在的横向移动或访问受害者使用的其他网络。
    • 方法:为每个配置文件执行命令netsh wlan show profile *wifi_ssid* key=clear
    • 输出: *configured_path*/WifiPasswords.txt
  • getFilesUrgents:此功能根据以下一组关键字提取磁盘上的文件: backup、default、code、discord、token、passw、mdp、motdepasse、mot_de_passe、login、secret、account、acount、apacht、banque、bank、matamask、wallet、crypto、exdous、2fa、a1f、memo、compone、finance、seecret、credit、cni,这些文件被存档为files.zip然后发送到C2。

数据渗漏

被盗数据的渠道有 3 :NOVABLIGHT组织旗下的官方网络面板、Discord webhook API、Telegram API。这些频道的状态不确定,因为主代理 API 和网络面板当前已关闭,如果 Discord 和 Telegram 频道依赖于相同的代理基础设施,这可能会破坏它们的功能。

网络面板曾经是官方的泄露渠道,因为它被宣传为他们的主要数据管理平台。

Telegram 实现首先尝试将数据发送到配置的代理 URL,代码检查 URL 是否包含字符串req (在本例中https://bamboulacity.nova-blight[.]xyz/req/dVukBEtL8rW2PDgkwdwfbNSdG3imwU8bZhYUygzthir66sXXUuyURunOin9s

如果未配置代理 URL 或代理 URL 不满足条件,模块将回退到使用配置的 userId、chatId 和 botToken 直接与官方 Telegram API(位于https://api.telegram[.]org/bot*token*/sendMessage )通信以发送被盗数据。

与 Telegram 模块不同,Discord webhook 实现要简单得多。它利用单个 URL 进行渗透,没有回退机制。所分析的样本始终使用自定义代理 URL 来实现此目的。

NOVABLIGHT 采用冗余和多层的基础设施。该恶意软件并不依赖单一上传主机(因为这会造成单点故障),而是利用合法的第三方文件托管服务和其自己的专用后端的组合。以下是提取的域和端点列表:

  • https://bashupload[.]com
  • https://litterbox.catbox[.]moe/resources/internals/api.php
  • https://tmpfiles[.]org/api/v1/upload
  • https://oshi[.]at/
  • http://sendfile[.]su/
  • https://wsend[.]net
  • https://api.gofile[.]io/servers
  • https://gofile[.]io/uploadFiles
  • https://rdmfile[.]eu/api/upload
  • https://bamboulacity.nova-blight[.]xyz/file/

目标数据

NOVABLIGHT 执行有针对性的例程,旨在从特定的已安装软件列表中窃取凭据和会话文件。精选列表可在此 GitHub Gist中找到。

混淆技术

数组映射

要解决的第一个技术是恶意软件对数组映射的使用。该脚本使用不同类型和编码的值初始化单个大型全局数组__p_6Aeb_dlrArray ,这几乎涵盖了脚本中使用的所有文字值。

替换数组索引引用后,构成完整字符串的许多小字符串块在运行时被拆分和连接,但在此阶段,可以轻松识别 NOVABLIGHT 版本号。

字符串编码

隐藏字符串的第二种技术是使用 base91 编码。使用整数参数调用函数包装器__p_xIFu_MAIN_STR

该整数是包含编码字符串的辅助数组映射__p_9sMm_array的索引。它检索编码的字符串并将其传递给解码例程__p_xIFu_MAIN_STR_decode

__p_xIFu_MAIN_STR_decode 然后将使用自定义字母表
vFAjbQox\>5?4K$m=83GYu.nBIh\<drPaN\^@%Hk:D_sSyz"ER9/p,(*JwtfO)iUl&C\[~\}\{|Z+gX1MqL;60!e]T#2cVW7对其进行解码并返回解码后的字符串。

访问模式混淆

代码不是直接访问对象和函数,而是使用带有混乱键的中间扁平“代理”对象,将对象包装在另一层对象中以隐藏原始访问模式。

例如,函数__p_LQ1f_flat_…传递了一个平面对象__p_w3Th_flat_object 。该对象包含 3 属性获取访问器,其中一个返回从配置中检索到的 disableNetwork 标志,以及一个用于调度程序调用的包装器 ( __p_jGTR_dispatcher_26 )。在整个代码中,有一个模式,其中属性名称以empretecerian.js开头,这恰好也是脚本文件的名称。然后,被调用函数可以通过调用者填充的这个平面对象访问实际的对象和函数。

控制流混淆

部分代码的执行路径通过中央调度程序__p_jGTR_dispatcher_26进行路由,其中第一个参数名称采用短 ID 字符串。

每个 ID 都映射到一个不同的功能。例如,ID jgqatJmodules/init/Troll.js模块引用,它负责“troll”弹出消息框。

代理变量

首先,混淆将函数语法转换为“剩余参数语法”,即将参数替换为存储变量值的数组,而不是直接变量,然后代码使用数值引用该数组。例如,函数__p_xIFu_MAIN_STR_decode不是通过直接参数调用的。相反,它的参数首先被放入__p_A5wG_varMask数组(第 22 行),并且该函数被编程为从预定义的索引中检索它们。例如,在第 25 行,数组的索引-36存储了__p_A5wG_varMask[171]中字符串中字符“c”的索引。

NOVABLIGHT 和 MITRE ATT&CK

Elastic 使用MITRE ATT&CK框架来记录高级持续性威胁针对企业网络使用的常见策略、技术和程序。

战术

技术

结论

NOVABLIGHT 展示了即使是鲜为人知的恶意软件也会产生影响。通过 Telegram 和 Discord 等平台提供完善且易于使用的工具,其创建者让任何人都可以轻松参与网络犯罪。

此外,这种威胁并不是一成不变的。我们的分析证实,NOVABLIGHT 正在持续积极地开发中。这种持续的演变确保了 NOVABLIGHT 在可预见的未来仍将是一个持续且相关的威胁。

检测 NOVABLIGHT

雅拉

Elastic Security 已创建 YARA 规则来识别此活动。

rule Windows_Infostealer_NovaBlight {
    meta:
        author = "Elastic Security"
        creation_date = "2025-07-18"
        last_modified = "2025-07-28"
        os = "Windows"
        arch = "x86"
        category_type = "Infostealer"
        family = "NovaBlight"
        threat_name = "Windows.Infostealer.NovaBlight"
        reference_sample = "d806d6b5811965e745fd444b8e57f2648780cc23db9aa2c1675bc9d18530ab73"

    strings:
        $a1 = "C:\\Users\\Administrateur\\Desktop\\Nova\\"
        $a2 = "[+] Recording..." fullword
        $a3 = "[+] Capture start" fullword
    condition:
        all of them
}

观察结果

本研究讨论了以下可观察的结果。

可观测类型名称参考
ed164ee2eacad0eea9dc4fbe271ee2b2387b59929d73c843281a8d5e94c05d64SHA-256NOVABLIGHT 版本 2.2
39f09771d70e96c7b760b3b6a30a015ec5fb6a9dd5bc1e2e609ddf073c2c853dSHA-256NOVABLIGHT 版本 2.1
97393c27195c58f8e4acc9312a4c36818fe78f2ddce7ccba47f77a5ca42eab65SHA-256NOVABLIGHT 版本 2.0
api.nova-blight[.]topNOVABLIGHT 仪表板
shadow.nova-blight[.]topNOVABLIGHT 仪表板
nova-blight[.]siteNOVABLIGHT 仪表板
nova-blight[.]xyzNOVABLIGHT 仪表板
bamboulacity.nova-blight[.]xyzNOVABLIGHT 仪表板

参考资料

上述研究参考了以下内容: