cheng-jun-hao/ai-phishing-detector

GitHub: cheng-jun-hao/ai-phishing-detector

该项目是一个基于 CNN+BiLSTM 模型与规则引擎的实时钓鱼网站检测系统,通过 Chrome/Edge 浏览器扩展和 Flask 后端在页面加载前拦截高风险钓鱼攻击。

Stars: 1 | Forks: 0

# AI Phishing Website Detector [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Python](https://img.shields.io/badge/Python-3.10+-blue.svg)](https://www.python.org/downloads/) [![Chrome Extension](https://img.shields.io/badge/Chrome%20Extension-Manifest%20V3-green.svg)](https://developer.chrome.com/docs/extensions/mv3/intro/) [![PyTorch](https://img.shields.io/badge/PyTorch-2.4+-ee4c2c.svg)](https://pytorch.org/) [![Accuracy](https://img.shields.io/badge/Accuracy-98.97%25-brightgreen.svg)](#model-performance) **[中文文档](README.zh-CN.md)** | **English** ## 目录 - [概述](#overview) - [核心功能](#key-features) - [架构](#architecture) - [模型性能](#model-performance) - [快速开始](#quick-start) - [安装](#installation) - [使用方法](#usage) - [API 参考](#api-reference) - [模型训练](#model-training) - [配置](#configuration) - [项目结构](#project-structure) - [技术栈](#tech-stack) - [贡献](#contributing) - [许可证](#license) - [致谢](#acknowledgments) - [免责声明](#disclaimer) ## 概述 AI Phishing Website Detector 是一个全栈安全解决方案,可以实时保护用户免受钓鱼攻击。它利用了一个**混合检测引擎**,该引擎结合了: - **Rule Engine** — 10 条静态规则,用于快速 URL 预筛查 - **URL CNN+BiLSTM** — 用于 URL 分类的字符级深度学习模型 - **Form Analyzer** — 对敏感输入字段和表单 action 进行 DOM 级检查 该系统作为 **Chrome/Edge 浏览器扩展** (Manifest V3) 运行,并由 **Flask API server** 提供支持,可拦截导航请求并在高风险钓鱼网站加载前将其拦截。 ### 检测流水线 ``` User visits URL → Extension intercepts navigation │ ▼ Backend Rule Engine fast pre-screen │ │ │ High Risk Suspicious Low Risk │ │ │ ▼ ▼ ▼ Block Hybrid Allow Detection │ ┌──────────────┼──────────────┐ ▼ ▼ ▼ URL CNN Form Analysis Brand Trust │ │ │ └──────────────┼──────────────┘ ▼ Dynamic Weight Fusion │ ▼ Detection Result ``` ## 核心功能 - **实时防护** — 通过 `webNavigation` API 在页面加载前拦截并分析 URL - **三级分流** — 低风险(允许) → 可疑(警告横幅) → 高风险(拦截) - **混合决策引擎** — 融合 Rule Engine (0.40)、CNN model (0.40) 和 Form Analysis (0.20) - **动态权重分配** — 当某个模块不可用时自动重新分配权重 - **域名信任机制** — 降低已知品牌域名的 CNN 假阳性 - **模型热重载** — 无需重启服务即可更新模型权重 - **双模式 UI** — 普通模式(简洁)和专家模式(详细指标) - **API 限流** — 防止滥用(检测接口 60 req/min,批量接口 10 req/min) - **Docker 支持** — 带有健康检查的容器化部署 - **WebSocket 支持** — 通过 WebSocket 协议进行实时检测 ## 架构 ``` ┌─────────────────────────────────────────────────────────┐ │ Browser Extension (Manifest V3) │ │ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │ │ │ popup UI │ │ blocked │ │ background.js │ │ │ │ (popup) │ │ (block) │ │ (nav intercept+comm) │ │ │ └──────────┘ └──────────┘ └──────────┬───────────┘ │ │ │ HTTP/WS │ └─────────────────────────────────────────┼────────────────┘ │ ┌─────────────────────────────────────────┼────────────────┐ │ Python Backend (Flask) │ │ │ ┌──────────────────────────────────────▼─────────────┐ │ │ │ API Routes + WebSocket │ │ │ └──────┬─────────────────────────────────────────────┘ │ │ │ │ │ ┌──────▼──────┐ ┌──────────┐ ┌────────────────────┐ │ │ │ Rule Engine │ │ Form │ │ Hybrid Detector │ │ │ │ (10 rules) │ │ Analyzer │ │ (Rule+CNN+Form) │ │ │ └─────────────┘ └──────────┘ └─────────┬──────────┘ │ │ │ │ │ ┌───────────────────────────────────────▼────────────┐ │ │ │ URL CNN+BiLSTM + Screenshotter │ │ │ └────────────────────────────────────────────────────┘ │ └──────────────────────────────────────────────────────────┘ ``` ## 模型性能 基于 [PhiUSIIL Phishing URL Dataset](https://archive.ics.uci.edu/dataset/967/phiusiil+phishing+url+dataset) 进行训练和评估: | 指标 | 值 | |--------|-------| | **Accuracy** | 98.97% | | **Precision** | 99.28% | | **Recall** | 98.31% | | **F1 Score** | 98.79% | | **AUC-ROC** | 0.9988 | - **测试样本**:35,306 个 URL(15,078 个钓鱼网站,20,228 个合法网站) - **假阳性率**:0.53%(108 个合法网站被误判) - **假阴性率**:1.69%(255 个钓鱼网站被漏报) ## 快速开始 ### 前置条件 - Python 3.10+ - Chrome 或 Edge 浏览器(需支持开发者模式) - 建议 8GB+ RAM ### 1. 克隆并安装后端 ``` git clone https://github.com/cheng-jun-hao/ai-phishing-detector.git cd phishing-detector pip install -r requirements.txt # 为表单分析安装 Playwright browser playwright install chromium ``` ### 2. 启动后端服务 ``` # 选项 A:直接运行 python -m backend.app # 选项 B:Docker 部署 docker-compose up -d --build ``` 服务将在以下地址提供: - HTTP API:`http://127.0.0.1:5000/api` - 健康检查:`http://127.0.0.1:5000/api/health` - WebSocket:`ws://127.0.0.1:5000/ws` ### 3. 加载浏览器扩展 1. 打开 Chrome/Edge 并导航至 `chrome://extensions/` 2. 启用右上角的 **开发者模式** 3. 点击 **加载已解压的扩展程序** 4. 选择 `extension/` 目录 ### 4. 开始检测 - 点击扩展图标手动检查 URL - 正常浏览 — 高风险钓鱼网站将被自动拦截 - 可疑网站将在顶部显示黄色警告横幅 ## 安装 ### 后端依赖 该项目需要以下 Python 包(详见 [`requirements.txt`](requirements.txt)): | 类别 | 包 | |----------|----------| | Web 框架 | Flask, Flask-CORS, Flask-SocketIO | | AI/ML | PyTorch, NumPy, Pandas, scikit-learn | | 浏览器自动化 | Playwright | | HTML 解析 | BeautifulSoup4 | | 字符串匹配 | python-Levenshtein | | 生产环境 | Gunicorn, psutil | ### Docker 部署 ``` # 构建并启动 docker-compose up -d --build # 查看日志 docker-compose logs -f backend # 停止 docker-compose down # 热重载模型 curl -X POST http://localhost:5000/api/model/reload ``` ## 使用方法 ### 手动检测(弹窗) 1. 点击工具栏中的扩展图标 2. 输入 URL 或使用当前页面的 URL 3. 点击 **检测** 4. 查看结果: - **普通模式**:风险等级和简要描述 - **专家模式**:详细分数、匹配规则、AI 置信度 ### 实时防护 - 默认开启 - 自动拦截高风险钓鱼网站 - 对可疑网站显示警告横幅 - 允许安全网站正常加载 ### 设置 - 在普通模式/专家模式之间切换 - 启用/禁用实时检测 - 配置后端服务 URL - 查看检测历史 ## API 参考 | 方法 | Endpoint | 描述 | 速率限制 | |--------|----------|-------------|------------| | `POST` | `/api/detect` | 单个 URL 检测 | 60/min | | `POST` | `/api/detect-batch` | 批量 URL 检测(最多 20 个) | 10/min | | `GET` | `/api/health` | 包含系统指标的健康检查 | — | | `GET` | `/api/model/info` | 模型状态和架构 | — | | `POST` | `/api/model/reload` | 热重载模型(仅限 localhost) | — | | `WS` | `/ws` | WebSocket 实时检测 | — | ### 请求示例 ``` curl -X POST http://127.0.0.1:5000/api/detect \ -H "Content-Type: application/json" \ -d '{"url": "https://login-verify-account.tk/update"}' ``` ### 响应示例 ``` { "url": "https://login-verify-account.tk/update", "is_phishing": true, "final_risk_score": 70.0, "risk_level": "high", "rule_result": { "rule_score": 70, "matched_rules": [ {"rule": "suspicious_keywords", "detail": "URL contains suspicious keywords: login, verify, update, account"}, {"rule": "suspicious_tld", "detail": "URL uses suspicious TLD: .tk"} ] }, "url_cnn_result": { "phishing_confidence": 0.72, "prediction": "phishing", "model_loaded": true }, "recommendation": "Rule engine classified as high risk, recommend immediate blocking" } ``` ## 模型训练 ### 训练 URL CNN+BiLSTM 模型 ``` # 首先下载 PhiUSIIL dataset # https://archive.ics.uci.edu/dataset/967/phiusiil+phishing+url+dataset python training/train_url_cnn.py \ --data path/to/PhiUSIIL_Phishing_URL_Dataset.csv \ --epochs 20 \ --batch_size 128 \ --output models/url_cnn.pth ``` ### 评估模型 ``` python training/evaluate.py \ --data path/to/PhiUSIIL_Phishing_URL_Dataset.csv \ --model models/url_cnn.pth ``` ### 数据增强策略 训练 pipeline 包含三种增强技术: 1. **通用增强** — 随机移除 `www`,切换 HTTP/HTTPS,截断 query 参数 2. **合法 URL path 增强** — 为较短的合法 URL 添加常见的 path/query,以平衡结构分布 3. **钓鱼 URL HTTPS 增强** — 为 HTTP 钓鱼 URL 创建 HTTPS 变体 ### 融合权重 | 模块 | 权重 | 描述 | |--------|--------|-------------| | Rule Engine | 0.40 | 快速静态规则预筛查 | | URL CNN+BiLSTM | 0.40 | 深度学习 URL 特征分析 | | Form Analysis | 0.20 | DOM 表单敏感字段检测 | ## 配置 所有配置项均支持通过环境变量覆盖: | 变量 | 默认值 | 描述 | |----------|---------|-------------| | `BACKEND_HOST` | `127.0.0.1` | 服务监听地址 | | `BACKEND_PORT` | `5000` | 服务端口 | | `DEBUG` | `false` | 调试模式 | | `SECRET_KEY` | *(开发默认值)* | Flask 密钥(**生产环境中必须设置**) | | `MODEL_DIR` | `../models` | 模型文件目录 | | `URL_CNN_MODEL_PATH` | `models/url_cnn.pth` | CNN 模型权重路径 | | `PAGE_LOAD_TIMEOUT` | `15` | 页面加载超时时间(秒) | | `RULE_HIGH_RISK_THRESHOLD` | `60` | 高风险分数阈值 | | `RULE_LOW_RISK_THRESHOLD` | `30` | 低风险分数阈值 | | `RULE_WEIGHT` | `0.40` | Rule Engine 融合权重 | | `URL_CNN_WEIGHT` | `0.40` | CNN 融合权重 | | `FORM_WEIGHT` | `0.20` | Form Analysis 融合权重 | ## 项目结构 ``` phishing-detector/ ├── extension/ # Browser extension (Manifest V3) │ ├── manifest.json # Extension configuration │ ├── popup.html / popup.js # Popup UI (dual-mode) │ ├── popup.css # Popup styles │ ├── background.js # Service Worker (navigation intercept) │ ├── content.js # Content script (warning banner + form monitor) │ ├── blocked.html / blocked.js # Block warning page │ ├── settings.html / settings.js # Settings page │ └── assets/ │ └── icon.svg # Vector icon │ ├── backend/ # Python backend │ ├── app.py # Service entry point │ ├── api/ │ │ ├── routes.py # API routes + WebSocket │ │ └── __init__.py # API module docs │ ├── engine/ │ │ ├── rule_engine.py # Rule engine (10 detection rules) │ │ ├── form_analyzer.py # Form analyzer │ │ ├── screenshotter.py # Headless browser page extractor │ │ └── __init__.py # Engine module docs │ ├── models/ │ │ ├── url_cnn.py # URL char-level CNN+BiLSTM │ │ ├── hybrid_model.py # Hybrid decision model │ │ └── __init__.py # Model module docs │ └── utils/ │ ├── config.py # Global config (env var support) │ ├── middleware.py # Middleware (rate limiting, logging) │ ├── url_utils.py # URL utility functions │ └── __init__.py # Utils module docs │ ├── training/ # Model training │ ├── train_url_cnn.py # URL CNN training script │ ├── evaluate.py # Model evaluation script │ └── __init__.py # Training module docs │ ├── models/ # Model files │ └── url_cnn.pth # URL CNN weights │ ├── .gitignore # Git ignore rules ├── Dockerfile # Docker container config ├── docker-compose.yml # Docker Compose config ├── requirements.txt # Python dependencies ├── LICENSE # MIT License ├── CONTRIBUTING.md # Contribution guidelines ├── README.md # This file (English) └── README.zh-CN.md # Chinese documentation ``` ## 技术栈 | 层级 | 技术 | |-------|-----------| | 浏览器扩展 | Manifest V3, Chrome Extensions API, Shadow DOM | | 后端 | Flask, Flask-SocketIO, Flask-CORS | | 深度学习 | PyTorch, CNN, BiLSTM | | 浏览器自动化 | Playwright (Chromium) | | HTML 解析 | BeautifulSoup4 | | 字符串匹配 | python-Levenshtein | | 部署 | Docker, Docker Compose | | 监控 | psutil | ## Rule Engine 检测项 | 规则 | 权重 | 描述 | |------|--------|-------------| | 使用 IP 替代域名 | 20 | 使用 IP 地址代替域名 | | 可疑关键词 | 15/项 | login/verify/update/account 等 | | 域名相似度 | 15 | 与已知品牌的编辑距离 | | URL 过长 | 10 | 超过 75 个字符 | | 可疑 TLD | 15 | .tk/.ml/.ga/.xyz 等 | | 特殊字符比例 | 10 | 超过 15% | | 无 HTTPS | 10 | 明文 HTTP 协议 | | @ 符号 | 20 | URL 欺骗攻击 | | 双斜杠重定向 | 15 | 重定向攻击 | | 过多子域名 | 10 | 超过 3 层 | ## 风险等级划分 | 分数范围 | 风险等级 | 操作 | |-------------|-----------|--------| | 0–30 | 低 | 允许 | | 31–59 | 可疑 | 显示警告横幅 | | 60–100 | 高 | 拦截 | ## 许可证 本项目基于 MIT License 授权 — 详见 [LICENSE](LICENSE) 文件。 ## 致谢 - **数据集**:来自 UCI Machine Learning Repository 的 [PhiUSIIL Phishing URL Dataset](https://archive.ics.uci.edu/dataset/967/phiusiil+phishing+url+dataset) - **灵感来源**:现代浏览器安全扩展及关于钓鱼检测的学术研究 - **技术栈**:PyTorch, Flask, Playwright, Chrome Extensions API ## 免责声明 本软件仅供**教育和研究目的**使用。尽管它在测试中实现了很高的检测准确率,但没有任何钓鱼检测系统是 100% 有效的。用户应保持警惕,不应仅仅依赖此工具做出安全决策。对于因使用本软件而产生的任何损害或损失,作者不承担任何责任。 **版本**:1.0.0 | **许可证**:MIT | **作者**:cheng-jun-hao
标签:BiLSTM, CNN, Flask, 凭据扫描, 反钓鱼, 安全防护, 浏览器扩展, 深度学习, 特征检测, 请求拦截, 逆向工具