armand-vw/CVE-Scraper

GitHub: armand-vw/CVE-Scraper

一款聚合 NIST NVD 与 CISA KEV 数据的开源漏洞情报监控工具,支持基于自定义软件关注列表的精准匹配和多渠道告警推送。

Stars: 0 | Forks: 0

# CVE-Scraper [![Python](https://img.shields.io/badge/python-3.11%2B-blue)](https://python.org) [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE) [![Tests](https://img.shields.io/badge/tests-34%2F34-brightgreen)](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仪表盘, 威胁情报, 字符串匹配, 开发者工具, 无后门, 漏洞管理, 自动化告警, 逆向工具