查看: 410|回复: 0

APT36:Vibeware 使用

[复制链接]
匿名
匿名  发表于 前天 09:42 |阅读模式
APT36:Vibeware 使用
TL;DR. 以巴基斯坦为主的威胁行为者APT36,也被称为透明部落(Transparent Tribe),已从现成恶意软件转向“vibeware”,这是一种基于AI的开发模式,能生成大量但质量一般的植入程序。利用如Nim、Zig和Crystal等小众编程语言,该行为者试图规避标准检测引擎,并借助Slack、Discord、Supabase和Google Sheets等受信任云服务进行命令与控制。

这项研究直接揭示了vibeware这一新兴恶意软件类别的新现实,这种恶意软件主要由巴基斯坦威胁组织APT36部署,针对印度政府及外交机构。这并非技术上的突破,而是向基于AI的恶意软件工业化转变的过程,让行为者能够向目标环境投放大量一次性的、多语言的二进制文件。

当观察到此类恶意软件舰队时,其局限性显而易见。我们发现,在一个基本的Go二进制文件中部署了窃取浏览器凭证的功能,但开发者在本应放置命令与控制URL的位置留了一个模板占位符,这意味着该工具实际上无法外泄数据。

我们在其他恶意软件组件中也发现了类似模式,一旦逻辑达到中等复杂度,这些组件便开始自我坍塌。这种错误通常出现在语法正确但逻辑未完成的代码中。正如我们在2026年预测中所指出的:“‘LLMs在重新包装现有代码方面表现出色,但生成的代码本质上是衍生性的。’”

尽管存在这些缺陷,vibeware 模型仍提供了一些战略优势。

通过采用如 Nim、Zig 或 Crystal 这类小众语言,攻击者可以重置安全引擎的检测基准。LLMs 通过缩小专业知识差距使这些语言变得易用,从而允许开发人员在不熟悉的语言中生成功能性代码,只需将逻辑从更常见的语言移植过来即可。

vibeware 模型还自然促进了 Living Off Trusted Services (LOTS) 的采用,既用于命令和控制,也用于数据外泄。LLMs 因其训练数据中包含大量公开的 SDK 和文档而非常擅长为 Discord、Slack 和 Google Sheets 等平台生成稳定的代码,使攻击者能够利用这些可信渠道进行双向通信和无声文件窃取。


qw1.jpg
img
如上图所示,可以理解为什么向 vibeware 的转变可以被视为一种分布式拒绝检测(DDoD)。在这种框架中,目标不是通过技术 brilliance 来绕过安全措施,而是通过自动化的大规模操作来耗尽防守者。

已识别的受害者被多种并行植入物感染,每种植入物使用不同的语言和通信协议。如果一个实验性通道被中和,攻击者仍然可以通过另一条独立路径保留访问权限。重要的是要记住,恶意软件生产管道的工业化并不意味着攻击本身是自动化的。虽然工具是 vibe 编码且快速生成的,但实际的黑客操作仍然是手动完成的。

AI 在该编队中的证据确凿。我们在他们的项目中识别出了指向 AI 集成代码编辑器使用的元数据。二进制文件中经常包含 Unicode 表情符号字符串。行为者保持每天发布恶意软件的新变种的节奏。事实并非恶意软件技术上的突破,而是对平庸之作的优化。
归因与受害者分析
我们以中等置信度评估,观察到的恶意活动与 APT36(也称为透明部落)相关。这一评估主要基于该行动对开源和商业工具组合的依赖,包括 Havoc、Cobalt Strike 和 Gate Sentinel,这与其历史上所见的 TTPs 一致。

一个关键的技术特征是工具 warcode.exe。此特定文件在较早的活动中被识别为 Havoc 框架的加载器。它与 vibeware 一同出现提供了强有力证据,表明 APT36 工具套件中的已建立工具和这些较新的 vibe-coded 迭代之间存在连续性。

The targeting remains高度集中在南亚区域政治和国家安全。主要受害者与印度政府及其在多个国外大使馆有关。还回收了一个领英页面的截图,显示了一家与军事领域相关的政府部门的印度员工名单,表明攻击者利用职业社交网络来识别和分析高价值目标。次要目标包括阿富汗政府及若干私营企业。

根据回收的证据,攻击者特别关注以下数据类别:
  • 军队人员文档
  • 外交事务与外交政策
  • 战略和政策文件
  • 防御和国家安全

调查显示,该团伙内部基础设施中反复出现一个名为“Nightmare”的用户名,这个角色似乎在舰队的开发或操作中起着核心作用。

qw2.jpg
img
该攻击者在其基础设施中发现了由AI生成的图像。

这一系列攻击的一个显著特点是强调韧性。大多数识别出的受害者同时被多种植入物感染。
2026年AI驱动恶意软件
当前威胁态势验证了我们两年前的一些AI预测[1]。我们注意到人们不应想象一个复杂的二进制代码巧妙地在网络中移动以发现漏洞,而是“少量定制的代码,在你偏好的编程语言中构建。”

