AlAsiri-Ali/malicious-url-detection-ml

GitHub: AlAsiri-Ali/malicious-url-detection-ml

基于URL词法特征工程和多种机器学习模型的恶意URL分类系统,用于在不访问目标网页的情况下快速识别钓鱼和恶意链接。

Stars: 1 | Forks: 0

# 基于AI的垃圾邮件和恶意URL检测 利用词法特征工程、Random Forest、XGBoost和Logistic Regression将URL分类为良性或恶意的机器学习 pipeline。 ## 概述 恶意URL被广泛用于网络钓鱼、恶意软件分发、网页篡改活动、垃圾邮件和在线欺诈。本项目构建了一个轻量级的机器学习系统,无需访问目标网页即可对URL进行分类。相反,它直接从URL字符串中提取结构和词法模式。 本项目比较了三个模型: - Logistic Regression - Random Forest - XGBoost 表现最好的模型是 **Random Forest**,在测试集上达到了 **0.876 的准确率 (accuracy)**、**0.840 的精确率 (precision)**、**0.788 的召回率 (recall)** 和 **0.813 的 F1分数 (F1-score)**。 ## 为什么基于URL的检测很重要 基于URL的检测既快速又安全,因为它不需要打开网站。这对于需要快速筛选可疑链接的电子邮件网关、浏览器扩展、SOC 工单处理工具和钓鱼防御系统非常有用。 ## 数据集 | 项目 | 数值 | |---|---:| | 数据集大小 | 651,191 个 URL | | 原始标签 | 良性、钓鱼、恶意软件、网页篡改 | | 建模目标 | 二分类 | | 良性类别 | 0 | | 恶意类别 | 1 | | 训练/测试集划分 | 80% / 20% 分层抽样 | | 特征类型 | URL 词法特征 | 原始的多类标签被转换为二元网络安全检测任务:良性URL保持为类别 `0`,而钓鱼、恶意软件和网页篡改URL被归类为类别 `1`。 ## 类别分布 ![二分类类别分布](https://static.pigsec.cn/wp-content/uploads/repos/cas/1b/1be81a106c9c988df08fce434af4af0cfec8e17a301f36d8d9268e2ed4fa417a.png) ## 检测 Pipeline ![恶意URL检测 pipeline](https://static.pigsec.cn/wp-content/uploads/repos/cas/f2/f281432d64444967c60f8006679938c0dad246914a655721965723f6dd149847.png) ## 特征工程 模型使用直接从每个URL中提取的轻量级词法特征: | 特征 | 含义 | 安全相关性 | |---|---|---| | `url_length` | 字符总数 | 过长的 URL 可能隐藏可疑域名或 payload | | `num_digits` | 数字字符数量 | 随机数字 token 和类似 IP 的模式可能表明是自动化操作 | | `num_special` | 非字母数字字符数量 | 混淆通常使用 `@`、`-`、`%`、`?` 和 `/` 等符号 | | `num_dots` | 点的数量 | 许多子域名可用于模仿合法服务 | | `has_ip` | 原始 IP 地址标志 | 合法网站很少向用户暴露原始 IP 地址 | | `has_https` | HTTPS 协议标志 | 仅靠 HTTPS 是不够的,因为钓鱼网站也可以使用 SSL | | `has_login` | 登录关键字标志 | 常见的社会工程学诱因 | | `has_verify` | 验证关键字标志 | 常见的制造紧迫感/信任的诱因 | | `has_secure` | 安全关键字标志 | 常见的钓鱼诱饵关键字 | ## 模型结果 | 模型 | Accuracy | Precision | Recall | F1-score | |---|---:|---:|---:|---:| | Logistic Regression | 0.749 | 0.775 | 0.378 | 0.508 | | Random Forest | 0.876 | 0.840 | 0.788 | 0.813 | | XGBoost | 0.866 | 0.835 | 0.760 | 0.796 | ## 准确率比较 ![模型准确率比较](https://static.pigsec.cn/wp-content/uploads/repos/cas/13/13623566ff8adef93618ccfd99a0eea74307814f7613a4c6f9c2519def82e669.png) 结果显示,线性基线模型与基于树的集成方法之间存在显著的性能差距。Logistic Regression 达到了合理的精确率,但召回率较低;而 Random Forest 和 XGBoost 能更有效地捕捉非线性的 URL 模式。 ## 混淆矩阵 ![Random Forest 混淆矩阵](https://static.pigsec.cn/wp-content/uploads/repos/cas/b9/b943e1ff386075d92fe2b21236a73233825cbe2f8ec734f32152d53a0f95c882.png) Random Forest 正确识别的结果如下: | 结果 | 数量 | |---|---:| | 真阴性 | 78,951 | | 假阳性 | 6,670 | | 假阴性 | 9,457 | | 真阳性 | 35,161 | 对于网络安全而言,召回率尤为重要,因为假阴性代表被错误分类为安全的恶意 URL。 ## 特征重要性 ![特征重要性](https://static.pigsec.cn/wp-content/uploads/repos/cas/81/817fbe888f460d18c4462b336042c7920543be84b8710fffdb26afde71e526d7.png) 最具影响力的特征是 `num_special`、`num_dots`、`url_length` 和 `num_digits`。这证实了这样一种直觉:恶意 URL 通常依赖于长字符串、大量特殊字符和结构性混淆。 ## ROC 和 Precision-Recall 分析 | ROC 曲线 | Precision-Recall 曲线 | |---|---| | ![ROC 曲线](https://static.pigsec.cn/wp-content/uploads/repos/cas/4e/4eb93a4fa39855ff6d213db8af4c80828d0d373fbe525e6d1538f26632fc4c4e.png) | ![Precision-Recall 曲线](https://static.pigsec.cn/wp-content/uploads/repos/cas/a2/a26ccde7fb89853c08a28809317ae619f816dd0a07b83ebf088c0dca4ec8296e.png) | Random Forest 模型取得了以下结果: | 指标 | 数值 | |---|---:| | ROC AUC | 0.934 | | 平均精确率 (Average Precision) | 0.901 | ## 关键发现 1. URL 词法特征可以在不打开网页的情况下,支持快速的恶意 URL 检测。 2. 基于树的集成模型显著优于线性的 Logistic Regression 基线模型。 3. Random Forest 在准确率、精确率、召回率和 F1-score 方面取得了最佳的整体平衡。 4. XGBoost 表现出了很强的竞争力,但在报告的测试指标上略逊于 Random Forest。 5. 特殊字符数量、点号数量、URL 长度和数字数量是最重要的特征。 6. 该系统应作为决策支持层使用,而不是唯一的拦截权威。 ## 道德与安全考量 本项目属于防御性质,旨在用于垃圾邮件、网络钓鱼和恶意 URL 检测。在实际部署时应考虑以下几点: - URL 日志可能包含敏感的查询参数或 token。 - 假阳性可能会阻止合法网站,从而损害用户或组织的利益。 - 攻击者可能会尝试利用对抗性 URL 篡改来逃避检测。 - 应定期重新训练模型,以处理概念漂移和新型攻击模式。 - 对于影响重大的决策,建议进行人工审查或二次验证。 ## 仓库结构 ``` . ├── malicious_url_detection_ml.ipynb ├── src/ │ ├── features.py │ ├── train.py │ ├── evaluate.py │ └── predict.py ├── docs/ │ └── figures/ ├── results/ │ ├── feature_schema.json │ ├── model_comparison.csv │ └── random_forest_confusion_matrix.json ├── requirements.txt ├── .gitignore └── README.md ``` ## 在本地运行 创建 Python 环境并安装依赖。 ### Windows PowerShell ``` py -3.10 -m venv .venv .\.venv\Scripts\Activate.ps1 python -m pip install --upgrade pip pip install -r requirements.txt ``` ### Linux / macOS ``` python3 -m venv .venv source .venv/bin/activate python -m pip install --upgrade pip pip install -r requirements.txt ``` ## 数据集设置 将数据集放置在: ``` data/malicious_phish.csv ``` 预期的列: ``` url,type ``` 原始数据集不包含在此仓库中。 ## 打开 Notebook ``` jupyter notebook malicious_url_detection_ml.ipynb ``` ## 可选脚本用法 训练所有模型: ``` python src/train.py --data data/malicious_phish.csv --output-dir outputs ``` 评估已训练的模型: ``` python src/evaluate.py --data data/malicious_phish.csv --model outputs/best_model.joblib ``` 预测单个 URL: ``` python src/predict.py --model outputs/best_model.joblib --url "https://example.com/login" ``` ## 未来工作 未来的改进包括添加基于内容的特征、DNS/网络特征、字符级深度学习模型、对抗性鲁棒性测试,以及用于实时 URL 警告的轻量级浏览器扩展。
标签:Apex, NoSQL, XGBoost, 恶意URL检测, 机器学习, 网络安全, 自然语言处理/特征工程, 逆向工具, 随机森林, 隐私保护