goal31121/Intrusion-Detection-System-IDS-using-AI-Snort
GitHub: goal31121/Intrusion-Detection-System-IDS-using-AI-Snort
基于AI和Snort的入侵检测系统,用于实时检测网络异常。
Stars: 0 | Forks: 0
# 使用 AI 和 Snort 的入侵检测系统 (IDS)

一个基于 AI 的入侵检测系统,利用机器学习来检测网络入侵和攻击。该项目实现了在 UNSW-NB15 数据集上训练的随机森林分类器,以高精度识别恶意网络流量。
## 概述
该项目展示了机器学习技术在网络安全领域的应用,特别是用于检测网络入侵。该系统在区分正常和恶意网络流量方面达到了 **90% 的准确率**。
## 功能
- **基于机器学习的检测**:使用随机森林分类器进行稳健的入侵检测
- **高准确率**:在 UNSW-NB15 测试数据集上达到 90% 的准确率
- **全面的数据预处理**:处理分类编码、归一化和缺失值
- **二元分类**:将网络流量分类为正常(0)或攻击(1)
- **训练模型导出**:保存训练模型以部署和重用
## 数据集
该项目使用 **UNSW-NB15 数据集**,其中包含:
- 现代网络流量模式
- 多种攻击类别
- 45 个特征,包括:
- 网络流特征(持续时间、协议、服务、状态)
- 数据包统计(spkts、dpkts、sbytes、dbytes)
- TCP 连接特征(sttl、dttl、swin、dwin)
- 基于时间的特征(速率、sload、dload)
- 以及许多其他网络特定属性
## 使用的技术
- **Python 3.13**
- **pandas**:数据操作和分析
- **NumPy**:数值计算
- **scikit-learn**:机器学习算法和预处理
- **Jupyter Notebook**:交互式开发环境
## 要求
```
pandas
scikit-learn
numpy
joblib
matplotlib
seaborn
```
## 安装
1. 克隆仓库:
```
git clone https://github.com/yourusername/Intrusion-Detection-System-IDS-using-AI-Snort.git
cd Intrusion-Detection-System-IDS-using-AI-Snort
```
2. 创建虚拟环境(可选但推荐):
```
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
```
3. 安装所需软件包:
```
pip install -r requirements.txt
```
或单独安装:
```
pip install pandas scikit-learn numpy matplotlib seaborn
```
## 使用
### 训练模型
1. 打开 Jupyter Notebook:
```
jupyter notebook Intrusion_Detection_System(IDS).ipynb
```
2. 笔记本包括以下步骤:
- **数据加载**:加载 UNSW-NB15 训练和测试数据集
- **数据预处理**:
- 删除不必要的列(id、attack_cat)
- 处理缺失值
- 使用 LabelEncoder 编码分类特征
- 使用 StandardScaler 归一化数值特征
- **模型训练**:使用 100 个估计器的随机森林分类器进行训练
- **模型评估**:在测试数据上评估性能
- **模型导出**:将训练模型保存为 pickle 文件
### 使用训练模型
```
import joblib
import pandas as pd
# 加载训练好的模型
model = joblib.load('intrusion_detection_model_unsw.pkl')
# 准备您的数据(必须以与训练数据相同的方式进行预处理)
# X_new = 您预处理后的数据
# 进行预测
predictions = model.predict(X_new)
# 0 = 正常流量,1 = 攻击
```
## 模型性能
随机森林分类器实现了以下性能指标:
- **总体准确率**:90.09%
### 分类报告:
| 类别 | 精确率 | 召回率 | F1 分数 | 支持度 |
|-------|-----------|--------|----------|---------|
| 正常(0) | 0.77 | 0.98 | 0.86 | 56,000 |
| 攻击(1) | 0.99 | 0.87 | 0.92 | 119,341 |
| **加权平均** | **0.92** | **0.90** | **0.90** | **175,341** |
### 关键见解:
- **攻击的高精确率(0.99)**:检测攻击时几乎无假阳性
- **正常流量的高召回率(0.98)**:在识别合法流量方面表现优秀
- **平衡的性能**:在检测攻击和最小化误报之间取得良好平衡
## 项目结构
```
Intrusion-Detection-System-IDS-using-AI-Snort/
├── Intrusion_Detection_System(IDS).ipynb # Main Jupyter notebook with training & analysis
├── feature_importance_analysis.py # Standalone script for feature analysis
├── model_optimization.py # Cross-validation and hyperparameter tuning
├── model_optimization_visualizations.py # Optimization results visualizations
├── multiclass_data_exploration.py # Multi-class attack distribution analysis
├── multiclass_classification.py # Multi-class classifier training
├── multiclass_visualizations.py # Multi-class results visualizations
├── test_setup.py # Setup verification script
├── intrusion_detection_model_unsw.pkl # Trained baseline Random Forest model (binary)
├── intrusion_detection_model_optimized.pkl # Optimized binary model (generated)
├── intrusion_detection_model_multiclass.pkl # Multi-class model (generated)
├── attack_category_encoder.pkl # Attack category label encoder (generated)
├── feature_importance_full.csv # Complete feature importance rankings
├── optimization_results.csv # Model optimization metrics (generated)
├── best_hyperparameters.csv # Optimal hyperparameters (generated)
├── multiclass_*.csv # Multi-class results and metrics (generated)
├── requirements.txt # Python package dependencies
├── *.png # Generated visualization charts
├── docs/ # Documentation and images
│ └── Intrusion_detection.jpg # Project diagram
├── README.md # This file
├── FEATURE_IMPORTANCE_GUIDE.md # Detailed guide for feature analysis
├── MODEL_OPTIMIZATION_GUIDE.md # Detailed guide for model optimization
├── MULTICLASS_CLASSIFICATION_GUIDE.md # Detailed guide for multi-class classification
├── LICENSE # MIT License
├── pyvenv.cfg # Virtual environment config
├── .gitignore # Git ignore rules
└── .gitattributes # Git LFS configuration
```
## 工作流程
1. **数据预处理**
- 加载 UNSW-NB15 训练和测试数据集
- 删除不必要的列
- 处理缺失值
- 使用 LabelEncoder 使用 LabelEncoder 编码分类变量
- 使用 StandardScaler 使用 StandardScaler 归一化数值特征
2. **模型训练**
- 初始化随机森林分类器(100 个估计器)
- 在预处理后的训练数据上训练
- 随机状态设置为 42 以确保可重复性
3. **模型评估**
- 在预处理后的测试数据上测试
- 生成准确度指标和分类报告
4. **模型部署**
- 使用 joblib 导出训练模型
- 模型已准备好与网络监控系统集成
## 贡献
欢迎贡献!请随时提交拉取请求。
1. 分叉仓库
2. 创建您的功能分支(`git checkout -b feature/AmazingFeature`)
3. 提交您的更改(`git commit -m 'Add some AmazingFeature'`)
4. 将更改推送到分支(`git push origin feature/AmazingFeature`)
5. 打开拉取请求
## 许可证
该项目受 MIT 许可证许可 - 有关详细信息,请参阅 [LICENSE](LICENSE) 文件。
## 作者
**Nick**
## 致谢
- UNSW-NB15 数据集创建者,为提供全面的现代网络流量数据集
- scikit-learn 社区,为出色的机器学习工具
- 开源社区,为持续的支持和灵感
## 特征重要性分析
了解哪些网络特征对检测入侵最为关键,有助于优化模型并提供对攻击模式的见解。
### 快速入门
**验证设置:**
```
python3 test_setup.py
```
**运行分析:**
```
# 选项 1:Python 脚本
python3 feature_importance_analysis.py
# 选项 2:Jupyter Notebook
jupyter notebook Intrusion_Detection_System(IDS).ipynb
# 导航到“特征重要性分析”部分
```
### 生成的输出
#### 可视化
1. **feature_importance_top20.png**
- 20 个最重要特征的水平条形图
- 易于阅读和比较特征重要性分数
- 适用于演示和报告
2. **feature_importance_top15_vertical.png**
- 垂直条形图,带有确切的重要性值
- 显示前 15 个特征及其数值标签
- 用于详细分析
3. **cumulative_feature_importance.png**
- 显示累积重要性的折线图
- 指示多少特征捕获了 90% 和 95% 的预测能力
- 帮助确定最佳特征子集大小
4. **top10_features_correlation.png**
- 显示前 10 个特征之间相关性的热图
- 识别冗余或互补特征
- 用于特征工程
#### 数据文件
1. **feature_importance_full.csv**
- 所有特征的完整排名及其重要性分数
- 两列:特征名称和重要性分数
- 按重要性排序(从高到低)
- 可用于在 Excel 或其他工具中进行进一步分析
### 关键见解
特征重要性分析揭示:
- 哪些网络流量特征最具有攻击指示性
- 真正必要的特征数量
- 重要特征之间的相关性
- 特征工程和模型优化的机会
**有关详细说明,请参阅 [FEATURE_IMPORTANCE_GUIDE.md](FEATURE_IMPORTANCE_GUIDE.md)**
## 模型优化
通过交叉验证和超参数调整来提高模型性能。
### 快速入门
**运行优化:**
```
# 步骤 1:执行交叉验证和超参数调整
python3 model_optimization.py
# 步骤 2:生成比较可视化
python3 model_optimization_visualizations.py
```
### 它做什么
1. **K-Fold 交叉验证**
- 在 5 个不同的数据拆分上评估模型稳定性
- 提供平均准确率和置信区间
- 识别过拟合或欠拟合问题
2. **网格搜索超参数调整**
- 测试多个参数组合
- 找到以下最佳设置:
- 树的数量(`n_estimators`)
- 树的深度(`max_depth`)
- 分裂标准(`min_samples_split`、`min_samples_leaf`)
- 特征选择(`max_features`)
- 自举采样(`bootstrap`)
3. **性能比较**
- 比较基线与优化模型
- 计算改进百分比
- 生成详细的可视化
### 生成的输出
#### 优化模型
- **intrusion_detection_model_optimized.pkl** - 调优的随机森林模型,具有最佳参数
#### 性能数据
- **optimization_results.csv** - 详细指标比较(准确率、精确率、召回率、F1、ROC-AUC)
- **best_hyperparameters.csv** - 由 GridSearch 找到的最佳参数值
#### 可视化
1. **optimization_metrics_comparison.png**
- 并排条形图比较所有指标
- 显示基线与优化性能
2. **optimization_improvement.png**
- 水平条形图显示百分比改进
- 突出显示哪些指标改进最大
3. **optimization_confusion_matrices.png**
- 两个模型的混淆矩阵
- 可视比较预测准确度
4. **optimization_roc_curves.png**
- ROC 曲线及其 AUC 分数
- 展示改进的分类能力
5. **optimization_learning_curves.png**
- 训练集和验证集分数随数据集大小变化的折线图
- 识别过拟合/欠拟合模式
### 关键优势
- **更好的准确率**:优化的超参数提高了检测率
- **减少误报**:更好的精确率意味着更少的误报
- **模型稳定性**:交叉验证确保了一致的性能
- **数据驱动决策**:系统性的参数搜索与手动调整
- **生产就绪**:经过验证的模型已准备好部署
**有关详细说明,请参阅 [MODEL_OPTIMIZATION_GUIDE.md](MODEL_OPTIMIZATION_GUIDE.md)**
## 多类分类
识别特定的攻击类型,而不仅仅是二元(正常 vs 攻击)分类。
### 攻击类别(10 类)
UNSW-NB15 数据集包含以下攻击类型:
1. **正常** - 合法网络流量
2. **模糊器** - 通过提供随机生成的数据尝试导致程序/网络挂起
3. **分析** - 端口扫描、垃圾邮件和 HTML 文件渗透
4. **后门** - 越过正常身份验证的技术
5. **DoS** - 拒绝服务攻击
6. **漏洞利用** - 对易受攻击服务的已知漏洞
7. **通用** - 对所有块加密的工作技术
8. **侦察** - 监视和探测攻击
9. **Shellcode** - 执行 shell 命令的漏洞利用
10. **蠕虫** - 自我复制恶意软件
### 快速入门
**探索攻击分布:**
```
python3 multiclass_data_exploration.py
```
**训练多类模型:**
```
# 步骤 1:训练多类分类器
python3 multiclass_classification.py
# 步骤 2:生成可视化
python3 multiclass_visualizations.py
```
### 它做什么
1. **数据预处理**
- 保留 `attack_cat` 列(而不是删除它)
- 将攻击类别编码为数值标签
- 使用平衡权重处理类别不平衡
- 归一化特征以获得更好的性能
2. **多类训练**
- 带有 `class_weight='balanced'` 的随机森林
- 自动处理不平衡类别
- 使用之前调整的优化超参数
- 保存攻击类别编码器以进行预测
3. **全面评估**
- 每个类别的精确率、召回率和 F1 分数
- 显示所有 10 个类别的混淆矩阵
- 总体和每个类别的准确率
- 详细的分类报告
### 生成的输出
#### 模型和编码器
- **intrusion_detection_model_multiclass.pkl** - 训练的多类随机森林
- **attack_category_encoder.pkl** - 攻击类别标签编码器
#### 数据文件
- **train_multiclass_processed.csv** - 预处理后的训练数据,包含攻击类别
- **test_multiclass_processed.csv** - 预处理后的测试数据,包含攻击类别
- **multiclass_classification_report.csv** - 详细每类指标
- **multiclass_confusion_matrix.csv** - CSV 格式的混淆矩阵
- **multiclass_feature_names.csv** - 特征列表
- **multiclass_feature_importance.csv** - 特征重要性排名
#### 可视化
1. **multiclass_confusion_matrix_heatmap.png**
- 10x10 热图显示预测模式
- 识别哪些攻击类型被混淆
- 每个类别组合的绝对计数
2. **multiclass_confusion_matrix_normalized.png**
- 标准化混淆矩阵(按真实标签)
- 显示正确/错误预测的比例
- 更容易比较具有不同样本大小的类别
3. **multiclass_per_class_metrics.png**
- 所有类别的分组条形图
- 比较精确率、召回率和 F1 分数
- 识别哪些攻击类型最难检测
4. **multiclass_f1_scores.png**
- 按 F1 分数排序的水平条形图
- 绿色(好)、橙色(一般)、红色(差)着色
- 快速识别有问题的类别
5. **multiclass_distribution_accuracy.png**
- 两面板图显示:
- 顶部:每个类别的样本数量
- 底部:每个类别的准确率
- 揭示类别大小与性能之间的关系
6. **multiclass_feature_importance.png**
- 多类分类中最重要的前 20 个特征
- 可能与二元分类特征不同
- 帮助了解区分攻击类型的是什么
### 关键优势
- **可操作的智能**:确切了解正在发生的攻击类型
- **更好的响应**:不同的攻击需要不同的对策
- **详细分析**:了解攻击模式和趋势
- **安全见解**:识别最常见的攻击
- **改进的检测**:针对每种攻击类型进行专门的检测
### 用例
1. **安全运营中心 (SOC)**
- 根据攻击类型优先处理警报
- 将事件路由到适当的团队
- 生成攻击类型统计信息
2. **威胁情报**
- 跟踪攻击类型随时间的变化趋势
- 识别新兴的攻击模式
- 与外部威胁源相关联
3. **事件响应**
- 使用特定的攻击识别加快响应速度
- 每种攻击类型都有适当的缓解策略
- 更好的取证分析
4. **合规性和报告**
- 详细攻击类型分解
- 法规合规性报告
- 安全态势评估
**有关详细说明,请参阅 [MULTICLASS_CLASSIFICATION_GUIDE.md](MULTICLASS_CLASSIFICATION_GUIDE.md)**
## 未来改进
- [x] 特征重要性分析和可视化
- [x] 交叉验证和超参数调整
- [x] 多类分类以识别特定攻击类型
- [ ] 与 Snort IDS 集成以实现实时检测
- [ ] 深度学习模型(LSTM、CNN)以提高准确率
- [ ] 实时网络流量监控仪表板
- [ ] 作为 REST API 服务部署
- [ ] Docker 容器化以实现易于部署
## 联系
如有问题或反馈,请在 GitHub 仓库中打开。
**注意**:该项目仅用于教育和研究目的。在部署入侵检测系统到任何网络之前,请务必确保适当的授权。
标签:Apex, BSD, NoSQL, NumPy, pandas, Python, scikit-learn, UNSW-NB15, 二分类, 人工智能, 入侵检测系统, 分类器, 安全数据湖, 异常检测, 性能评估, 恶意流量检测, 数据挖掘, 数据清洗, 数据科学, 数据预处理, 无后门, 未授权访问检测, 机器学习, 机器学习应用, 机器学习模型, 机器学习算法, 模型保存, 模型加载, 模型训练, 模型部署, 潜在威胁检测, 特征工程, 用户模式Hook绕过, 缺失值处理, 网络安全, 网络安全防护, 网络流量分析, 资源验证, 逆向工具, 随机森林, 隐私保护