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) ![入侵检测系统](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/7073915eb6051745.jpg) 一个基于 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绕过, 缺失值处理, 网络安全, 网络安全防护, 网络流量分析, 资源验证, 逆向工具, 随机森林, 隐私保护