cuozzo/network-cve-matcher

GitHub: cuozzo/network-cve-matcher

将 Nmap 网络扫描结果自动匹配 NVD 漏洞数据库并附带置信度评分的初步 CVE 分诊平台。

Stars: 0 | Forks: 0

# Network CVE Matcher Network CVE Matcher 将 Nmap 服务指纹识别与 NVD API v2.0 查询相结合,以展示*可能*适用于已发现服务的 CVE。它专为授权的网络审计工作流而设计,在这些场景中,快速、粗略的 CVE 分诊比缓慢、精确的分诊更有价值。结果被有意设计为保守的,并带有明确的置信度级别,以便分析师确切知道每个发现有多大的可信度。 ## 功能 - **异步网络扫描** — 提交 IP 或 CIDR 范围并在不阻塞的情况下获取结果;浏览器中实时轮询扫描状态 - **Nmap 服务指纹识别** — 在单次扫描中完成端口发现、服务/版本检测 (`-sV`) 和 OS 指纹识别 (`-O`) - **Banner 抓取** — 原始 TCP socket 连接捕获服务 Banner 的前 1 KB,用于独立的版本验证 - **CPE 2.3 规范化** — 供应商/产品/版本字符串在 NVD 查询前会被转化为格式正确的 CPE 标识符 - **NVD API v2.0 查询** — 每个检测到的服务都会与 NIST National Vulnerability Database 进行匹配;当精确的 CPE 没有匹配结果时,会回退到关键字搜索 - **Redis 缓存** — NVD 响应缓存 24 小时(空结果为 5 分钟),以保持在速率限制内并加快重复查询 - **3 级置信度评分** — 每个 CVE 匹配都带有高 / 中 / 低置信度标签,以便分析师确定优先级 - **CVSS 严重性映射** — 每个发现都显示分数和严重性级别(严重 / 高 / 中 / 低) - **Web 仪表盘** — 分页的扫描列表、按主机划分的详细视图、CVSS 分布图(Chart.js) - **PDF 报告导出** — 一键下载格式化的扫描报告(WeasyPrint) - **身份验证** — 所有视图均需登录;不提供对扫描数据的公开读取权限 - **Docker-compose 全栈** — PostgreSQL、Redis、Celery worker 和 Gunicorn Web 服务器通过一条命令串联在一起 ## 置信度系统 每个 CVE 匹配都会根据构建 CPE 时可用的证据量分配一个置信度级别。 | 级别 | 条件 | 含义 | |-------|-----------|---------------| | **高** | 产品名称 + 版本号 + Banner 文本同时存在 | CPE 是具体的;CVE 很可能适用于此确切版本 | | **中** | 存在产品名称;版本和/或 Banner 缺失 | CPE 使用通配符版本;CVE *可能*适用 | | **低** | 仅有端口号可用;未识别出产品 | CVE 与某种服务类型相关联,而非已确认的产品 | 高置信度的匹配在采取任何修复行动之前仍需人工审查。低置信度的匹配应被视为线索,而非最终的发现结果。 ## 技术栈 | 层级 | 技术 | |-------|-----------| | 语言 | Python 3.12 | | Web 框架 | Django 5.0 + Django REST Framework 3.15 | | 任务队列 | Celery 5.4 + Redis 7 | | 数据库 | PostgreSQL 16 | | 扫描器 | Nmap + python-nmap 0.7 + 原始 socket Banner 抓取器 | | CVE 数据 | NIST NVD API v2.0 | | 前端 | Django 模板 + Bootstrap 5 + Chart.js | | PDF 导出 | WeasyPrint 63 | | HTTP 服务器 | Gunicorn + WhiteNoise | | 容器化 | Docker + docker-compose | ## 快速开始 ``` # 1. 克隆仓库 git clone https://github.com/cuozzo/network-cve-matcher.git cd network-cve-matcher # 2. 配置环境变量 cp .env.example .env # 编辑 .env — 设置 SECRET_KEY, POSTGRES_PASSWORD,以及可选的 NVD_API_KEY # 3. 构建并启动所有服务 docker-compose up --build # 4. 打开应用 # 导航至 http://localhost:8000 ``` 首次运行时,Web 容器会自动执行 Django 迁移并创建数据库 schema。使用以下命令创建超级用户: ``` docker-compose exec web python manage.py createsuperuser ``` **可选 — NVD API key:** 如果没有 key,NVD 的速率限制为每 30 秒 5 次请求。在 `.env` 中设置 `NVD_API_KEY` 会将其提升至每 30 秒 50 次请求,这会显著减少具有许多开放端口的主机的扫描时间。 ## 限制与范围 此工具专为**初步分诊**设计,而非权威的漏洞评估。在根据结果采取行动之前,请了解以下限制: - **Nmap 版本检测并不精确。** 由 `-sV` 提取的版本字符串可能是错误的、不完整的或完全缺失的——尤其是对于自定义构建、已修补的软件包或代理后面的服务。 - **CPE 匹配是模糊的。** 供应商和产品名称是通过启发式方法规范化的。Nmap 服务名称与 NVD 的 CPE 字典之间的不匹配可能会导致误报和漏报。 - **无身份验证扫描。** 该工具无法检查已安装的软件包版本、注册表项或配置文件。它只能看到网络上暴露的内容。 - **无 UDP 扫描。** 当前实现中仅扫描 TCP 端口。 - **NVD 数据本身存在滞后。** 新披露的 CVE 可能不会立即出现在 NVD 中。该工具的时效性仅与 NVD 数据源相同。 - **CIDR 范围受到限制。** 大型子网将导致漫长的扫描时间和大量的 NVD API 使用;请做好相应规划。 - **结果不能替代专业的漏洞评估。** 使用它们来指导进一步的调查,而不是直接驱动修复决策。 ## 法律免责声明 ## 开源许可证 MIT
标签:CTI, CVE匹配, Docker, GPT, Python, 云存储安全, 安全防御评估, 搜索引擎查询, 无后门, 测试用例, 漏洞管理, 网络扫描, 请求拦截, 逆向工具