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`。
## 类别分布

## 检测 Pipeline

## 特征工程
模型使用直接从每个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 |
## 准确率比较

结果显示,线性基线模型与基于树的集成方法之间存在显著的性能差距。Logistic Regression 达到了合理的精确率,但召回率较低;而 Random Forest 和 XGBoost 能更有效地捕捉非线性的 URL 模式。
## 混淆矩阵

Random Forest 正确识别的结果如下:
| 结果 | 数量 |
|---|---:|
| 真阴性 | 78,951 |
| 假阳性 | 6,670 |
| 假阴性 | 9,457 |
| 真阳性 | 35,161 |
对于网络安全而言,召回率尤为重要,因为假阴性代表被错误分类为安全的恶意 URL。
## 特征重要性

最具影响力的特征是 `num_special`、`num_dots`、`url_length` 和 `num_digits`。这证实了这样一种直觉:恶意 URL 通常依赖于长字符串、大量特殊字符和结构性混淆。
## ROC 和 Precision-Recall 分析
| ROC 曲线 | Precision-Recall 曲线 |
|---|---|
|  |  |
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检测, 机器学习, 网络安全, 自然语言处理/特征工程, 逆向工具, 随机森林, 隐私保护