PradunyaKale/Automated-Cyber-Threat-Detection-and-Incident-Intelligence-Platform

GitHub: PradunyaKale/Automated-Cyber-Threat-Detection-and-Incident-Intelligence-Platform

一个结合特征分类、无监督异常检测和本地LLM报告生成的AI驱动网络入侵检测平台,旨在模拟真实SOC事件分诊流程。

Stars: 0 | Forks: 0

# 🧠 自动化网络威胁检测与事件智能平台 这是一个由 AI 驱动的网络入侵检测系统,它结合了**基于特征的攻击分类**、**无监督异常检测**,以及**本地 LLM**,从而生成人类可读的、SOC 分析师风格的事件报告——所有这些都封装在一个交互式的 Web 应用程序中。 基于 **CICIDS2017** 入侵检测数据集构建和训练。 ## 📌 概述 大多数入侵检测演示仅停留在“攻击/非攻击”的层面。本项目更进了一步,它分层采用了三种检测机制,并将结果输入到 LLM 中,由其解释*发生了什么*以及*如何应对*——这更接近真实 SOC(安全运营中心)对事件进行分诊处理的方式。 **Pipeline:** ``` Network Log │ ▼ Attack Detector (RandomForest, binary) │ ├── attack = 1 ──► Attack Type Classifier (RandomForest, multi-class) ──► Known Attack │ └── attack = 0 ──► Isolation Forest (anomaly check) ├── anomaly ──► Suspicious / Unknown Traffic └── normal ──► Normal Traffic ``` 一种同时也表现出统计异常的已知攻击不会被降级为“未知”——异常检测结果会作为 `Highly Anomalous` 行为标志叠加在原有结果之上,而不是作为一个单独的分支。这反映了真实的混合 IDS/SIEM 系统的工作方式:优先考虑基于特征的检测,并将异常检测作为应对新型/零日类活动的后备机制。 然后,每条已分类的日志都会被传递给**本地 LLM (Ollama + Llama 3.2)**,它会生成一条简短且具有可操作性的建议——无需云 API 密钥。 ## ✨ 功能 - **二元攻击检测** — RandomForest 分类器将流量标记为正常或恶意 - **多类攻击分类** — 识别特定的攻击类型(DDoS、PortScan、Patator 暴力破解、Web Attack、Bot 等) - **无监督异常检测** — Isolation Forest 捕获与任何已知特征都不匹配的统计异常流量 - **LLM 生成的建议** — 本地 Llama 3.2 模型(通过 Ollama)将原始预测结果转化为简明的 SOC 风格行动项 - **交互式 Gradio Web 应用** — 通过表单分析单条日志,或上传 CSV 进行批量分析 - **完整的评估套件** — 提供每个模型的分类报告、ROC-AUC 和混淆矩阵 ## 🛠 技术栈 | 组件 | 技术 | |----------------------|--------------------------------------| | 数据处理 | pandas, numpy | | ML 模型 | scikit-learn (RandomForest, IsolationForest) | | 模型持久化 | joblib | | 可视化 | matplotlib, seaborn | | LLM 推理 | Ollama (Llama 3.2) via OpenAI-compatible API | | Web 界面 | Gradio | | 数据集 | [CICIDS2017](https://www.unb.ca/cic/datasets/ids-2017.html) | ## 📁 项目结构 ``` your_project/ ├── Cyber.ipynb # Main notebook — full pipeline, training, evaluation, Gradio app ├── requirements.txt ├── README.md ├── data/ │ ├── cicids2017_balanced.csv # Balanced dataset (generate or place here — see Setup) │ └── batch_test.csv # Sample batch input for testing └── models/ ├── attack_detector.pkl ├── attack_classifier.pkl ├── anomaly_model.pkl └── feature_columns.pkl ``` ## ⚙️ 设置 ### 1. 克隆并安装依赖 ``` git clone cd your_project pip install -r requirements.txt ``` ### 2. 安装并启动 Ollama(用于生成 LLM 建议) 本项目使用**本地** LLM —— 无需 OpenAI API 密钥。`openai` 包仅用作客户端,与 Ollama 兼容 OpenAI 的本地 endpoint 进行通信。 ``` # 安装 Ollama:https://ollama.com/download ollama pull llama3.2 ollama serve ``` 在生成 LLM 建议之前,Ollama 必须在 `http://localhost:11434` 上运行。如果未运行,notebook 和应用程序将优雅地回退并提示“LLM unavailable”消息,而不会崩溃。 ### 3. 获取数据集 下载 **CICIDS2017** 数据集([官方来源](https://www.unb.ca/cic/datasets/ids-2017.html)),然后执行以下任一操作: - 运行 notebook 顶部的数据合并单元格(当前已被注释掉),从原始 CSV 文件构建 `cicids2017_balanced.csv`,**或者** - 将你自己预先平衡好的 `cicids2017_balanced.csv` 直接放入 `data/` 目录中 ### 4. 运行 notebook ``` jupyter notebook Cyber.ipynb ``` 从上到下运行所有单元格。最后一个单元格将在你的浏览器中启动 Gradio 应用程序。 ## 📊 模型评估 ### 攻击检测器(二元分类) | 指标 | 正常 | 攻击 | |--------|--------|--------| | Precision | 1.00 | 1.00 | | Recall | 0.99 | 1.00 | | F1-score | 1.00 | 1.00 | **总体准确率:** 1.00(4,000 个测试样本) · **ROC-AUC:** 0.9999 ![攻击检测器混淆矩阵](https://static.pigsec.cn/wp-content/uploads/repos/cas/dd/ddacc53cdbed8ab2e639a2ed6ec51e3569c7fb2229bd211780cd8e9e95d25272.png) ### 攻击类型分类器(多类分类) 在 13,854 个留出的测试样本上,对所有 14 个攻击类别(DDoS、PortScan、Bot、Patator 变体、Web Attacks、Heartbleed、Infiltration 等)实现了 **1.00 的 precision/recall/F1**。 ![攻击分类器混淆矩阵](https://static.pigsec.cn/wp-content/uploads/repos/cas/a6/a6531cbe87f8390890c1b1ca1c6d81c76059a428a56187fde81a168a7c96167a.png) ### Isolation Forest(异常检测)—— 合理性检查 由于 IsolationForest 是无监督的,其输出与真实标签进行了交叉核对,以此作为合理性检查,而非真正的评估: | 指标 | 正常 | 攻击/异常 | |--------|--------|-----------------| | Precision | 0.13 | 0.90 | | Recall | 0.92 | 0.10 | **总体准确率:** 0.21 **诚实的局限性:** 这与真实标签的一致性明显较弱,主要是因为 `contamination` 参数 (0.10) 与数据集的实际攻击比例不匹配(在此数据集中,攻击占了行数的大部分,而不是 10%)。在生产环境中,该层将使用调整过的 contamination 率或具有多个严重性级别的连续异常分数,而不是单一的二进制截断值。它作为 pipeline 中的次要后备信号保留下来,用于捕获主要分类器遗漏的流量,而不是作为独立的检测器。 ## 🖥️ 应用程序截图 ### 单日志分析 手动输入关键的网络流特征,即可获得即时分类以及 LLM 生成的建议。 ![单日志输入表单](https://static.pigsec.cn/wp-content/uploads/repos/cas/f5/f57d778f63bdb681e52e9b85bd1341e3ac4caa813925a136f181d8b6566a8ecb.png) ![单日志分析结果](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ade9373ade165d377f1f1d6fa59fc38d389af00f26e917bb1f796fd69ab7cd3e.png) ### 批量日志分析 上传包含多条日志的 CSV 文件,获取每条日志的详细分析以及汇总摘要。 ![批量分析结果表](https://static.pigsec.cn/wp-content/uploads/repos/cas/f1/f1b4359eb09884321a863e59570f8337dcbdbf628ead614f0bc7c535891a7bf3.png) 系统还会针对所有已分析的日志生成一份总体行动计划: ![批量 LLM 建议](https://static.pigsec.cn/wp-content/uploads/repos/cas/cf/cf5494d3904f01fb686fffd631a3ffa0a02549553bbc2a543926015fdbdaff41.png) ## 🧩 设计说明 - **为什么特征检测先于异常检测运行:** 对于分析师来说,一个已知且已分类的攻击比通用的“异常”标志更具可操作性,即使该攻击在统计上也显得异常。异常结果会作为行为标志叠加在上面,而不是覆盖已知的攻击分类。 - **为什么采用平衡采样:** 二元和批量级数据集在各类别之间都进行了平衡,以避免分类器仅仅学会预测多数类。 - **使用本地 LLM,而非云 API:** 保持项目完全自包含且可免费运行,没有外部 API 成本,数据也不会离开本机。 ## 🚧 已知局限性与未来工作 - Isolation Forest 的 contamination 参数是固定的,未根据真实的异常率进行调整(参见上文的评估部分) - 建议依赖于本地运行的 Ollama;目前未实现云 LLM 后备机制 - 罕见的攻击类别(例如 Heartbleed、Infiltration)在 CICIDS2017 中的样本非常少,这可能会限制分类器在现实环境中对这些类别的鲁棒性 - 没有用于历史事件追踪的持久化层(例如数据库或日志文件)——每个会话都是无状态的 计划中的改进:基于 SHAP 的单次预测特征重要性解释、经过调整/自适应的异常阈值,以及可选的持久化事件日志记录。 ## 👤 作者 **Pradunya Kale**
标签:AI风险缓解, Apex, DLL 劫持, 大语言模型, 安全运营中心, 异常检测, 机器学习, 网络安全, 网络映射, 逆向工具, 隐私保护