zethw0w/ddos-attack-map
GitHub: zethw0w/ddos-attack-map
基于 Three.js 3D 地球和六层威胁情报流水线的实时 DDoS 攻击可视化与 ML 分类平台。
Stars: 0 | Forks: 0
# 实时 DDoS 攻击地图
带有 6 层威胁情报管道、混合 ML 分类、SQLite 持久化以及 MITRE ATT&CK 映射的 3D 地球实时 DDoS 攻击可视化。





## 功能特性
- **3D 地球可视化** — Three.js 搭配 NASA 蓝色弹珠纹理,基于严重程度着色的弧线、大气光晕、城市圆点
- **实时 WebSocket 流** — 将攻击广播到所有已连接的客户端,并保留 500 个数据包的历史记录
- **6 层威胁情报管道** — Cloudflare Radar → AbuseIPDB → GeoLite2 → ML → MITRE ATT&CK → SQLite
- **三层 ML 分类** — CIC-DDoS2019 (99.65% 二分类 / 94.03% 多分类) → IP 分类器 (GradientBoosting + StandardScaler) → 规则回退
- **MITRE ATT&CK 映射** — 将 16 种攻击类型映射到 T1498/T1499/T1110/T1046 技术
- **SQLite 持久化** — 30 天历史记录、CSV 导出、分析接口
- **SOC 仪表盘** — 实时统计数据、趋势指标、攻击日志、严重程度分布、主要攻击国家

