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'` 来优先考虑攻击检测。 目标是**高召回率**(捕捉攻击),而不仅仅是高准确率。 ### 最终混淆矩阵 ![混淆矩阵](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/0e42c216e7235115.jpg) ### 关键性能指标 | 类别 | 精确率 | 召回率 | 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, 入侵检测系统, 可解释人工智能, 安全数据湖, 异常检测, 数据科学, 无后门, 机器学习, 网络安全, 自动化响应, 规则生成, 资源验证, 逆向工具, 随机森林, 隐私保护