与流行的看法相反,获取功能性恶意软件源代码是极其简单的。GitHub 仓库如 theZoo 或 vx-underground 收藏集提供了成千上万的实时样本、概念验证以及历史源文件,供研究人员和对手使用。由于大语言模型(LLMs)是基于这些庞大的公共数据集进行训练的,它们实际上已经“阅读”并内化了数千种不同的恶意逻辑实现方式,使它们能够在最少的提示下重建和变体这些模式。

但对这种能力进行批判性评估揭示了一个复杂的现实。尽管大语言模型在模式识别和逻辑映射方面表现出色,但它们并不真正理解安全上下文。它们充当的是检索并重新组织现有模式的引擎,而不是发明新的模式。因此,所谓的“重建”恶意软件往往只是组装已知片段的过程。这导致了我们称之为“平庸的大批量”的情况。


qw3.jpg
img
该图表显示了过去六个月(不限于APT36)我们在遥测数据中发现的唯一AI生成恶意软件样本总数。随着我们收集更多数据,我们计划发布更详细的研究分析报告.

这些编码的样本在这项调查中并非技术杰作。它们往往通用、不一致且容易出错。尽管我们为恶意软件命名以帮助追踪各个样本,但由于整体相对较低的技术开发质量,这些样本可能并不值得特别命名。相反,将这类恶意软件称为 "vibeware" 更加准确。我们与 Google GTIG 团队近期发布的报告得出类似结论,该报告显示他们尚未观察到APT或信息操作(IO)行为者取得突破性能力,从而从根本上改变威胁格局。

虽然这些恶意软件缺乏真正的技术创新,但低估其风险是错误的。威胁在于这些攻击的工业化。我们看到了两种趋势的交汇:采用 exotic、niche 编程语言和利用可信服务隐藏在合法网络流量中。这种组合使得即使是平庸的代码也能通过简单地压倒标准防御性遥测实现高操作成功率。
恶意软件多语者
尽管大语言模型目前尚未构架新的攻击方法论,但它们的影响在促进恶意软件多语者兴起方面却十分明显。历史上,从广为人知的框架如 .NET 或 C++ 转换到不太常见的语言需要投入大量时间和精力。今天,借助 AI 辅助开发已经消除了这一障碍,使得具备基础逻辑技能的行为者可以在最小摩擦下切换不同的编程语言。

