本帖最后由 tiered-zinnias 于 2026-4-9 04:18 编辑
GDATA原文:https://blog.gdatasoftware.com/2 ... od-sugarsmp-malware
甜蜜的MC模组——SugarSMP 诈骗、恶意软件与勒索的黑暗传说
如果您是一位家长,您可能曾看到您的孩子在游戏中失去财产给“恶意破坏者”后伤心欲绝的样子。或者,如果您自己就是一名《我的世界》玩家,您可能也曾直接受到过影响。恶意破坏者是指那些故意摧毁其他玩家建筑、窃取游戏内物品或扰乱其他玩家正常游戏的玩家。经历过这些后,人们自然会渴望一个更安全、没有恶意破坏的游戏环境。
有一些 Minecraft 社区就做出了这样的承诺:“舒适、无恶意破坏、包含领地保护的生存模式”,或是“没有抓马、没有恶意破坏、没有有害行为”,正如在 sugarsmp(dot)com 等 Minecraft 网站上看到的那样。
确实,如果我们检查 SugarSMP 的下载链接,它们会指向以 Cobblemon(宝可梦模组)为主题的整合包;在线玩家人数大约在 35 到 45 人之间小幅波动;网站上满是社区创作的视频和照片,还有常见问题解答(FAQ)、玩家评价页面以及展示管理团队的版块。到目前为止,一切看起来都很正常,不是吗?
甚至在 YouTube 上还有其他玩家展示他们在此 SugarSMP 服务器中游戏体验的直播录像。在各大服务器列表网站上,该服务器也被推荐为线上游玩 Minecraft 的绝佳选择。
基于这些信息,假设 SugarSMP 的所有者礼貌地要求您删除一篇“声称他们正在传播恶意软件”的帖子,您会同意吗?
这正是 r/computerviruses 子版块的版主们所经历的事情。他们收到了来自一个在 Reddit 上活跃了近十年的高信誉用户账号发来的删帖请求。
在此之后,我们——即 r/computerviruses 的版主 rifteyy、一位选择匿名的合作者,以及我本人——决定进行更深入的调查。尽管 SugarSMP 网站表面上看起来没有问题,但总有一些地方感觉“不对劲”。
例如,虽然在线玩家数量一直显示为 35-45 人,但从未出现过任何大幅波动。假设玩家们都在同一个时区登录,我们本应预见到:在大多数玩家通常睡觉的时间段会出现玩家数量的锐减,或者在他们醒着且有空闲时间玩 Minecraft 时出现激增。退一步说,即使假设来自不同时区的玩家都在使用该服务器,也应该存在更高频率的数据波动。
调查过程
SugarSMP 网站的 FAQ 版块提到:“SugarSMP 运行在 Fabric 1.21.4 上,并且是全模组化的”,这意味着您必须安装特定的模组包才能加入服务器。实际上,当尝试连接该服务器时,它确实会要求从 `sugarsmp(dot)com/downloads` 下载模组包。
这一点本身并不可疑,因为 Fabric 要求客户端上的模组必须与服务器及其他玩家的模组保持一致。但是,这是否可能被滥用,从而胁迫用户下载恶意软件?
Minecraft 服务器使用服务器列表 Ping(Server List Ping, SLP)协议与客户端进行通信。因此,我们编写了一个小脚本来对其进行 Ping 测试,并从游戏服务器获取基本信息:
- import socket, struct, json, sys
- sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- sock.settimeout(10)
- host = sys.argv[1]
- sock.connect((host, 25565))
- host_bytes = host.encode("utf-8")
- data = b"\x00\xfd\x05" + bytes([len(host_bytes)]) + host_bytes + struct.pack(">H", 25565) + b"\x01"
- sock.send(bytes([len(data)]) + data)
- sock.send(b"\x01\x00")
- raw = sock.recv(16384)
- response = raw[raw.index(b"{"):]
- while True:
- try:
- result = json.loads(response)
- break
- except json.JSONDecodeError:
- more = sock.recv(16384)
- if not more:
- break
- response += more
- sock.close()
- print(json.dumps(result, indent=2))
复制代码
这个脚本会返回 JSON 数据,提取出易于人类阅读的结果如下:
- Server: Paper 1.21.4
- Protocol: 769
- Players: 40/120
- MOTD: Sugar SMP NEW SEASON WINTER
- Secure Chat: True
复制代码
这意味着服务器使用的是 Paper 1.21.4。MOTD 代表“每日消息”(Message of the Day),协议号 769 对应的是 Minecraft Java 版 1.21.4。服务器还告诉我们当前有 40 名玩家在线,最大可容纳 120 名玩家。“安全聊天”(Secure Chat)指的是 `enforcesSecureChat` 选项,它要求所有玩家必须拥有 Mojang 签名的公钥才能连接。
这意味着这些可疑的玩家统计数据确实是由服务器传回的。但这并不意味着该数字就是真实的,因为服务器本身可能在伪造数据。
我们继续利用 VirusTotal 和开源情报(OSINT)对 `sugarsmp(dot)com` 域名进行了调查,试图找到潜在的相关文件或之前提供的下载内容,但当时一无所获(注:如果您现在正在查看,由于我们的调查,VirusTotal 上现在已经有了关于该域名相关文件的更多上下文信息)。
3 月 7 日,SugarSMP 的所有者要求 r/computerviruses 的 Reddit 版主删除一篇关于其网站存在感染文件的帖子。这篇诈骗警告帖发布于 2 月 27 日。在帖子中,受害用户描述说,在安装了 SugarSMP 的模组后,不仅他们的账号和数据被盗,SugarSMP 的所有者还以公布其私人信息为由勒索了他们 300 美元。
我们联系了该用户(u/RevolutionaryBug4262),他们回复称,有一个“家伙”在 Discord 上给他们发消息,邀请他们加入其 Minecraft 服务器:
“[他] 说模组整合包下载链接在那儿。我把整合包 zip 解压到 CurseForge 里并检查了模组列表(到这里时已经起疑心了),但看起来很正常,只是一堆性能优化模组 [...] 当我启动安装时,它弹出了一个大大的勒索屏幕,但不知怎么的被我用 alt+f4 关掉了。然后他就私信我,说他掌握了我所有的信息和密码云云(大概是恶意软件记录了谷歌保存的密码和 iCloud 的图片并发送给了他),而且他还说他仍然控制着我的笔记本电脑,除非我断开 Wi-Fi。哦对了,他要 300 美元,否则就泄露我的信息,但他很可能反正也会泄露,而且我身无分文,所以我只是改了密码并重置了电脑。”
据该用户称,此事发生在 2 月 26 日。他们随后发给我们两张截图,出于隐私原因我们不会公开。第一张截图显示了一条通过机器人“scare(恐吓)”命令执行的 Discord 消息,包含文本“您的电脑已被入侵(YOUR COMPUTER WAS COMPROMISED)”。第二张截图展示了一条典型的窃取器(stealer)外传信息,这正是威胁行为者通常会收到的那种控制面板数据。它包含了被盗的 Cookie、密码、信用卡和自动填充信息的数量统计,列出了操作系统、杀毒软件、硬件 ID(HWID)、IP 地址,并显示了用户电脑当时的屏幕截图。
这意味着,SugarSMP 的所有者在 2 月 26 日至 3 月 7 日期间,恰好在他们提出 Reddit 删帖申诉之前,下架了自己的带毒模组包并将其替换为了官方干净的模组包。这也反过来表明,2 月 26 日之前的网站版本可能会告诉我们真相。
事实确实如此。当我们在查看 2026 年 2 月初 SugarSMP 网站在 Wayback Machine 上的网页快照时,取得了突破。我们没有再发现指向官方宝可梦主题模组的链接,而是发现了托管在该域名上的 `SugarSMP-1.0.zip[1]`、`SugarSMP-ModPack.zip[2]` 和 `SugarSMP 1.0.0.mrpack` 下载链接。我们对 `SugarSMP-1.0.zip` 模组包进行了深度分析。
CurseForge 模组整合包分析:SugarSMP-1.0.zip
CurseForge 会为您管理模组。安装程序只需要在 JAR 的 `manifest.json` 中通过项目 ID 列出这些模组,然后 CurseForge 会在安装时自动下载并验证,这意味着它们不会占用原始 ZIP 文件的存储空间。然而,`SugarSMP-1.0.zip[1]` 的大小竟然超过了 20 MB,对于一堆仅仅是项目 ID 的数据来说,这显然太大了。
在 `manifest.json` 中,该整合包确实列出了 15 个合法的模组(如 Fabric API、Sodium 等)。
但是,CurseForge 的模组包格式会直接将 `overrides/` 目录下的内容复制到 Minecraft 实例中,而不进行任何完整性验证。在 `overrides/mods/` 目录中,有一个名为 `appleskin-fabric-mc1.21.3-3.0.6.jar` 的文件,这是合法的 AppleSkin 模组(用于改进食物 HUD)。
`squeek/appleskin` 下的所有合法类确实都存在且功能正常,但在 `squeek/appleskin/client/DebugInfoHandler.class` 中,威胁行为者向模组的合法初始化流程中添加了一个恶意钩子(Hook)。
当 Minecraft 启动时,Fabric 模组加载器调用 `AppleSkin.onInitializeClient()`,该方法反过来会调用被注入了恶意代码的 `DebugInfoHandler.init()`。
紧接着,`BootstrapService.setElevationJarPath()` 会记录该 JAR 的文件系统路径,以便后续持久化。随后,`Main.runAsync(RunType.MOD)` 会在一个守护线程(低优先级后台线程)上启动恶意软件的代码,确保它不会阻塞游戏合法代码的执行,以此隐蔽运行。
`RunType` 是 `org.spark` 包中的一个恶意类。由于大部分恶意代码都在这个包下,我们将该恶意软件家族命名为 Spark stealer。
Spark stealer 使用了一种未知的混淆器,它将加密字符串转换为盲文(Braille)Unicode 字符,并生成点彩派风格的 ASCII 艺术图案(例如代码中绘制的史莱克图案)。
在代码图案下方硬编码了一个 Discord Webhook,恶意软件将其与 GoFile 上传功能结合使用以向外渗漏数据。该 Webhook 的创建时间距离该样本首次在 VirusTotal 上被发现仅有两个小时。
该恶意软件会窃取以下应用程序的数据:
- Discord 令牌(Tokens)
- Telegram 桌面版会话
- 钱包浏览器扩展程序
- 本地加密货币钱包应用
- 基于 Chromium 和 Gecko 内核浏览器的凭据
- Steam 凭据
此外,Spark stealer 还会查询社交媒体 API 以获取 TikTok 和 Roblox 的会话信息、个人资料和虚拟资产余额等。该恶意软件甚至内置了一个关键字扫描器,在窃取的凭据和 Cookie 中查找敏感词(包括 Pornhub 和 Onlyfans 等网站,可能用于后续勒索),并专门针对 GitHub、Cloudflare 等开发者平台进行窃取。
文件 `appleskin-fabric-mc1.21.3-3.0.6.jar` 根目录中还包含一个名为 `injection.b64` 的文件。里面是编码后的 JavaScript,恶意软件会将其注入到 Discord 桌面客户端的 `discord_desktop_core/index.js` 中。这段注入代码不仅会窃取 Discord 的支付信息和 2FA 验证码,还会监听密码修改事件。
由于窃取器的代码依赖于 Windows API 解密浏览器密码(如 CryptUnprotectData),它使用了 Java 本地访问(JNA) 直接从 Java 环境中调用这些 API。这对安全检测工程来说是一个明显的行为特征(Indicator),因为正常的 Minecraft 模组绝不需要调用类似 `nss3.dll` 这样的浏览器级底层加密 API。
持久化机制
攻击者总共部署了三层持久化机制:
1. 伴随游戏启动: 每次玩家使用受感染的 AppleSkin 模组打开游戏时,恶意软件都会随之启动。
2. Discord 客户端劫持: 注入到 Discord `index.js` 中的代码在 Discord 重启后依然存活,除非用户彻底重装 Discord。
3. 计划任务: `BootstrapService.setStartup()` 方法会创建目录 `<user.home>\AppData\Local\Microsoft\Windows`,将自身拷贝进去并重命名为 `FileExplorer.jar`。随后,创建一个名为“ExplorerStartup”的系统计划任务来实现开机自启。
社会工程学
威胁行为者竭尽全力来维护他们虚假 SugarSMP 社区的声誉。网上能搜到虚假的服务器排名赞美 SugarSMP,甚至在 YouTube 上有挂羊头卖狗肉的假直播。
唯一揭露真相的 Reddit 警告帖(即前文提到的勒索受害者发布的)却被删除了。删帖要求之所以能得逞,是因为提出申诉的账号是一个拥有近十年历史的高信誉 Steam 模组开发者账号。
我们在进一步调查后发现,这个高信誉开发者账号实际上已经被黑客窃取。黑客利用窃取来的合法开发者身份向 Reddit 版主施压,删除了揭露他们 SugarSMP 骗局的帖子。威胁行为者不仅擅长编写恶意代码,更精通利用信誉体系抹除犯罪痕迹。
成群结队的“甜系(Cozy)”Minecraft 诈骗网站
通过搜索网站上使用的“cute(可爱)”和“cozy(舒适)”等话术词,我们发现了一个庞大的、有着惊人相似度的钓鱼网站网络。虽然主题各异(粉色系、小猫主题等),但内核一致。
我们编写了爬虫,从所有这些域名(多达几十个,见文末 IOC 列表)中下载文件。在我们爬取时,所有能成功下载的站点都托管了窃取器(主要基于 Electron / JavaScript),这是一个成熟的黑产矩阵。
在分析调查时,这类黑客经常会“销毁证据”(如将恶意文件替换为正常的官方模组),这也是为什么深入取证、通过 Wayback Machine 获取历史载荷至关重要的原因。
补救措施
系统可能感染了 Spark stealer 的用户应立即采取以下措施:
- 彻底卸载并重新安装 Discord 客户端。
- 检查并删除执行可疑 JAR 文件(如 `FileExplorer.jar`)的 Windows 计划任务。
- 使用更新至最新病毒库的杀毒软件进行全盘扫描。
- 注销所有浏览器和 Discord 的登录会话,并重新生成 Discord 的 2FA 备用安全码。
- 检查并清理 Discord 的“设置 -> 授权的应用”。
- 必须修改所有在浏览器中保存过或可能受影响的密码。
- 将受影响的加密货币钱包资金转移到全新钱包,切勿在新钱包中重复使用旧的助记词。
入侵指标 (IOC)
恶意的 CurseForge 模组整合包 (SHA256):
- SugarSMP-1.0.zip - 060ed0ec27a0a4ad7b55425ed56d8ef0c55aa61b499d4884d1679f18d518ddf3
- SugarSMP-ModPack.zip - dfef4a07800ad08e09390291647e4cf50c77d1a83e076c181103f25a77dd5697
复制代码
“甜系(Cozy)”伪造 Minecraft 域名(部分):
- bunnycraft(dot)online, cherriecraft(dot)com, cutiecraft(dot)network, cutiemc(dot)com, cuttiescraft(dot)com, greatsmp(dot)com, hellocraft(dot)online, hellokittycraft(dot)net, kitlycraft(dot)net, kitten-smp(dot)com, kittensmc(dot)com, kittycraft(dot)com, kittypixel(dot)com, kuromicraft(dot)online, pinkcraftmc(dot)com, sanriocraft(dot)online, sugarsmp(dot)com, sweetcraft(dot)net ...
复制代码 |