Pingu314/phishing_url_analyzer
GitHub: Pingu314/phishing_url_analyzer
一款用于SOC分诊的Python工具,通过提取URL特征并结合威胁情报进行量化风险评分,同时映射至MITRE ATT&CK技术。
Stars: 0 | Forks: 0
# 钓鱼 URL 分析器



一个 SOC 分诊工具,用于分析 URL 的钓鱼指标,使用威胁情报进行富化,并将发现结果映射到 MITRE ATT&CK 技术。
构建为一个不断增长的 SOC 分析师作品集中的 **项目 2** —— 在代码中演示
一级 (Tier-1) 分诊工作流程。
## 它的功能
为每个提交的 URL 运行一个五阶段的 pipeline:
1. **重定向链跟踪** - 跟踪跳转,检测链中段的域名切换
2. **特征提取** - 25+ 个信号:品牌冒充、域名仿冒 (typosquatting)、同形字 (homoglyphs)、熵值、云托管滥用、恶意软件扩展名、私有 IP 等
3. **威胁情报富化** - VirusTotal v3、URLScan.io、WHOIS 域名年龄(均为可选 - 在没有 API 密钥时会优雅降级)
4. **风险评分** - 加权的、基于规则的 0–100 分制,附带 `BENIGN`(良性) / `SUSPICIOUS`(可疑) / `MALICIOUS`(恶意) 裁定及置信水平
5. **MITRE ATT&CK 映射** - 使用相关的技术 ID 标记每个结果
## 安装
```
git clone https://github.com/Pingu314/phishing_url_analyzer.git
cd phishing_url_analyzer
pip install -e ".[dev]"
cp config/config.json.example config/config.json
# 编辑 config/config.json 并添加您的 API keys(可选)
```
## 使用方法
```
# Single URL
python -m src.main -u "http://paypa1.com/verify"
# Batch file
python -m src.main -f data/sample_urls/urls.txt
# 使用所有选项
python -m src.main -u "http://suspicious-site.com/login" --verbose --export --csv
```
| Flag | 描述 |
|------|-------------|
| `-u URL` | 要分析的单个 URL |
| `-f FILE` | 每行包含一个 URL 的文件(自动导出 JSON) |
| `-v` / `--verbose` | 显示完整的特征字典和情报输出 |
| `--export` | 将 JSON 报告导出到 `reports/` |
| `--csv` | 将 CSV 摘要导出到 `reports/` |
| `--config PATH` | 配置文件的路径(默认:`config/config.json`) |
## 评分原理
每个信号增加固定数量的分数。分数上限为 100。
| Signal | Weight | MITRE |
|--------|--------|-----------|
| VirusTotal 恶意引擎 | 20 × 引擎数(最高 40) | T1566 |
| URLScan 恶意裁定 | 20 | T1566 |
| 品牌冒充 | 18 | T1566.002 |
| 域名仿冒(同形字 / 编辑距离) | 18 | T1566.002 |
| 云托管滥用 | 18 | T1583.006 |
| 主机为私有 IP | 20 | T1583.005 |
| 子域名中包含品牌名 | 15 | T1566.002 |
| 路径中包含恶意软件扩展名 | 15 | T1105 |
| 使用 IP 作为主机 | 15 | T1583.005 |
| 重定向域名切换 | 12 | T1659 |
| 可疑 TLD | 10 | - |
| 新域名(< 30 天) | 8 | - |
| URL 中包含可疑关键词 | 8 | T1566.002 |
| 恶意路径关键词 | 8 | T1105 |
| URL 中包含 @ 符号 | 8 | - |
| 无 HTTPS | 7 | - |
| 高路径熵 | 6 | T1027 |
| 十六进制编码 | 6 | T1027 |
| 重定向参数 | 6 | T1659 |
| 高域名熵 | 5 | - |
| 路径中包含双斜杠 | 5 | - |
| 长 URL(> 75 个字符) | 4 | - |
| 多次重定向跳转(> 1 次) | 4 | T1027 |
| 多连字符(> 3 个) | 3 | - |
| 深层路径(> 4 层) | 3 | - |
| 多个子域名(> 2 个) | 3 | - |
| 非标准端口 | 3 | - |
**裁定阈值:** `BENIGN` 0-20 · `SUSPICIOUS` 21-49 · `MALICIOUS` 50–100
**置信水平:**
| Level | Condition |
|-------|-----------|
| HIGH | TI 确认为恶意并且触发了 3+ 个信号 |
| MEDIUM | 触发了 4+ 个信号或存在 TI 数据 |
| LOW | 触发了 2–3 个信号 |
| VERY_LOW | 触发了 0–1 个信号 |
## 架构
```
URL input
│
▼
RedirectFollower ──► redirect_chain (hops, domain switches, final URL)
│
▼
URLFeatureExtractor ──► features dict (25+ signals, original URL)
│
▼
ThreatIntelEnricher ──► intel dict (VirusTotal · URLScan.io · WHOIS)
│
▼
RiskScorer ──► score, verdict, confidence, breakdown
│
▼
map_to_mitre ──► [T1566.002, T1027, T1583.006, ...]
│
▼
ReportGenerator ──► reports/report_YYYYMMDD_HHMMSS.json / .csv
```
## 项目结构
```
phishing_url_analyzer/
├── src/
│ ├── main.py # CLI entrypoint
│ ├── url_extractor.py # Feature extraction (25+ signals)
│ ├── risk_scorer.py # Weighted scoring + confidence
│ ├── threat_intel.py # VirusTotal · URLScan.io · WHOIS
│ ├── redirect_follower.py # Redirect chain follower
│ ├── report_generator.py # JSON + CSV export
│ └── mitre_mapper.py # MITRE ATT&CK tag mapper
├── config/
│ ├── settings.py # All weights, lists, thresholds
│ └── config.json.example # API key template
├── tests/
│ └── test_analyzer.py # pytest test suite (74 tests)
└── data/
└── sample_urls/
└── urls.txt # Sample URLs for batch testing
```
## 运行测试
```
pytest tests/ -v
pytest tests/ --cov=src --cov-report=term-missing
```
## 免责声明
本工具为 **教育和作品集目的** 而构建,是 SOC 分析师学习路径(CompTIA Security+,TryHackMe SOC Level 1)的一部分。
- **请勿**使用此工具分析您没有权限测试的 URL
- 威胁情报查询(VirusTotal,URLScan.io)会将 URL 提交给第三方服务 —— 请勿在配置了 API 密钥的情况下分析敏感或内部 URL
- URLScan.io 提交的扫描设置为 `visibility: private`,但结果链接仅对提交账户可见
- 结果是基于启发式和规则的 —— 预期会出现误报和漏报
- 本工具**不**能替代生产环境的安全工具
## 路线图
本项目是模块化 SOC 分析师作品集的一部分。每个模块都是一个独立的工具,同时也会暴露稳定的 Python API 以供其他模块复用。
| # | Project | Status | 描述 |
|---|---------|-------|-------------|
| P1 | [`soc_threat_analyzer`](https://github.com/Pingu314/soc_threat_analyzer) | Done | IOC 富化与分诊 |
| P2 | `phishing_url_analyzer` | Done | 钓鱼 URL 分析 pipeline(本仓库) |
| P3 | `email_header_analyzer` | Next | SPF/DKIM/DMARC 解析,Received 链 IP 富化,通过 P2 分析嵌入的 URL |
| P4 | `soc_triage_suite` | Planned | 统一的 CLI + API,将所有模块组合到一个分诊界面中 |
标签:Ask搜索, Caido项目解析, Cloudflare, MITRE ATT&CK, Python, URL分析, VirusTotal, WHOIS, 同形字, 品牌仿冒, 域名抢注, 威胁情报, 安全分诊, 安全运营中心, 开发者工具, 搜索语句(dork), 无后门, 特征提取, 网络安全, 网络映射, 自动化分析, 跨站脚本, 逆向工具, 重定向跟踪, 隐私保护