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分析, 威胁情报, 开发者工具, 无后门, 逆向工具