ThiagoGoncos/CCT-capstone-lightweight-network-ids
GitHub: ThiagoGoncos/CCT-capstone-lightweight-network-ids
基于机器学习和 CICIDS2017 数据集构建的轻量级网络入侵检测系统,通过 Streamlit Dashboard 实现多类别网络攻击流量的分类与可视化预测。
Stars: 0 | Forks: 0
# 轻量级网络入侵检测系统 (IDS)
**CCT College Dublin** **Problem Solving for Industry** 模块的 CA2 毕业设计项目。
## 作者
- **Sander Luiz Santos Soares** — 2022164
- **Thiago Gonçalves da Costa** — 2022161
## 学术信息
- **学院:** CCT College Dublin
- **专业:** BSc (Hons) in Computing in IT
- **模块:** Problem Solving for Industry
- **评估:** CA2 项目
- **讲师:** Muhammad Iqbal, Ken Healy
- **框架:** CRISP-DM
## 项目概述
本项目使用 **Python** 和 **机器学习** 开发了一个**轻量级网络入侵检测系统 (IDS)**,用于对良性和恶意网络流量进行分类。
本项目遵循 **CRISP-DM 框架**,涵盖:
1. 业务理解
2. 数据理解
3. 数据准备
4. 建模
5. 评估
6. 部署
最终解决方案使用了经过训练的机器学习模型和一个简单的 **Streamlit dashboard 原型**,用户可以上传包含网络流数据的 CSV 文件并获取 IDS 预测结果。
该系统旨在为网络安全资源有限的组织提供一个轻量级且经济的原型,特别是:
- 中小型企业 (SME)
- 学校
- 诊所
- 小型办公室
- 托管服务提供商 (MSP)
## 主要目标
- 分析和预处理 CICIDS2017 数据集
- 检测良性和恶意的网络流量模式
- 比较多种机器学习模型
- 解决类别不平衡和罕见攻击类别问题
- 使用准确率、精确率、召回率、宏 F1 分数、加权 F1 分数、运行时间和混淆矩阵分析来评估模型
- 选择轻量级且可解释的 IDS 模型
- 构建一个简单的 Streamlit dashboard 原型,用于预测和流量摘要可视化
## 数据集
本项目使用的数据集是 **CICIDS2017**,这是一个由 **Canadian Institute for Cybersecurity** 开发的公开网络安全数据集。
本项目使用了 CICIDS2017 的 8 个 CSV 文件,并将它们合并为一个数据集。
该数据集包括良性流量和多种攻击类别,包括:
- BENIGN
- DoS Hulk
- DoS GoldenEye
- DoS slowloris
- DoS Slowhttptest
- DDoS
- PortScan
- Bot
- FTP-Patator
- SSH-Patator
- Web Attack Brute Force
- Web Attack XSS
- Web Attack Sql Injection
- Infiltration
- Heartbleed
经过清理和预处理后,最终完整的数据集保留了 **15 个流量类别**。
## 数据准备摘要
主要的数据准备步骤包括:
- 合并 8 个 CICIDS2017 CSV 文件
- 去除列名首尾的空格
- 清理标签格式
- 处理无限值
- 去除缺失值
- 去除重复行
- 去除常量特征
- 使用 `LabelEncoder` 对目标标签进行编码
- 减少高度相关的特征
- 使用分层抽样创建训练/测试集
- 针对 Logistic Regression 缩放特征
- 准备 Full、Capped 和 Controlled 数据集场景
最终缩减后的特征集包含 **39 个选定特征**。
## 数据集场景
建模和评估使用了三种数据集场景。
### 完整 Dataset
Full Dataset 保留了所有 15 个流量类别,包括罕见攻击。
这提供了最广泛的攻击覆盖范围,并用于最终选定的模型。
### Capped Dataset
Capped Dataset 将每个类别的记录数限制为最多 10,000 条。
它保留了全部 15 个类别,但主要用于更快的实验和运行时间比较。
### Controlled Dataset
Controlled Dataset 移除了少于 1,000 条记录的类别。
它提高了指标的稳定性,但移除了罕见的攻击类别,从而降低了 IDS 的攻击覆盖范围。
## 机器学习模型
测试了以下模型:
- Logistic Regression
- Random Forest
- Decision Tree
对于每个模型,在适当的情况下测试了基线版本和平衡版本。
- **Baseline** 表示模型在训练时没有使用 `class_weight="balanced"`。
- **Balanced** 表示模型使用了 `class_weight="balanced"` 来赋予少数类更多的重要性。
## 最终选定模型
最终选定的模型是:
```
Decision Tree - Full Dataset Balanced Tuned 2
```
选择该模型是因为它在以下方面提供了最佳的整体平衡:
- 强大的分类性能
- 运行效率
- 可解释性
- 轻量级部署适用性
- 攻击覆盖范围
尽管 Controlled Dataset 模型获得了更高的宏 F1 分数,但它们移除了四个罕见的攻击类别:
- Heartbleed
- Infiltration
- Web Attack Sql Injection
- Web Attack XSS
由于这个原因,最终模型是从 Full Dataset 实验中选定的,因为它保留了全部 15 个流量类别。
## 最终模型性能
最终选定的模型:
```
Decision Tree - Full Dataset Balanced Tuned 2
```
主要指标:
```
Accuracy: 0.998372
Macro Precision: 0.916101
Macro Recall: 0.903544
Macro F1-score: 0.909394
Weighted F1-score: 0.998367
Training Time: approximately 25 seconds
```
罕见类别结果:
```
Heartbleed: F1-score 1.00
Infiltration: F1-score 0.92
Web Attack Sql Injection: F1-score 0.75
Web Attack XSS: F1-score 0.42
```
## Streamlit Dashboard 原型
我们开发了一个 Streamlit dashboard,用于演示如何在 notebook 之外重用最终模型。
该 dashboard 允许用户:
- 上传包含网络流数据的 CSV 文件
- 预览上传的数据
- 检查是否包含所需的 39 个特征
- 移除无效或不完整的行
- 使用保存的模型运行 IDS 预测
- 查看良性和可疑流量计数
- 查看预测的流量类别分布
- 审查可疑/攻击流量行
- 将预测结果下载为 CSV 文件
- 查看 Decision Tree 模型使用的最相关的流量特征
## Dashboard 所需文件
要运行 dashboard,必须将以下文件保留在同一个项目文件夹中:
```
app.py
final_decision_tree_ids_model.pkl
label_encoder.pkl
model_features.pkl
```
之所以需要这些 `.pkl` 文件,是因为 dashboard 会加载已保存的训练模型和支持对象。
文件说明:
```
app.py – Streamlit dashboard application
final_decision_tree_ids_model.pkl – saved final Decision Tree IDS model
label_encoder.pkl – converts the model’s numerical predictions back into readable traffic class names
model_features.pkl – stores the 39 selected feature names required by the model
```
如果没有这些 `.pkl` 文件,dashboard 将无法运行预测。
还可以包含一个 CSV 样本文件用于测试,例如:
```
dashboard_test_sample_with_label.csv
dashboard_test_sample_no_label.csv
```
## 如何在 Windows 上运行 Dashboard
1. 在 **Visual Studio Code** 中打开项目文件夹。
2. 在 VS Code 中打开终端。
3. 如果需要,导航到项目文件夹。例如:
```
cd C:\Users\YourName\Downloads\CA2-IDS
```
4. 运行 Streamlit dashboard:
```
python -m streamlit run app.py
```
5. dashboard 应该会自动在浏览器中打开。
6. 如果没有自动打开,请打开:
```
http://localhost:8501
```
7. 使用 dashboard 的上传区域上传 CSV 文件。
8. 查看 IDS 预测、类别摘要、可疑流量表和可下载的输出。
## 如何在 macOS 上运行 Dashboard
1. 在 **Visual Studio Code** 中打开项目文件夹。
2. 在 VS Code 中打开终端。
3. 如果需要,导航到项目文件夹。例如:
```
cd /Users/thiagogoncos/Downloads/CA2-IDS
```
4. 如果在 macOS 上使用 Anaconda 并出现 protobuf/libprotobuf 错误,请运行:
```
export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python
```
5. 然后运行 dashboard:
```
python -m streamlit run app.py
```
6. dashboard 应该会自动在浏览器中打开。
7. 如果没有自动打开,请打开:
```
http://localhost:8501
```
## 如何使用 Dashboard
1. 在浏览器中打开 dashboard。
2. 点击 **Browse files** 或将 CSV 文件拖放到上传区域。
3. 上传的 CSV 必须包含网络流记录,并且具有与训练时使用的相同的 39 个选定特征。
4. dashboard 将预览上传的数据。
5. dashboard 会检查所需特征是否存在。
6. 无效或不完整的行将被移除。
7. 保存的 Decision Tree 模型会预测每一有效行的流量类别。
8. dashboard 会显示:
```
Total analysed flows
Predicted benign traffic
Predicted suspicious/attack traffic
Prediction output table
Predicted class summary
Suspicious traffic summary
Most relevant traffic features
```
9. 可以使用下载按钮下载最终的预测结果。
## 使用的技术
- Python
- Jupyter Notebook
- Pandas
- NumPy
- Scikit-learn
- Matplotlib
- Seaborn
- Streamlit
- Joblib
## 项目文件
推荐的项目结构:
```
CA2-IDS/
│
├── app.py
├── IDS_CA2.ipynb
├── final_decision_tree_ids_model.pkl
├── label_encoder.pkl
├── model_features.pkl
├── dashboard_test_sample_with_label.csv
├── dashboard_test_sample_no_label.csv
│
├── Datasets/
│ └── CICIDS2017/
│
├── Report/
│ └── Sander2022164_Thiago2022161_Report.docx
│
├── Presentation/
│ └── Poster / presentation files
│
└── README.md
```
## 局限性
此 dashboard 是一个原型,而不是完整的生产级 IDS。
当前系统不直接捕获实时网络数据包。它仅适用于使用与训练时相同的 39 个选定特征的结构化 CSV 网络流数据。
对于实际场景的使用,在预测之前,需要一个额外的流提取层,将实时网络流量或捕获的数据包转换为正确的 CSV 格式。
该模型是在 CICIDS2017 数据集上训练的,这是一个历史性的公开数据集。未来的工作需要在使用更新的网络流量数据进行测试、重新训练和进一步验证后,才能进行实际部署。
## 最终结论
本项目表明,Decision Tree 模型可以为多分类网络入侵检测提供强大且轻量级的解决方案。
最终选定的模型保留了全部 15 个流量类别,实现了强大的整体性能,检测到了部分罕见的攻击类别,并且依然适用于简单的 dashboard 原型。
Streamlit dashboard 演示了如何重用已训练的模型来支持流量分类、可疑流量摘要和可下载的 IDS 预测结果。
标签:Apex, CICIDS2017, Kubernetes, NoSQL, Python, Streamlit, 多分类, 无后门, 机器学习, 网络安全, 访问控制, 逆向工具, 隐私保护