mehmetyasinuzun/ransomware-cti-dashboard
GitHub: mehmetyasinuzun/ransomware-cti-dashboard
一个基于 Go 和 React 构建的勒索软件威胁情报仪表盘,从公开数据源提取、分析并可视化勒索软件攻击趋势与 IOC 指标。
Stars: 0 | Forks: 1
# 勒索软件监控仪表盘
这是一个**网络威胁情报 (CTI)** 仪表盘,它从公开的威胁情报源提取、处理、分析并可视化有关勒索软件攻击的数据。
系统基于攻击团伙、目标国家、行业和基于时间的趋势提供分析,为每条记录推算出一个合理的 **severity (1–10)** 分数,并包含一个可通过 IP / 文件哈希进行查询的 **IOC 搜索模块**。
## 架构
三个服务通过单个数据卷 (`./data`) 进行通信:
```
ransomware.live ─┐
abuse.ch ├─► pipeline (Go) ──► data/cti.db ◄── server (Go API)
MITRE ATT&CK ─┘ tek seferlik SQLite │ REST /api/*
dataset.csv ▼
dataset.json frontend (React + nginx)
http://localhost:8080
```
| 组件 | 技术 | 任务 |
|---|---|
| **pipeline** | Go (单一静态二进制文件) | 从 API 提取数据,进行丰富,计算 severity,生成 SQLite + CSV/JSON |
| **server** | Go (net/http, modernc SQLite — 无 CGO) | 用于分析查询和 IOC 搜索的 REST API |
| **frontend** | React + TypeScript + Vite + Apache ECharts | 深色主题的交互式仪表盘 (通过 nginx 提供服务) |
| **数据库** | SQLite (WAL) | 嵌入式,无需单独的服务 |
选择 Go 的原因:单一静态二进制文件,体积小 (~20 MB) 且不受依赖漂移影响的镜像,利用 goroutine 实现受控的并行数据提取。由于分析是通过 SQL 完成的,而 MITRE 数据丰富是通过简单的 JSON 映射完成的,因此不需要类似 pandas 的依赖。
## 数据源
所有源都是公开且免费的。Pipeline 将它们提取并转换为**简报所需的模式**。
### ransomware.live API v2 — `https://api.ransomware.live/v2`
从勒索软件团伙的数据泄露站点 (DLS) 和 OSINT 源收集的**真实受害者记录。**无需身份验证。
- `GET /victims/{年份}/{月份}` — 每月的受害者记录 (机构、团伙、国家、行业、日期)
- `GET /group/{名称}` — 团伙档案;包含 **MITRE ATT&CK TTPs** (`ttps`: 战术 + 技术代码/名称)
### abuse.ch — ThreatFox (+ MalwareBazaar)
针对勒索软件家族的**真实 IOC。**有两种工作模式:
- **默认 (无密钥):** 下载 ThreatFox 公开的**完整导出**文件 (`/export/json/full/`);提取属于勒索软件家族的真实 IP 和哈希指标,并映射到各个团伙。**无需** Auth-Key,且均为真实数据。
- **使用 Auth-Key (可选,最新数据):** 如果提供了 `ABUSECH_AUTH_KEY`,将使用 ThreatFox `malwareinfo` + MalwareBazaar `get_siginfo` 实时 API。
- 团伙名称 → 家族映射 (如 `lockbit→win.lockbit`、`alphv→win.blackcat` 等) 是通过静态表和直观命名完成的。
### MITRE ATT&CK
技术代码和名称直接来自 ransomware.live 团伙档案 (它们本身已与 MITRE 映射)。`attack_vector` 是通过 Initial Access (TA0001) 技术推导出来的。
## 数据模式
每条记录都包含简报所需的字段。生成的数据集位于 `data/dataset.csv` 和 `data/dataset.json` 文件中。
| 字段 | 来源 / 推导 |
|---|---|
| `date` | ransomware.live `attackdate` (灵活的日期解析) |
| `ransomware_group` | ransomware.live `group` |
| `country` | ransomware.live `country` (ISO-2) |
| `target_sector` | ransomware.live `activity` |
| `attack_vector` | 来自团伙的 MITRE Initial Access 技术;对于没有档案的团伙,退而使用 CISA 记录的主要向量 |
| `technique` | 来自团伙 MITRE ATT&CK TTP 集的代表性技术 (T 代码 + 名称) |
| `severity` | 使用以下加权模型计算 (1–10) |
| `ioc_ip` (可选) | abuse.ch ThreatFox (真实) 或合成数据 |
| `ioc_hash` (可选) | abuse.ch MalwareBazaar (真实) 或合成数据 |
## Severity 方法论
源数据中**不包含** Severity;它是作为透明且加权的综合分数推导出来的,模拟了 CVSS v4 的分层 (内在影响 + 威胁上下文 + 环境) 逻辑。每个组件都被标准化为 0–10,通过权重相加并压缩到 1–10 的范围内:
```
severity = clamp(1, 10,
0.30 · sektör_kritikliği # CISA 16 kritik altyapı sektörü
+ 0.25 · grup_aktivitesi # grubun kurban sayısının log-ölçekli payı
+ 0.15 · etki_tekniği # grupta MITRE Impact tekniği (T1486 vb.) var mı
+ 0.15 · tazelik # saldırı tarihinin güncelliği (üstel azalma)
+ 0.15 · ioc_varlığı # grupla eşleşen aktif IOC var mı
)
```
模型位于 `internal/enrich/severity.go` 中,权重定义在文件开头的单一位置。其目的不是虚假的精确性,而是可追溯且合理的优先级排序。
## 所需特性 — 实现情况
**数据分析:** 团伙 / 国家 / 行业分布、基于时间的趋势和平均 severity,均通过 SQL 聚合经由 API 提供。
**仪表盘 (4+ 可视化):**
- 概览 — KPI 摘要屏幕 + 4 个图表
- 威胁团伙 — 团伙分布图 + 攻击向量 + MITRE 技术 + 完整表格
- 地理与行业 — 世界分级统计图 + 国家和行业分布
- 时间序列 — 月度攻击量和平均 severity (双轴)
**IOC 搜索模块:** 对于输入的 IP 或哈希,列出相关的勒索软件团伙、匹配的指标、相关的攻击记录及 severity 摘要。
## 数据刷新与时效性
数据是提取时的一个**快照** (顶部栏会显示“提取时间”)。为了保持最新,提供了三种机制:
- **“刷新”按钮 (界面):** 顶部栏的按钮通过 `POST /api/refresh` 在后台从数据源重新提取数据;完成后仪表盘会自动刷新。无需返回终端。
- **自动刷新:** 服务器按照 `REFRESH_INTERVAL_HOURS` (在 Docker 中默认为 **24 小时**) 的间隔自动更新数据。设置为 `0` 即可关闭。
- **时间范围选择器:** 从顶部栏选择 **全部 / 1 年 / 6 个月 / 30 天**,可将所有分析缩小到该窗口。诸如“过去 30 天”之类的指标是根据最新的记录计算的;当开启自动刷新时,这些值会实时跟进。
首次运行 `docker compose up` 时,如果数据库为空,服务器会自动触发首次提取;如果有可用的现成快照,则直接使用它。
## 运行说明
### 选项 A — Docker (推荐)
要求:Docker + Docker Compose。
```
docker compose up --build
```
仪表盘:**http://localhost:8080**
由于 `./data/cti.db` 已经存在 (现成的快照随仓库一起提供),pipeline 会跳过提取,应用程序将以**离线**状态启动。要重新从 API 提取数据 (默认包含来自 ThreatFox 导出的真实 IOC):
```
REFRESH=true docker compose up --build
```
可选地,对于最新的 IOC,您可以将 `.env.example` 复制为 `.env` 并输入 `ABUSECH_AUTH_KEY`;但即使没有密钥,也会提取真实数据。
### 选项 B — 手动 (开发)
要求:Go 1.25+, Node 20+。
```
# 1) 数据拉取(首次运行;后续启动时跳过)
cd backend
DATA_DIR=../data go run ./cmd/pipeline
# 2) API 服务器(新终端)
DB_PATH=../data/cti.db go run ./cmd/server # :8080
# 3) 界面(新终端)
cd ../frontend
npm install
npm run dev # :5173 (/api -> :8080 proxy)
```
### 配置
所有设置均通过环境变量完成 (参见 `.env.example`):`ABUSECH_AUTH_KEY`、`WINDOW_FROM`、`REFRESH`、`THROTTLE_MS`。
## 项目结构
```
.
├── backend/ Go modülü (pipeline + server, paylaşılan internal/)
│ ├── cmd/pipeline/ Veri çekme + zenginleştirme + dışa aktarma
│ ├── cmd/server/ REST API
│ └── internal/
│ ├── sources/ ransomware.live ve abuse.ch istemcileri
│ ├── enrich/ severity, sektör, ülke, MITRE, IOC mantığı
│ ├── store/ SQLite şema, yazma ve sorgular
│ ├── httpx/ throttle + 429 backoff'lu HTTP istemcisi
│ └── ...
├── frontend/ React + TS + Vite + ECharts
│ └── src/{views,components,lib}
├── data/ Üretilen veri seti (cti.db, dataset.csv, dataset.json)
├── docker-compose.yml
└── README.md
```
## API 端点
| 端点 | 描述 |
|---|---|
| `GET /api/summary` | KPI 摘要 + 元数据 |
| `GET /api/groups` · `/countries` · `/sectors` | 分布情况 |
| `GET /api/attack-vectors` · `/techniques` | MITRE 分布 |
| `GET /api/timeseries` · `/severity` | 时间序列和 severity 分布 |
| `GET /api/victims` | 可过滤、分页的记录 |
| `GET /api/ioc?q=` | IOC 查询 (引用) |
| `GET /api/iocs` · `/api/ioc-groups` | IOC 目录 (已过滤、分页) |
| `POST /api/refresh` · `GET /api/refresh/status` | 重新提取数据 / 查询状态 |
分析端点 (`summary`、`groups`、`countries`、`sectors`、`timeseries`、`severity`、`attack-vectors`、`techniques`) 接受可选的 `window=30d\|180d\|365d` 参数。
## 许可证
源代码基于 [MIT](LICENSE) 许可证。数据源受其各自的使用条款约束:ransomware.live ("personal use only")、abuse.ch (ThreatFox / MalwareBazaar) 以及 MITRE ATT&CK。
Star · 网络威胁情报
标签:Docker, EVTX分析, Go, React, Ruby工具, SQLite, Syscalls, 勒索软件监控, 安全防御评估, 日志审计, 网络威胁情报, 请求拦截