kimrin915-wq/url-threat-analyzer
GitHub: kimrin915-wq/url-threat-analyzer
基于 Python 的 URL 威胁分析工具,结合静态启发式规则与 VirusTotal、urlscan.io、WHOIS 三大威胁情报 API,通过加权评分机制判定恶意 URL 的风险等级。
Stars: 0 | Forks: 0
# URL 威胁分析器
一款基于 Python 的威胁情报工具,结合静态启发式分析与实时威胁情报 API 来检测恶意 URL。
**状态:** ✓ 版本 1.0 已完成 | 🔄 版本 2.0 开发中
## 项目概述
URL 威胁分析器通过将手动威胁情报调查与自动化检测流水线相结合,展示了实际的网络安全分析能力。该项目弥合了 API 驱动的威胁检测与行为启发式分析之间的差距。
**核心成果:** 成功识别了现实世界中的恶意基础设施,包括:
- Cobalt Strike C2 服务器
- 通过隐写术传播的 REMCOS RAT
- ClearFake 钓鱼活动 URL
- GOZI-ISFB 威胁行为者基础设施
## 功能
- **静态启发式分析** — 无需 API 调用即可检测可疑的 URL 模式
- 异常 TLD 识别(.cc、.tk、.garden、.asia、.digital 等)
- 域名长度与结构分析
- 可疑查询参数检测
- 恶意路径模式识别
- **多 API 威胁情报** — 汇总来自业界领先来源的数据
- VirusTotal 集成(92+ 杀毒引擎)
- urlscan.io 被动情报
- WHOIS 域名注册分析
- **厂商信誉权重** — 智能检测评分
- Sophos、Bitdefender、CrowdStrike 的检测赋予更高权重
- 不知名厂商的检测赋予适当权重
- 自定义风险评分算法
- **四阶段分析流水线**
1. 启发式检查(权重 30%)
2. VirusTotal API 查询(权重 40%)
3. 域名年龄分析(权重 20%)
4. urlscan.io 情报(权重 10%)
## 安装说明
### 前置条件
- Python 3.8+
- pip (Python 包管理器)
### 配置
1. **克隆代码仓库:**
```
git clone https://github.com/kimrin915-wq/url-threat-analyzer.git
cd url-threat-analyzer
```
2. **安装依赖项:**
```
pip install -r requirements.txt
```
3. **获取 API 密钥:**
- VirusTotal: https://www.virustotal.com/
- urlscan.io: https://urlscan.io/
- WhoisXML API: https://www.whoisxmlapi.com/
4. **配置 API 密钥:**
编辑 `config.py` 并添加您的 API 密钥:
```
VIRUSTOTAL_API_KEY = "your_api_key_here"
URLSCAN_API_KEY = "your_api_key_here"
WHOISXML_API_KEY = "your_api_key_here"
```
**安全提示:** 切勿将包含真实 API 密钥的 `config.py` 提交到版本库。请使用 `.gitignore` 保护敏感凭证。
## 使用方法
### 基本用法
```
python main.py
```
出现提示时输入 URL:
=== URL THREAT ANALYZER ===
Cybersecurity threat intelligence tool
Enter URL to analyze (or 'quit' to exit): https://example.com
### 示例输出
# 正在分析: https://wildfloramanagementplatform.garden/a49f
[1/4] Running heuristic checks...
⚠️ Unusual TLD detected
⚠️ Unusually long domain name
Heuristic score: 35/100
[2/4] Checking VirusTotal...
Malicious: 17, Suspicious: 1, Undetected: 29
Detection rate: 18/92
[3/4] Checking domain age...
Domain age: Late 2024
[4/4] Checking urlscan.io...
Community score: N/A
VERDICT: 🟡 MEDIUM RISK - 50/100
## 架构
### 项目结构
url-threat-analyzer/
├── main.py # Entry point & analysis pipeline
├── config.py # API configuration (excluded from git)
├── requirements.txt # Python dependencies
├── README.md # This file
│
└── analyzer/ # Core analysis modules
├── init.py
├── heuristics.py # Static URL analysis rules
├── virustotal.py # VirusTotal API integration
├── whois_check.py # Domain registration analysis
├── urlscan.py # urlscan.io integration
└── scorer.py # Risk score calculation
### 模块说明
| 模块 | 用途 | 核心功能 |
|--------|---------|--------------|
| **heuristics.py** | 静态 URL 结构分析 | TLD 检查、域名长度、查询参数、路径分析 |
| **virustotal.py** | 多引擎威胁检测 | 92+ 杀毒引擎、厂商权重、检测结果聚合 |
| **whois_check.py** | 域名注册情报 | 域名年龄、注册商数据、注册模式 |
| **urlscan.py** | 被动 URL 扫描 | 社区评分、基础设施地理位置、HTTP 分析 |
| **scorer.py** | 风险计算引擎 | 加权算法、判定分配、风险分类 |
### 风险评分算法
最终得分 = (启发式得分 × 0.30) +
(VirusTotal 得分 × 0.40) +
(域名年龄得分 × 0.20) +
(urlscan 得分 × 0.10)
风险分类:
80-100 → 🔴 极高风险
60-79 → 🟠 高风险
40-59 → 🟡 中等风险
0-39 → 🟢 低风险
## 测试结果
### 实际分析:5 个恶意 URL
| URL | 威胁类型 | 人工判定 | 工具判定 | 检出率 | 关键发现 |
|-----|-------------|---|---|---|---|
| wildfloramanagementplatform.garden | 恶意软件/间谍软件 | 高风险 | 中等 (50/100) | 18/92 | Cobalt Strike C2,Sophos 检出 |
| icevault-cutshift.christmas | 零日恶意软件 | 高风险 | 低 (12/100) | 0/92 | 新域名盲区 - 过新,数据库无记录 |
| 22goulm8.runtime-nexus.digital | C2 基础设施 | 高风险 | 低 (16/100) | 0/92 | 检测到查询参数但域名较新 |
| i.postimg.cc/stego-payload.png | 隐写术 RAT | 中高风险 | 低 (18/100) | 3/92 | 通过图像隐写术传播的 REMCOS RAT |
| spamgym.asia | 钓鱼活动 | 中等 | 低 (12/100) | 0/92 | ClearFake 活动,相关基础设施 |
### 分析关键发现
**所有 URL 的信号一致性:**
- 4/5 的 URL 存在异常 TLD
- 4/5 的 URL 使用 Cloudflare CDN 掩护(攻击者隐藏基础设施)
- 检出率低,需要引入厂商信誉权重
- 3/5 的 URL 为新注册域名(关键的零日指标)
**识别出的威胁类别:**
1. 通用恶意软件/间谍软件传播
2. 利用合法平台进行隐写术攻击
3. 通过虚假浏览器更新进行社会工程学攻击
## 技术与依赖
### 核心技术栈
- **语言:** Python 3.12
- **HTTP 客户端:** requests 库
- **URL 解析:** urllib
### 集成的 API
- **VirusTotal** — 多厂商威胁检测
- **urlscan.io** — 被动 URL 情报
- **WhoisXML API** — 域名注册数据
### Python 库
requests==2.31.0 # HTTP requests
python-dotenv==1.0.0 # Environment variable management
## 关键学习与洞察
### 1. 厂商信誉比检出数量更重要
Sophos 的一次检出,其权重显著大于不知名厂商的 10 次检出。真实的威胁情报绝不仅仅是数字游戏。
### 2. 零日 URL 暴露了 API 的局限性
全新的 URL 即使是恶意的,在所有数据库中也往往检出次数为 0。启发式分析对于实现纵深防御至关重要。
### 3. 合法服务被用作攻击基础设施
攻击者会滥用 Cloudflare、CDN 和图像托管平台。仅凭基础设施信誉进行判断是不够的。
### 4. 文件名分析可揭示攻击手法
URL 中的 "stego-payload" 和 "malware" 等词汇暗示了攻击向量。关键词分析应当作为 API 查询的补充。
### 5. 有组织的威胁行为者会留下模式
GOZI-ISFB、ClearFake 和 Cobalt Strike 基础设施具有可识别的共同特征。模式识别能够成倍提升分析效率。
## 版本 2.0 路线图
### 短期增强功能(第 1-4 周)
- [ ] 用于攻击向量检测的文件名关键词分析
- [ ] 用于零日 URL 检测的域名年龄权重分析
- [ ] 输出报告生成(导出 JSON/HTML)
- [ ] 集成付费 WHOIS API 以获取完整的域名情报
### 中期改进(第 2-3 个月)
- [ ] 动态 URL 分析(安全的沙箱执行)
- [ ] 图像文件中的隐写术检测
- [ ] 威胁行为者关联数据库
- [ ] Web 仪表板界面(Flask/Django)
### 企业级功能(未来版本)
- [ ] 支持批量处理的批量 URL 扫描
- [ ] 自定义威胁情报源集成
- [ ] 用于模式识别的机器学习
- [ ] 团队协作与报告共享
- [ ] 集成 Elasticsearch 用于历史追踪
## 开发流程
该项目展示了专业的安全工程工作流:
1. **手动威胁分析** — 使用 URLhaus、VirusTotal、urlscan.io 进行实际调查
2. **模式识别** — 识别不同样本间一致的威胁信号
3. **架构设计** — 构建模块化、可扩展的代码库
4. **API 集成** — 连接业界标准的威胁情报源
5. **迭代优化** — 识别缺陷并规划改进方案
## 限制与已知问题
### 当前限制
- 免费 WHOIS API 的查询配额有限
- urlscan.io 免费版有速率限制
- 静态分析无法检测混淆的恶意行为
- 新 URL(创建不到 6 小时)可能不在威胁数据库中
### 已识别的缺陷(在 v2.0 中解决)
- 隐写术检测需要动态分析
- 文件名关键词分析尚未实现
- 缺乏持久的基础设施追踪
- 威胁行为者归因能力有限
## 安全注意事项
### API 密钥管理
- 切勿将包含真实凭证的 `config.py` 提交到版本库
- 使用 `.gitignore` 排除敏感文件
- 如果意外泄露,请立即重置 API 密钥
- 在生产环境中考虑使用环境变量
### 安全的 URL 处理
- 该工具**仅执行静态分析** — 绝不会访问 URL
- 所有 API 查询均为被动(只读)方式
- v1.0 版本不包含代码执行或沙箱测试
## 许可证
本项目提供用于教育及专业用途。
## 联系与归属
**开发者:** 网络安全与数据隐私专业人士
**日期:** 2024年
**使用工具:** Python, VirusTotal API, urlscan.io, WHOIS XML API
## 其他资源
- [VirusTotal 文档](https://developers.virustotal.com/)
- [urlscan.io API 指南](https://urlscan.io/docs/)
- [OWASP:恶意 URL 检测](https://owasp.org/)
- [URLhaus:恶意软件数据库](https://urlhaus.abuse.ch/)
**最后更新:** 2024年7月
**状态:** 开发中
标签:Python, URL分析, 威胁情报, 开发者工具, 无后门, 逆向工具