MohmedhKA/AutoVulnScan

GitHub: MohmedhKA/AutoVulnScan

一款纯 Python 实现的隐蔽优先自动化网络漏洞扫描器,提供从主机发现到 CVE 关联的完整评估流水线。

Stars: 0 | Forks: 0

AutoVulnScan

隐蔽优先的自动化漏洞扫描器 — 纯 Python 实现。

Python 3.8+ Platform Windows and Linux NVD API NIST v2.0 Educational use only

## 概述 AutoVulnScan 从单个终端界面自动化了实用的漏洞评估工作流。它执行主机发现、端口扫描、服务和 OS 指纹识别、针对 NIST NVD 的 CVE 关联、可选的漏洞利用验证,并生成清晰的 HTML 和 JSON 报告 — 无需安装 Nmap 或任何二进制依赖。 该界面是一个**基于页面的 TUI**,支持完整的方向键导航,而非基于标志驱动的 CLI。 ## 流水线 ``` Host Discovery (optional) │ ▼ Port Scan ──────────────────────────────── stealth profile applied │ ▼ Service Identification ─────────────────── protocol-aware banner probes │ ▼ OS Detection ───────────────────────────── SMB negotiate handshake │ ▼ CVE Matching ───────────────────────────── NVD CPE → keyword → internal KB │ ▼ Exploit Validation ─────────────────────── non-destructive checks only │ ▼ Report Generation ──────────────────────── HTML + JSON ``` ## 功能 ### 隐蔽优先扫描 每次扫描都旨在最大限度地减少网络噪声: - 随机化探针和端口顺序 - 每个配置文件的延迟和抖动控制 - 有界的线程并发 - 被动优先的 Banner 抓取 - 每次连接的 Clean socket teardown - 基于 TCP 的主机存活性检测 — 无 ICMP 依赖 ### 隐蔽配置 | 配置文件 | 延迟 | 抖动 | 线程 | 超时 | 预期用途 | |----------|-------:|--------:|--------:|--------:|----------------------| | `normal` | 0.0 s | 0.0 s | 50 | 0.5 s | 快速内部审计 | | `quiet` | 0.05 s | 0.05 s | 25 | 1.0 s | 平衡隐蔽性 | | `ghost` | 0.2 s | 0.15 s | 10 | 1.5 s | 最大程度规避 | ### Windows 服务和 OS 准确性 标准的 Banner 抓取在 Windows RPC/SMB/NetBIOS 上会失败。AutoVulnScan 使用协议感知探测: - SMB 方言提取(例如,`SMB 3.1.1`) - 通过 SMB 协商进行 OS 代际分类(`modern` 与 `legacy`) - 通过实际的协议握手识别 RPC、NetBIOS 和 SMB,而非文本模式 ### 带误报控制的 CVE 情报 `cve_lookup/cve_match.py` 采用分层匹配策略: 1. **NVD CPE 查询** — 最精确,误报最少 2. **NVD 关键字查询** — 针对无法识别的服务的更广泛回退方案 3. **内部精选知识库** (`known_cves.py`) — 当 API 质量低或受速率限制时使用 支持组件: - **`cve_lookup/cpe_filter.py`**:根据平台相关性、服务主题相关性和版本范围相关性过滤原始 CVE 候选项,以减少噪声匹配。 - **`cve_lookup/known_cves.py`**:当 NVD 响应较弱、缺失或对于实际的服务级别匹配过于宽泛时使用的内部精选知识库。 每个结果随后通过以下流程: - 通过 `cpe_filter.py` 进行平台相关性过滤 - 服务主题检查(SMB、RPC、NetBIOS 主题门控) - 在有 CPE 范围数据可用时的版本范围过滤 - CVSS 阈值门控(默认为 `>= 7.0`) - **现代补丁状态抑制** — 当检测到的 OS 代际为 `modern` 时,标记为 `patched_in_modern=true` 的 CVE 将被抑制 ### 去重报告 每个端口的 CVE 结构在 JSON 中被完整保留,以供下游工具使用。通过 `deduplicate_cve_results()` 计算去重视图用于显示,合并各端口间重复的 CVE ID。HTML 报告为每个唯一 ID 显示一行 CVE,并带有合并的端口列(例如,`139, 445`)。 ### 安全的漏洞利用验证 - 验证是**非破坏性**且**面向置信度**的(而非利用) - 无 Payload 执行,无目标上的命令执行,无 Shell/持久化行为 - 仅使用连接/协议检查和服务时代指纹识别 当前支持的验证器: - `CVE-2011-2523` — vsftpd 2.3.4 后门模式检查 - `CVE-2004-2687` — distcc 暴露检查(仅安全协议前言) - `CVE-2007-2447` — Samba 旧版 username-map-script 时代风险检查 更多协议感知验证器计划在未来版本中发布。 ## 安装 **需要:** Python 3.8+ ``` git clone https://github.com/MohmedhKA/AutoVulnScan.git cd AutoVulnScan pip install -r requirements.txt ``` 依赖项:`requests`、`python-dotenv` ## Docker 您可以使用包含的 `Dockerfile` 在容器中运行 AutoVulnScan。 ### 构建镜像 ``` docker build -t autovulnscan . ``` ### 运行交互式 TUI ``` docker run --rm -it --env-file .env -v "$(pwd)/reports:/app/reports" autovulnscan ``` PowerShell 示例: ``` docker run --rm -it --env-file .env -v "${PWD}\reports:/app/reports" autovulnscan ``` ### 局域网扫描的网络说明 要扫描本地网络上的主机,请在可用时使用主机网络: ``` docker run --rm -it --network host --env-file .env -v "$(pwd)/reports:/app/reports" autovulnscan ``` 在 Docker Desktop 上,主机网络行为可能因平台/版本而异。如有必要,请使用桥接网络运行,并确保路由/防火墙规则允许访问您的目标。 ## 配置 ### NVD API 密钥 ``` cp .env.example .env ``` 编辑 `.env`: ``` NVD_API_KEY=your_key_here ``` 在 [nvd.nist.gov/developers/request-an-api-key](https://nvd.nist.gov/developers/request-an-api-key) 获取免费密钥。 密钥解析顺序: 1. 来自环境或 `.env` 的 `NVD_API_KEY` 2. `api.txt`(旧版回退) 如果密钥被拒绝(返回 `403` 或 `404`),扫描器将自动以未认证模式重试(速率限制为 30 秒内 5 次请求)。 ## 用法 ### 启动 ``` python main.py ``` ### TUI 流程 ``` 1. Welcome screen 2. Select target mode: a. Discover hosts on subnet → sweep + select from live hosts b. Enter target IP directly 3. Set port range and stealth profile 4. Pipeline runs phase by phase with live output 5. Results dashboard 6. Save HTML / JSON report ``` ### 键盘控制 | 按键 | 操作 | |------------|---------------------| | `↑` / `↓` | 导航菜单 | | `Enter` | 确认 / 选择 | | `ESC` | 返回 | ## 直接运行模块 每个模块均可独立调用以进行测试: ``` # Host discovery python scanner/network_sweep.py 192.168.1.0/24 # Port scan python scanner/port_scan.py 192.168.1.10 1 1024 # Service identification python scanner/service_id.py 192.168.1.10 135 139 445 # OS detection python scanner/os_detect.py 192.168.1.10 # NVD keyword lookup python cve_lookup/nvd_api.py "OpenSSH 8.2" # CVE matching from synthetic service map python cve_lookup/cve_match.py 192.168.1.10 445:SMB_3.1.1 135:Microsoft_Windows_RPC ``` ## 报告输出 | 文件 | 内容 | |------|----------| | `scan__.json` | 完整的每端口数据 — 服务、CVE、OS 信息、验证 | | `scan__.html` | 去重的 CVE 表格,优化可读性 | ## 路线图 / 未来工作 - 为更多服务/CVE 增加协议感知的非破坏性验证器 - 提高 OS 和服务指纹深度(同时保持隐蔽默认值) - 扩展针对具有嘈杂公开元数据服务的精选 CVE 覆盖范围 - 增强修复工作流的置信度评分和优先级排序 ## 项目结构 ``` AutoVulnScan/ ├── Dockerfile # Container runtime definition ├── .dockerignore # Keeps secrets/cache/reports out of build context ├── main.py # TUI application entry point ├── config.py # Stealth profiles, settings, API key loader ├── assets/ │ └── Logo.png # Project logo ├── scanner/ │ ├── network_sweep.py # TCP-based host discovery │ ├── port_scan.py # Stealth port scanner │ ├── service_id.py # Protocol-aware banner grabbing │ └── os_detect.py # SMB OS fingerprinting ├── cve_lookup/ │ ├── nvd_api.py # NIST NVD API client │ ├── cve_match.py # Multi-strategy CVE matching │ ├── cpe_filter.py # CPE-based relevance filtering │ └── known_cves.py # Internal curated CVE knowledge base ├── exploits/ │ └── validator.py # Non-destructive exploit validators ├── report/ │ └── generate.py # HTML + JSON report generator ├── requirements.txt ├── .env.example └── .gitignore ``` ## 安全说明 切勿提交敏感的运行时文件。`.gitignore` 已预先配置为排除: ``` .env api.txt cve_cache.json scan_*.html scan_*.json ``` ## 免责声明 AutoVulnScan 专为**教育目的和授权安全评估**而构建。未经明确许可扫描系统是非法的。请负责任地使用,并仅限于您拥有或拥有书面授权进行测试的基础设施。
标签:AST分析, CPE匹配, CVE漏洞库, HTML报告, JSON报告, NIST, NVD API, Python安全工具, Scrypt密钥派生, TUI, 云存储安全, 加密, 字符串匹配, 密码管理, 插件系统, 教育安全工具, 数据统计, 无依赖, 服务指纹识别, 漏洞利用验证, 漏洞扫描器, 端口扫描, 纯Python, 终端用户界面, 网络安全, 网络扫描, 自动化安全评估, 请求拦截, 逆向工具, 防御性安全, 隐形扫描, 隐私保护