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, 加密, 威胁情报, 安全规则引擎, 实时处理, 开发者工具, 插件系统, 无后门, 漏洞扫描器, 网络安全, 逆向工具, 隐私保护