- **蜜罐集成** — Cowrie SSH 蜜罐事件监控
- **数据包嗅探器** — 基于 Scapy 的 SYN/UDP/ICMP/DNS 洪水检测
- **速率限制** — 摄取接口 30 请求/分钟 (slowapi)
- **可选 API 认证** — X-API-Key 请求头 (默认禁用以便于演示)
- **TypeScript 前端** — 严格模式,为所有数据结构提供类型化接口
- **Docker 支持** — 针对后端和前端的多阶段构建
- **CI/CD** — GitHub Actions:每次推送时运行 pytest + vitest + docker build
## 系统架构
```
┌─────────────────────────────────────────────────────────────┐
│ Frontend — React 18 + Three.js + TypeScript │
│ 3D Globe | SOC Dashboard | Attack Log | MITRE Tags │
└──────────────────────────┬──────────────────────────────────┘
│ WebSocket ws://:8000/ws/attacks
▼
┌─────────────────────────────────────────────────────────────┐
│ FastAPI Backend (Python 3.11) │
│ │
│ Ingest → Geo → AbuseIPDB → ML → MITRE → Broadcast → SQLite │
│ │
│ ┌──────────────┬──────────────┬─────────────────────────┐ │
│ │ Cloudflare │ AbuseIPDB │ MaxMind GeoLite2 │ │
│ │ Radar API │ Cache+TTL │ (simulated fallback) │ │
│ └──────────────┴──────────────┴─────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 3-Tier ML Classifier │ │
│ │ 1. CIC-DDoS2019 Binary (99.65% accuracy) │ │
│ │ 2. CIC-DDoS2019 Multi (94.03% accuracy) │ │
│ │ 3. IP Classifier + Scaler (GradientBoosting) │ │
│ │ 4. Rules fallback (always available) │ │
│ └──────────────────────────────────────────────────────┘ │
└──────────────┬───────────────────────┬──────────────────────┘
│ │
┌───────┴───────┐ ┌─────────┴────────┐
│ Honeypot │ │ Packet Sniffer │
│ (Cowrie SSH) │ │ (Scapy — 5 ops) │
└───────────────┘ └──────────────────┘
```
## 快速开始
### 环境要求
- Python 3.11+
- Node.js 20+
- Git
### 1. 克隆并配置
```
git clone https://github.com/your-username/ddos-attack-map.git
cd ddos-attack-map
cp .env.example .env
```
该项目**无需任何 API 密钥**即可运行 —— 模拟数据会自动作为回退方案使用。
### 2. 后端
```
pip install -r requirements.txt
cd backend
python main.py
```
后端可通过以下地址访问:
- API:`http://localhost:8000`
- Swagger UI:`http://localhost:8000/docs`
- WebSocket:`ws://localhost:8000/ws/attacks`
### 3. 前端
```
cd frontend/app
npm install
npm run dev
```
打开 `http://localhost:5173`
## Docker
```
docker compose up --build
```
| 服务 | URL |
|---------|-----|
| 前端 | `http://localhost` |
| 后端 API | `http://localhost:8000` |
| Swagger UI | `http://localhost:8000/docs` |
```
docker compose down
```
## 配置说明
将 `.env.example` 复制到 `.env` 并填入您需要的值:
```
# AbuseIPDB — IP 信誉评分(每天 1000 次请求免费)
# 注册地址:https://www.abuseipdb.com/register
ABUSEIPDB_API_KEY=
# Cloudflare Radar — 真实 DDoS 数据(公共 API,可选 token)
# 获取地址:https://dash.cloudflare.com/profile/api-tokens
CLOUDFLARE_RADAR_TOKEN=
# MaxMind GeoLite2 — IP 地理位置
# 注册并从以下地址下载 GeoLite2-City.mmdb:https://dev.maxmind.com
# 将文件放置于:data/GeoLite2-City.mmdb
MAXMIND_LICENSE_KEY=
# CORS 允许的来源(以逗号分隔,用于生产环境)
ALLOWED_ORIGINS=http://localhost:5173,http://localhost:3000
# /api/attacks/report endpoint 的可选 API key
# 留空以禁用身份验证(演示模式)
# 生成命令:python -c "import secrets; print(secrets.token_hex(32))"
API_SECRET_KEY=
```
所有配置均为可选 —— 系统对所有缺失的配置都有平滑的回退机制。
## ML 训练
该项目内置了基于规则的回退机制,无需进行训练。要启用 CIC-DDoS2019 模型:
### 数据集
CIC-DDoS2019 数据集提供两种格式:
**选项 A — 预提取的 CSV (推荐)**
直接从 Kaggle 下载 CSV 文件:
```
https://www.kaggle.com/datasets/dhoogla/cicddos2019
```
文件名类似于 `Friday-WorkingHours-Afternoon-DDos.pcap_ISCX.csv` —— 尽管名称中包含 `.pcap`,但它们是纯 CSV 文件,包含预先提取的网络流特征。
**选项 B — 原始 PCAP (二进制)**
如果您从 [UNB 官方网站](https://www.unb.ca/cic/datasets/ddos-2019.html)下载了原始 PCAP 捕获文件,请先使用 CICFlowMeter 进行转换:
```
# 下载 CICFlowMeter:https://github.com/ahlashkari/CICFlowMeter/releases
java -jar CICFlowMeter.jar -f capture.pcap -c output/
```
然后使用生成的 CSV 文件配合训练脚本。
### 训练
```
cd backend
# 多分类分类器(11 种攻击类型,约 94% 准确率)
python train_cic_model.py --data data/Friday-WorkingHours-Afternoon-DDos.pcap_ISCX.csv
# 二元分类器(BENIGN vs DDoS,约 99% 准确率 — 更快)
python train_cic_model.py --data data/Friday-WorkingHours-Afternoon-DDos.pcap_ISCX.csv --binary
# 已合并多个 CSV 文件
python train_cic_model.py --data data/combined.csv --max-samples 30000
```
训练好的模型将保存到 `models/` 目录,并在下次启动时自动加载。
## 可选模块
### 数据包嗅探器 (需要管理员/root 权限)
实时检测 SYN 洪水、UDP 洪水、ICMP 洪水、DNS 放大和高流量。
```
# Linux/macOS
sudo python sniffer/packet_sniffer.py --interface eth0 --api http://localhost:8000
# Windows(以管理员身份运行终端)
python sniffer/packet_sniffer.py --interface "Ethernet" --api http://localhost:8000
```
### Cowrie 蜜罐集成
监控运行中的 [Cowrie](https://github.com/cowrie/cowrie) SSH 蜜罐并将事件转发到地图。
```
# 将其指向您的 Cowrie JSON 日志
python honeypot/honeypot_feed.py --log ~/cowrie/var/log/cowrie/cowrie.json
# 测试模式(生成模拟的蜜罐事件)
python honeypot/honeypot_feed.py --test --api http://localhost:8000
```
## API 参考
| 方法 | 接口 | 描述 |
|--------|----------|-------------|
| GET | `/api/stats` | 系统统计信息 (实时 + 数据库) |
| GET | `/api/attacks/recent?limit=50` | 最近的攻击 (内存会话) |
| GET | `/api/attacks/by-country/{code}` | 按来源国家/地区筛选攻击 |
| POST | `/api/attacks/report` | 从外部来源摄取攻击 (速率限制:30次/分钟) |
| GET | `/api/db/attacks` | 查询 SQLite 数据库,支持筛选 (国家/地区、严重程度、类型、IP、日期范围) |
| GET | `/api/db/stats` | 聚合的数据库分析 |
| GET | `/api/db/timeline?hours=24` | 每小时攻击次数 (用于图表) |
| GET | `/api/db/top/ips` | 最活跃的攻击 IP |
| GET | `/api/db/top/countries` | 最主要的攻击来源国 |
| GET | `/api/db/top/types` | 最主要的攻击类型 |
| GET | `/api/db/export` | 下载所有攻击数据为 CSV |
| GET | `/api/ml/info` | 已加载的 ML 模型及准确率 |
| POST | `/api/ml/predict-flow` | 使用 CIC-DDoS2019 模型对网络流进行分类 |
完整的交互式文档请访问 `http://localhost:8000/docs`
## 完整指南
有关所有功能的完整演练 —— WebSocket、带有 curl 示例的 REST 接口、数据包嗅探器、蜜罐集成、ML 训练和 Docker —— 请参阅 [EXECUTION_GUIDE.txt](EXECUTION_GUIDE.txt)。
## 测试
```
# 后端 — 185 个测试
cd backend
pytest tests/ -v
# 前端 — 17 个测试
cd frontend/app
npm test
```
## 已知警告
**启动时出现 `InconsistentVersionWarning` (外观问题 —— 可安全忽略)**
```
InconsistentVersionWarning: Trying to unpickle estimator RandomForestClassifier
from version 1.8.0 when using version 1.6.1.
```
内置的 CIC-DDoS2019 模型文件是使用 scikit-learn 1.8.0 序列化的。
该项目固定使用 `scikit-learn==1.6.1`,在运行时完全兼容 —— 该警告仅是表面问题,不会影响准确率或功能。
要完全抑制此警告,请在安装依赖后于本地重新训练模型:
```
cd backend
python train_cic_model.py --data --binary
python train_cic_model.py --data
```
提供预训练模型是为了让该项目在无需数据集的情况下即可开箱即用。
## 项目结构
```
ddos-attack-map/
├── backend/
│ ├── main.py # FastAPI server, WebSocket, pipeline orchestration
│ ├── abuseipdb_client.py # IP reputation with cache and rate limiting
│ ├── geolocation.py # IP → coordinates (GeoLite2 + simulated fallback)
│ ├── cloudflare_radar.py # DDoS data from Cloudflare + realistic simulation
│ ├── database.py # SQLite persistence, analytics, CSV export
│ ├── threat_classifier.py # 3-tier ML: CIC models → IP classifier → rules
│ └── train_cic_model.py # Train Random Forest on CIC-DDoS2019 dataset
├── frontend/app/
│ ├── src/
│ │ ├── DDoSMap.tsx # Main component: 3D globe + SOC dashboard
│ │ ├── ErrorBoundary.tsx # React error boundary with fallback UI
│ │ ├── App.tsx # Root component
│ │ └── main.tsx # Entry point
│ ├── tsconfig.json
│ └── vite.config.ts
├── honeypot/
│ └── honeypot_feed.py # Cowrie SSH honeypot log monitor
├── sniffer/
│ └── packet_sniffer.py # Scapy packet capture and DDoS detection
├── docs/
│ ├── DATABASE_SCHEMA.md # SQLite schema reference
│ ├── TROUBLESHOOTING.md # Common issues and solutions
│ └── REFERENCES.md # 14 academic and technical references
├── deploy/
│ ├── nginx.conf # Reverse proxy config
│ └── README.md # Deployment guide
├── Dockerfile.backend
├── Dockerfile.frontend
├── docker-compose.yml
├── requirements.txt
└── .env.example
```
## 参考文献
### 学术 / 数据集
- Sharafaldin, I., Lashkari, A. H., Hakak, S., & Ghorbani, A. A. (2019). *Developing Realistic Distributed Denial of Service Attack Dataset*. IEEE International Conference on Big Data. — [CIC-DDoS2019 数据集](https://www.unb.ca/cic/datasets/ddos-2019.html)
### 技术文章
- [@vishnurg](https://medium.com/@vishnurg) — 将原始 IP 数据转化为全球网络威胁地图
- [@onmouse0ver](https://medium.com/@onmouse0ver) — 使用 AbuseIPDB 自动化威胁分析
- [@darkmarc](https://darkmarc.substack.com) — DDoS 攻击检测技术
- [@nayangoel](https://medium.com/@nayangoel) — 网络安全中的 ML:超越炒作
- [@genrunic](https://medium.com/@genrunic) — 使用 Python Scapy 进行 DDoS 检测
- [@pythonandchill](https://pythonandchill.substack.com) — 保护您的 API 免受滥用
- [@pocketflow](https://pocketflow.substack.com) — FastAPI 与 WebSockets
完整参考文献列表:[docs/REFERENCES.md](docs/REFERENCES.md)
## 视觉灵感
- [Kaspersky 网络威胁实时地图](https://cybermap.kaspersky.com)
- [数字攻击地图](https://www.digitalattackmap.com) (Google + Arbor Networks)
## 许可证
MIT —— 仅限教育用途。切勿在未经授权的情况下在第三方网络上运行。
标签:3D可视化, Apex, AV绕过, CIC-DDoS2019, Cloudflare, DDoS攻击, Docker, FastAPI, GitHub Actions, MITRE ATT&CK, Python, React, scikit-learn, SOC大屏, SQLite, Syscalls, Three.js, TypeScript, WebSocket, 依赖分析, 全栈项目, 后端开发, 威胁情报, 安全插件, 安全防御评估, 开发者工具, 开源安全工具, 异常检测, 插件系统, 数据分类, 无后门, 机器学习, 网络安全, 网络拓扑图, 自动笔记, 蜜罐, 证书利用, 请求拦截, 逆向工具, 逆向工程平台, 配置错误, 隐私保护