大多数检测引擎依赖于针对常见语言(如 C# 或 C++)高度定制的签名和行为模式——这些语言在内存管理、系统调用处理或运行时结构方面的方式。当威胁行为者使用“异常”语言时,实际上会重置检测基准线。此外,许多现代语言,如 Rust、Go 和 Zig,本质上是跨平台的,导致一种趋势,即恶意软件可以使用相同的代码基础同时针对多个操作系统进行开发。

在本研究中,我们识别了几种不同的编程语言:
  • Crystal 和 Zig:这些语言够小众,以至于许多 EDR 解决方案缺乏成熟的特征行为签名。例如,Warcode 和 CrystalShell 利用 Crystal 提供高性能功能,而不带有与 C++ 或 C# 相关的常见签名。
  • Nim:这是一种隐蔽的包装器,用于遗留负载。因为它编译为 C 或 C++ 但使用独特的运行时环境,它往往表现为“未知”而不是“恶意”的二进制文件,从而使简单的扫描器难以识别。
  • Rust 和 Go:这些语言被用作文件采集和外泄等“嘈杂”操作。内置的内存安全性和性能确保在执行密集任务时恶意软件保持稳定,防止可能引起系统管理员注意的崩溃。
C2 通过受信任服务存活(C2)
语言多样化虽然复杂化了二进制检测,但恶意软件仍可通过其战术、技术和程序(TTPs)被识别。即使二进制文件看起来不同,其行为仍然是最持久的标识符。为了应对这一挑战,威胁行为者越来越多地采用“生存于”(Living Off the Land, LOTL)的理念,通过融入目标环境来保持隐匿。这种策略已经成为高级威胁行为者的标准做法,并且我们的研究表明,高达84%的现代网络攻击现在使用合法预安装工具。

历史上,“生存于”概念主要指的是利用本地二进制文件(Living Off the Land Binaries, LOLBins)。然而,这一理念并不限于本地二进制文件。我们观察到一个显著的趋势是“利用可信服务生存”(Living Off Trusted Services, LOTS)。我们的研究发现威胁行为者使用Google Sheets存储恶意软件的动态指令、利用Firebase或Supabase这样的云数据库来存储元数据和凭据,以及通过Slack或Discord消息发送实时指令或检索收集的数据。


qw4.jpg
img
这张图片详细说明了威胁行为者如何利用可信服务的一些方法。


大型语言模型(LLMs)非常适合实现LOTS,因为合法的服务具有详尽的文档,并有大量的合法代码示例和SDKs作为训练数据。这些丰富的训练数据使LLM能够生成强大且功能完善的API集成代码,具备高度可靠性。

对于这种风格的行为者来说,这是一个双赢的局面。他们可以利用AI生成一个稳定且准备就绪的C2客户端,而无需构建可疑的基础结构或理解底层协议的技术细节。
恶意软件集合的技术分析初始访问
初始访问被认为通过恶意邮件发生。我们发现了证据表明,快捷方式文件(.LNK)被捆绑在ZIP存档或ISO镜像中,并且这些存档很可能是作为电子邮件附件交付的。这些存档充当容器,以绕过邮件网关上的简单文件扩展名过滤。

一种值得注意的技术是使用PDF文件作为视觉诱饵。该文档包含一张高质量的简历图像,在其上叠加了一个大而显眼的“下载文档”按钮。一旦用户点击此按钮,他们会被重定向到一个受攻击者控制的网站,该网站很可能会触发自动下载包含前述快捷方式文件的存档。这种多阶段重定向增加了一层社会工程学,因为初始PDF对许多扫描器来说看似无害,而恶意载荷则在外部分发。


qw5.jpg
img
此图显示了威胁行为者如何使用PDF文件作为视觉诱饵。


一旦受害者执行快捷方式文件,这些文件将启动在内存中下载和无文件执行PowerShell脚本的过程。这些脚本随后会下载并执行主要后门程序。一旦后门程序激活,攻击者就会过渡到一个交互阶段,在此期间他们手动连接受感染主机以进行进一步的渗透测试活动。


qw6.jpg
img上方图片显示了威胁行为者如何利用恶意PDF文件启动攻击。
Warcode
APT36 历来依赖成熟的现成进攻性安全框架来管理其操作。工具如 Cobalt Strike 和 Havoc 一直是该组织在目标网络中保持稳定存在的主要选择。

随着转向 vibeware,他们继续采用混合策略,在实验工具被阻止或未能按预期工作时作为安全网持续部署这些已建立的工具。

Warcode 是这一备用策略的关键部分。它是一种用 Crystal 语言编写的自定义 shellcode 载荷程序。我们观察到二进制文件 warcode.exe 常驻于 C:\Users\Public\AccountPictures 和 C:\Users\Public\Downloads 等常用可写位置。遥测数据显示,此特定载荷程序在当前战役之前就已经投入使用,表明它是一个受信任的组件,并且是攻击者认为可靠的。

恶意软件通过反射加载 Havoc C2 代理直接到内存中,然后与硬编码的基础架构 23.152.0.81 建立通信。


qw7.jpg
img
Havoc 是一个现代开源后渗透框架,旨在实现隐蔽的命令与控制。来源:Havoc 的 GitHub 仓库


这种混合策略确保了其使命的韧性。如果实验工具被阻止或未能按预期工作,可靠的、经过人工审核的工具可以提供备用通道。
NimShellcodeLoader
NimShellcodeLoader 是 Warcode 的实验性替代品。它用 Nim 编写而成,在全球开发社区中仍是一个小众的语言。在像 TIOBE 这样的行业指数中,其市场份额通常不到 0.1%。

就像它的前辈一样,它充当成熟现成恶意软件(此项目的内部名称为 cobaltdropper.nim)的封装器。这种特定的载荷程序设计用于部署一个嵌入在二进制文件中的 Cobalt Strike 回声。通过使用大型语言模型生成功能性封装器来利用小众语言,攻击者可以迅速迭代其交付机制。

The technical implementation uses a structured cryptographic flow. The shellcode is encrypted using AES in CBC mode. To generate the decryption key, the loader hashes the hardcoded password Pun7sh3r@123 using SHA256. Once decrypted, the beacon is executed in volatile memory.

C2基础设施利用slackin[.]online,明显滥用Azure Front Door。通过将流量路由到这个受信任的CDN中,攻击者将其通信隐藏在合法的HTTPS流量内。
CreepDropper
威胁行为体使用了一种名为CreepDropper的.NET编写工具。这种dropper是一种设计用于传递和安装其他恶意负载的恶意软件。在此活动中,CreepDropper充当SheetCreep和MailCreep(下文将描述)的分发载体。该可执行文件伪装成合法的浏览器进程chrome.exe,并且其嵌入的版本信息以及附加的无效数字签名均克隆自合法的Google Chrome版本。

技术上而言,CreepDropper是一个包含Task10类的.NET程序集。这个类执行一个简单的操作来部署其负载到C:\Users\Public\Documents:
  • MailCreep被投放为msedge.exe。
  • SheetCreep被投放为ds.png。
  • MicrosoftEdgesUpdatesTasksMachineUAs-Task:此任务配置为运行MailCreep二进制文件(msedge.exe)。
  • MicrosoftEdgesUpdatesTasksMachineUAs-1234-87hy:此任务读取一个文件到字节数组中,反转字节顺序以解混淆.NET程序集,并调用[System.Reflection.Assembly]:oad在内存中反射执行负载(无文件)。

尽管扩展名为.png,ds.png是一个功能性恶意库。为了执行这些负载,CreepDropper创建了两个计划任务,设计用于融合到标准Windows更新遥测数据中。

$b=[IO.File]::ReadAllBytes('C:\Users\Public\Documents\detail.png');([System.Reflection.Assembly]:oad(byte[]).GetType('Service.Program')::JK())"

这一特定执行链允许恶意软件保持驻留在内存中而不执行传统的 .exe 或 .dll 文件,从而提高了标准端点安全产品对该组件(SheetCreep)的检测难度。
MailCreep 和 SheetCreep
CreepDropper 感染的最后一阶段涉及执行两个功能载荷:MailCreep 和 SheetCreep。这两个组件为威胁行为者提供了实际的数据窃取和命令执行能力。这两个家族之前已被 Zscaler 研究 文档化。

我们对 MailCreep 的分析与之前的研究所一致。这种基于 Go 的信息窃取工具使用 Microsoft Graph API 来外发数据。其实现和 C2 机制与已知版本保持一致。在此次活动中,我们没有发现任何显著的差异或更新。有关其工作流程的详细分解,请参阅原始 Zscaler 分析。

尽管 SheetCreep 的基本架构仍然是一个基于 C# 的后门工具,并利用 Google Sheets 获取命令,但我们的调查揭示了几点新的见解。在受害者处检测到的样本(编译于 2025-10-28 09:58:46)使用了一种简单的文件检测规避技术——整个二进制文件被反向写入文件中。通过从末尾到开头镜像字节后,该文件生成了一个有效的 MZ PE .NET 组件。


qw8.jpg
img
Typical 可执行文件以 "MZ" 头部开始,用十六进制表示为 *4D 5A* 。静态安全扫描器依靠这一头部来识别二进制文件进行分析。这一签名是以 MS-DOS 的首席架构师 Mark Zbikowski 命名的。巧合的是,这项研究的一位作者与这些首字母相同。


主模块 GServices.dll 实现了一种基于 Google Sheets 的 C2 技术,类似于公开可用的工具如 google_RAT 或 GC2-sheet。该逻辑将 Google 表格驱动器中的电子表格转换为双向 C2 中心,在此过程中指令和输出作为单元数据进行交换。后门程序遵循特定的加密流程:
  • 它定期检查特定的电子表格以获取新条目。
  • 它使用 Base64 解码然后是 ECB 模式的 DES 加密来检索并解密发布的命令。
  • 它在主机上执行解密后的命令。
  • 它重新加密响应并通过 Google 表格 API 传输回电子表格。


qw9.jpg
img
恶意 C2 电子表格中的解密命令序列。此处展示了未经加密的命令状态,注意其中 "E;" 的拼写错误作为手动操作的证据。


我们的调查还确定了与该 C2 基础设施相关的以下账户:
  • sasikapeeper@gmail[.]com
  • service-india-api@service-india-471504[.]iam.gserviceaccount.com
  • sasikapeeper@gmailapp-468713.iam[.]gserviceaccount.com
  • unenc_requests:用于轮询入站任务。
  • unenc_outputs:用于发布命令结果。
  • unenc_heartbeats:用于会话跟踪。
  • unenc_systems:用于传输系统指纹数据。
SupaServ
SupaServ 是一个用 Rust 编写的后门程序,展示了从简单的脚本例行程序向更复杂的本地实现的过渡。代码中包含 Unicode 表情符号,如 '🌐 浏览器模拟已启用'、'🔀 随机用户代理' 和 '⏳ 完成周期',这是 AI 辅助或生成开发的一个标志。

SupaServ 通过使用 ITaskService COM 接口在主机上保持存在性,该接口用于创建会在用户登录时触发的计划任务。我们检测到的任务名称包括 DateAndTimeService 和 personalServiceTask。

恶意软件通过 Supabase 平台建立主要通信通道,并提供 Firebase 备份。Supabase 和 Firebase 是云平台,为开发者提供托管数据库服务。Firebase 是 Google 的专有服务,而 Supabase 则是一个基于 PostgreSQL 的开源替代品,在企业环境中通常默认信任这些域名。这两种服务的认证令牌直接硬编码在二进制文件中。

命令和控制任务通过四个数据库表进行管理:


qw10.jpg
img

SupaServ 实现了两种主要操作:open 和 download,路径和 URL 参数由 C2 请求提供。分析显示这两种操作的处理方式存在两个不同的变体。
旧版本
  • MD5哈希值:bea885be7d436272111504dc51685db0e, 569bb4899de5759c32ea6df661c35d4c
  • 下载:使用 curl -s -L -o 获取文件。
  • 执行:通过 spawn cmd.exe 并附加管道到 stdin 和 stdout 来运行命令。
新版本
  • MD5哈希:ca2edac970d8afed99db4b5cda72a13e
  • 下载: 使用原生的reqwest库下载数据。
  • 执行: 通过COM对象接口加载.NET CLR运行时到内存中,使用Start-Process PowerShell cmdlet 执行代码。

为了复杂网络级别的检测,恶意软件通过修改HTTP请求来模拟合法浏览器流量。它在一组硬编码的源URL和常见的User-Agent之间进行轮换。

轮换的源URL:
  • https://www.google.com/
  • https://www.bing.com/
  • https://duckduckgo.com/
  • https://www.yahoo.com/
  • https://www.reddit.com/
  • https://twitter.com/
  • https://www.facebook.com/

特定的HTTP头部设置:
  • 'Sec-Fetch-Dest': 'empty'
  • 'Sec-Fetch-Mode': 'cors'
  • 'Sec-Fetch-Site': 'cross-site'
  • 'Sec-Ch-Ua': '"Not_A Brand";v="8", "Chromium";v="120"'
  • 'Sec-Ch-Ua-Mobile': '?0'
  • 'Sec-Ch-Ua-Platform': '"Windows"'
光亮窃取者
光亮窃取者是一种最近发现的基于Rust的信息窃取工具(编译日期:2026-01-07),类似于SupaServ,它包含多个表情符号增强的日志字符串:
  • 📤 向Firebase发送文件夹元数据
  • 📊 列出驱动器中的顶级文件和文件夹
  • ✅ 文件夹已存储在数据库中
  • 📤 正在向Firebase发送文件夹...
  • 📭 驱动器中没有顶级文件
  • 💿 列举驱动器

通过创建名为LuminousBackupService的高权限计划任务来保持持久性。

与更简单的收割工具不同,光亮窃取者实现了更加健壮的地方暂存机制,使用SQLite数据库(%LOCALAPPDATA%\backup_database\backup.db)管理五个内部表:
  • files: 所有已识别文件的目录。
  • sessions: 跟踪活跃数据泄露会话。
  • folders: 目录结构元数据。
  • command_queue: 从C2接收到的任务。
  • upload_queue: 已准备并通过云进行数据外泄的文件。

恶意软件在所有可用磁盘上递归地执行目录扫描,寻找以下扩展名的文件:.txt, .docx, .pdf, .png, .jpg, .xlsx, .pptx, .zip, .rar, .doc 和 .xls。为了减少其操作足迹,LuminousStealer 将这些元数据存储在本地 SQLite 数据库中。通过与现有记录进行比较(差异对比),它确保只有新创建或修改的文件才会被编目并外泄。

实际的数据外泄时,LuminousStealer 使用分割策略将文件的元数据和内容分开上传。SQLite数据库中的所有文件元数据和目录记录都上传到 Firebase,而实际文件内容则排队并上传至 Google Drive。两者均通过 Google OAuth 进行身份验证。


qw11.jpg
img

为了增加网络检测的复杂性,LuminousStealer 使用与 SupaServ 相同的浏览器模拟技术。唯一的区别在于它使用了更具体的 Sec-Ch-Ua 字符串:'Sec-Ch-Ua': "Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"

有趣的是,对该二进制文件的分析揭示了嵌入的构建路径 C:\Users\kumar\.cargo\(.cargo 是 Rust 包管理器的全局目录)。"Kumar" 是一个常见的印度教名字,这很可能是一种故意混淆的手法。类似地,CrystalShell C2 基础设施使用名为 "Jinwoo's Server" 的 Discord 服务器作为战术手段。这些是APT常用的误导调查人员、复杂化国际政治归属的常见手法——或许开发者只是喜欢《英雄联盟:双城之战》中的主角。
CrystalShell
CrystallShell 是一种用 Crystal 语言开发的后门程序,旨在支持跨平台部署(Windows/Linux/macOS)。在2025年12月下旬至2026年1月底期间识别出的样本显示,在C2凭证管理方面有所改进,但也存在几个明显的实现问题。

我们分析的大多数样本主要使用 Discord 作为C2通道的主要通信工具,尽管发现了一个使用 Slack 的变种。该行为体在获取 Discord 机器人令牌方面的安全措施在样本中有所不同:
  • 初始阶段(2025年12月):令牌直接硬编码在二进制文件中。
  • 中间阶段:恶意软件开始从未认证的 Firebase 实时数据库端点获取令牌。
  • 当前阶段(2026年1月):最新样本使用了带有身份验证功能的 Supabase 来检索C2凭证。

该恶意软件为命令和控制通信硬编码了 Discord 频道 ID,并实现了一个简单的授权检查。它会验证发送者的 Discord 用户ID。如果命令来自未经授权用户,机器人将回复 "You are not authorized."(你没有权限)

所有在C2通道内的通讯都进行了Base64编码以避免简单字符串过滤器的检测。初始化后,代理通过发布格式为 Users: 的消息来宣布其存在。

所有机器人与操作员之间的交互遵循相同的命令和响应格式:
  • Targeting: 协议支持使用特定语法进行目标执行。代码接受三种格式的靶标字符串 //, / 和 ,但过滤程序特别提取并评估 。未带靶标前缀的命令将由所有连接代理执行。
  • Command Format: 直接命令必须以特定标签前缀和Base64编码:! en
    • users: 返回代理标识符,格式为 Users:/(例如,Users:administrator /7456)。
    • lists: 返回详细元数据:/ PID: LastSeen:. 例如:win10-vm/administrator PID:7456 LastSeen:2026-01-26 09:56:25 -08:00。
    • host / hosts / hostname: 返回主机和用户信息:/. 例如:win10-vm/administrator。
    • ls | dir: 两种形式均可列出目录内容。
    • pwd | cd: 改变或显示当前工作目录,该目录由恶意软件内部跟踪记录。
    • status: 返回连接状态:// - online|offline。
    • 其他任何命令在Linux/macOS上通过 /bin/sh -c 执行,在Windows上使用 cmd.exe /c > %TEMP%<8-random-chars>cr_shell_output 2>&1。值得注意的是,当前实现未能删除此文件。
  • Results Output: 内置命令如 ls、pwd 或 status 的结果以标准Base64字符串返回:base64()。通过 cmd.exe 或 /bin/sh 执行的命令的结果带有前导标记 !: ! base64()。

CrystalShell 包含一个翻译层,能够检测宿主操作系统并将Linux风格的命令重写为其Windows等效命令:
  • ls -> dir
  • cat -> type
  • rm -> del
  • pwd -> cd
  • mv -> move
  • cp -> copy

通过 Slack 和 Discord 管理界面发出的命令显示操作员执行了广泛的任务,从初始发现到最终数据泄露,遵循了一套标准流程。与 CrystallShell(Discord 和 Slack 变体)和 ZigShell 相关的消息始于 2025-12-08,并且在撰写此报告时仍在持续。
  • 经常使用 curl、ipinfo、ipconfig、net view 和 arp 来映射网络。
  • 定期列出计划任务/进程/目录。
  • 依赖于 PowerShell 进行高级任务,主要通过 iex(Invoke-Expression)直接从远程服务器运行代码,并将恶意 .NET 组装加载到内存中。PowerShell 还用于捕获屏幕截图和录制音频。
  • 部署其他工具和恶意软件,大多托管在文件共享服务 tmpfiles.org 上。
  • 系统地收集敏感数据并最终将其泄露至攻击者控制的云存储。

值得注意的是,在 CrystallShell 代码中可见一些明显的 Vibe-Coding 限制,例如状态和列表命令的实现。开发人员似乎打算创建一个集中式的状态管理系统,其中主代理会维护所有活跃机器人的哈希表。该哈希表应存储每个受感染主机的状态条目,从而使操作员能够查询单一点来了解整个网络的健康状况。然而,并没有协议供机器人共享其状态或选举主节点处理报告。这一疏忽会导致广播风暴,其中每个机器人尝试向其他所有人回复,但哈希表甚至未包含关于其他机器人的数据。


qw12.jpg
img

在 CrystallShell 的代码中可以明显看出 Vibe-Coding 的一些限制,例如状态和列表命令的实现。开发人员似乎希望创建一个集中式的状态管理系统,在该系统中主代理将维护所有活跃机器人的哈希表。哈希表本应存储每个受感染主机的状态条目,从而允许操作员查询单一节点以了解整个网络的健康状况。然而,并没有协议供机器人共享其状态或选举主节点处理报告。这一疏忽会导致广播风暴,其中每个机器人尝试向所有其他机器人回复消息,但哈希表甚至未包含关于其他机器人的数据。

另一个例子是状态命令。恶意软件在报告过程中不仅查询 last_seen 属性来计算时间差,还会在此过程中刷新这个时间戳为当前时间。这种逻辑错误确保了在检查时主机始终会显示“在线”,因为查询状态重置了用于评估的度量标准。
ZigShell
ZigShell 是 CrystalShell 的功能对应版本,但主要使用 Slack 作为其 C2 基础设施,并用 Zig 语言编写。已发现的两个样本编译时间为 2026-02-09,在时间线中晚于大多数 CrystalShell 变体(CrystalShell 的 Slack 版本编译于 2026-01-01 08:54:53)。

尽管平台从 Discord 更改为 Slack,但通信协议几乎与 CrystalShell 实现相同。唯一的区别是 CrystalShell 使用 !en 命令前缀,而 ZigShell 简化为标准的 ! 前缀。


qw13.jpg
img
为了自动化 Base64 编码和解码过程,攻击者使用了一个自定义的 GUI 包装器。虽然我们仅发现了这个 UI 用于 ZigShell,但可以安全假设也为 CrystalShell 开发了类似的工具。


从功能角度来看,ZigShell 增加了内置支持文件传输的功能:
  • send: File上传用于将受害机器上的文件传输到Slack频道。它包含一个使用说明:Usage: send 。
  • drop: 文件下载用于从Slack拉取文件到受害机器上。它支持文件名和Slack文件ID:Usage: drop 或 drop (从Slack下载到当前目录)。或者上传一个文件并说 '! drop'。
  • get: 该命令支持上传和下载功能。Usage: get (从当前目录 -> Slack) 或 get (从Slack -> 当前目录)。
  • 其他任何命令将通过powershell.exe启动cmd.exe执行。

ZigShell似乎是从CrystalShell逻辑直接移植到Zig语言中的。几乎相同的命令结构和公告格式表明使用了共同的设计模板。
CrystalFile
CrystalFile是一个用Crystal语言编写的简单命令解释器。与本套件中其他通过直接通信云API的工具不同,CrystalFile作为一个被动监听器运行,依赖于本地文件状态。

操作工作流:
  • 轮询:恶意软件不断监控C:\Users\Public\AccountPictures\input.txt文件。
  • 解析:当该文件非空时,恶意软件逐行读取它,并忽略以#开头的注释行。
  • 执行:通过内置逻辑处理程序对每行进行处理。
    • cd: 更改当前工作目录。
    • ls: 列出当前目录的内容。
    • copy-item: 使用PowerShell风格参数(如-path, -destination, 和-recurse)传输文件。
    • 其他情况:通过调用cmd.exe执行命令。
  • 输出:结果被连接后写入同一目录的output.txt中。
  • 清理:完成循环后,恶意软件清除input.txt并返回到其轮询状态。
LuminousCookies
LuminousCookies 是一种专门用于从基于 Chromium 的浏览器中提取 cookie、密码和支付信息的注入器,特别针对 App-Bound Encryption (ABE) 的绕过。在开始对 LuminousCookies 进行分析之前,了解 ABE 及其解密方式非常有用。
什么是 App-Bound Encryption (ABE)?
App-Bound Encryption 是从 Chromium 版本 127 引入的一种多层次防御机制,用于保护敏感资产如会话 cookie 和存储凭证。历史 上,这些秘密信息是由 Windows Data Protection API (DPAPI) 保护的,仅验证用户身份,这意味着任何以用户权限运行的恶意进程都可以解密浏览器主密钥。ABE 通过将加密密钥绑定到浏览器应用程序自身的密码学标识来缓解这一问题。只有经过验证的系统服务才能处理解密请求,并确认该请求源自合法、签名过的浏览器二进制文件。这种转变迫使攻击者不仅要进行简单的文件收割,还要采用更具侵入性的技术,如进程注入等,以访问解密后的数据。
ABE 解密器基础
通常情况下,只有经过签名的浏览器二进制文件被授权解密 app_bound_encrypted_key 值。为了绕过这一限制,注入器必须迫使浏览器加载一个恶意 DLL 到其自身的内存空间中。一旦进入该进程内部,DLL 可以通过伪装成浏览器过程的一部分来获取敏感数据。有了这个密钥,所有存储的浏览器秘密信息,包括会话 cookie 和密码,都可以使用标准的 AES 算法进行解密。

The 公开的概念验证 xaitax/Chrome-App-Bound-Encryption-Decryption 在 GitHub 上展示了一种方法,通过操控合法的浏览器组件绕过应用程序绑定加密功能,而无需管理员权限。对设备的分析揭示了多种恶意 DLL 和注入器变体,但所有已识别样本均基于这项原始研究(或其分支)。LuminousCookies 的前身是一个直接从修改后的 GitHub 仓库编译生成的独立 C++ 工具。这种版本通常以 DLL 形式分发用于侧加载,并具有明显的取证足迹,包括在 %TEMP%/chrome_decrypt.log 中的明文日志和输出文件夹如 output_dll_default。我们发现了注入器和注入库的不同版本。


qw14.jpg
img
LuminousCookies 注入器
LuminousCookies(由威胁行为者命名)是一种用 Rust 编写的现代注入工具。分析的两个样本的编译时间戳分别为 2026.01.07 08:06:04 和 2026.01.27 11:46:05。这些样本中包含硬编码的构建路径 C:\Users\kumar\,直接指向用于 SupaServ 的开发环境。

该工具利用标准注入方法将其负载部署到 chrome.exe、brave.exe 或 edge.exe 中:
  • 创建一个挂起的浏览器进程。
  • 使用 VirtualAllocEx 和 WriteProcessMemory 将 payload.dll 的路径写入目标进程内存。
  • 在 kernel32.dll 中解析 LoadLibrary 的地址。
  • 使用 CreateRemoteThread 调用 LoadLibrary,迫使浏览器进程加载恶意负载。

该恶意软件包含一个帮助菜单:

qw15.jpg
img
执行后,LuminousCookies注入器首先尝试在其当前工作目录中定位并加载名为payload.dll的文件。然后,该工具会扫描系统以识别活跃的目标进程,目标可能是Google Chrome、Microsoft Edge或Brave。一旦找到目标进程,注入器将启动LoadLibrary注入序列,迫使浏览器加载payload。为了数据传输,注入器创建了一个命名通信管道,并进入等待状态,直到从注入的解密模块接收到完成信号。

qw16.jpg
img
qw17.jpg
img
已知的ABE解密DLL与LuminousCookies注入器之间存在技术冲突。标准的ABE解密DLL期望在DllMain中传递通信管道名称作为参数,通常通过进程空壳实现。然而,LuminousCookies使用的LoadLibrary注入方法不支持向入口点传递参数。这表明payload.dll可能存在一个修改过的变体,其中可能包含硬编码的管道名称,我们无法获取。
BackupSpy
BackupSpy是一个基于Rust的实用工具(编译于2026-01-12),设计用于监控本地文件系统和外部媒体以识别高价值数据。内部标识字符串为"BACKGROUND WATCHER STARTED - VERSION 2",该工具作为专门的数据收集器运行,将数据准备供套件中的其他组件进行传输,并将其存储在单个位置C:\Users\Public\systemTemp。

BackupSpy 使用一个硬编码的自定义配置,存储在 C:\Users\Public\systemTemp\config.toml 中。如果未找到配置文件,它会放置一个默认版本。默认配置包括一个扩展名白名单(16种文件类型)和50MB的最大文件大小阈值。
Toml

# 默认情况下启用复制功能:如不需复制,请手动设置为 false

enable_copy = true

# 复制目标位置:当 enable_copy 为 true 时,文件将被复制到此处

copy_destination = "C:\Users\Public\systemTemp\copied"

# 扩展名白名单:仅包含这些扩展名的文件会被考虑进行复制/记录

allowed_extensions = ["txt","md","pdf","doc","docx","xls","xlsx","csv","json","xml","html","htm","jpg","jpeg","png","ppt","pptx"]

# max_copy_size_bytes:任何超过此大小的文件在复制时将被跳过(安全)

max_copy_size_bytes = 52428800

BackupSpy 生成包含泄露文件详细信息的 JSON 格式清单文件 (manifest.json 和 drive_manifest_ _%Y%m%dT%H%M%S .json)。该工具还会在 C:\Users\Public\systemTemp\log.txt 中维护操作日志,记录扫描开始、文件匹配和错误情况。


qw18.jpg
img

清单文件包括以下属性:
  • manifest.json
    • 路径
    • 大小
    • 文件名
    • 最后修改时间
    • 跟踪的文件
  • drive_manifest.json
    • 路径
    • 大小
    • 驱动器
    • 检测时间
    • 文件
ZigLoader
ZigLoader 是用 Zig 编程语言编写的专用加载器。其主要功能是对任意 shellcode 进行解密并在内存中执行。经过分析的样本(c0218ece73d9046e25293fbef71bc70c)显示出活跃开发和反取证技术的迹象,包括将 PE 头部的时间戳 timestomping 为 1981-07-24 18:17:51。在分析的样本中,shellcode 仅执行 calc.exe,表明 ZigLoader 很可能是概念验证项目。

ZigLoader 使用滚动 XOR 方案来解密其内部 368 字节的 payload。该过程从一个基础密钥(0xAA)开始,在处理每个字节后都会对其进行修改。

qw19.jpg
img
解密后的输出为 Base64 字符串,解码后包含 x64 shellcode。该 shellcode 不直接通过名称调用 Windows API - 相反,它使用自定义散列算法在运行时解析函数地址。

识别出的 API 散列值:
  • 0x876F8B31: kernel32.dll!WinExec
  • 0x9DBD95A6: kernel32.dll!GetVersion
  • 0x56A2B5F0: kernel32.dll!ExitProcess
  • 0x6F721347: ntdll.dll!RtlExitUserThread

加载器利用低级别的系统调用(如 NtAllocateVirtualMemory 和 NtFreeVirtualMemory)进行内存操作,通过 CreateThread 在执行前部署 shellcode。
网关哨兵信标
网关哨兵信标是开源 GateSentinel 项目 的自定义版本。这是一个现代的 C2 框架,结合了基于 Go 的服务器和基于 C 的客户端。

The most显著的偏离原始来源的是实现了一个额外的持久化机制。攻击者不仅依赖服务或注册表项,还修改了合法应用程序快捷方式(.lnk文件)。除了打开目标应用外,修改后的快捷方式还会在后台执行恶意软件。

调查发现五种被修改的快捷方式:
  • Google Chrome: C:\Users%USERNAME%\Desktop\Google Chrome.lnk
  • Microsoft Edge (公共): C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft Edge.lnk
  • Microsoft Edge (用户): C:\Users%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Microsoft Edge.lnk
  • Microsoft Edge(用户固定任务栏): C:\Users%USERNAME%\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Microsoft Edge.lnk
  • Microsoft Edge(系统固定任务栏): C:\Users%USERNAME%\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\ImplicitAppShortcuts*\Microsoft Edge.lnk
结论与建议

APT36向vibeware的过渡代表了一种技术倒退。尽管AI辅助开发增加了样本量,但生成的工具往往不稳定且充斥着逻辑错误。攻击者的策略错误地针对基于签名的检测方法,而现代端点安全已远远超越了这种检测方式。

高级防御堆栈包括行为分析、内存扫描和进程监控以识别恶意活动,这意味着任何试图注入进程或与云API通信的恶意二进制文件都会立即被检测到。

威胁仍然是一种混合模型。AI生成了一线可抛弃的恶意软件,但后续的黑客操作仍需手动完成。

1. 优先行为检测

基于过程行为进行检测而非文件运行时,监控用户可写目录(如%APPDATA%)中执行未签名二进制文件的行为。EDR平台应提示异常API调用或进程注入,这些在vibeware系列中无论使用何种语言均保持一致。

2. 审核和控制可信云服务 (LOTS)

对Discord、Slack和Google Sheets等用于命令与控制的依赖是此次行动的核心支柱。组织必须实施细粒度监控这些服务。任何来自未验证二进制文件的持续外部连接都应被视为潜在妥协指标。

3. 敌对网络环境

为了保护免受手动黑客攻击,通过实现动态攻击面缩减,结合可操作的EDR/XDR平台如Bitdefender GravityZone和成熟的SOC/MDR运营,将网络转化为对手难以预料的环境。这些措施为人类操作者增加了摩擦与不确定性,在横向移动和发现阶段迫使他们暴露自身。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-3-14 02:56 , Processed in 0.057944 second(s), 21 queries , Gzip On, MemCache On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部