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, 勒索软件监控, 安全防御评估, 日志审计, 网络威胁情报, 请求拦截