siva404e/phishing-detector

GitHub: siva404e/phishing-detector

基于 Flask 构建的网络钓鱼检测与威胁情报仪表板,通过多层分析和加权评分快速识别可疑 URL。

Stars: 0 | Forks: 0

# PhishGuard — URL 威胁情报分析器 一个使用 **Flask** 和 **Python** 构建的网络钓鱼检测和威胁情报仪表板。通过多层检测分析可疑 URL:SSL/TLS 验证、WHOIS 域名年龄分析、VirusTotal API 集成、同形异义字欺骗检测以及基于风险的评分——所有这些都可以通过交互式 Web 仪表板展现出来。 ## 仪表板预览 ``` URL: http://paypa1-secure-login.tk/verify ┌─────────────────────────────────────────────┐ │ VERDICT: 🚨 CRITICAL │ SCORE: 87 / 100 │ ├─────────────────────────────────────────────┤ │ WHOIS │ Domain 3 days old (+50) │ │ SSL │ Self-signed certificate (+20) │ │ VirusTotal│ 12 engines flagged (+50) │ │ Structure │ Suspicious TLD (.tk) (+20) │ │ │ Homograph char detected (+30) │ └─────────────────────────────────────────────┘ ``` ## 功能 - **WHOIS 域名年龄分析** — 标记新注册的域名,这是网络钓鱼的关键指标 - **SSL/TLS 证书检查** — 验证颁发者、有效期,并检测自签名证书 - **VirusTotal API 集成** — 将 URL 与 70 多个安全引擎进行交叉比对 - **URL 结构分析** — 检测基于 IP 的 URL、可疑的 TLD(.tk、.ml、.xyz)、过多的子域名以及重定向把戏 - **同形异义字 / Unicode 欺骗检测** — 捕捉域名伪装中使用的相似字符(е 与 e,о 与 o) - **关键词分析** — 标记 URL 路径中与网络钓鱼相关的术语 - **风险评分引擎** — 生成 SAFE / LOW / MODERATE / HIGH / CRITICAL 判定的加权评分系统 - **扫描历史仪表板** — 跟踪并显示带有评分条和时间戳的最近 50 次扫描 - **CSV 导出** — 导出扫描结果,用于文档记录和事件报告 ## MITRE ATT&CK 覆盖范围 | 检测技术 | MITRE ID | 战术 | |-----------------------------|------------|---------------------| | 可疑 URL 分析 | T1566.002 | 初始访问 | | 同形异义字域名欺骗 | T1036.003 | 防御规避 | | 新注册域名 | T1583.001 | 资源开发 | | 无效/自签名 SSL | T1566.002 | 初始访问 | | URL 中的 IP 地址 | T1036 | 防御规避 | ## 技术栈 | 组件 | 技术 | |------------------|-----------------------------------| | 后端 | Python 3.x, Flask | | 威胁情报 | VirusTotal API v3 | | 域名分析 | python-whois | | SSL 检查 | Python ssl, socket (标准库) | | 前端 | HTML/CSS/JS (Flask 内联模板) | | 配置 | python-dotenv (.env) | ## 设置与安装说明 ### 1. 克隆代码库 ``` git clone https://github.com/siva404e/phishing-detector.git cd phishing-detector ``` ### 2. 安装依赖 ``` pip install -r requirements.txt ``` ### 3. 配置 API 密钥 ``` cp .env.example .env ``` 编辑 `.env` 并添加你的 VirusTotal API 密钥: ``` VIRUSTOTAL_API_KEY=your_api_key_here ``` 在 [virustotal.com](https://www.virustotal.com) 获取免费的 API 密钥 — 免费层允许 4 次请求/分钟。 ### 4. 运行仪表板 ``` python dashboard.py ``` 在浏览器中打开 **http://127.0.0.1:5000** ## 项目结构 ``` phishing-detector/ ├── dashboard.py # Flask app — routes, analysis logic, HTML template ├── utils.py # Helper classes: URLValidator, RiskScorer, DomainAnalyzer, PatternDetector ├── config.py # Environment variable loading (API keys) ├── requirements.txt # Python dependencies ├── .env.example # Environment variable template ├── .gitignore # Excludes .env and sensitive files └── LICENSE ``` ## 风险评分的工作原理 每个检测层都会贡献一个加权分数。分数最高为 100。 | 分数范围 | 判定 | 典型指标 | |-------------|--------------|--------------------------------------------------| | 70 – 100 | 🚨 CRITICAL | 全新域名 + 被 VirusTotal 标记 + 无 SSL | | 45 – 69 | ⚠️ HIGH | 可疑 TLD + 同形异义字 + 多个关键词 | | 25 – 44 | 🔍 MODERATE | 年轻域名或过期证书 | | 10 – 24 | 🔎 LOW | 轻微的 URL 异常 | | 0 – 9 | ✅ SAFE | 通过所有检查 | ## 用法示例 **扫描已知的钓鱼模式:** ``` Input: http://paypa1-secure-login.tk/verify/account Result: CRITICAL (score: 87) — suspicious TLD, homograph 'l→1', HTTP only, 3-day-old domain ``` **扫描合法网站:** ``` Input: https://github.com Result: SAFE (score: 2) — established domain, valid SSL, no threat indicators ``` ## 限制与已知缺陷 - VirusTotal 免费层限制为 4 次请求/分钟;扫描可能需要 15-30 秒 - 某些 TLD 的 WHOIS 数据可能不完整或不可用 - 扫描历史记录会在服务器重启时重置(计划实现基于文件的持久化) - 不能替代完整的沙箱分析(例如 ANY.RUN、Hybrid Analysis) ## 未来改进 - [ ] 持久化扫描历史记录(JSON / SQLite) - [ ] 从 CSV 输入进行批量 URL 扫描 - [ ] WHOIS 注册人滥用联系人查询 - [ ] 集成 AbuseIPDB 以获取 IP 信誉 - [ ] Docker 化部署 ## 作者 **Sivamuthu Selvadurai M** 专注于 SOC 运营、威胁情报和蓝队工具的网络安全爱好者。 ## 许可证 MIT 许可证 — 有关详情,请参阅 [LICENSE](LICENSE)。
标签:Flask, Python, URL分析, Web仪表盘, 威胁情报, 开发者工具, 无后门, 网络钓鱼检测, 逆向工具