Mr20x20/pyshield-threat-intel
GitHub: Mr20x20/pyshield-threat-intel
PyShield 威胁情报引擎是一个全自动化漏洞扫描器,通过端口扫描、Banner 抓取、服务版本检测和 NVD CVE 查询,生成结构化风险报告以支撑漏洞管理。
Stars: 0 | Forks: 0
# 🔍 PyShield 威胁情报引擎
一个全自动化的漏洞扫描器,它接收目标 IP,发现开放端口,通过抓取 banner 识别运行中的服务及其版本,并查询 NIST 国家漏洞数据库(NVD)API 以查找已知的 CVE —— 从而生成结构化的风险报告。
作为 **PyShield** 安全产品组合的一部分,旨在接入 PyShield SIEM 仪表板。
## 🏗️ 流水线架构
```
Target IP
│
▼
┌─────────────┐
│ scanner.py │ Multithreaded TCP port scan (100 threads)
└──────┬──────┘
│ open ports
▼
┌─────────────┐
│ banner.py │ Banner grabbing — reads service self-identification
└──────┬──────┘ SSH/FTP/SMTP: reads immediately
│ HTTP/HTTPS: sends HEAD request first
│ raw banners
▼
┌──────────────┐
│ detector.py │ Regex parsing → service name + version
└──────┬───────┘ "SSH-2.0-OpenSSH_8.2p1" → ("openssh", "8.2p1")
│
▼
┌──────────┐
│ cpe.py │ CPE 2.3 string generation
└──────┬───┘ ("openssh","8.2p1") → "cpe:2.3:a:openbsd:openssh:8.2p1:*:*:*:*:*:*:*"
│
▼
┌──────────┐
│ nvd.py │ NVD API v2 → CVEs + CVSS scores + references
└──────┬───┘
│
▼
┌──────────────────┐
│ risk_engine.py │ Weighted scoring → risk level + ranked findings
└──────┬───────────┘
│
▼
┌──────────────────────────┐
│ threat_intel_report.json │ Structured output → PyShield SIEM
└──────────────────────────┘
```
## 📋 示例输出
```
=======================================================
THREAT INTELLIGENCE REPORT
Target : 192.168.1.1
Timestamp : 2026-06-27 10:00:00
Risk Score : 87
Risk Level : CRITICAL
=======================================================
Open Ports : 4
CVEs Found : 12
Critical : 3
High : 5
-------------------------------------------------------
SUMMARY:
• Target: 192.168.1.1 | Risk Score: 87 | Level: CRITICAL
• 4 open port(s) found, 12 CVE(s) identified.
• CRITICAL: 3 critical CVE(s) — immediate action required.
• Critical ports exposed: 22, 3389
• Port 22 (openssh 8.2p1) → CVE-2023-38408 CVSS 9.8 CRITICAL
-------------------------------------------------------
```
## 🚀 快速开始
### 1. 克隆仓库
```
git clone https://github.com/Mr20x20/pyshield-threat-intel.git
cd pyshield-threat-intel
```
### 2. 创建虚拟环境
```
python -m venv venv
# Windows
venv\Scripts\activate
# Linux / macOS
source venv/bin/activate
```
### 3. 安装依赖
```
pip install -r requirements.txt
```
### 4. 设置 NVD API 密钥
在此获取免费的 API 密钥:https://nvd.nist.gov/developers/request-an-api-key
在项目根目录下创建一个 `.env` 文件:
```
NVD_API_KEY=your-api-key-here
```
如果没有密钥,该工具仍然可以工作,但请求频率会被限制为每 30 秒 5 次请求。
### 5. 运行扫描
```
# 扫描 localhost
python run.py 127.0.0.1
# 使用自定义端口范围扫描特定主机
python run.py 192.168.1.1 1 1024
# 扫描前 512 个端口
python run.py 192.168.1.1 1 512
```
## 📁 项目结构
```
pyshield-threat-intel/
├── run.py # Entry point — orchestrates full pipeline
├── scanner.py # Multithreaded TCP port scanner
├── banner.py # Banner grabbing per service protocol
├── detector.py # Regex-based service/version detection
├── cpe.py # CPE 2.3 string generator
├── nvd.py # NVD API v2 client
├── risk_engine.py # Scoring engine + risk assessment
├── config.py # All settings in one place
├── requirements.txt
└── reports/ # Auto-created — output JSON reports
└── threat_intel_report.json
```
## 🔎 支持的服务
| 服务 | Banner 识别 | CPE 生成 |
|---|---|---|
| OpenSSH | ✅ 从 banner 获取版本 | ✅ |
| Dropbear SSH | ✅ 从 banner 获取版本 | ✅ |
| nginx | ✅ 从 Server 标头获取 | ✅ |
| Apache HTTP | ✅ 从 Server 标头获取 | ✅ |
| Microsoft IIS | ✅ 从 Server 标头获取 | ✅ |
| ProFTPD | ✅ 从 banner 获取版本 | ✅ |
| vsftpd | ✅ 从 banner 获取版本 | ✅ |
| Postfix SMTP | ✅ 从 banner 获取版本 | ✅ |
| MySQL / MariaDB | ✅ 从握手信息获取版本 | ✅ |
| PostgreSQL | ✅ | ✅ |
| Redis | ✅ 通过 PONG 检测 | ✅ |
| MongoDB | ✅ | ✅ |
| VNC | ✅ RFB 版本 | ✅ |
| RDP | 基于端口的回退检测 | ✅ |
| Telnet | ✅ | ✅ |
## ⚙️ 配置
`config.py` 中的所有设置:
| 设置 | 默认值 | 描述 |
|---|---|---|
| `SCAN_START_PORT` | 1 | 首个扫描端口 |
| `SCAN_END_PORT` | 1024 | 最后一个扫描端口 |
| `SCAN_THREADS` | 100 | 并行扫描线程 |
| `BANNER_TIMEOUT` | 3s | 每个 banner 的超时时间 |
| `NVD_MAX_CVES` | 10 | 每个服务的最大 CVE 数量 |
| `NVD_RATE_LIMIT_DELAY` | 0.7s | NVD 请求之间的延迟 |
## 📊 风险评分
| CVE 严重性 | CVSS 分数 | 增加分数 |
|---|---|---|
| CRITICAL | ≥ 9.0 | +25 |
| HIGH | ≥ 7.0 | +15 |
| MEDIUM | ≥ 4.0 | +7 |
| LOW | ≥ 0.1 | +2 |
关键端口(22、3389、3306、6379、27017 等)将获得 **1.5 倍乘数**。
| 总分 | 风险等级 |
|---|---|
| 0 | CLEAN |
| 1–9 | LOW |
| 10–29 | MEDIUM |
| 30–59 | HIGH |
| 60+ | CRITICAL |
## 🔗 SIEM 集成
输出的 `threat_intel_report.json` 兼容
[PyShield 仪表板](https://github.com/Mr20x20/PyShield_Dashboard)
流水线。报告结构与现有的传感器输出格式相匹配。
## 🛠️ 技术栈
- **语言:** Python 3.11+
- **网络:** Python `socket`、`ssl`(标准库)
- **HTTP:** `requests`
- **CVE 数据:** NIST NVD API v2
- **标准:** CPE 2.3 (NIST)
## 🔐 法律与道德声明
本工具专为**授权的安全评估**设计。
请仅扫描您拥有或获得明确书面测试许可的系统。
未经授权的端口扫描在您所在的司法管辖区可能是非法的。
## 📜 许可证
MIT 许可证 —— 有关详情,请参阅 [LICENSE](LICENSE)。
## 👤 作者
**Mr20x20** — 安全工程爱好者
GitHub: [github.com/Mr20x20](https://github.com/Mr20x20)
## 🔗 相关项目
- [PyShield 仪表板](https://github.com/Mr20x20/PyShield_Dashboard) — 实时 SIEM 仪表板
- [PyShield 蜜罐](https://github.com/Mr20x20/pyshield-honeypot) — 攻击者分析器
标签:DNS查询工具, 加密, 漏洞扫描器, 端口扫描器, 网络扫描器, 逆向工具