伪装成《我的世界》模组的恶意软件瞄准游戏玩家

研究人员发现针对《我的世界》玩家的多阶段攻击活动,通过GitHub分发恶意Java模组,窃取用户凭证和敏感数据,涉及反分析和数据窃取技术。

伪装成《我的世界》模组的恶意软件瞄准游戏玩家

Check Point Research发现了一个针对《我的世界》用户的多阶段攻击活动,通过GitHub上的Stargazers Ghost Network分发恶意软件。该恶意软件冒充Oringo和Taunahi等“脚本和宏”工具(即作弊工具)。

关键点

  • 第一阶段下载器和第二阶段窃取程序使用Java实现,要求主机安装《我的世界》。
  • 第三阶段恶意软件是功能扩展的.NET窃取程序。
  • 《我的世界》恶意软件使用Java编写,常被安全解决方案忽略。
  • 恶意软件由俄语威胁行为者开发,包含多个俄语编写的工件。

介绍

《我的世界》是一款流行的视频游戏,拥有庞大的全球玩家基础,每月活跃玩家超过2亿。该游戏还售出了超过3亿份,使其成为有史以来最畅销的视频游戏之一。《我的世界》支持模组(用户创建的修改),通过改进游戏玩法、修复错误、增强图形和添加新内容来丰富用户体验。据估计,超过100万玩家积极参与《我的世界》的模组制作。

Check Point Research发现了通过Stargazers Ghost Network分发恶意软件的恶意存储库,该网络作为分发即服务(DaaS)运营。

这些活动导致针对《我的世界》用户的多阶段攻击链。恶意软件冒充Oringo和Taunahi,这些是“脚本和宏工具”(即作弊工具)。第一阶段和第二阶段都是用Java开发的,只有在主机上安装了《我的世界》运行时才能执行。

Stargazers Ghost Network活动

自2025年3月以来,Check Point Research一直在跟踪针对《我的世界》用户的恶意GitHub存储库,这些存储库使用未检测到的Java下载器。这些存储库据称提供《我的世界》的模组,并且由于多个账户为这些存储库加星标而显得合法。

图1:恶意存储库

存储库包含各种恶意jar文件,它们的名称通常冒充各种作弊和自动化工具。以下是发现的文件名:

1
2
3
4
5
6
7
8
FunnyMap-0.7.5.jar
Oringo-1.8.9.jar
Oringo-Client.1.8.9.jar
Polar-1.8.9.jar
PolarClient-v2.6.jar
SkyblockExtras-1.8.9.jar
Taunahi-V3.jar
TaunahiPlus-V3.jar

图2:恶意发布

这个Java下载器在所有VirusTotal的反病毒引擎中均未被检测到,因为它高度针对《我的世界》用户,并且沙箱引擎不包含所需的依赖项,这将让恶意软件运行。

图3:VirusTotal检测

虽然我们对攻击者的信息知之甚少,但关于攻击者的提交有一件事是一致的,所有提交都是在UTC+3时区进行的,并且在一些恶意文件上发现的俄语评论进一步表明了可能的来源国。

恶意软件概述

感染链从一个托管的JAR存档开始,需要由受害者手动下载并安装为《我的世界》模组(“mod”是“modification”的缩写,是用户创建的原始版本的添加或更改。模组可以添加新功能、增强游戏玩法并自定义玩家体验。)。当受害者启动游戏时,恶意模组下载第二阶段窃取程序,该窃取程序又下载另一个.NET窃取程序。恶意软件由俄语威胁行为者开发,包含多个俄语编写的工件。

图4:感染链

第一部分 – 静态分析 – 第一阶段加载器

初始JAR文件设计为《我的世界》Forge模组。它在清单中没有Main-Class属性,因此,从命令行运行“java -jar ”不起作用。前两个阶段的包名是me.baikal.club,参考了贝加尔湖,这是世界上最深的湖泊,位于俄罗斯的亚洲部分。

为了开发自定义模组,开发者必须遵循一定的结构并包含特定的依赖项。主要的@Mod类包含对IFMLLoadingPlugin的引用。FML字母代表Forge Mod Loader。

图5:加载器从《我的世界》Forge包导入类

加载器实现了简单的反VM和反分析技术。最初,加载器获取以下三个属性的名称(结果相当于调用“java -XshowSettings:properties -version”)。

  • os.name
  • java.vm.name
  • java.vm.vendor

如果任何上述设置包含阻止列表关键字(与各种虚拟机相关),恶意软件(《我的世界》模组)会自行终止。这是阻止列表关键字列表:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
vmware
virtualbox
kvm
qemu
hyperv
xen
parallels
vbox
vpc
vboxguest
sshd
head

然后,调用tasklist实用程序列出所有正在运行的进程。如果检测到任何阻止列表进程,模组的执行将终止。这些进程与虚拟机(VBox、Parallels、VMware)、协议分析器(Wireshark、HTTP Debugger)和列出网络连接的程序(TCPView)相关联。

