Joshua-Terna/phishing-detection-system
GitHub: Joshua-Terna/phishing-detection-system
基于机器学习与外部威胁情报的本地钓鱼检测系统,可对 URL 和电子邮件进行实时风险评分与分级。
Stars: 0 | Forks: 0
# 钓鱼检测器
一个本地钓鱼检测工作区,包含:
- 基于特征提取 + RandomForest 的 URL 钓鱼模型
- 基于 DistilBERT 的电子邮件钓鱼模型
- 用于 URL 和电子邮件扫描的 Streamlit UI
- 可选的 WHOIS、SSL、Google Safe Browsing 和 VirusTotal 检查
- 带有输入哈希处理的本地 SQLite 扫描历史记录
- 风险分级、敏感度控制、纯本地模式以及本地反馈收集
## 设置
1. 创建并激活你的 Python 环境。
2. 安装依赖项:
```
pip install -r requirements.txt
```
3. 安装用于测试和格式化的开发工具(可选但推荐):
```
pip install -r requirements-dev.txt
```
## 本地密钥
该应用支持从 `.env` 文件或操作系统环境变量进行本地 API key 配置。
在项目根目录下创建一个 `.env` 文件:
```
GOOGLE_SAFE_BROWSING_API_KEY=your_google_safe_browsing_api_key
VIRUSTOTAL_API_KEY=your_virustotal_api_key
```
文件 `.env` 会被 git 忽略,而 `.env.example` 仍可作为协作者的安全模板使用。
## 运行应用
```
streamlit run app.py
```
在 Windows 上,你也可以运行:
```
.\scripts\run_app.ps1
```
## 开发者命令
- 安装依赖项:`pip install -r requirements.txt`
- 运行单元测试:`pytest`
- 运行冒烟测试:`python smoke_test.py`
- 评估 URL 模型:`python evaluate_url_model.py`
- 评估电子邮件模型:`python evaluate_email_model.py`
- 检查 Python 语法:`python -m py_compile app.py analyzers.py config.py email_headers.py feature_extractor.py model_loader.py model_metadata.py reputation.py risk.py storage.py trust_signals.py train_url_model.py train_email_model.py evaluate_url_model.py evaluate_email_model.py smoke_test.py`
- 检查格式化:`black .`
- 检查代码检查:`ruff check .`
- 在 Windows 上运行所有本地检查:`.\scripts\run_checks.ps1`
VS Code 任务可在 `.vscode/tasks.json` 中找到。
## 可选的 API key
支持以下环境变量:
- `GOOGLE_SAFE_BROWSING_API_KEY`
- `VIRUSTOTAL_API_KEY`
如果缺少密钥,则会禁用信誉检查,但应用仍可进行 URL/电子邮件扫描。
VirusTotal 检查首先会尝试读取现有的 URL 判定结果。如果该 URL 未知,应用会将其提交进行分析,并在 VirusTotal 尚未完成处理时将判定结果报告为待定。
## 模型质量
训练脚本会写入包含数据集大小、特征、指标和训练时间的模型元数据 JSON 文件。评估脚本会写入包含以下内容的 JSON 报告:
- accuracy、precision、recall、F1、ROC-AUC
- 混淆矩阵
- 分类报告
- 假阳性示例
- 假阴性示例
URL 训练脚本使用经过校准的 RandomForest,因此模型分数的表现比原始森林概率更好。
## UI 功能
- `Strict`、`Balanced` 和 `Lenient` 敏感度级别
- `Local-only mode`,用于禁用 WHOIS、SSL、Google Safe Browsing 和 VirusTotal
- 用于演示的 URL 和电子邮件示例案例
- 支持 `.eml`、`.html` 和 `.txt` 上传
- 电子邮件标头异常检查
- 风险分数细分
- 针对正确、假阳性和假阴性结果的反馈按钮
## 生成的产物
经过训练的 URL 模型、DistilBERT checkpoint、模型元数据、评估报告、本地数据库、虚拟环境和缓存目录会被 git 忽略。如果这些内容已经被纳入版本控制,请一次性将它们从 git 索引中移除:
```
git rm -r --cached venv __pycache__ .pytest_cache .ruff_cache phishguard_logs.db phishing_model.pkl distilbert_email_model url_model_metadata.json email_model_metadata.json url_model_evaluation.json email_model_evaluation.json
```
然后在运行应用之前,在本地重新生成或恢复模型文件。
## 冒烟测试
运行基本的冒烟测试以验证导入和核心功能:
```
python smoke_test.py
```
## 持续集成
此仓库包含 `.github/workflows/ci.yml`。
CI 工作流会安装依赖项、运行语法检查、运行单元测试、使用 `black` 检查格式化、使用 `ruff` 进行代码检查,并执行 `smoke_test.py`。
标签:AI安全检测, Apex, Kubernetes, NLP, Python, 威胁情报, 开发者工具, 无后门, 机器学习, 网络钓鱼检测, 逆向工具