KeizerSec/netaudit
GitHub: KeizerSec/netaudit
网络漏洞扫描与风险优先级分析工具,整合 Nmap、Vulners 与 MITRE ATT&CK,提供 EPSS 与 CISA KEV 加权的 actionable 报告。
Stars: 0 | Forks: 0
# NetAudit
[](https://github.com/KeizerSec/netaudit/actions/workflows/ci.yml)





**网络扫描工具,它不仅限于发现 CVE,更会根据实际可利用性对它们进行优先级排序。**
交叉比对 CVSS、CISA KEV、FIRST EPSS 以及勒索软件活动数据,告诉你*先修补什么*以及*为什么*。

## 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, 加密, 威胁情报, 安全防御评估, 密码管理, 开发者工具, 插件系统, 无后门, 漏洞扫描器