navlikescoding/PhishGuard

GitHub: navlikescoding/PhishGuard

PhishGuard 是一个基于机器学习的实时钓鱼URL检测系统,通过分析URL特征快速分类为钓鱼或合法。

Stars: 0 | Forks: 0

# 🛡️ PhishGuard — 钓鱼链接检测系统 ## 📌 概述 PhishGuard 是一个端到端的钓鱼 URL 检测系统,它利用机器学习实时将任何 URL 分类为 **钓鱼** 或 **合法**。该系统不分析网页内容,而是直接从 URL 字符串本身提取 33 个结构和统计特征,因此速度快、轻量级且独立于内容。 该系统完全用 R 构建,在包含超过 822,000 个 URL 的大规模标记数据集上进行训练,并使用 Shiny 框架部署为一个交互式 Web 应用程序。 ## 🚀 功能 - 🔍 实时 URL 分类 — 结果在 1 秒内返回 - 📊 带有可视化置信度条的置信度分数 - 🧠 4 个机器学习模型经过训练和基准测试 - 📈 模型比较:准确率、精确率、召回率、F1 分数和 AUC-ROC - 📉 混淆矩阵、ROC 曲线和特征重要性图表 - 🌐 使用 Shiny 构建的交互式 Web 应用程序(PhishGuard) - 💾 所有模型已保存,无需重新训练即可复用 ## 🗂️ 项目结构 ``` PhishGuard/ │ ├── phishing_detection_v2.R # Main training script (feature engineering + 4 ML models) ├── predict_url_v2.R # Interactive CLI prediction script ├── app.R # Shiny web application (PhishGuard) ├── best_model_xgb.model # Saved XGBoost model (best performer) ├── rf_model.rds # Saved Random Forest model ├── lr_model.rds # Saved Logistic Regression model ├── liblinear_model.rds # Saved LiblineaR model ├── y_test.rds # Test set labels ├── results.rds # Final comparison table └── new_data_urls.csv # Dataset (822,010 labelled URLs) ``` ## 📦 需求 ### R 软件包 ``` install.packages(c( "tidyverse", "caret", "randomForest", "xgboost", "LiblineaR", "e1071", "glmnet", "stringr", "pROC", "tictoc", "ggplot2", "shiny", "data.table" )) ``` ### 系统需求 - R 版本 4.0+ - RStudio(推荐) - 最少 8GB RAM(对于完整的 822k 数据集,推荐 16GB) ## 📊 数据集 | 属性 | 值 | |---|---| | URL 总数 | 822,010 | | 钓鱼 (0) | 394,927 | | 合法 (1) | 427,083 | | 提取的特征 | 33 | | 训练集拆分 | 70% (~575,407 个 URL) | | 测试集拆分 | 30% (~246,603 个 URL) | ## 🔧 特征工程 从每个原始 URL 字符串中提取 33 个特征,分为 6 个类别: | 类别 | 特征 | |---|---| | **结构** | URL 长度、点号、斜杠、连字符、下划线、特殊字符、数字 | | **协议** | HTTPS/HTTP 存在性、双斜杠检测 | | **域名级别** | 域名长度、子域名计数、域名中的连字符、域名中数字比例、域名是 IP 地址 | | **安全信号** | 可信域名检查、可疑顶级域名、品牌冒充、URL 编码 | | **基于关键字** | 仅在域名中的可疑关键字(登录、验证、安全等) | | **统计** | URL 熵、数字比例、路径长度、查询字符串长度 | ## 🤖 模型与结果 训练并评估了四个机器学习模型: | 模型 | 准确率 | 精确率 | 召回率 | F1 分数 | AUC-ROC | |---|---|---|---|---|---| | 逻辑回归 | 83.06% | 0.8068 | 0.8859 | 0.8445 | 0.905 | | 随机森林 | **92.29%** | **0.8996** | **0.9584** | **0.9281** | 0.962 | | XGBoost | 90.98% | 0.8840 | 0.9511 | 0.9163 | **0.971** | | LiblineaR | 83.05% | 0.8068 | 0.8859 | 0.8445 | 0.905 | **✅ 最佳模型:XGBoost** — 基于最高 AUC-ROC **0.971** 选择 ## ▶️ 如何运行 ### 1. 训练模型 ``` # 设置工作目录为项目文件夹 setwd("D:/PhishGuard") # 运行训练脚本 source("phishing_detection_v2.R") ``` ### 2. 预测单个 URL(命令行) ``` setwd("D:/PhishGuard") source("predict_url_v2.R") # 输入网址,提示时: # 输入网址:https://paypal-secure-login.tk # 结果:🚨 PHISHING (置信度:94.3%) ``` ### 3. 启动 Web 应用程序 ``` setwd("D:/PhishGuard") shiny::runApp("app.R") ``` PhishGuard Web 应用程序将在您的浏览器中自动打开。 ### 4. 重新加载已保存的模型(跳过重新训练) ``` library(xgboost); library(LiblineaR); library(caret); library(pROC) xgb_model <- xgb.load("best_model_xgb.model") rf_model <- readRDS("rf_model.rds") lr_model <- readRDS("lr_model.rds") liblinear_model <- readRDS("liblinear_model.rds") y_test <- readRDS("y_test.rds") results <- readRDS("results.rds") ``` ## 🌐 PhishGuard Web 应用程序 PhishGuard Shiny 应用程序提供了一个简洁、实时的 URL 分类界面: - 将任何 URL 粘贴到输入框中 - 点击 **扫描 URL** - 立即获得 **钓鱼** 或 **合法** 的结果及置信度分数 - 会话计数器跟踪已扫描总数、检测到的钓鱼 URL 和合法 URL 数量 ## 🔬 为何选择这些模型? | 模型 | 原因 | |---|---| | **逻辑回归** | 快速、可解释的基准;识别特征与标签之间的线性关系 | | **随机森林** | 处理非线性模式,对噪声鲁棒,提供特征重要性分数 | | **XGBoost** | 迭代修正错误,最适用于细微的欺骗性 URL,在表格数据上处于领先水平 | | **LiblineaR** | 可扩展的线性 SVM;在数分钟内即可在 560k+ 行数据上进行训练,适用于大型数据集 | ## 🔮 未来工作 - 集成 WHOIS 和域名年龄查询作为额外特征 - 连接 Google Safe Browsing API 或 VirusTotal 进行实时交叉验证 - 尝试使用字符级 CNN 和 LSTM 对原始 URL 进行分类 - 部署为浏览器扩展,提供被动实时保护 - 将 PhishGuard 连接到实时威胁源(PhishTank, OpenPhish)以持续更新 - 随着钓鱼策略的演变,使用新数据定期重新训练模型 ## 👥 作者 | 姓名 | 项目 | 机构 | |---|---|---| | Navaneeth | M.Tech (Integrated) – CSE with Business Analytics | VIT Chennai | | Prajeet P C | M.Tech (Integrated) – CSE with Business Analytics | VIT Chennai | ## 📄 许可证 该项目是在 Vellore Institute of Technology, Chennai 为学术目的而开发的。 ## 📚 参考文献 1. I. Fette, N. Sadeh, and A. Tomasic, "Learning to detect phishing emails," WWW 2007. 2. M. Prabhakar et al., "Detection of phishing websites using a machine learning algorithm," IJESR, 2020. 3. M. Abdolrazzagh-Nezhad and N. Langarib, "Phishing detection techniques: A review," JOCAI, 2025. 4. A. Abuadbba et al., "Towards robust machine learning-based phishing URL detectors," arXiv:2204.00985, 2022. 5. S. K. Ahammad et al., "Phishing URL detection using machine learning methods," Adv. Eng. Softw., 2022.
标签:Apex, AUC-ROC, LiblineaR, ML系统, R语言, Shiny框架, URL安全, XGBoost, 交互式应用, 在线分类, 实时URL分类, 性能评估, 恶意URL识别, 数据科学, 机器学习, 模型训练, 混淆矩阵, 特征工程, 特征重要性, 网络安全, 资源验证, 逻辑回归, 钓鱼检测, 钓鱼链接检测, 随机森林, 隐私保护