Potat0-0/marauders-map
GitHub: Potat0-0/marauders-map
针对 Void Dokkaebi 供应链攻击的检测工具集,提供 Git 取证、代码扫描、依赖检查和 IOC 匹配能力,帮助开发者发现隐藏在 JS 配置文件中的区块链 C2 恶意代码。
Stars: 0 | Forks: 0
# Void Dokkaebi — 检测工具与 IOC 仓库
用于检测 **Void Dokkaebi** 活动(也被称为 *Contagious Interview* / *Famous Chollima*)的检测工具、入侵指标 (IOC) 和分析笔记 ——这是一起归因于 DPRK 的供应链攻击,通过虚假的求职面试针对 JavaScript 开发者,将恶意代码隐藏在 `tailwind.config.js`、`routes/user.js` 等类似文件中,并使用 **TRON 区块链 (TronGrid API) 作为 C2**。
## 本仓库包含的内容
| 路径 | 内容 |
|---|---|
| `/iocs/` | 钱包地址、文件哈希、代码字符串、API endpoint |
| `/scripts/` | 用于本地和远程扫描的 Bash + Python 检测脚本 |
| `/rules/yara/` | [待办] 用于 TronGrid C2 模式检测的 YARA 规则 |
| `/rules/semgrep/` | [待办] 用于 CI pipeline 集成的 Semgrep 规则 |
| `/notes/` | 分析笔记、时间线、感染方法 |
## 快速开始
或者使用完整的扫描器:
```
git clone https://github.com/Potat0-0/marauders-map
cd marauders-map
chmod +x scripts/scan.sh
./scripts/scan.sh /path/to/your/project
```
## 脚本
本仓库包含多个检测脚本,每个脚本针对 Void Dokkaebi 活动的不同方面。所有脚本都位于 `/scripts/` 目录中。
### 前置条件
所有脚本都需要 `git` 和 `bash`(版本 3+)。大多数兼容 macOS、Linux 和 Windows (Git Bash)。
对于基于 JavaScript 的扫描 (`scanner.js`),需要 Node.js 14+。
### 可用脚本
#### 1. **`git_tz_forensics.sh`** — Git 历史取证
分析你的 git 仓库,寻找表明存在恶意活动的历史篡改和提交异常迹象。
**检测内容:**
- Author/Committer 时区不匹配(在外部环境中重写历史的迹象)
- 与仓库基准相比异常的 Committer 时区
- 显示强制重写的 Reflog 条目(amend、rebase、force-push、filter-branch、reset、cherry-pick)
- 双胞胎提交(相同的提交信息 + Author 日期,不同的哈希值 = 重写的提交)
- 时间顺序违规(Author 日期在 Committer 日期之后)
**用法:**
```
./scripts/git_tz_forensics.sh [repo_path]
./scripts/git_tz_forensics.sh # uses current directory
./scripts/git_tz_forensics.sh /home/dev/myproject
```
**示例输出:**
```
Repository: /home/dev/myproject
Analysis : 2026-06-10 14:32:10 UTC
SECTION 1 · Baseline Timezone Detection
Committer timezone distribution:
150 commits +00:00 ████████████████████████████
42 commits -05:00 ████████
15 commits +08:00 ███
Baseline (dominant) committer timezone: +00:00
SECTION 2 · Author / Committer Timezone Mismatch
⚑ abc123def "Add malicious config"
Author date : 2026-06-01T10:00:00+00:00 (myname)
Committer date : 2026-06-01T10:00:00-05:00 (myname)
Timezone shift: author=+00:00 committer=-05:00
⚑ 3 anomalies detected across all checks.
```
**退出代码:**
- `0` — 未发现异常
- `1` — 检测到异常(立即审查)
- `2` — 错误(不是 git 仓库或路径无效)
#### 2. **`polinrider-checker.sh`** — Node Modules 扫描器
扫描你的 `node_modules/` 目录,查找供应链攻击中常见的可疑模式。
**检查内容:**
- `eval()` + Base64 解码模式
- package.json 中可疑的 `postinstall` 脚本
- 混淆的长字符串(Base64 编码的 payload)
- 外部网络调用 (HTTP/HTTPS, fetch, axios)
- 带有可疑 Unicode/不可见字符的文件
- 最近修改过的文件(过去 7 天内)
**用法:**
```
./scripts/polinrider-checker.sh
# 必须在包含 node_modules/ 的目录中运行
# 示例:
cd ~/myproject && ../../scripts/polinrider-checker.sh
```
**示例输出:**
```
🔍 Scanning node_modules for suspicious patterns...
----------------------------------------
1. Searching for eval + base64 patterns...
node_modules/tailwind-plugin-evil/index.js:42:eval(Buffer.from('...',base64'))
2. Searching for suspicious postinstall scripts...
node_modules/tailwind/package.json: "postinstall": "node scripts/compile.js"
3. Searching for obfuscated long strings...
node_modules/plugin-xyz/lib.js:123:const X='SGVsbG8gV29ybGQgSXMgQWxhcm0gVG8gRGFya25lc3M=';
...
✅ Scan complete. Review findings carefully.
```
#### 3. **`scanner.js`** — JavaScript 代码启发式扫描器
使用启发式评分分析 JavaScript/TypeScript 文件,以查找混淆和代码注入模式。
**检测内容:**
- 字符编码技巧(`String.fromCharCode`, `charCodeAt` 等)
- 动态代码执行 (`eval()`, `Function()`, `.constructor()`)
- 类 Base64 的长字符串(潜在的编码 payload)
- Hex/Unicode 转义序列
- 极长的可疑行(>300 字符)
**评分系统:**
- 每个可疑模式都会加分;得分 ≥4 的行将被报告
- 高权重模式(eval、Function):+4 分
- 编码模式(charCodeAt、fromCharCode):+2–3 分
- 长行:+2 分
**用法:**
```
node ./scripts/scanner.js [root_path]
node ./scripts/scanner.js # scans current directory
node ./scripts/scanner.js /home/dev/myproject
```
**示例输出:**
```
src/index.js:15 [score=5] -> String.fromCharCode, long_line
src/config/evil.mjs:42 [score=6] -> eval, Function, charCodeAt
routes/user.js:89 [score=4] -> atob
```
**跳过的目录:** `node_modules`, `.git`, `dist`, `build`, `coverage`
#### 4. **`void-vscode-tasks-scanner.sh`** — VS Code Tasks 定位器
在你的计算机上搜索 `.vscode/tasks.json` 文件,这些文件可能包含被智能体编码工具执行的恶意任务定义。
**为什么这很重要:**
此活动专门针对自动执行 VS Code 任务的智能体编码工具(VS Code Copilot、Cursor、Claude Code)。`.vscode/tasks.json` 中的恶意任务可以在 AI 辅助编码会话期间运行任意命令。
**用法:**
```
./scripts/void-vscode-tasks-scanner.sh [directory1] [directory2] ...
./scripts/void-vscode-tasks-scanner.sh # search current directory
./scripts/void-vscode-tasks-scanner.sh ~/projects # search single directory
./scripts/void-vscode-tasks-scanner.sh ~/projects ~/work /srv # search multiple roots
```
**示例输出:**
```
Searching for .vscode/tasks.json …
════════════════════════════════════════════════
Root: /home/user/projects
✔ project-a/.vscode/tasks.json
→ /home/user/projects/project-a/.vscode/tasks.json
✔ project-b/.vscode/tasks.json
→ /home/user/projects/project-b/.vscode/tasks.json
════════════════════════════════════════════════
Found 2 file(s):
/home/user/projects/project-a/.vscode/tasks.json
/home/user/projects/project-b/.vscode/tasks.json
```
**在找到 tasks.json 文件后:**
- 检查内容中是否有可疑的 `"command"` 字段
- 查找网络调用、凭证窃取或 git 历史篡改行为
- 检查 `"runOptions"` —— 如果是 `"runWhen": "folderOpen"` 或类似内容,该任务将自动执行
## 推荐的扫描工作流
1. **从 git 取证开始:**
./scripts/git_tz_forensics.sh ~/myproject
如果发现异常 → 可能已感染;继续执行步骤 2。
2. **检查可疑的 agent 任务:**
./scripts/void-vscode-tasks-scanner.sh ~/myproject
# 检查找到的任何 .vscode/tasks.json 文件
3. **扫描 JavaScript 以查找混淆:**
cd ~/myproject
node ../../marauders-map/scripts/scanner.js .
4. **如果你有 node_modules,请检查恶意包:**
cd ~/myproject
../../marauders-map/scripts/polinrider-checker.sh
5. **审查 IOC:**
- 检查此仓库中的 `/iocs/` 以获取已知的钱包地址、文件哈希和代码签名
- 将发现的结果与已知指标进行对比
## IOC 摘要
完整列表在 `/iocs/` 中。重点:
- **C2 通道:** `api.trongrid.io` (TRON 区块链)
- **备用 C2:** Aptos 区块链 API
- **感染标记:** `global['!']`, `global['_V']`
- **目标文件:** `tailwind.config.js`, `routes/user.js`, `postcss.config.mjs`, `next.config.mjs`, `eslint.config.mjs`
- **提交篡改工具:** `temp_auto_push.bat` (Windows);macOS 对应版本正在调查中
- **版本化持久化标记:** `C250617A`, `C250618A`, `C250619A`, `C250620A`
## 适用对象
- 想要检查自己项目的**开发者**
- 将检测集成到 CI/CD pipeline 中的**安全团队**
- 追踪此活动的**威胁情报研究员**
- 调查疑似 Void Dokkaebi 感染的**事件响应人员**
## 背景
完整文章:[[Medium 文章链接]]
本仓库源于一次个人调查,此前我发现有恶意代码传播
到了我自己的三个 git 仓库中 —— 全都是在我的身份下提交的,
且全部发生在 VS Code Copilot agent 会话期间。Copilot agent 的参与是
Trend Micro 报告中未提及的**未记录视角**,目前仍在积极
调查中。欢迎社区提供意见。
## 参考
- [Trend Micro:Void Dokkaebi (2026 年 4 月)](https://www.trendmicro.com/en/research/26/d/void-dokkaebi-uses-fake-job-interview-lure-to-spread-malware-via-code-repositories.html)
- [Microsoft MSTIC:Contagious Interview](https://www.microsoft.com/en-us/security/blog/2026/03/11/contagious-interview-malware-delivered-through-fake-developer-job-interviews/)
- [OpenSourceMalware:Neutralinojs 漏洞](https://opensourcemalware.com/blog/neutralinojs-compromise)
## 免责声明
所有工具和 IOC 的发布仅供**防御目的**。
不包含任何漏洞利用代码、payload 解密逻辑或活跃的 C2 凭证。
如果你是受影响仓库的维护者,请在采取公开行动前联系我们 —— [你的联系方式]。
标签:Bash, DNS 反向解析, IOC, IP 地址批量处理, MITM代理, Python, Semgrep, WordPress安全扫描, YARA, 云资产可视化, 威胁情报, 应用安全, 开发者工具, 数据可视化, 文档安全, 无后门, 自定义脚本, 逆向工具