stat-tom/vulnerability-scanner-python
GitHub: stat-tom/vulnerability-scanner-python
一款面向 SOC 的模块化 Python 漏洞扫描器,通过端口探测、服务识别与 NVD 漏洞查询,实现风险评分与结构化报告。
Stars: 0 | Forks: 0
# 漏洞扫描器 (Python)
一个模块化的 Python 漏洞扫描器,用于发现开放端口、识别运行中的服务、通过 NVD API 查询已知 CVE,并生成带风险评分的报告。该工具旨在展示与 SOC 相关的技能:检测逻辑、威胁情报集成、风险分析和自动化报告。
## ✅ 功能
- **端口扫描** — 多线程 TCP 连接扫描并抓取横幅
- **服务识别** — 通过横幅分析和知名端口映射识别服务
- **CVE 查询** — 查询 NIST NVD REST API 获取已知漏洞
- **风险评分** — 基于服务类型、CVE 严重性和补丁状态进行加权风险分析
- **报告生成** — 生成带颜色编码风险等级的 HTML 输出,以及用于 SIEM 集成的 JSON 输出
## ✅ 项目结构
```
vulnerability-scanner/
├── scanner/
│ ├── port_scanner.py # TCP connect port scanning with threading
│ ├── service_detector.py # Service identification via banners & known ports
│ └── vuln_lookup.py # CVE lookup against the NVD REST API
├── analyzer/
│ └── risk_analyzer.py # Risk scoring and categorization
├── reports/
│ └── report_generator.py # HTML and JSON report output
├── main.py # Interactive entry point
├── enums.py # Shared enumerations (RiskLevel)
├── protocols.py # Protocol interfaces for dependency inversion
├── Dockerfile
├── requirements.txt
└── README.md
```
## ✅ 安装
```
pip install -r requirements.txt
```
## ✅ 使用
```
python main.py
```
系统会提示你输入目标:
```
Paste target URL: https://scanme.nmap.org
```
该扫描器接受完整 URL(例如 `https://scanme.nmap.org/path`)或纯主机名 / IP 地址。它会自动提取主机,扫描 1–1024 端口,识别服务,查询已知 CVE,并在 `output/` 目录中生成 HTML 报告。
扫描完成后,控制台摘要会包含生成的报告完整文件路径,以便快速访问。
## ✅ Docker
```
# 构建
docker build -t vuln-scanner .
# 运行(交互式提示)
docker run --rm -it -v $(pwd)/output:/app/output vuln-scanner
```
## ✅ 示例输出
### 控制台
```
==================================================
Scan complete: scanme.nmap.org
Open ports: 3
[MEDIUM] Port 22 — SSH (score: 4.5)
[LOW] Port 80 — HTTP (score: 2.0)
[LOW] Port 443 — HTTPS (score: 1.0)
==================================================
HTML Report: /path/to/output/scan_scanme.nmap.org_20260409_120000.html
JSON Report: /path/to/output/scan_scanme.nmap.org_20260409_120000.json
```
### HTML 报告

### JSON 报告(SIEM 集成)
每次扫描还会生成一个结构化 JSON 文件,用于导入 SIEM 平台(Splunk、Elastic、QRadar、Microsoft Sentinel 等)。JSON 模式提供以下字段:
| 字段 | 描述 |
|------|------|
| `schema_version` | 报告格式版本,用于解析器兼容性 |
| `scan.target` | 扫描的目标主机 |
| `scan.timestamp` | ISO 8601 UTC 时间戳 |
| `summary` | 风险等级计数,用于仪表板组件 |
| `findings[].port` | 端口号 |
| `findings[].service` | 检测到的服务名称 |
| `findings[].risk_level` | `CRITICAL` / `HIGH` / `MEDIUM` / `LOW` / `INFO` |
| `findings[].risk_score` | 数值综合评分 |
| `findings[].vulnerabilities[].cve_id` | CVE 标识符 |
| `findings[].vulnerabilities[].cvss_score` | CVSS v3 分数 |
示例片段:
```
{
"schema_version": "1.0",
"report_type": "vulnerability_scan",
"scan": {
"target": "scanme.nmap.org",
"timestamp": "2026-04-09T12:00:00+00:00",
"ports_scanned": "1-1024",
"total_findings": 3
},
"summary": { "MEDIUM": 1, "LOW": 2 },
"findings": [
{
"port": 22,
"service": "SSH",
"risk_level": "MEDIUM",
"risk_score": 4.5,
"factors": ["Service version unknown — patch status unverifiable"],
"vulnerabilities": []
}
]
}
```
若要将报告转发到 SIEM,可将日志采集器(如 Filebeat、Splunk Universal Forwarder)指向 `output/` 目录,或通过 HTTP 事件收集器 POST JSON 文件到 SIEM。
## ✅ SOC 视角
该工具模拟了 SOC 分析员在分类和调查期间的工作流程:
### 为何开放端口很重要
每个开放端口都是一个潜在的攻击面。攻击者会扫描开放端口以识别可利用的服务。Telnet(23)、FTP(21)和 RDP(3389)经常被攻击,因为它们通常存在弱认证或已知漏洞。识别开放端口是了解组织暴露面的第一步。
### 为何 CVE 查询很重要
将发现的服务映射到已知 CVE,类似于威胁情报源在 SIEM 中丰富告警的方式。SOC 分析员会将指示器数据(开放服务、软件版本)与漏洞数据库关联,以判断主机是否运行可被利用的软件。该工具中的 NVD API 集成自动化了这一增强步骤。
### 风险如何计算
风险评分模型考虑了三个加权因素:
| 因素 | 权重 | 理由 |
|------|------|------|
| 固有高风险服务 | +1.5 到 +3.0 | Telnet、FTP、VNC 等服务历史上常被利用 |
| 已知 CVE(最大 CVSS) | +0 到 +10.0 | 匹配漏洞中最高 CVSS 分数 |
| 未知版本 | +1.0 | 无法验证补丁状态会增加不确定性 |
综合得分映射到风险等级:**CRITICAL**(≥ 9.0)、**HIGH**(≥ 7.0)、**MEDIUM**(≥ 4.0)、**LOW**(≥ 0.0)。
该方法类似于 SIEM 平台(例如 Splunk、QRadar)分配告警严重级别的方式——结合资产上下文、威胁情报和不确定性因素。
## ✅ 免责声明
本工具仅限**授权安全测试和道德使用**。在扫描任何网络或系统之前,请务必获得明确授权。
愉快地挖掘吧!
标签:API安全, Banner抓取, CVE查询, CVE漏洞, DNS查询工具, Docker, Homebrew安装, HTML报告, JSON输出, NVD API, Python, Qt框架, requirements.txt, SEO关键词, SIEM集成, TCP连接扫描, URL短链接分析, 依赖倒置, 反取证, 多模态安全, 威胁情报, 安全评估, 安全防御评估, 开发者工具, 数据统计, 无后门, 服务探测, 服务识别, 模块化, 端口扫描, 端口扫描器, 自动化报告, 请求拦截, 逆向工具, 风险分析, 风险分级, 风险评分