swarnim-dev/sentinel-ai

GitHub: swarnim-dev/sentinel-ai

基于可解释机器学习的浏览器扩展,实时检测并拦截钓鱼网站和可疑邮件,附带用户友好的威胁解释。

Stars: 0 | Forks: 0

# Sentinel AI — 钓鱼预警系统 一款由 AI 驱动的浏览器扩展程序,利用可解释的机器学习实时检测钓鱼 URL 和可疑邮件。专为对网络安全感兴趣的学生打造。 ![Python](https://img.shields.io/badge/Python-3.10+-blue) ![FastAPI](https://img.shields.io/badge/FastAPI-0.100+-green) ![Chrome Extension](https://img.shields.io/badge/Chrome-Manifest%20V3-yellow) ## 功能特性 | 功能 | 描述 | |---|---| | **URL 分类器** | 在 Kaggle "Phishing Website Detector" 数据集上训练的 RandomForest(11K+ 样本,97% 准确率) | | **邮件文本扫描器** | TF-IDF + Naive Bayes 模型检测邮件正文中的钓鱼语言 | | **头部异常检查** | 检测 SPF/DKIM 失败以及 From/Reply-To 不匹配 | | **SHAP 可解释性** | 每次预测都附带通俗易懂的英文理由(例如 "The URL uses a raw IP address instead of a domain name") | | **网站拦截** | 钓鱼网站在**加载之前**即被拦截,并显示全屏插页式警告页面 | | **文件下载扫描器** | 下载时使用 6 层静态分析(魔数、熵值、可疑字符串等)自动扫描 10MB 以下的文件 | | **自动重训练反馈循环** | 模型从用户纠正中学习 —— 每积累 500 条报告后自动重新训练 | | **每周数字卫生报告** | 在本地跟踪浏览习惯,并显示包含安全评分、每日图表和标记域名的可视化仪表板 | ## 工作原理 ``` User visits a URL ↓ Background script intercepts BEFORE page loads ↓ Sends URL to FastAPI backend → RandomForest extracts 30 features → predicts ↓ ┌─ Safe → Page loads normally └─ Phishing → Page BLOCKED, interstitial shown with: • Risk percentage gauge • SHAP-generated plain-English reasons • "Go Back to Safety" / "I understand, proceed" buttons ↓ If user clicks "proceed" → feedback correction stored ↓ After 500 corrections → MODEL AUTO-RETRAINS • Merges original Kaggle data + user corrections • Retrains RandomForest (200 trees) • Hot-reloads model (no restart needed) • Clears feedback file, cycle repeats ``` ## 架构 ``` phishing_detector/ ├── backend/ │ ├── main.py # FastAPI server with all endpoints │ ├── train_url.py # Train URL model on Kaggle dataset │ ├── train_email.py # Train email text model │ ├── feedback_store.py # Feedback CSV storage + auto-retrain logic │ ├── models/ │ │ ├── url_model.py # 30-feature URL extractor + prediction │ │ ├── email_model.py # TF-IDF email classifier │ │ ├── headers_check.py # SPF/DKIM/Reply-To rule checks │ │ └── file_scanner.py # 6-layer static file analysis │ └── explain/ │ └── shap_explainer.py # SHAP explanations → plain English ├── extension/ │ ├── manifest.json # Chrome Manifest V3 │ ├── background.js # Intercepts navigation + logs scans + download scanner │ ├── content.js # Injects warning banners on pages │ ├── blocked.html / .js # Full-page interstitial for blocked sites │ ├── report.html / .js # Weekly Digital Hygiene Report dashboard │ ├── popup.html / .js # Extension popup dashboard │ └── styles.css # All styling └── data/ # Kaggle dataset (not in git) ``` ## 快速开始 ### 1. 克隆并安装依赖 ``` git clone https://github.com/swarnim-dev/sentinel-ai.git cd sentinel-ai python3 -m venv venv source venv/bin/activate pip install -r backend/requirements.txt ``` ### 2. 下载数据集 从 Kaggle 下载 [Phishing Website Detector](https://www.kaggle.com/datasets/eswarchandt/phishing-website-detector) 数据集,并将 `phishing.csv` 放入 `data/` 文件夹。 ### 3. 训练模型 ``` cd backend python train_url.py # Trains RandomForest URL classifier (~97% accuracy) python train_email.py # Trains TF-IDF email classifier ``` ### 4. 启动 API ``` cd backend uvicorn main:app --port 8000 ``` ### 5. 加载扩展程序 1. 在 Chrome/Brave/Edge 中打开 `chrome://extensions/` 2. 启用 **开发者模式** 3. 点击 **加载已解压的扩展程序** → 选择 `extension/` 文件夹 4. Sentinel 图标将出现在您的工具栏中 ## API 端点 | 方法 | 端点 | 描述 | |---|---|---| | `POST` | `/predict/url` | 扫描 URL → 风险评分 + SHAP 理由 | | `POST` | `/predict/email` | 扫描邮件正文 + 头部 → 风险评分 + 理由 | | `POST` | `/scan/file` | 上传文件(最大 10MB)进行静态恶意软件分析 | | `POST` | `/feedback` | 提交纠正(达到 500 条时触发重训练) | | `GET` | `/feedback/status` | 检查距离下次自动重训练的进度 | ### 示例 — 扫描 URL ``` curl -X POST http://127.0.0.1:8000/predict/url \ -H "Content-Type: application/json" \ -d '{"url": "http://192.168.1.1/paypal-login/secure"}' ``` ### 示例 — 检查重训练进度 ``` curl http://127.0.0.1:8000/feedback/status # → {"feedback_count": 42, "retrain_threshold": 500, "progress_percent": 8.4} ``` ## 自动重训练反馈循环 模型通过用户反馈随时间推移而改进: 1. 当用户在被拦截的页面上点击 **"I understand, proceed"** 时,系统会存储该 URL 的 30 个提取特征以及纠正信息 2. 纠正记录在 `backend/feedback_log.csv` 中累积 3. 当达到 **500 条纠正** 时,系统会自动: - 将原始的 11K Kaggle 样本与 500 条用户标记的纠正合并 - 重新训练 RandomForest 分类器(200 棵树) - 保存更新后的模型并热加载(无需重启服务器) - 清除反馈文件 —— 循环重置,等待下一个 500 条 ## 每周数字卫生报告 点击扩展弹窗中的 **"View Weekly Report"** 可查看: - **统计卡片** — 总扫描次数、安全站点、拦截的威胁、独立域名数 - **安全评分** — 颜色编码的环形图(优秀 / 良好 / 一般 / 较差) - **每日柱状图** — 最近 7 天的安全与钓鱼网站分类明细 - **标记最多的域名** — 您遇到的风险最高的网站 所有数据**存储在本地 Chrome 存储中** —— 不会发送到任何服务器。 ## 文件下载扫描器 您下载的每个文件(10MB 以下)都会通过 **6 个分析层**自动扫描: | 层级 | 检测内容 | |---|---| | **危险扩展名** | `.exe`, `.bat`, `.ps1`, `.vbs`, `.scr`, `.msi`, `.jar`, `.sh` 等 | | **双重扩展名** | 像 `invoice.pdf.exe` 这样伪装真实类型的文件 | | **魔数分析** | 检测文件扩展名与实际内容之间的不匹配(例如一个实际上是 `.exe` 的 `.pdf` 文件) | | **熵值分析** | 高香农熵 值表明存在加壳/加密的恶意软件 | | **可疑字符串** | PowerShell 命令、base64 解码、`eval()`、注册表编辑、反向 shell | | **Office 宏指标** | Office 文件中的 VBA 宏、`AutoOpen`、`Shell`、`CreateObject` | 扫描结果会在下载完成后立即以 **Chrome 通知** 的形式显示。 ``` # Manual test via API curl -X POST http://127.0.0.1:8000/scan/file -F "file=@suspicious_file.exe" ``` ## 技术栈 - **后端:** Python, FastAPI, scikit-learn, SHAP, Pandas - **ML 模型:** RandomForest (URL), Naive Bayes + TF-IDF (邮件) - **扩展程序:** JavaScript, Chrome Manifest V3 - **数据集:** [Kaggle Phishing Website Detector](https://www.kaggle.com/datasets/eswarchandt/phishing-website-detector) ## 许可证 MIT
标签:Apex, AV绕过, FastAPI, Manifest V3, Python, SHAP, URL分类, Web安全, XAI, 云安全监控, 人工智能, 反钓鱼, 可解释AI, 实时防护, 教育安全工具, 数据可视化, 无后门, 机器学习, 浏览器扩展, 用户模式Hook绕过, 网络威胁防御, 网络安全, 蓝队分析, 逆向工具, 邮件安全, 钓鱼检测, 随机森林, 隐私保护, 静态分析