yankywilson/jdy-botnet-threat-analysis
GitHub: yankywilson/jdy-botnet-threat-analysis
针对中国关联的 JDY 侦察僵尸网络的防御性 CTI 分析项目,提供逆向工程、三层情报报告、检测规则和任务解密器。
Stars: 0 | Forks: 0
# JDY Botnet — 防御性分析
一份针对 **JDY botnet** 的完整防御性分析:针对植入物的逆向工程、
控制基础设施枚举、三层情报报告、可部署的检测规则,以及一个可用的任务解密器。
**JDY** 是 Volt Typhoon / KV-botnet 生态系统(MITRE **G1017**)中一项与中国相关的**侦察**能力。
它能够大规模对暴露在互联网上的边缘设备和 SOHO 设备进行指纹识别,并在几小时内快速转向(pivot)利用最新披露的漏洞。
它是实现快速后续入侵的**目标锁定和预先部署层**——它本身并不进行漏洞利用或
部署勒索软件。
**定级:** TLP:CLEAR · ICD-203 估测语言 · 调查结果标记为 **NOVEL / CORROBORATED / PUBLISHED / EXCLUDED**
## 摘要 — 本次分析确立了什么
- 该植入物是一个 **MIPS64 大端序扫描器**,**没有漏洞利用代码**且**没有硬编码的
C2**(控制主机由 dropper 注入)。
- 其加密任务在指令级别被恢复:**base64 → AES-128-CBC → JSON**,
密钥为 `bdb718bdf47cbcde`,IV 为 `0x30`×16。发布的 "key" 实际上是 **IV ∥ KEY**,而不是 AES-256。内含一个
可用的解密器。
- 控制集群是**经过刻意碎片化(atomized)的** —— 六次独立的追踪最终都指向了
通用基础设施。这些中继节点可以单独被发现,但在公开数据中**彼此无法建立关联**。缺乏可追踪的集群本身**就是**调查发现。
- 持久存在的锚点包括 **jdyfj 证书**、**植入物哈希**以及一个**新颖的构建
路径**。其他一切(中继 IP、Web 技术栈版本)都会轮换或属于通用资源。
## 从这里开始
| 如果你是… | 请阅读 |
|---|---|
| **逆向工程师** | [逆向工程入门](docs/REVERSE_ENGINEERING.md) → 方法论和核心发现,包含完整拆解的链接 |
| **CISO / 领导层** | [战略情报报告](docs/STRATEGIC_INTELLIGENCE_REPORT.md) → 业务影响与决策 |
| **TI 分析师 / IR 负责人** | [运营情报报告](docs/OPERATIONAL_INTELLIGENCE_REPORT.md) → 能力、攻击杀伤链、ATT&CK |
| **SOC / 威胁狩猎者** | [战术情报报告](docs/TACTICAL_INTELLIGENCE_REPORT.md) + [威胁狩猎指南](docs/THREAT_HUNTING_GUIDE.md) |
| **应急响应人员** | [应急响应操作手册](docs/INCIDENT_RESPONSE_PLAYBOOK.md) |
| **检测工程师** | [`detections/`](detections) → Sigma + YARA |
## 完整导航
### 逆向工程
| 文档 | 内容 |
|---|---|
| [REVERSE_ENGINEERING.md](docs/REVERSE_ENGINEERING.md) | 逆向工程入门 — 方法论、核心发现、拆解链接 |
| [TECHNICAL_WRITEUP.md](docs/TECHNICAL_WRITEUP.md) | 解密链:Ghidra 锚点、AES 路径、AES-128 与 256 的辨析、密钥/IV 恢复、端点 |
| [IMPLANT_COMPONENTS_RE.md](docs/IMPLANT_COMPONENTS_RE.md) | 组件拆解:`meth_*` 传输层、扫描引擎、SYN/ICMP 标记、`dmap`、构建指纹 |
| [CORRECTIONS_LOG.md](docs/CORRECTIONS_LOG.md) | 在工作台上撤销的每一项声明,附带证据和标签 |
### 情报报告
| 文档 | 受众 |
|---|---|
| [STRATEGIC_INTELLIGENCE_REPORT.md](docs/STRATEGIC_INTELLIGENCE_REPORT.md) | CISO / 领导层 / 风险管理 |
| [OPERATIONAL_INTELLIGENCE_REPORT.md](docs/OPERATIONAL_INTELLIGENCE_REPORT.md) | TI 分析师 / IR |
| [TACTICAL_INTELLIGENCE_REPORT.md](docs/TACTICAL_INTELLIGENCE_REPORT.md) | SOC / 狩猎 / 检测 |
### 操作手册
| 文档 | 用途 |
|---|---|
| [INCIDENT_RESPONSE_PLAYBOOK.md](docs/INCIDENT_RESPONSE_PLAYBOOK.md) | 分流 → 确定范围 → 遏制 → 消除 → 恢复,附带决策树 |
| [THREAT_HUNTING_GUIDE.md](docs/THREAT_HUNTING_GUIDE.md) | 映射到 ATT&CK 的六个假设驱动的狩猎行动 |
### 基础设施与方法
| 文档 | 内容 |
|---|---|
| [INFRASTRUCTURE_ENUMERATION.md](docs/INFRASTRUCTURE_ENUMERATION.md) | 集群、追踪点、排除项、碎片化发现 |
| [NON_DISCRIMINATING_SELECTORS.md](docs/NON_DISCRIMINATING_SELECTORS.md) | 通用选择器及其误报群体 |
| [INVESTIGATION_METHODOLOGY.md](docs/INVESTIGATION_METHODOLOGY.md) | 态势、标记、估测语言、工具、局限性 |
### 检测与 IOC
| 路径 | 内容 |
|---|---|
| [detections/](detections) | Sigma 规则(基于日志)+ YARA(样本聚类)+ 网络/证书说明 |
| [iocs/JDY_IOCs.md](iocs/JDY_IOCs.md) | 包含各项声明标签的完整 IOC 表 |
| [iocs/JDY_IOCs.csv](iocs/JDY_IOCs.csv) | 机器可读的 IOC |
| [tools/jdy_decrypt.py](tools/jdy_decrypt.py) | 任务解密器 |
## 仓库结构
```
jdy-botnet-analysis/
├── README.md # this file
├── docs/
│ ├── REVERSE_ENGINEERING.md # RE front door
│ ├── TECHNICAL_WRITEUP.md # decryption chain, key/IV recovery
│ ├── IMPLANT_COMPONENTS_RE.md # transports, scan engine, dmap
│ ├── CORRECTIONS_LOG.md # reversed claims, tagged
│ ├── STRATEGIC_INTELLIGENCE_REPORT.md
│ ├── OPERATIONAL_INTELLIGENCE_REPORT.md
│ ├── TACTICAL_INTELLIGENCE_REPORT.md
│ ├── INCIDENT_RESPONSE_PLAYBOOK.md
│ ├── THREAT_HUNTING_GUIDE.md
│ ├── INFRASTRUCTURE_ENUMERATION.md
│ ├── NON_DISCRIMINATING_SELECTORS.md
│ └── INVESTIGATION_METHODOLOGY.md
├── detections/
│ ├── README.md
│ ├── sigma/ # 4 log-based rules
│ │ ├── jdy_jdyfj_certificate.yml
│ │ ├── jdy_dispatch_service_uri.yml
│ │ ├── jdy_cluster_outbound.yml
│ │ └── jdy_syn_recon_profile.yml
│ └── yara/
│ ├── jdy_mips64_implant_clustering.yar
│ └── jdy_network_cert_notes.md
├── iocs/
│ ├── JDY_IOCs.md
│ └── JDY_IOCs.csv
└── tools/
└── jdy_decrypt.py
```
## 快速开始 — 解密任务 blob
解密器将捕获到的 `probe_task` 主体(base64)转换为明文任务 JSON —
即指示 bot 扫描的 IP 范围、端口以及 CVE/指纹规则。
```
pip install pycryptodome
# 验证接线 (无需输入)
python3 tools/jdy_decrypt.py --selftest # -> selftest: PASS
# 查看其提取的 targeting fields
python3 tools/jdy_decrypt.py --demo
# 解密捕获的 base64 blob
python3 tools/jdy_decrypt.py captured_task.b64
```
如果解密未能通过 PKCS#7 校验,几乎可以肯定输入**不是原始的 AES blob**
(残留了 HTTP 帧格式,或者捕获了错误的字段)— 请重新提取准确的响应主体。
加密算法是正确的;应当怀疑输入数据。
## 贯穿所有内容的唯一操作准则
**切勿仅凭单一的通用选择器采取行动。** JDY 的中继节点位于普通的 VPS 托管上,并
与数以万计的良性服务共享基础设施。任何不属于 **jdyfj 证书**或
**匹配的 payload-host profile** 的信号,都必须与第二个独立的鉴别因素结合使用。真正的 JDY 选择器只会返回少数几个主机;而通用选择器会返回数千个。误报群体已记录在
[NON_DISCRIMINATING_SELECTORS.md](docs/NON_DISCRIMINATING_SELECTORS.md) 中。
## 关键事实概览
| 项目 | 值 |
|---|---|
| 植入物 | MIPS64 BE ELF, SHA-256 `40ad28b87b5ed395fe8ff303555cc28974682ed6cc5a71ede76c4b17648cb8ed` |
| 任务加密 | base64 → AES-128-CBC → JSON; 密钥 `bdb718bdf47cbcde`; IV `0x30`×16 |
| 集群锚点 | jdyfj 证书, 序列号 `0xab8f51eb48f363f1`, CN=jdyfj, RSA-4096, 至 2033-11-11 |
| 构建指纹 | `/usr/local/openssl/1.0.2u/mips64/` (嵌套形式是鉴别因素) |
| 扫描标记 | SYN 源端口 19000; ISN 种子 `0x3251d2d` (+1/目标); ICMP id 19037, seq 36765 |
| 后端 | nginx → Django (DRF), 位于 Tor 隐藏的调度服务背后 |
标签:DNS 反向解析, YARA, 云资产可视化, 云资产清单, 威胁情报, 开发者工具, 恶意代码分析, 插件系统, 网络信息收集, 网络安全, 逆向工具, 逆向工程, 配置审计, 配置文件, 隐私保护