armand-vw/CVE-Scraper
GitHub: armand-vw/CVE-Scraper
一款聚合 NIST NVD 与 CISA KEV 数据的开源漏洞情报监控工具,支持基于自定义软件关注列表的精准匹配和多渠道告警推送。
Stars: 0 | Forks: 0
# CVE-Scraper
[](https://python.org)
[](LICENSE)
[](tests/)
一个威胁情报 CLI 和 Web 仪表板,用于获取 **NIST NVD API v2.0** 和 **CISA Known Exploited Vulnerabilities (KEV)** 数据,根据自定义软件关注列表过滤漏洞,并通过 Discord 和 Slack webhook 发送警报通知。
## 架构
```
User → [Web Dashboard] or [CLI]
│
├──► NVDClient ───► NVD API v2.0 (auto-paginated, rate-limited)
├──► CISAClient ──► CISA KEV JSON feed
│
▼
Evaluator ───► Regex \bword\b matching on CPE + descriptions
│ CVSS v3/v4 scoring + KEV cross-reference
│
├──► Translator ── CVSS vector → plain English, optional LLM
│
▼
Notifier ───► Rich terminal table / Discord embed / Slack blocks
│
▼
SQLite ───► scan_runs, alerts, schedules
```
## 功能
- **NVD + CISA 数据获取** — 自动分页的 NVD API v2.0 客户端,支持速率限制退避。CISA KEV JSON 数据源会被解析为快速查找索引。
- **智能匹配** — 支持带 `\b` 词边界的非大小写敏感正则表达式。优先匹配 CPE 条件,如果未匹配到则回退至 CVE 描述。
- **KEV 始终符合条件** — CISA Known Exploited Vulnerabilities 目录中的任何 CVE 都会绕过 CVSS 分数过滤器。
- **通俗英语翻译** — 将 CVSS 向量解析为人类可读的句子。可选支持基于 LLM 的描述生成(支持 OpenAI、Anthropic、Ollama 或自定义提供商)。
- **实时 WebSocket** — 在评估每个 CVE 时,将实时结果流式传输到仪表板。
- **批量 webhook 警报** — 每次扫描运行生成聚合的 Discord embeds 和 Slack Block Kit 消息。
- **Cron 调度** — 基于 APScheduler 和 SQLite 存储的调度计划。可在仪表板中创建、启用、禁用或删除循环扫描任务。
- **单页仪表板** — 关注列表编辑器、扫描表单、实时结果、历史记录和调度管理全部集中在一个页面。
- **端口安全** — 启动时检查防止绑定到保留端口。可通过 `CVE_SCRAPER_PORT` 进行配置。
- **可选认证** — 当设置了 `CVE_SCRAPER_API_TOKEN` 时,所有路由都需要进行 token 验证。默认情况下,对 localhost 完全开放。
## 快速开始
```
# 安装
pip install -e .
# 脚手架配置文件
cve-scraper init
# 编辑你的关注列表
vim watchlist.json
# 启动 web dashboard
cve-scraper serve
```
然后在浏览器中打开 **http://localhost:8000**。
### CLI 用法
```
# 从终端运行扫描
cve-scraper scan --days-back 3 --min-score 7.0 --notify
# 查看历史扫描
cve-scraper history --limit 10
# 管理计划扫描
cve-scraper schedule add --name "Daily" --cron "0 9 * * *" --notify
cve-scraper schedule list
cve-scraper schedule remove 1
```
## CLI 参考
```
cve-scraper
├── scan [-w watchlist] [-s min-score] [-d days-back] [-n notify] [-t translate]
├── serve [--host HOST] [--port PORT]
├── init
├── history [-l limit]
└── schedule
├── list
├── add --name NAME --cron CRON [--notify] [--translate]
├── remove SCHEDULE_ID
├── enable SCHEDULE_ID
└── disable SCHEDULE_ID
```
## 配置 (.env)
| 变量 | 默认值 | 描述 |
|---|---|---|
| `NVD_API_KEY` | _(无)_ | 用于提高速率限制的 NVD API 密钥(50 req/30s 对比 5 req/30s) |
| `CVE_SCRAPER_HOST` | `0.0.0.0` | Web 服务器绑定的主机 |
| `CVE_SCRAPER_PORT` | `8000` | Web 服务器的端口 |
| `CVE_SCRAPER_API_TOKEN` | _(无)_ | 如果设置,所有路由都需要提供 `Authorization: Bearer ` |
| `DISCORD_WEBHOOK_URL` | _(无)_ | 用于接收通知的 Discord webhook |
| `SLACK_WEBHOOK_URL` | _(无)_ | 用于接收通知的 Slack webhook |
| `LLM_PROVIDER` | `openai` | LLM 提供商:`openai`、`anthropic`、`ollama`、`custom` |
| `OPENAI_API_KEY` | _(无)_ | OpenAI 或 Ollama 的 API 密钥 |
| `LLM_MODEL` | `gpt-4o-mini` | 用于翻译的模型名称 |
## Web 仪表板
访问 `http://localhost:8000` 即可进入包含四个标签页的单页仪表板:
| 标签页 | 功能 |
|---|---|
| **Watchlist** | 用于配置软件关键字、供应商和产品的 JSON 编辑器 |
| **Scan** | 使用可配置参数触发扫描。结果通过 WebSocket 实时流式传输 |
| **History** | 浏览过去的扫描运行记录。点击任意行即可查看包含所有匹配 CVE 的完整报告弹窗 |
| **Schedules** | 创建和管理基于 cron 的循环扫描任务 |
## Watchlist 格式
```
{
"keywords": ["nginx", "kubernetes", "postgresql", "docker", "redis"],
"vendors": ["microsoft", "apple", "google", "adobe", "vmware"],
"products": ["ubuntu", "openssl", "wordpress"]
}
```
匹配是大小写不敏感的,并使用正则表达式的词边界 (`\bkeyword\b`)。系统会首先检查 CPE 字符串;如果未匹配到,则将 CVE 描述作为回退方案。
## 测试
```
pip install -e ".[dev]"
python -m pytest tests/ -v
```
```
tests/test_api_client.py ..... [ 23%]
tests/test_database.py .... [ 35%]
tests/test_evaluator.py ...... [ 52%]
tests/test_notifier.py ....... [ 76%]
tests/test_translator.py ...... [100%]
============================== 34 passed ==============================
```
## 技术栈
| 层级 | 技术 |
|---|---|
| Web 框架 | FastAPI + Uvicorn |
| CLI 框架 | Click + Rich |
| HTTP 客户端 | Requests (session pooling + retry) |
| 实时通信 | WebSocket (FastAPI 原生) |
| 数据库 | SQLite (WAL mode, foreign keys) |
| 任务调度 | APScheduler |
| 模板引擎 | Jinja2 |
| LLM | OpenAI SDK (兼容 Anthropic、Ollama、自定义 endpoint) |
| Python | 3.11+ 完整 type hints 支持 |
## 许可证
MIT
标签:GPT, Python, Web仪表盘, 威胁情报, 字符串匹配, 开发者工具, 无后门, 漏洞管理, 自动化告警, 逆向工具