ImJer/blum-panel-fivem-backdoor-analysis

GitHub: ImJer/blum-panel-fivem-backdoor-analysis

针对Blum Panel FiveM后门的完整逆向分析与检测修复工具包,包含去混淆源码、渗透获取的C2数据库、感染扫描器和运行时防护脚本。

Stars: 0 | Forks: 0

Blum Panel 后门

完全去混淆、C2 渗透与威胁分析

针对Blum Panel / Warden Panel FiveM后门的首次公开完整逆向工程。
3,856台受感染服务器被曝光。1,859名玩家处于风险中。已识别28名付费客户。
C2已被渗透 —— 提取了完整的服务器数据库、玩家PII(个人身份信息)以及攻击Payload库。

研究由 Justice Gaming Network (JGN) 完成
FiveM 服务器:JusticeRPdiscord.gg/JRP

## 快速入门 —— 我的服务器是否被感染? 从你的FiveM服务器根目录**运行扫描器**: ``` chmod +x scan.sh && ./scan.sh ``` 在你的FiveM服务器控制台中**检查是否有活跃感染**: ``` if GlobalState.miauss then print("DROPPER ACTIVE: "..GlobalState.miauss) end if GlobalState.ggWP then print("REPLICATOR ACTIVE: "..GlobalState.ggWP) end ``` **搜索受感染服务器数据库** —— 检查你的服务器名称是否出现在 `evidence/infected_servers_sanitized.json` 中。 **立即封锁 C2**: ``` chmod +x block_c2.sh && ./block_c2.sh ``` ## 目录 - [执行摘要](#executive-summary) - [关键数据](#key-numbers) - [研究归属](#research-attribution) - [与 Cipher Panel 的关联](#the-cipher-panel-connection) - [完整攻击链](#the-complete-kill-chain) - [C2 渗透结果](#c2-infiltration-results) - [受感染服务器数据库](#infected-server-database) - [攻击 Payload 库](#attack-payload-library) - [玩家数据泄露](#player-data-exposure) - [分析的文件](#files-analyzed) - [混淆架构](#obfuscation-architecture) - [C2 基础设施](#c2-infrastructure) - [恶意软件组件](#malware-components) - [GFX Panel —— 第二个产品](#gfx-panel--second-product) - [面板架构](#panel-architecture) - [攻击者身份与金融情报](#attacker-identity-and-financial-intelligence) - [检测与修复](#detection-and-remediation) - [仓库结构](#repository-structure) - [举报联系方式](#reporting-contacts) ## 执行摘要 Blum Panel 是一款商业FiveM后门,售价为每月59.99欧元或终身139.99欧元。它赋予付费客户对受感染FiveM服务器的完全远程控制权 —— 代码执行、实时屏幕捕获、玩家操控、经济系统利用、完整文件系统访问以及完全的服务器锁定。 通过在C2上注册一个虚假服务器,JGN提取了**完整的受感染服务器数据库**(3,856台服务器)、**玩家PII**(289名玩家,包含真实IP地址、Discord ID 和 Steam标识符)以及**完整的攻击Payload库**(7个预构建的RCE脚本)—— 所有这些都不需要任何身份验证。 调查还揭示,Blum Panel 是基于**被盗的 Cipher Panel 代码**构建的,这一点已得到Cipher创建者的证实。攻击者在未受保护的基础设施上运营着第二个名为 **GFX Panel** 的产品。在16小时的调查中,确认了五个面板域名、三个直接IP服务器和28名付费客户。 ## 关键数据 | 指标 | 数值 | |--------|-------| | **数据库中的受感染服务器** | **3,856** | | **捕获时处于风险中的玩家** | **1,859** | | **总服务器容量** | **350,933 个玩家槽位** | | **有活跃玩家的服务器** | **584** | | **被入侵的个人PC** | **392** | | **已识别的付费客户** | **28 个唯一 API 密钥** | | **持续时间最长的活跃感染** | **2,582 小时(107 天)** | | **受影响的国家/地区** | **15+** (FR, US, SA, BR, TR, DE, RO, PL, CN, IT, ES, NL, IL...) | | **预构建的攻击 Payload** | **7** (txAdmin 绕过, kickall, 服务器接管, 管理员后门) | | **每次会话暴露的玩家 PII** | **约 1,500-2,000** (含真实 IP, Discord ID, Steam ID) | | **加密货币收入** | **已确认 $10,000-$12,000+** | | **面板域名** | **5** (blum-panel.me, warden-panel.me, 9ns1.com, fivems.lt, jking.lt) | | **访问数据所需的身份验证** | **无** | ## 研究归属 本研究由 **Justice Gaming Network (JGN)** 团队进行,该团队运营着 **JusticeRP** FiveM 服务器。 **Discord:** [discord.gg/JRP](https://discord.gg/JRP) **JGN 完成的首次成果:** - 首次公开去混淆任何 Blum Panel 或 Cipher Panel 文件 - 首次 C2 渗透 —— 提取了包含3,856台受感染服务器的完整服务器数据库 - 首次提取攻击 Payload 库(7个预构建的RCE脚本) - 首次记录玩家 PII 泄露情况(真实 IP, Discord ID, Steam ID) - 首次识别 Lua 感染途径(Luraph Payload) - 首次发现第二个 C2 域名 (9ns1.com) - 首次发现 GFX Panel —— 同一攻击者的第二个产品 - 首次证明 Blum Panel 盗用了 Cipher Panel 代码 - 首次完整的 Socket.IO 协议文档(75个命令) - 首次识别 txAdmin 凭据窃取和 WebRTC 屏幕捕获 - 首次提取攻击者 Discord ID、加密钱包和 OAuth 应用 ## 与 Cipher Panel 的关联 在 **2026年2月4日**,Cipher Panel 的创建者 **Authentic** (`authentic777`, Discord ID `1072311313080004648`) 公开发布: Authentic 在 Cipher Discord 中拥有 **CIPHER CREATOR** 角色,并在其个人资料中展示了 `cipher-panel.me`。 **Blum Panel 窃取了 Cipher Panel 的代码库。** Blum 前端包中包含对 `cipher-panel.me` 和 `discord.gg/ciphercorp` 的硬编码引用 —— 这些是被盗代码留下的残留物。后端有所不同(Cipher 使用 nginx,Blum 使用 Express.js),证实了不同的运营者在运行相同的代码库。两者都是活跃的犯罪活动。 ## 完整攻击链 ``` INITIAL INFECTION (Two paths) PATH A: JavaScript (yarn_builder.js, webpack_builder.js, etc.) XOR-encrypted eval -> fetches C2 loader (main.js, 425KB) main.js -> setImmediate dropper -> fetches replicator from C2 PATH B: Lua (Luraph-obfuscated, 65KB) Drops XOR-encrypted JS file + modifies fxmanifest.lua Sends Discord webhook to attacker (infection notification) On restart -> JS dropper -> fetches replicator from C2 STAGE 2: REPLICATOR (c2_payload.txt, 1.6MB, memory only) T+2s Collect server info (framework, anticheats, license) T+3s Infect server (4 components): XOR dropper injection into 40+ resource files server.cfg injection at random position txAdmin sv_main.lua tampering (hide from dashboard) txAdmin credential theft (X-TxAdmin-Token capture) T+32s Connect to C2 via Socket.IO (wss://fivems.lt) STAGE 3: PERSISTENT BACKDOOR (Socket.IO, 39 event handlers) Arbitrary JS/Lua code execution WebRTC live screen capture of any player Player manipulation (kill, ban, godmode, spawn vehicles) Economy manipulation (add/remove items, set jobs) Full filesystem access (read, write, delete, browse) Resource theft (ZIP + upload to attacker server) Console capture (last 500 lines) Server lockdown (kick all + block connections) txAdmin admin creation ("JohnsUrUncle", all_permissions) Discord bot control (24 commands) ``` ## C2 渗透结果 JGN 在 Blum Panel C2 上注册了一个虚假服务器,并在未经身份验证的情况下提取了整个数据库。 C2 服务器接受任何发出带有有效 API 密钥格式的 `registerServer` 的 Socket.IO 连接。一旦注册,发出服务器列表事件就会返回每个受感染服务器的完整数据库。无需管理员凭据。 ### 我们提取的内容 | 数据 | 方法 | 身份验证 | |------|--------|---------------| | 3,856 台受感染服务器 | `registerServer` + 列表事件 | **无** | | 289 条包含真实 IP 的玩家记录 | 对每个服务器调用 `getServerPlayers` | **无** | | 7 个包含完整源代码的攻击 Payload | 带有 serverId 的 `getPayloads` | **无** | | 按需获取的单服务器信息 | 带有 serverId 的 `getServerInfo` | **无** | | Discord 成员查询 | 带有 serverId 的 `discord:members` | **无** | ### 受到保护的内容 | 数据 | 状态 | |------|--------| | 管理面板(用户管理) | 需要 Discord OAuth | | 来自服务器的控制台输出 | 无响应 | | 文件浏览器 | 无响应 | | 资源列表 | 无响应 | | 命令执行 | 需要客户会话 | ## 受感染服务器数据库 **文件:** `evidence/infected_servers_sanitized.json` 于2026年3月14日 08:19 UTC 捕获。包含曾连接到 Blum Panel C2 的每个服务器的服务器名称和元数据。受害者 IP 地址、许可证和标识符已从公开发布中编辑处理。 ### 按客户(API 密钥) | API 密钥 | 服务器数量 | 描述 | |---------|---------|-------------| | zXeAHJJ | 2,765 | 最大客户或默认密钥 | | nullJJ | 442 | 第二大 | | bekJJ | 178 | | | bertJJ | 117 | 原始攻击者句柄 | | xxx | 103 | | | qwertyJJ | 103 | | | dovJJ | 55 | | | + 其他 21 个 | 93 | 较小的客户 | ### 按框架 | 框架 | 数量 | |-----------|-------| | ESX | 1,836 (48%) | | QBCore | 1,373 (36%) | | vRP | 355 (9%) | | 未知 | 291 (7%) | ### 按操作系统 | 操作系统 | 数量 | |----|-------| | Windows | 2,502 (65%) | | Linux | 1,353 (35%) | ### 主要国家/地区(按区域设置) | 区域设置 | 服务器数量 | |--------|---------| | 未识别 (root-AQ) | 692 | | 法国 (fr-FR) | 389 | | 美国 (en-US) | 389 | | 沙特阿拉伯 (ar-SA) | 312 | | 巴西 (pt-BR) | 232 | | 土耳其 (tr-TR) | 159 | | 德国 | 130 | | 罗马尼亚 | 87 | | 波兰 | 83 | | 中国 | 80 | ### 按玩家数量排名的顶级服务器(捕获时) | 玩家数 | 服务器名称 | 客户 | |---------|------------|----------| | 83/250 | ZONASUR-RP | dovJJ | | 73/200 | Traplanta V3 | zXeAHJJ | | 64/128 | Respect CFW | zXeAHJJ | | 48/180 | Lost In Thought 2.0 | zXeAHJJ | | 46/965 | MOSCOW RP S4 | zXeAHJJ | | 39/128 | NOVA CITY | zXeAHJJ | | 33/180 | BANEADOS RP | zXeAHJJ | | 31/128 | Capital Legacy | zXeAHJJ | | 29/500 | VIPURI ROMANIA ROLEPLAY | zXeAHJJ | | 25/64 | Sinaloa 701 RP | zXeAHJJ | ### 持续时间最长的感染 | 运行时间 | 服务器名称 | 客户 | |--------|------------|----------| | 2,582 小时(107 天) | District 18 Roleplay [Israel] | zXeAHjj | | 2,559 小时(106 天) | TRILL LIFE RP | zXeAHjj | | 2,238 小时(93 天) | Young and Rich Development | zXeAHjj | | 2,227 小时(92 天) | Solaria FA | zXeAHjj | | 2,193 小时(91 天) | UnderworldTest dev server | xxx | ## 攻击 Payload 库 **文件:** `evidence/BLUM_PAYLOADS.json` (23 KB) 七个预构建的攻击脚本,所有客户均可通过一键部署使用。已捕获完整源代码。 | ID | 名称 | 语言 | 创建时间 | 用途 | |----|------|----------|---------|---------| | 2 | ENABLE TXADMIN BYPASS | Lua | 2024年11月24日 | 禁用 txAdmin 玩家加入验证 | | 5 | DISABLE TXADMIN BYPASS | Lua | 2024年11月24日 | 重新启用(隐蔽切换) | | 30 | /kickall | Lua | 2024年12月7日 | 以 "[warden-panel.me/discord]" 消息踢出所有玩家 | | 38 | Spektaklis NEW | Lua | 2024年12月14日 | 彩虹刷屏 + 音乐 + 带品牌标识的视觉接管 | | 56 | /miaumiau admin | Lua | 2024年12月22日 | 获取 ESX 管理员权限的后门命令 | | 62 | russian heck | Lua | 2024年12月22日 | 基于 DUI 的视觉攻击 | | 79 | txAdmin crash | JS | 2025年1月17日 | 通过绑定到 txAdmin 端口使其崩溃,阻止管理员访问 | 所有 Payload 均使用 `api: "every"`,意味着它们对每个客户都可用,不受 API 密钥。最早的 Payload 可追溯到 **2024年11月**,证明该活动已积极维护超过一年。 ## 玩家数据泄露 Blum Panel C2 为每个连接的玩家暴露以下数据,无需任何身份验证即可访问: - **真实 IP 地址**(家庭 IP,而非代理) - **玩家名称** - **Discord ID** - **Steam 或许可证标识符** - **他们连接的服务器** 捕获时:来自 **35台服务器** 的 **289名唯一玩家** 的 **289个真实 IP** 和 **286个 Discord ID** 被泄露。鉴于584台活跃服务器上有1,859名玩家在线,任何给定时间的总泄露人数约为 **1,500-2,000名玩家**。 玩家 PII 已从公开发布中完全编辑处理。统计数据位于 `evidence/player_pii_stats.json`。 ## 分析的文件 | 文件 | 大小 | 混淆器 | 用途 | |------|------|------------|---------| | main.js | 425 KB | JScrambler | C2 加载器 | | script.js | 183 KB | JScrambler | WebRTC 屏幕捕获 | | c2_payload.txt | 1.64 MB | JScrambler | 实时复制器(核心后门) | | ext/bert | 425 KB | JScrambler | 来自 C2 的释放器 | | yarn_builder.js | 43 KB | XOR (密钥 169) | yarn 资源中的释放器 | | webpack_builder.js | 632 KB | XOR (密钥 189) | webpack 资源中的释放器 | | babel_config.js | 20 KB | XOR (密钥 204) | babel 资源中的释放器 | | sv_main.lua | 18 KB | 被篡改 | txAdmin 隐身 | | sv_resources.lua | 2 KB | 被篡改 | txAdmin RCE 后门 | | /test | 65 KB | Luraph v14.6 | 指向 9ns1.com 的 Lua 释放器 | | /dev | 64 KB | Luraph v14.6 | 指向 fivems.lt 的 Lua 释放器 | | /null | 64 KB | Luraph v14.6 | 指向 fivems.lt 的 Lua 释放器 | | Panel bundle | 1.97 MB | Minified React | 客户仪表板 | | GFX bundle | 749 KB | Minified React | 第二个产品仪表板 | ## 混淆架构 ### JavaScript — JScrambler (5 层) 商业混淆器(约$100/月)。Function() 包装器、LZString 压缩、Base-91 编码(122个字母表,40,000+字符串)、间接数组(最多3,014个元素)、生成器状态机(总共215个)。膨胀率约 200:1。 ### Lua — Luraph v14.6 商业混淆器(约$20/月)。具有140+操作码的自定义字节码 VM、pcall 包装执行、嵌入式压缩字节码。三个唯一构建版本。 ### XOR 释放器 `String.fromCharCode(a[i] ^ k)`,密钥为 169, 189, 204。解密为 eval() 并从 C2 获取数据。 ## C2 基础设施 ### 基础设施图 ``` ATTACKER INFRASTRUCTURE ================================================================ BLUM PANEL — Primary Operation (stolen Cipher Panel code) ───────────────────────────────────────────────────────── Cloudflare Account #1 (nameservers: bailey/ezra) ┌─────────────────────────────────────────────────────┐ │ 9ns1.com ──┐ │ │ fivems.lt ──┼── ONE Express.js backend │ │ warden-panel.me ──┘ heartbeat: {"count":4} │ │ │ │ jking.lt ──── SEPARATE Express.js backend │ │ heartbeat: {"count":2} │ └─────────────────────────────────────────────────────┘ Cloudflare Account #2 (nameservers: keenan/paityn) ┌─────────────────────────────────────────────────────┐ │ blum-panel.me ──── SAME backend as above │ │ heartbeat: {"count":4} │ └─────────────────────────────────────────────────────┘ Evidence: All four domains (blum, warden, 9ns1, fivems) return identical heartbeat count = single Express.js origin server. blum-panel.me is on a separate Cloudflare account from the others. BACKUP C2 DOMAINS (payload delivery only, no panel) ┌─────────────────────────────────────────────────────┐ │ 2ns3.net ── AWS 13.248.213.45 (active) │ │ giithub.net ── Cloudflare (522 error) │ │ + 20 more fallback domains hardcoded in replicator │ └─────────────────────────────────────────────────────┘ GFX PANEL — Second Product (built with GPT Engineer) ───────────────────────────────────────────────────── ┌─────────────────────────────────────────────────────┐ │ gfxpanel.org ──┐ │ │ kutingplays.com ──┴── 185.80.130.168 (DIRECT) │ │ NO CLOUDFLARE │ │ Port 3000 open (raw API) │ │ Port 22 open (SSH) │ │ Apache/2.4.52 + Express.js │ │ Ubuntu, Let's Encrypt SSL │ └─────────────────────────────────────────────────────┘ DIRECT IP SERVERS — UAB Esnet, Vilnius, Lithuania ───────────────────────────────────────────────── ┌─────────────────────────────────────────────────────┐ │ 185.80.128.35 ── Apache/2.4.29, Ubuntu 18.04 │ │ Stolen FiveM resource hosting │ │ Paths: /download-resource/ │ │ │ │ 185.80.128.36 ── Apache/2.4.65, Debian │ │ Default page (staging/spare) │ │ │ │ 185.80.130.168 ── GFX Panel (see above) │ │ Also responds to Socket.IO │ │ for ALL Host headers │ │ │ │ Abuse: abuse@vpsnet.lt │ │ Network: VPSNET-COM, Zuvedru g. 36, Vilnius │ └─────────────────────────────────────────────────────┘ CIPHER PANEL — Original Operation (code stolen by Blum) ──────────────────────────────────────────────────────── ┌─────────────────────────────────────────────────────┐ │ cipher-panel.me ── nginx/1.18.0 via Cloudflare │ │ DIFFERENT backend from Blum │ │ NO payload endpoints (all 404)│ │ Separate operation entirely │ └─────────────────────────────────────────────────────┘ ``` ### 单后端发现 所有面板域名返回相同的心跳计数,证实多个 Cloudflare 域名背后是同一个 Express.js 服务器: ``` blum-panel.me/heartbeat -> {"count":4} warden-panel.me/heartbeat -> {"count":4} 9ns1.com/heartbeat -> {"count":4} (same backend) fivems.lt/heartbeat -> (same backend) jking.lt/heartbeat -> {"count":2} (separate instance) ``` ### Cloudflare 账户分析 两个独立的 Cloudflare 账户管理这些域名: | 名称服务器 | 域名 | 含义 | |-------------|---------|-------------| | bailey.ns.cloudflare.com / ezra.ns.cloudflare.com | 9ns1.com, fivems.lt, warden-panel.me, jking.lt | 主要 Cloudflare 账户 | | keenan.ns.cloudflare.com / paityn.ns.cloudflare.com | blum-panel.me | 独立的 Cloudflare 账户 | 这可能表明 blum-panel.me 是在不同时间或由不同团队成员建立的。 ### SSL 证书历史(源站暴露) 证书透明度日志揭示了在添加 Cloudflare 之前颁发的 **Let's Encrypt 证书**,这意味着源站 IP 曾短暂暴露: | 域名 | Let's Encrypt 证书 | 日期 | 含义 | |--------|-------------------|------|-------------| | blum-panel.me | Let's Encrypt E8 | 2026年1月31日 | 源站 IP 可见 | | blum-panel.me | Let's Encrypt E8 | 2025年12月3日 | 源站 IP 可见 | | fivems.lt | Let's Encrypt E7 | 2025年12月10日 | 源站 IP 可见 | | fivems.lt | Let's Encrypt E7 | 2025年10月12日 | 源站 IP 可见 | | fivems.lt | Let's Encrypt E7 | 2025年8月7日 | 源站 IP 可见 | 在这些时间窗口内查询的历史 DNS 数据库可能会揭示 Cloudflare 背后的真实源站 IP。 ### 完整域名映射 | 域名 | 类型 | 后端 | IP/代理 | 注册商 | 创建时间 | |--------|------|---------|----------|-----------|---------| | blum-panel.me | Panel + C2 | Express.js | Cloudflare | Namecheap | ~2025年12月 | | warden-panel.me | Panel + C2 | Express.js | Cloudflare | Namecheap | ~2026年1月 | | 9ns1.com | Panel + C2 | Express.js | Cloudflare | Namecheap | 2025年6月29日 | | fivems.lt | Panel + C2 | Express.js | Cloudflare | DOMREG.lt | ~2025年8月 | | jking.lt | Panel + C2 (独立) | Express.js | Cloudflare | DOMREG.lt | 未知 | | gfxpanel.org | GFX Panel | Express.js | 185.80.130.168 直连 | Namecheap | 2026年2月7日 | | kutingplays.com | GFX Panel 别名 | Express.js | 185.80.130.168 直连 | 未知 | 未知 | | cipher-panel.me | 原始面板 | nginx | Cloudflare | 未知 | ~2021年 | | 2ns3.net | 备用 C2 | 未知 | 13.248.213.45 (AWS) | 未知 | 未知 | | giithub.net | 备用 C2 (已失效) | 未知 | Cloudflare (522) | 未知 | 未知 | 所有 Blum 面板域名提供相同的 React 包:`index-BmknYBUo.js` (1,972,893 字节)。 GFX Panel 提供不同的包:`index-B62S1OtC.js` (749,436 字节)。 ### 直连 IP 服务器 位于立陶宛维尔纽斯的 UAB Esnet (VPSNET-COM) 有三台服务器: | IP | 服务器 | 服务 | 用途 | |----|--------|---------|---------| | 185.80.128.35 | Apache/2.4.29 (Ubuntu 18.04) | 仅 HTTP | 被盗 FiveM 资源文件托管 | | 185.80.128.36 | Apache/2.4.65 (Debian) | 仅 HTTP | 默认页面(暂存或备用) | | 185.80.130.168 | Apache/2.4.52 + Express.js (Ubuntu) | HTTP, HTTPS, SSH, 端口 3000 | GFX Panel, Socket.IO C2, 原始 API | 这三台服务器共享相同的主机提供商、滥用联系方式 (abuse@vpsnet.lt),且位于同一维尔纽斯数据中心。185.80.130.168 服务器还响应带有任何 Host 标头的 Socket.IO 连接,表明它可能代理或先前托管了其他服务。 ### Payload 交付基础设施 每个 C2 域名都提供所有四种 Payload 变体。每个 Payload 都是相同的 JScrambler 混淆代码(约 1.64 MB),仅更改了两个明文头变量: ``` ende = "devJJ"; // endpoint identifier back = "https://fivems.lt"; // C2 callback URL Function("bHl1Cq",... // JScrambler blob (identical) ``` | 端点 | API 密钥 | Payload 大小 | 服务来源 | |----------|---------|-------------|-------------| | /bertJJ | bert | 1,643,855 字节 | fivems.lt, 9ns1.com, jking.lt, warden-panel.me | | /bertJJgg | bert | 1,643,855 字节 | fivems.lt (后备) | | /bertJJcfxre | bert | 1,643,855 字节 | fivems.lt (后备) | | /devJJ | dev | 1,643,854 字节 | fivems.lt, 9ns1.com, jking.lt, warden-panel.me | | /nullJJ | null | 1,643,855 字节 | fivems.lt, 9ns1.com, jking.lt, warden-panel.me | | /zXeAHJJ | zXeAH | 1,643,855 字节 | fivems.lt, 9ns1.com, jking.lt, warden-panel.me | | /ext/bert | bert (释放器) | 425,385 字节 | fivems.lt, 9ns1.com | | /test | Lua 释放器 | 65,564 字节 | fivems.lt, 9ns1.com | | /dev | Lua 释放器 | 64,115 字节 | fivems.lt, 9ns1.com | | /null | Lua 释放器 | 64,289 字节 | fivems.lt, 9ns1.com | Lua 端点(/test, /dev, /null)提供 Luraph v14.6 混淆的 Payload,这些 Payload 会释放 XOR 加密的 JS 文件 —— Lua 途径的初始感染载体。 复制器中硬编码了 23+ 个额外的后备域名以确保持久性。完整列表见 `iocs/domains.txt`。 ### Socket.IO 协议 —— 75 个命令 完整规范:`iocs/socket_io_protocol.md` 1 个任意代码执行,5 个屏幕捕获,10 个玩家操控,5 个经济系统,11 个文件系统,3 个服务器管理,1 个 txAdmin 窃取,24 个 Discord 机器人,13 个遥测,1 个心跳。 ## 恶意软件组件 有关完整的去混淆源代码,请参阅 `deobfuscated/` 目录: - **c2_payload.js** — 核心复制器(1.64 MB 至 37 KB,15 个部分) - **deobfuscated_main.js** — C2 加载器(425 KB 至 14 KB) - **deobfuscated_script.js** — 屏幕捕获(183 KB 至 26 KB) - **luraph_payloads_deobfuscated.js** — 所有 3 个 Lua Payload 已解码 - **deobfuscated_yarn_builder.js** — XOR 释放器 - **deobfuscated_sv_main.lua** — 被篡改的 txAdmin (RESOURCE_EXCLUDE) - **deobfuscated_sv_resources.lua** — txAdmin RCE 后门 ## GFX Panel —— 第二个产品 攻击者在未受保护的基础设施上运营着第二个名为 GFX Panel 的面板: | 项目 | 数值 | |------|-------| | 域名 | gfxpanel.org, kutingplays.com | | 后端 | Ubuntu 上的 Express.js + Apache/2.4.52,直连 IP,无 Cloudflare | | 包 | index-B62S1OtC.js (749 KB, 为 Blum 的 38%) | | 构建工具 | GPT Engineer (项目: eSi92A9tMBTQWYu6OPvMFhyFiy72) | | Discord | discord.gg/cwd5kHwq6v (已失效) | | 端口 3000 | 开放 —— 暴露的原始 Express.js | | Socket.IO | 活跃 | | 创建时间 | 2026年2月7日 | GFX Panel 从非标准端点提供 Luraph 混淆的 Lua Payload。托管于立陶宛维尔纽斯的 UAB Esnet 数据中心 —— 与文件托管服务器相同的提供商。 ## 面板架构 **身份验证:** Discord OAuth2,带有硬编码的管理员白名单。 **管理员 Discord ID:** `393666265253937152`, `1368690772123062292` **OAuth App:** `1444110004402655403` (名称: "blum") **定价:** 基础版 59.99 欧元/月,Ultima 版 139.99 欧元终身。 **支付方式:** Bitcoin, Litecoin, Solana, 亚马逊礼品卡 (GBP), MoonPay。 **Discord 机器人:** 24 个命令,包括封禁、踢出、禁言、创建频道/角色、通过 Webhook 发送消息。可以接管受害者的 Discord 服务器。 ## 攻击者身份与金融情报 ### Blum Panel 运营者 | 项目 | 数值 | |------|-------| 主要管理员 | Discord ID 393666265253937152 (~2018年账户) | | 次要管理员 | Discord ID 1368690772123062292 (~2025年5月) | | OAuth App | 1444110004402655403 (名称: "blum") | | 支付 Webhook | 1221885230680375427 | | 句柄 | bertjj, bertjjgg, miauss, miausas | | Discord | discord.com/invite/VB8mdVjrzd | ### Cipher Panel 创建者 | 项目 | 数值 | |------|-------| | 创建者 | Authentic / authentic777 | | Discord ID | 1072311313080004648 (~2022年5月) | | 域名 | cipher-panel.me | | Discord | discord.gg/ciphercorp | | 确认代码被盗 | 2026年2月4日 | ### 加密货币 **Bitcoin:** `bc1q2wd7y6cp5dukcj3krs8rgpysa9ere0rdre7hhj` — 9 笔交易, ~$2,000 **Litecoin:** `LSxKJm6SpdExCACUcFTUADcvZgea65AaWo` — 89 笔交易, 76.53 LTC (~$8,000-$10,000) **Solana:** `vDWomGGtBctKqtTkRm6maXc7KJrvtmc2x8WXEzbuzkz` **已确认的最低收入:** $10,000-$12,000(仅限加密货币) ### 地理指标 .lt 域名后缀,立陶宛维尔纽斯的 UAB Esnet 主机,欧元定价,GBP 礼品卡表明客户群在英国。 ## 检测与修复 ### 自动扫描器 ``` chmod +x detection/scan.sh cd /path/to/fivem/server /path/to/detection/scan.sh ``` ### 手动检测 ``` grep -rn "String.fromCharCode(a\[i\]\^k)" --include="*.js" grep -rn "bertjj\|miauss\|fivems\.lt\|ggWP\|helpEmptyCode\|JohnsUrUncle" --include="*.js" --include="*.lua" grep -rn "Luraph Obfuscator\|installed_notices" --include="*.lua" grep -rn "9ns1\.com\|devJJ\|nullJJ\|zXeAHJJ" --include="*.js" --include="*.lua" ``` ### 修复清单 1. 从服务器根目录运行 `detection/scan.sh` 2. 删除所有释放器 .js 文件 3. 清理 fxmanifest.lua 文件 —— 移除注入的 server_scripts 条目 4. 从 [官方 GitHub](https://github.com/tabarra/txAdmin) 恢复 txAdmin 文件 5. 运行 `detection/block_c2.sh` 以封锁所有 C2 域名 6. 部署 `dropper_trap/` 资源以进行运行时保护 7. 检查 txAdmin 中是否存在 "JohnsUrUncle" 管理员账户 8. 验证 GlobalState.miauss 和 GlobalState.ggWP 是否为空 9. 更改所有 txAdmin 密码和 API 令牌 ### 包含的工具 | 工具 | 描述 | |------|-------------| | `detection/scan.sh` | 13 项检查扫描器 (v4, 包含 Luraph) | | `detection/block_c2.sh` | 网络封锁器 (REJECT 规则, 对 CDN 安全) | | `detection/c2_probe.js` | Socket.IO 被动 C2 探测 | | `dropper_trap/` | FiveM 运行时保护钩子 | | `evidence/panel_viewer.html` | 实时调查仪表板 | ## 仓库结构 ``` blum-panel-analysis/ | +-- README.md This file +-- BLUM_INVESTIGATION_REPORT.md Investigation timeline | +-- evidence/ | +-- infected_servers_sanitized.json 3,856 servers (IPs redacted) | +-- BLUM_PAYLOADS.json 7 attack payloads, full source | +-- server_statistics.json Statistical breakdown | +-- player_pii_stats.json Player exposure stats (PII redacted) | +-- panel_viewer.html Live investigation dashboard | +-- gfx_panel.html GFX Panel HTML capture | +-- detection/ | +-- scan.sh 13-check malware scanner (v4) | +-- block_c2.sh C2 blocker (includes 9ns1.com) | +-- c2_probe.js Socket.IO C2 probe | +-- dropper_trap/ | +-- fxmanifest.lua FiveM manifest | +-- trap.lua Lua runtime hooks (v3) | +-- trap.js JS runtime hooks (v3) | +-- deobfuscated/ | +-- c2_payload.js Replicator (1.6MB -> 37KB) | +-- deobfuscated_main.js C2 loader (425KB -> 14KB) | +-- deobfuscated_script.js Screen capture (183KB -> 26KB) | +-- deobfuscated_yarn_builder.js XOR dropper | +-- deobfuscated_sv_main.lua Tampered txAdmin | +-- deobfuscated_sv_resources.lua RCE backdoor | +-- luraph_payloads_deobfuscated.js All 3 Lua payloads | +-- iocs/ +-- domains.txt 30+ C2 domains +-- hosts_block.txt /etc/hosts blocklist +-- pihole_block.txt Pi-hole blocklist +-- pastebin_urls.txt Pastebin fallbacks +-- strings.txt 55+ detection signatures +-- socket_io_protocol.md Complete C2 protocol +-- attacker_intel.md Identity and wallets ``` ## 举报联系方式 | 目标 | 联系方式 | 报告内容 | |--------|---------|--------| | Cfx.re | FiveM 团队 | 完整分析包 | | Cloudflare | abuse@cloudflare.com | fivems.lt, blum-panel.me, warden-panel.me, 9ns1.com | | UAB Esnet | abuse@vpsnet.lt | 托管恶意软件的直连 IP 服务器 | | Namecheap | abuse@namecheap.com | 9ns1.com, gfxpanel.org | | Discord | 信任与安全团队 | App 1444110004402655403, 管理员 Discord ID | | DOMREG.lt | .lt 注册局 | fivems.lt, jking.lt | | 执法部门 | IC3.gov / 当地网络犯罪部门 | 加密钱包, 服务器数据库 | ## 调查统计 | 指标 | 数值 | |--------|-------| | 调查时间 | ~16 小时 | | 分析的恶意软件文件 | 11 + 2 个面板包 | | 处理的混淆代码 | ~3.7 MB | | 去混淆输出 | ~140 KB | | 映射的 C2 域名 | 30+ | | 记录的 Socket.IO 命令 | 75 | | 提取的受感染服务器 | 3,856 | | 提取的攻击 Payload | 7 | | 已识别的付费客户 | 28 | | 分析的加密货币交易 | 98 | | 确认的攻击者收入 | $10,000-$12,000+ | | 观察到的活跃面板用户 | 4-10 | | 运营时长 | ~5 年 (Cipher 起源: 2021) |

研究由 Justice Gaming Network (JGN) 完成
discord.gg/JRP

分析于 2026年3月13-14日进行。
C2 基础设施仍然活跃。3,856 台服务器仍处于被入侵状态。

标签:Blum Panel, C2服务器, Cutter, DAST, DNS 反向解析, FiveM, IP 地址批量处理, Lua脚本, MITM代理, PII保护, rizin, Warden Panel, 云资产清单, 去混淆, 后门检测, 域名收集, 威胁情报, 屏幕捕获, 开发者工具, 恶意软件分析, 攻击链分析, 数据可视化, 游戏安全, 网络安全, 自定义DNS解析器, 自定义脚本, 远程控制, 逆向工程, 隐私保护, 黑名单