Yashkothari-29/Autosnort-Generating-Snort-Rules-with-Explainable-AI-for-intrusion-detection
GitHub: Yashkothari-29/Autosnort-Generating-Snort-Rules-with-Explainable-AI-for-intrusion-detection
这是一个基于 Python 和 Flask 构建的入侵检测系统,利用可解释人工智能(XAI)技术分析网络流量,并能根据模型判断依据自动生成 Snort 检测规则。
Stars: 0 | Forks: 0
# AutoSnort
AutoSnort 是一个基于 Python 的 Web 应用程序,它使用“现实世界”的机器学习模型来检测网络入侵。其主要特点是利用可解释人工智能 (XAI),不仅能识别攻击,还能根据模型发现的最重要特征**自动生成相应的 Snort 规则**。
该项目在 CIC-IDS-2017 数据集上进行了训练,并使用专门平衡的 Random Forest 模型,以提供**针对少数攻击类别(如 Bot、Infiltration 和 Web Attack)的高召回率**,使其比标准的关注准确率的模型更有效。
## 🚀 关键特性
* **高召回率 IDS:** 使用通过 `class_weight='balanced'` 训练的 Random Forest 模型,有效捕捉罕见且危险的攻击。
* **可解释人工智能 (XAI):** 集成 SHAP (SHapley Additive exPlanations) 来解释模型*为什么*将数据包归类为恶意。
* **自动生成 Snort 规则:** 利用 SHAP 解释中的首要特征,自动生成动态的、基于行为的 Snort 规则。
* **基于 Web 的界面:** 一个简单的 Flask 应用程序提供了 UI,用于输入数据包数据并查看预测结果、XAI 解释和生成的规则。
* **完整的 ML Pipeline:** 包含完整的 Jupyter Notebook (`CIC_IDS_2017_Preprocessing.ipynb`),用于清洗、预处理和训练最终模型。
* **详细报告:** 训练脚本会自动保存混淆矩阵、分类报告和原始测试文件,以便于分析。
## 💻 技术栈
* **后端:** Flask
* **机器学习:** scikit-learn, pandas, numpy
* **可解释人工智能:** SHAP
* **数据可视化:** matplotlib, seaborn
## 📂 项目结构
```
AutoSnort/
├── app/
│ ├── app.py # The main Flask web server
│ ├── static/style.css # CSS for the web app
│ └── templates/index.html # HTML template for the web app
│
├── Datasets/
│ └── CICIDS-2017/ # Directory for the 8 raw CIC-IDS-2017 CSVs
│
├── model_cic/
│ ├── random_forest_model_cic.pkl # The final trained Random Forest model
│ ├── encoder_cic.pkl # The LabelEncoder object
│ ├── scaler_values_cic.pkl # The dictionary of normalization values
│ ├── feature_names_cic.pkl # The list of 15 features the model expects
│ │
│ ├── test_set_raw_values.csv # The UN-NORMALIZED test set (for demo)
│ ├── demo_samples_raw_by_class.csv # One RAW median sample for each attack type
│ │
│ ├── confusion_matrix_cicids.png # Final confusion matrix of the model
│ ├── classification_report_per_class.csv # Model's performance (Recall, Precision)
│ └── metrics_per_class.csv # Model's TP, TN, FP, FN counts
│
├── notebooks/
│ └── CIC_IDS_2017_Preprocessing.ipynb # Jupyter Notebook to run the full training pipeline
│
└── requirements.txt # All Python libraries required for the project
```
## ⚙️ 设置与安装
**1. 克隆仓库**
```
git clone https://github.com/Aditya-Pawar-1/AutoSnort.git
cd autosnort
```
**2. 创建虚拟环境(推荐)**
```
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
```
**3. 安装依赖项**
```
pip install -r requirements.txt
```
**4. 下载数据集(关键步骤)**
此模型需要 CIC-IDS-2017 数据集。
* 从可靠来源(例如 [Kaggle](https://www.google.com/search?q=https://www.kaggle.com/datasets/cic-ids-2017/cicids2017))下载所有 8 个 `.csv` 文件(周一至周五)。
* 将所有 8 个 CSV 文件放入 `Datasets/CICIDS-2017/` 目录中。训练 Notebook (`notebooks/CIC_IDS_2017_Preprocessing.ipynb`) 已预先配置为从此文件夹读取数据。
## 🚀 如何运行
使用此项目有两种方式:
### 1\. 运行预训练的 Web 应用(推荐)
此项目附带了一个预训练模型,因此您可以立即运行 Web 应用程序。
1. **进入 app 目录:**
cd app
2. **运行 Flask 服务器:**
python app.py
3. **打开应用程序:**
打开您的 Web 浏览器并访问 `http://127.0.0.1:5000`。
4. **如何测试:**
要演示该应用程序,您需要提供**原始、未归一化**的数据。最简单的方法是使用提供的演示文件:
* 打开 `model_cic/demo_samples_raw_by_class.csv`。
* 复制其中一行(例如 `Bot` 行)的 15 个特征值。
* 将这些值粘贴到网页上的表单中,以查看预测结果和生成的 Snort 规则。
### 2\. 训练新模型(可选)
如果您想从头开始重新训练模型:
1. **确保数据集已下载** 并放置在 `Datasets/CICIDS-2017/` 文件夹中(参见设置步骤 4)。
2. **运行 Jupyter Notebook:**
打开并运行 `notebooks/CIC_IDS_2017_Preprocessing.ipynb` 中的所有单元格。
3. **完成!** 脚本将自动:
* 加载并预处理所有 8 个 CSV 文件。
* 训练高召回率的 Random Forest 模型。
* 将所有新模型 (`.pkl`) 文件、报告和演示 CSV 保存到 `model_cic/` 目录中,覆盖旧文件。
* 您的 `app.py` 将在下次运行时自动使用此新模型。
## 📊 模型性能
最终模型是在 XAI-IDS 论文中的“Top 15”特征上训练的 Random Forest (`max_depth=10`)。它使用 `class_weight='balanced'` 来优先考虑攻击检测。
目标是**高召回率**(捕捉攻击),而不仅仅是高准确率。
### 最终混淆矩阵

### 关键性能指标
| 类别 | 精确率 | 召回率 | F1-Score |
| :--- | :--- | :--- | :--- |
| **Bot** | 0.0753 | **0.9830** | 0.1398 |
| **Brute Force** | 1.0000 | **0.9858** | 0.9929 |
| **Dos/Ddos** | 0.9985 | 0.9978 | 0.9981 |
| **Infiltration**| 1.0000 | **0.8182** | 0.9000 |
| **PortScan** | 0.6810 | **0.9896** | 0.8068 |
| **Web Attack** | 0.0474 | **0.6341** | 0.0883 |
| **BENIGN** | 0.9998 | 0.9856 | 0.9926 |
| | | | |
| **总体** | **98.65% 准确率** | | |
*有关真正例、假正例等的完整细分,请参阅 `model_cic/metrics_per_class.csv`。*
标签:Apex, CIC-IDS-2017, Flask, NoSQL, Python, Random Forest, SHAP, XAI, 入侵检测系统, 可解释人工智能, 安全数据湖, 异常检测, 数据科学, 无后门, 机器学习, 网络安全, 自动化响应, 规则生成, 资源验证, 逆向工具, 随机森林, 隐私保护