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仪表盘, 威胁情报, 开发者工具, 无后门, 网络钓鱼检测, 逆向工具