Abhishek-Sidde-Gowda/vulnerability-scanner

GitHub: Abhishek-Sidde-Gowda/vulnerability-scanner

融合 CVSS、EPSS 与 CISA KEV 三信号风险引擎的网络漏洞扫描器,帮助安全团队按真实威胁紧迫度排序修复优先级。

Stars: 0 | Forks: 0

# 漏洞扫描器 一款网络漏洞扫描器,配备**三信号风险引擎**,将 CVSS 严重性、EPSS 利用概率和 CISA KEV 主动利用数据结合为一个综合风险评分。 本项目作为面向 GRC 和 SOC 分析师岗位的安全作品集的一部分构建。 ## 功能 | 模块 | 功能说明 | |---|---| | **Port Scanner** | 并发 TCP connect 扫描,可配置线程(最大 100)、限速延迟 | | **Service Detector** | Banner 抓取、版本指纹识别、CPE 字符串生成 | | **CVE Lookup** | NIST NVD API 2.0(实时)+ 离线本地数据库(20 个精选 CVE) | | **EPSS Scoring** | FIRST.org Exploit Prediction Scoring System — 30 天内的利用概率 | | **CISA KEV Check** | 标记当前在野外被主动利用的 CVE | | **Risk Engine** | `CVSS × (1 + EPSS×1.5) × KEV_multiplier(2×)` → 综合评分 0–10 | | **Misconfig Probes** | 主动检查:Redis/MongoDB/ES 无认证、FTP 匿名访问、SMTP 中继、HTTP 头部、Jupyter、VNC | | **SSL/TLS Audit** | 证书过期、自签名、主机名不匹配、弱协议/加密算法、字母评级 | | **Threat Intel** | 将 CVE 映射到 APT 组织、勒索软件运营商、MITRE ATT&CK 技术 ID | | **Remediation Queue** | 按综合风险评分排序的优先行动计划 | | **Reports** | JSON + HTML 导出,仅追加的审计日志 | ## 安全护栏 此工具在每一个入口点都强制执行授权验证: - **私有 IP** (`10.x`, `172.16–31.x`, `192.168.x`, `127.x`) — 任意扫描 - **云元数据 IP** (`169.254.0.0/16`) — **永久硬封禁**,无法覆盖 - **公网 IP** — 除非传入 `--i-own-this` 标志否则将被阻止;该标志会触发交互式确认,要求用户准确输入目标 IP - **Scope 文件** — 为渗透测试项目预先授权目标范围,免去每次扫描的确认提示 - **审计日志** — 每次扫描都会追加到 `logs/audit.log`(时间戳、用户、目标、计数) ## 快速开始 ``` pip install flask pytest # 扫描 localhost python3 cli.py 127.0.0.1 # 扫描 LAN host,常见端口,保存 HTML 报告 python3 cli.py 192.168.1.10 --output report.html # 自定义端口范围 python3 cli.py 192.168.1.10 --ports 1-1024 # 外部 target(需要确认) python3 cli.py 203.0.113.5 --i-own-this # 离线模式(无 NVD/EPSS/KEV 网络调用) python3 cli.py 192.168.1.10 --no-nvd --no-epss --no-kev # Web dashboard → http://localhost:5001 python3 web/app.py ``` ## CLI 参考 ``` usage: cli.py [-h] [--ports PORTS] [--timeout TIMEOUT] [--threads THREADS] [--delay DELAY] [--i-own-this] [--scope SCOPE] [--nvd-api-key NVD_API_KEY] [--no-nvd] [--no-epss] [--no-kev] [--no-misconfig] [--no-ssl] [--no-vuln-check] [--output OUTPUT] [--json] [--quiet] targets [targets ...] Flags: --ports common (default) | all | 22,80,443 | 1-1024 --timeout per-port connection timeout in seconds (default: 1.0) --threads concurrent scan threads, max 100 (default: 50) --delay delay between port probes for rate limiting (default: 0) --i-own-this authorize scanning of public IP targets --scope JSON scope file with pre-authorized target ranges --nvd-api-key NIST NVD API key for higher rate limits --no-nvd skip live NVD lookup, use local DB only --no-epss skip EPSS scoring (offline mode) --no-kev skip CISA KEV catalog check --no-misconfig skip active misconfiguration probes --no-ssl skip SSL/TLS audit --output save report as .json or .html --json print full JSON report to stdout Exit codes: 0 clean / no KEV hits 1 authorization error (target denied) 2 one or more CVEs found in CISA KEV catalog ``` ## 风险评分公式 ``` composite = CVSS/10 × (1 + EPSS×1.5) × KEV_multiplier × 10 KEV_multiplier = 2.0 if CVE is in CISA KEV catalog, else 1.0 Result clamped to [0, 10] ``` **为什么需要三个信号?** | 单一信号 | 问题 | |---|---| | 仅 CVSS | 一个没有公开漏洞利用且未被主动利用的 CVSS-9 漏洞,其紧急程度不如一个今天正被勒索软件组织主动利用的 CVSS-6 漏洞 | | 仅 EPSS | 缺乏严重性信号 — CVSS-2 信息泄露的 90% 利用概率与 CVSS-9 RCE 的 90% 利用概率截然不同 | | 仅 KEV | 非黑即白(二元制)— 无法区分新列入 KEV 的低严重性问题和严重问题 | 将三者结合,可以得出一个反映**现实世界威胁**而不仅仅是理论严重性的评分。 ## Scope 文件格式 为渗透测试项目预先授权外部目标: ``` { "engagement": { "name": "Client Pentest Q3 2026", "authorized_by": "Client Name", "date": "2026-07-01" }, "authorized_targets": [ "192.168.1.0/24", "10.0.0.0/8", "203.0.113.5" ] } ``` ``` python3 cli.py 203.0.113.5 --scope scope.json ``` ## 运行测试 ``` python3 -m pytest tests/ -v # 40 项测试:target validator (22) + risk engine (16) + regression (2) ``` ## 项目结构 ``` vulnerability-scanner/ ├── scanner/ │ ├── target_validator.py # Authorization enforcement (scan everything goes through here) │ ├── port_scanner.py # TCP connect scan │ ├── service_detector.py # Banner grabbing + version fingerprinting │ ├── vuln_checker.py # NVD API + local CVE DB │ ├── epss_client.py # FIRST.org EPSS API │ ├── kev_checker.py # CISA KEV catalog │ ├── risk_engine.py # Composite risk scoring │ ├── misconfig_prober.py # Active misconfiguration checks │ ├── ssl_auditor.py # TLS certificate + protocol audit │ ├── threat_intel.py # CVE → threat actor mapping │ └── report_generator.py # JSON/HTML export + audit log ├── web/ │ ├── app.py # Flask dashboard (SSE live progress) │ └── templates/index.html # Dark-theme UI with Chart.js ├── data/ │ ├── cve_db.json # Offline CVE database (20 entries) │ └── threat_actors.json # CVE → APT/ransomware group mappings ├── tests/ │ ├── test_target_validator.py │ └── test_risk_engine.py └── cli.py # CLI entry point ``` ## 法律声明 **仅供授权使用。** 仅扫描您拥有或获得明确书面测试许可的系统。 未经授权的扫描可能会违反《计算机欺诈和滥用法》(CFAA)、《计算机滥用法》或您所在司法管辖区的同等法律。
标签:Flask, Python, 加密, 威胁情报, 安全规则引擎, 实时处理, 开发者工具, 插件系统, 无后门, 漏洞扫描器, 网络安全, 逆向工具, 隐私保护