Ezaz-Ahmad/ThreatPulse
GitHub: Ezaz-Ahmad/ThreatPulse
将安全新闻、CISA 公告、CVE、KEV 漏洞数据和勒索软件活动聚合到一个自动更新的可视化仪表板中,帮助安全团队一站式掌握威胁态势。
Stars: 0 | Forks: 0
🛡️ ThreatPulse
一个实时、自动更新的网络威胁情报仪表板。
将安全新闻、CISA 公告、CVE、已利用漏洞数据以及勒索软件活动聚合到一个地方——并提供实时分析。
实时演示 ·
核心功能 ·
快速开始 ·
技术栈 ·
API 参考
## 为什么开发此项目
安全团队(以及任何追踪威胁态势的人员)必须查看十几个不同的地方——新闻网站、CISA 的网站、NVD、勒索软件泄露站点追踪器——才能保持信息同步。**ThreatPulse 将所有这些内容拉取到一个仪表板中**,按计划自动刷新,并将原始数据源转化为图表:严重程度分布、顶级勒索软件组织、目标行业以及随时间变化的趋势。
## 实时演示
## 核心功能
- 📰 **聚合新闻** — 拉取自 The Hacker News、BleepingComputer、Krebs on Security、Dark Reading、SecurityWeek 和 The Record
- 🏛️ **官方公告** — 实时 CISA 公告推送
- 🎯 **已知被利用漏洞** — CISA KEV 目录,按勒索软件关联进行标记
- 🧬 **CVE 追踪** — 来自 NVD API 的近期漏洞,包含 CVSS 分数和严重程度
- 🔓 **勒索软件追踪器** — 近期泄露站点上的受害者发布信息
- 📊 **内置分析** — 新闻数量、严重程度分布、顶级勒索软件组织、最受攻击的行业、KEV 时间线——以图表展示,而不仅仅是列表
- ⏱️ **自动更新** — 后台调度器按可配置的间隔刷新所有数据源,另附手动“立即刷新”按钮
- ✅ **经过测试** — 20 多个自动化测试(数据摄取解析 + API 层),CI 在每次提交时运行
- 🐳 **容器化** — 一条 `docker compose up` 命令即可在本地运行完整技术栈,包含数据库
## 截图
## 技术栈
| 层级 | 技术 |
|---|---|
| 后端 | FastAPI, SQLAlchemy, APScheduler |
| 前端 | React, Vite, Recharts |
| 数据库 | PostgreSQL (生产环境) / SQLite (本地开发) |
| 测试 | Pytest, FastAPI TestClient |
| CI/CD | GitHub Actions |
| 部署 | Docker, Render, Vercel, Neon |
## 架构
```
backend/ FastAPI + SQLAlchemy + APScheduler -> REST API, background ingestion, analytics
frontend/ React + Vite + Recharts -> dashboard UI
```
- **设计上的摄取分离:** 每个数据源都有一个 `fetch_*()` 函数(执行网络调用)和一个 `process_*()` 函数(纯解析/upsert 逻辑,无网络操作)——这使得数据摄取可以在离线状态下进行单元测试,而无需在 CI 中调用实时 API。
- **设计上的去重:** 所有数据摄取都基于 upsert(通过 URL/CVE ID 等匹配),因此重新运行永远不会产生重复数据。
- **数据库无关性:** 本地使用 SQLite,生产环境使用 Postgres——只需设置一个 `DATABASE_URL` 环境变量即可切换,无需修改代码。
## 快速开始
### 选项 A — Docker Compose(最快,一条命令)
```
docker compose up --build
```
同时启动 Postgres、后端 (`localhost:8000`) 和前端 (`localhost:5173`)。
### 选项 B — 手动运行
**后端:**
```
cd backend
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8000
```
**前端:**
```
cd frontend
npm install
cp .env.example .env
npm run dev
```
| 变量 | 用途 | 默认值 |
|---|---|---|
| `DATABASE_URL` | Postgres 连接字符串(未设置则回退到本地 SQLite) | _(sqlite)_ |
| `UPDATE_INTERVAL_HOURS` | 调度器重新拉取所有数据源的频率 | `6` |
| `NVD_API_KEY` | 从 nvd.nist.gov 获取的免费密钥,可提高 CVE API 速率限制 | _(无)_ |
| `CVE_LOOKBACK_DAYS` | 拉取修改过的 CVE 的回溯天数 | `3` |
## 测试与 CI
```
cd backend
pip install -r requirements-dev.txt
pytest
```
20 多个测试覆盖了数据摄取解析器(通过固定的 RSS/JSON,无需网络)和 API 层(隔离的测试数据库)。`.github/workflows/ci.yml` 会在每次提交/PR 时运行完整的测试套件以及前端生产构建。
## 部署
在线且免费,使用:
1. **[Neon](https://neon.tech)** — 免费的永久 Postgres 数据库
2. **[Render](https://render.com)** — 免费的 FastAPI 后端托管(从 GitHub 自动部署,包含 `Dockerfile`)
3. **[Vercel](https://vercel.com)** — 免费的 React 前端托管
4. **GitHub Actions** — 一个预定的调度工作流 (`scheduled-refresh.yml`) 每 6 小时 ping 一次后端,以保持数据最新并唤醒处于 Render 免费层休眠状态的服务
将 (Render 的) `DATABASE_URL` 设置为你的 Neon 连接字符串,并将 (Vercel 的) `VITE_API_BASE` 设置为你的 Render URL——这是唯一需要的配置。
## API 参考
| Endpoint | 描述 |
|---|---|
| `GET /api/news` | 新闻项 (`?search=`, `?source=`, `?limit=`) |
| `GET /api/advisories` | CISA 公告 (`?search=`, `?limit=`) |
| `GET /api/cves` | 近期 CVE (`?search=`, `?min_score=`, `?limit=`) |
| `GET /api/kev` | KEV 目录 (`?search=`, `?ransomware_only=`, `?limit=`) |
| `GET /api/ransomware` | 勒索软件受害者 (`?group=`, `?limit=`) |
| `GET /api/stats` | 仪表板顶部的汇总计数 |
| `GET /api/analytics/news-volume` | 每日新闻计数 (`?days=`) |
| `GET /api/analytics/severity-distribution` | 按严重程度划分的 CVE 计数 |
| `GET /api/analytics/top-ransomware-groups` | 按受害者数量排名的顶级组织 (`?limit=`, `?days=`) |
| `GET /api/analytics/top-sectors` | 最受攻击的行业 (`?limit=`, `?days=`) |
| `GET /api/analytics/kev-timeline` | 每日 KEV 目录新增内容 (`?days=`) |
| `POST /api/refresh` | 触发立即执行数据摄取 |
## 路线图
- [ ] 用户帐户 + 保存的监视列表(追踪特定的供应商/CVE/组织)
- [ ] 在出现严重 CVE 或新的 KEV 条目时,通过 Slack/Discord/电子邮件进行实时警报
- [ ] 按国家/地区显示勒索软件活动的交互式世界地图
- [ ] 历史趋势对比(周环比、月环比)
## 关于数据源可靠性的说明
- `ransomware.live` 确切的 JSON 字段名称在之前的 API 版本中发生过变化。`backend/app/ingest/ransomware.py` 会防御性地读取几个合理的键名——如果实时运行记录了 0 条新的勒索软件记录,请打印一条原始记录并调整 `_first(...)` 的键查找。
- CISA 之前曾更改过 RSS 源 URL;如果该源返回为空,请查看 cisa.gov 上当前的公告 RSS 链接。
## 作者
**Ezaz Ahmad**
GitHub: [@Ezaz-Ahmad](https://github.com/Ezaz-Ahmad)
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
标签:AV绕过, FastAPI, PostgreSQL, Python, React, Syscalls, 威胁情报, 安全仪表盘, 开发者工具, 无后门, 测试用例, 请求拦截, 逆向工具