KeizerSec/netaudit

GitHub: KeizerSec/netaudit

网络漏洞扫描与风险优先级分析工具,整合 Nmap、Vulners 与 MITRE ATT&CK,提供 EPSS 与 CISA KEV 加权的 actionable 报告。

Stars: 0 | Forks: 0

# NetAudit [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/KeizerSec/netaudit/actions/workflows/ci.yml) ![Python](https://img.shields.io/badge/Python-3.11+-3776AB?logo=python&logoColor=white) ![Docker](https://img.shields.io/badge/Docker-ready-2496ED?logo=docker&logoColor=white) ![Flask](https://img.shields.io/badge/Flask-REST_API-000000?logo=flask&logoColor=white) ![MITRE ATT&CK](https://img.shields.io/badge/MITRE_ATT%26CK-Correlation-E8001D) ![License](https://img.shields.io/badge/License-MIT-22c55e) **网络扫描工具,它不仅限于发现 CVE,更会根据实际可利用性对它们进行优先级排序。** 交叉比对 CVSS、CISA KEV、FIRST EPSS 以及勒索软件活动数据,告诉你*先修补什么*以及*为什么*。 ![NetAudit 报告](https://raw.githubusercontent.com/KeizerSec/netaudit/main/docs/img/demo_report_hero.png) ## 60 秒演示 ``` git clone https://github.com/KeizerSec/netaudit && cd netaudit docker build -t netaudit . docker run -p 5000:5000 netaudit # 在另一个终端 curl -X POST http://localhost:5000/scan \ -H "Content-Type: application/json" \ -d '{"ip": "192.168.1.1"}' open http://localhost:5000/rapport/192.168.1.1 ``` 三种输出格式:交互式 **HTML**、用于流水线的 **JSON**、用于审计的 **PDF A4**。 ## NetAudit 的独特之处 | 层级 | NetAudit 的功能 | 来源 | |---|---|---| | **已利用优先级排序** | 结合 CVSS + KEV + 勒索软件 + EPSS 的综合评分,IMMEDIATE/HIGH/… 级别,以及**每个 CVE 明确的原因解释** | CISA KEV · FIRST EPSS | | **ATT&CK 关联** | CVE → CWE → 技术,按 kill chain 划分的攻击路径,缓解措施 | 本地目录(79 项技术,47 项服务) | | **上下文检测** | 自动角色分类 + 12 项反模式规则,0–100 的安全态势评分 | 100% 本地,确定性 | | **历史基线** | 与上次扫描进行 Diff,critical/warning/positive 告警,KEV 升级 | 本地 SQLite | | **导出** | 暗色模式 HTML,原始 JSON,A4 PDF (reportlab),剪贴板 Markdown | — | 这一切都是**离线安全**的:网络故障时会优雅降级到缓存或仅使用 CVSS,绝不对表面抛出异常。 ## API 端点 | 方法 | 端点 | 描述 | 认证 | |---|---|---|---| | POST | `/scan` | 启动扫描,JSON body `{"ip": "..."}` | 是 (5次/分钟) | | GET | `/rapport/` | HTML — `?format=json\|pdf` | 是 | | GET | `/history` · `/history/` | 持久化历史记录 | 是 | | GET | `/version` · `/health` | 构建元数据 + 数据库探测 | 否 | 通过请求头 `X-API-Key` 进行认证(采用常数时间比较)。在生产环境中,`REQUIRE_API_KEY=1` 会在密钥为空时阻止启动。速率限制由 Flask-Limiter 实现(可通过 `RATELIMIT_STORAGE_URI` 配置存储)。`/rapport/` 会检查路径遍历。`/health` 暴露 `history_db: ok|degraded` 用于可观测性。 ## 配置 ``` cp .env.example .env # ajuster ensuite ``` | 变量 | 默认值 | 作用 | |---|---|---| | `API_KEY` | *(空)* | 认证;为空 = 无需认证的开发模式 | | `REQUIRE_API_KEY` | `0` | `1` = 如果 `API_KEY` 为空则拒绝启动(生产环境) | | `RATELIMIT_STORAGE_URI` | `memory://` | 速率限制后端(在多实例下使用 `redis://…`) | | `NMAP_TIMEOUT` | `300` | Nmap 超时(秒) | | `CACHE_DIR` | `./cache` | KEV/EPSS 缓存,TTL 24 小时 | | `HISTORY_DB_PATH` | `./netaudit.db` | SQLite 历史记录 | | `PRIORITIZER_ENABLED` | `1` | `0` = 严格离线(仅使用 CVSS) | | `BUILD_COMMIT` | *(空)* | 构建时注入的哈希值,通过 `/version` 暴露 | 所有变量均列在 `.env.example` 中。 ## 优先级评分是如何计算的 ``` priority = CVSS + 3.0 si CVE présente dans CISA KEV (exploitation avérée) + 1.5 si KEV flag ransomware (impact opérationnel élevé) + 2.0 × EPSS si EPSS ≥ 0.5 (probabilité forte) + 1.0 × EPSS si EPSS < 0.5 Niveaux : IMMEDIATE ≥ 13 HIGH ≥ 10 MEDIUM ≥ 6 LOW ≥ 3 INFO ``` **每个 CVE 都会显示其被赋予该级别的\*原因\***(`priority_reasons`)——没有黑盒。示例: - `CISA KEV — 已确认存在活跃利用` - `有记录的勒索软件活动` - `EPSS 0.88 — 30 天内被利用的概率极高` - `CVSS 9.8(严重)` 权重系数特意设计得简单易懂。它们反映了一项业务规则:*一个被活跃利用的 CVSS 7 漏洞,其优先级必须高于一个在野外未被利用的 CVSS 9 漏洞*。有关实现选择,请参阅 `src/prioritizer.py`。 ## 测试与 CI ``` pip install -r requirements.txt PRIORITIZER_ENABLED=0 pytest tests/ -q # rapide PRIORITIZER_ENABLED=0 pytest tests/ --cov=src --cov-report=term # avec couverture ``` **343 个密封的单元测试**(无网络调用,执行时间 < 1 秒) + **3 个端到端测试**,涵盖了完整的富化链(ATT&CK → 优先级排序 → 态势 → 基线 → SQLite → HTML 报告),且仅 mock 了 Nmap 的 I/O —— 这可以检测出任何单元测试都无法覆盖的装配(wiring)回归问题。通过 CI 检查**分支覆盖率 ≥ 80%**(`--cov-fail-under=80`,当前值为 87%)。在 Python 3.11 + 3.12 上运行 GitHub Actions,并在每次 push 时验证 `docker build`。 ## 结构 ``` netaudit/ ├── src/ │ ├── scan.py Moteur Nmap + parser XML + orchestration │ ├── webapp.py API REST Flask │ ├── prioritizer.py Score CVSS + KEV + EPSS, raisons explicables │ ├── attack_mapper.py Corrélation MITRE ATT&CK │ ├── profiler.py Classification rôle + 12 règles de posture │ ├── baseline.py Diff vs scan précédent │ ├── history.py Persistance SQLite │ ├── exports.py JSON + PDF (reportlab) │ └── data/ Catalogues ATT&CK + CWE + services + CVEs ├── scripts/ │ ├── refresh_known_cves.py Sync KEV → known_cves.json │ └── render_demo.py Rend un rapport de démonstration ├── tests/ 341 tests unitaires + d'intégration ├── docs/img/ Captures d'écran, rapport de démo ├── Dockerfile Image slim Python 3.11 + Nmap, HEALTHCHECK └── requirements.txt Versions fixées ``` ## 局限性 - 这是一个快速审计和学习工具 —— **不能**替代 Nessus / OpenVAS。 - ATT&CK 关联是基于启发式的;它提供线索,而非确定性结论。 - EPSS+KEV 优先级排序依赖于与 CISA/FIRST 的网络连接。在 `PRIORITIZER_ENABLED=0` 模式下,仅使用 CVSS。 - Nmap 缓存 `lru_cache` 是**进程内**的 —— 两个 Gunicorn worker 不共享缓存。在单机部署下可接受,若要水平扩展则需迁移至 Redis。 有关更改的详细信息,请参阅 [`CHANGELOG.md`](CHANGELOG.md)。 如需报告漏洞,请参阅 [`SECURITY.md`](SECURITY.md)。 ## 许可证 MIT — 请参阅 `LICENSE`。
标签:Docker, Flask, Python, REST API, 加密, 威胁情报, 安全防御评估, 密码管理, 开发者工具, 插件系统, 无后门, 漏洞扫描器