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

### 攻击类型分类器(多类分类)
在 13,854 个留出的测试样本上,对所有 14 个攻击类别(DDoS、PortScan、Bot、Patator 变体、Web Attacks、Heartbleed、Infiltration 等)实现了 **1.00 的 precision/recall/F1**。

### Isolation Forest(异常检测)—— 合理性检查
由于 IsolationForest 是无监督的,其输出与真实标签进行了交叉核对,以此作为合理性检查,而非真正的评估:
| 指标 | 正常 | 攻击/异常 |
|--------|--------|-----------------|
| Precision | 0.13 | 0.90 |
| Recall | 0.92 | 0.10 |
**总体准确率:** 0.21
**诚实的局限性:** 这与真实标签的一致性明显较弱,主要是因为 `contamination` 参数 (0.10) 与数据集的实际攻击比例不匹配(在此数据集中,攻击占了行数的大部分,而不是 10%)。在生产环境中,该层将使用调整过的 contamination 率或具有多个严重性级别的连续异常分数,而不是单一的二进制截断值。它作为 pipeline 中的次要后备信号保留下来,用于捕获主要分类器遗漏的流量,而不是作为独立的检测器。
## 🖥️ 应用程序截图
### 单日志分析
手动输入关键的网络流特征,即可获得即时分类以及 LLM 生成的建议。


### 批量日志分析
上传包含多条日志的 CSV 文件,获取每条日志的详细分析以及汇总摘要。

系统还会针对所有已分析的日志生成一份总体行动计划:

## 🧩 设计说明
- **为什么特征检测先于异常检测运行:** 对于分析师来说,一个已知且已分类的攻击比通用的“异常”标志更具可操作性,即使该攻击在统计上也显得异常。异常结果会作为行为标志叠加在上面,而不是覆盖已知的攻击分类。
- **为什么采用平衡采样:** 二元和批量级数据集在各类别之间都进行了平衡,以避免分类器仅仅学会预测多数类。
- **使用本地 LLM,而非云 API:** 保持项目完全自包含且可免费运行,没有外部 API 成本,数据也不会离开本机。
## 🚧 已知局限性与未来工作
- Isolation Forest 的 contamination 参数是固定的,未根据真实的异常率进行调整(参见上文的评估部分)
- 建议依赖于本地运行的 Ollama;目前未实现云 LLM 后备机制
- 罕见的攻击类别(例如 Heartbleed、Infiltration)在 CICIDS2017 中的样本非常少,这可能会限制分类器在现实环境中对这些类别的鲁棒性
- 没有用于历史事件追踪的持久化层(例如数据库或日志文件)——每个会话都是无状态的
计划中的改进:基于 SHAP 的单次预测特征重要性解释、经过调整/自适应的异常阈值,以及可选的持久化事件日志记录。
## 👤 作者
**Pradunya Kale**
标签:AI风险缓解, Apex, DLL 劫持, 大语言模型, 安全运营中心, 异常检测, 机器学习, 网络安全, 网络映射, 逆向工具, 隐私保护