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