这是阻止列表进程列表:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
VBoxTray.exe
VBoxService.exe
prl_cc.exe
prl_tools.exe
SharedIntApp.exe
vmusrvc.exe
vmsrvc.exe
vmtoolsd.exe
Wireshark.exe
HTTPDebuggerUI.exe
HTTPDebuggerSvc.exe
tcpview.exe

通过之前的检查后,第一阶段下载Pastebin(hxxps://pastebin.com/raw/xCa3vSiP)的内容。Base64编码的内容被解码,恶意软件检索第二阶段的链接(hxxp://147.45.79.104/download)。下载器将名为MixinLoader-v2.4.jar的Java窃取程序加载到内存中。

有趣的是,该粘贴是由用户名JoeBidenMama创建的,该用户还创建了另外三个粘贴:

  • Google statistics 3 (纯文本), hxxp://147.45.79[.]104/cookies
  • Google statistics 2 (Base64编码), hxxp://147.45.79[.]104/download
  • Google statistics (纯文本), hxxp://147.45.79[.]104
  • Google statistics (纯文本), hxxp://147.45.79[.]104:80

Pastebin的“HITS”列显示粘贴被查看或下载的次数。这可以给我们一个粗略的上限估计,有多少受害者可能被针对或感染,因为每次运行受感染的插件时都会访问该粘贴。Check Point Research持续监控此账户,并发现了更多的活动和粘贴URL被添加,总点击次数超过1500。

图6:用户JoeBidenMama创建的所有粘贴及其统计信息(HITS)

第二部分 – 动态分析 – 第一阶段加载器

要向《我的世界》游戏添加模组,用户必须将恶意JAR存档复制到《我的世界》的mods文件夹中。启动游戏后,《我的世界》进程将加载文件夹中的所有模组,包括恶意模组,该模组将下载并执行第二阶段。

为了动态运行恶意软件,我们决定安装Legacy Launcher。需要《我的世界》Forge版本1.8.9,因为JAR存档中的mcmod.info元数据显示我们的恶意插件需要此加载器。

图7:包含模组元数据的mcmod.info文件内容

因此,我们需要做的就是运行《我的世界》客户端并安装适当类型和版本的模组加载器。

图8:安装所需的模组加载器

安装完成后,我们可以将恶意JAR文件复制到mods目录(<installation_directory>\.tlauncher\legacy\Minecraft\game\mods\)并进入游戏,这将激活我们的恶意模组。

在虚拟机中执行恶意JAR插件,我们可以注意到在恶意插件由于检测到虚拟环境而退出之前执行了tasklist。为了演示目的,我们编辑了原始JAR模组以执行notepad而不是tasklist。运行这样的修改模组会执行Notepad,如下面的动画所示。

第三部分 – 第二阶段窃取程序

当加载器成功通过所有环境检查后,它会加载主要组件,即窃取程序。一些样本可能使用Skidfuscator进行混淆。窃取程序的有趣类和方法如下所示。

图10:窃取程序中的类和方法列表

  • Class Baikal – 一个实现预初始化阶段执行的操作的类
    • method: init – 未实现
    • method: preInit – 从Start类运行start()方法
  • Class Start
    • method: start
      • 下载并运行.NET窃取程序
      • 从checkip.amazonaws.com获取外部IP
      • 窃取
        • 《我的世界》令牌
        • Feather客户端/启动器的accounts.json文件
        • Essential客户端/启动器的microsoft_accounts.jcon文件
        • Lunar客户端/启动器的accounts.json文件
        • Discord令牌
        • Telegram
        • pizzaclient的令牌
        • 用户名
        • 玩家ID
      • 硬编码的type值设置为b0.5,可能是窃取程序的版本
      • 从Pastebin获取GET渗透URL(hxxps://pastebin[.]com/raw/C9QvUqi3)
      • 以JSON格式POST被盗数据
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
{
    "username": "%s",
    "uuid": "%s",
    "token": "%s",
    "ip": "%s",
    "feather": "%s",
    "essentials": "%s",
    "lunar": "%s",
    "discord": "%s",
    "type": "%s"
}
  • Class SSHaccess – 负责下载和执行另一个文件(.NET窃取程序)的类,在第四部分中有更详细的分析。
    • method: downloadFile
    • method: runFile
  • Class Discord – 负责窃取Discord令牌的类。列出%APPDATA%/discord/Local Storage/leveldb中的文件,读取扩展名为.ldb的文件内容,搜索令牌。
    • method: stealDiscord
  • Class HTTP – 实现GET和POST请求的辅助类
    • method: fetchURL – GET请求
    • method: post – POST请求
  • Class Telegram – 负责窃取Telegram数据的类。找到Telegram的tdata文件夹,压缩它,并将其渗透出去。
    • method: execute

第四部分 – 第三阶段.NET窃取程序

SSHaccess类负责下载一个用.NET编写的附加窃取程序,并将其渗透到Discord webhook。Webhook是一种工具,允许外部服务或应用程序向特定的Discord频道发送消息、通知或数据,而无需登录机器人或用户账户。

1
2
[assembly: AssemblyTitle("44 CALIBER")]
[assembly: AssemblyCopyright("FuckTheSystem Copyright ©  2021")]

去混淆后,我们可以观察到它从浏览器(Chromium、Edge、Firefox)、文件(桌面、文档、%USERPROFILE%/Source)、加密货币钱包(Armory、AtomicWallet、BitcoinCore、Bytecoin、DashCore、Electrum、Ethereum、LitecoinCore、Monero、Exodus、Zcash、Jaxx)、VPN(ProtonVPN、OpenVPN、NordVPN)、Steam、Discord、FileZilla、Telegram窃取各种凭证,以及收集有关受感染机器的信息,如运行进程、外部IP、剪贴板内容,并截取屏幕截图。

图11:窃取程序代码片段,包含自解释的类及其调用的方法列表

被盗数据被压缩,并与以下统计信息一起上传到Discord webhook,注释为俄语。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
"\n <@&945424667102031903> fixed file size\n ",
Environment.UserName,
" ",
SystemInfo.Country(),
"\n -------------------------\n пассвордс: ",
Counting.Passwords.ToString(),
"\n -------------------------\n спиздил:",
(Counting.Discord > 0) ? "\n - дискорд" : "",
(Counting.Wallets > 0) ? "\n - холодки" : "",
(Counting.Telegram > 0) ? "\n - тг" : "",
(Counting.Steam > 0) ? "\n - стеме" : "",
(Counting.NordVPN > 0) ? "\n - нордвпн" : "",
(Counting.OpenVPN > 0) ? "\n - открытьвпн" : "",
(Counting.ProtonVPN > 0) ? "\n - протонвпн" : ""

结论

一个新的基于Java的恶意软件下载器在很长一段时间内基本上未被检测到。伪装成《我的世界》模组,这些恶意的Java存档由于缺少依赖项而经常逃避沙箱分析。Stargazers Ghost Network一直在积极分发这种恶意软件,针对寻求模组以增强游戏体验的《我的世界》玩家。看似无害的下载实际上是基于Java的加载器,部署了两个额外的窃取程序,能够渗透凭证和其他敏感数据。

这些活动背后的威胁行为者很可能来自俄罗斯。这个案例突显了流行的游戏社区如何被利用作为恶意软件分发的有效载体,强调了下载第三方内容时谨慎的重要性。

防护措施

Check Point Threat Emulation和Harmony Endpoint提供全面的攻击策略、文件类型和操作系统覆盖,并保护免受本报告中描述的攻击和威胁。

入侵指标

描述 SHA256
stage 1 JAR 05b143fd7061bdd317bd42c373c5352bec351a44fa849ded58236013126d2963
stage 1 JAR 9ca41431df9445535b96a45529fce9f9a8b7f26c08ac8989a57787462da3342f
stage 1 JAR c5936514e05e8b1327f0df393f4d311afd080e5467062151951e94bbd7519703
stage 1 JAR 9a678140ce41bdd8c02065908ee85935e8d01e2530069df42856a1d6c902bae1
stage 2 JAR 4c8a6ad89c4218507e27ad6ef4ddadb6b507020c74691d02b986a252fb5dc612
stage 2 JAR 51e423e8ab1eb49691d8500983f601989286f0552f444f342245197b74bc6fcf
stage 2 JAR 5d80105913e42efe58f4c325ac9b7c89857cc67e1dcab9d99f865a28ef084b37
stage 2 JAR 97df45c790994bbe7ac1a2cf83d42791c9d832fa21b99c867f5b329e0cc63f64
stage 2 JAR 4c944b07832d5c29e7b499d9dd17a3d71f0fd918ab68694d110cbb8523b8af49
stage 2 JAR 5590eaa4f11a6ed4351bc983e47d9dfd91245b89f3108bfd8b7f86e40d00b9fa
stage 2 DL URL hxxp[://]147[.]45[.]79[.]104/download
stage 2 DL URL hxxp://негры[.]рф/MixinLoader-v2.4[.]jar
stage 2 UL URL hxxp[://]185[.]95[.]159[.]125/upload
hosting domain негры[.]рф
stage 3 7aefd6442b09e37aa287400825f81b2ff896b9733328814fb7233978b104127f
stage 3 886a694ee4be77242f501b20d37395e1a8a7a8f734f460cae269eb1309c5b196
stage 3 a1dc479898f0798e40f63b9c1a7ee4649357abdc757c53d4a81448a5eea9169f
stage 3 a427eeb8eed4585f2d51b62528b8b4920e72002ab62eb6fc19289ebc2fba5660
stage 3 f08086257c74b1de394bf150ad8aacc99ca5de57b4baa0974bc1b59bb973d355
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计