Kanwardeep-Singh/GridGuard-AI
GitHub: Kanwardeep-Singh/GridGuard-AI
GridGuard-AI 是一个面向 IEC 61850/MMS 工业控制系统的多智能体智能电网安全 Copilot,将 ML 异常检测与 LLM 驱动的根因分析、风险评估和自动化响应相结合,帮助 SOC 分析师快速处置工控安全事件。
Stars: 0 | Forks: 0
# GridGuard AI
**一个多智能体智能电网安全 copilot:面向 IEC 61850/MMS 工业控制系统的 ML 异常检测 + LLM agent 调查。**
本项目是我在 Friedrich-Alexander-Universität Erlangen-Nürnberg 的硕士学位论文的工程扩展,论文题目为*"基于 AI 的异常检测与 ICS 协议集成的智能电网"*。该论文在一个模拟的智能电网测试平台中构建了一个用于 MMS 流量的机器学习异常检测器。本仓库在该检测器之上封装了一个多智能体 LLM 层,负责调查每一个被标记的异常、检索相关的 ICS 安全上下文、评估风险并推荐响应措施——从而将原始的异常评分转化为 SOC 分析师可据以采取行动的事件报告。
## 架构
```
┌─────────────────────┐
MMS Traffic ──▶ │ Feature Engineering │
(real or └──────────┬───────────┘
synthetic) ▼
┌─────────────────────┐
│ Anomaly Detection │ Isolation Forest + Local Outlier
│ (ensemble) │ Factor, ensemble union/threshold
└──────────┬───────────┘
▼ (flagged event)
┌─────────────────────────────────────────────┐
│ Agent Orchestrator (LangGraph) │
│ │
│ Detection ─▶ ICS Knowledge (RAG) ─▶ │
│ Root Cause ─▶ Risk Assessment ─▶ Response │
└──────────────────────┬────────────────────────┘
▼
Incident Report (JSON)
▼
Power Automate webhook ─▶ Teams / Email
```
## 已实现与概念性功能
| 组件 | 状态 | 备注 |
|---|---|---|
| 特征工程(时间 + 网络特征) | ✅ 已实现 | `detection/feature_engineering.py` |
| Isolation Forest + LOF 集成检测器 | ✅ 已实现并测试 | `detection/` |
| 合成 MMS 流量生成器(DoS/MITM/FDI/重放) | ✅ 已实现 | `data/generate_synthetic_data.py` — MATLAB/Simulink 路径的 Python 替代方案,详见下文 |
| 多智能体 pipeline(5 个 agent + orchestrator) | ✅ 已实现并测试 | `agents/`,基于 LangGraph 构建 |
| 与提供商无关的 LLM 客户端(Anthropic / OpenAI / mock) | ✅ 已实现 | `agents/llm_client.py` — mock 提供商无需 API 密钥 |
| RAG 知识检索(NIST + MITRE ATT&CK for ICS) | ✅ 已实现 | TF-IDF + FAISS,请参阅下方的注意事项 |
| FastAPI 服务(`/detect`,`/incidents/investigate`) | ✅ 已实现并测试 | `api/` |
| Power Automate → Teams/邮件 webhook | ✅ 代码已实现,**未经实时测试** | 需要您自己的 Power Automate 租户和流 URL |
| Docker / docker-compose | ✅ 已编写,**未在此环境中进行构建测试**(此处无 Docker daemon 可用) | 标准的精简版 Python 镜像;在本地应该能顺利构建 |
| CI(GitHub Actions) | ✅ 已实现 | 在推送/PR 时运行 pytest + Docker 构建 |
| MATLAB/Simulink 数据生成 | 📝 来自原论文,此处未复现 | 请参阅下方的注意事项 |
| Azure 云部署 | 📝 未实现 | 作为下一步说明,未包含在此仓库中 |
| 数字孪生、自主修复、Sentinel 集成 | 📝 未来工作 | 特意将其排除在此原型的范围之外 |
### 值得注意的注意事项
- **MATLAB/Simulink → Python 合成数据。** 论文使用了基于 Simulink 建模的变电站测试平台来生成带标签的训练数据。这需要 MATLAB 许可证和经过验证的电网模型,将其打包到开源仓库中并不现实。`data/generate_synthetic_data.py` 是一个从头编写的 Python 生成器,能为正常流量和四种攻击类别(DoS、MITM、FDI、重放)产生具有统计学差异的特征分布,因此任何人只需克隆此仓库,就可以运行并测试 pipeline 的其余部分。它**不是**真实电网模拟数据的经验证替代品——请将其视为开发和演示的辅助工具,并在拥有真实数据捕获后,通过同一文件中的 `load_real_traffic()` 将其替换。
- **RAG 知识库。** ICS 知识 agent 从公开的 NIST SP 800-82 和 MITRE ATT&CK for ICS *摘要笔记*(为该仓库编写的原始文本——并非源文件的复制)中进行检索。实际的 IEC 61850 标准是 IEC 的付费出版物,因此未在此处进行索引。如果您拥有许可访问权限,请将您自己的 `.txt` 笔记放入 `rag/knowledge_base/` 并重建索引(`python -m rag.vectorstore`)。
- **检索使用 TF-IDF,而不是托管的 embedding 模型。** 这是一个经过深思熟虑的选择,这样整个 pipeline——包括 RAG——就可以在零 API 密钥和零外部调用的情况下运行。如果您在使用实时 LLM 提供商时希望获得更高质量的检索结果,请将 `rag/vectorstore.py` 替换为真实的 embedding 模型。
- **Mock LLM 提供商。** 默认情况下(`LLM_PROVIDER=mock`),agent 会使用基于确定规则替代方案,而不是真实的 LLM 调用,因此整个系统(包括 CI)无需任何 API 密钥即可运行和测试。它对输入特征执行简单的关键词/阈值启发式处理(例如,高 `request_rate` → DoS),以生成连贯的演示报告;它并没有进行真正的推理。请在 `.env` 中设置 `LLM_PROVIDER=anthropic` 或 `openai` 并填入真实密钥,以实现实际的 LLM 驱动的调查。
- **Power Automate 交付**如果没有您自己的 Microsoft 365 租户和配置好的流,则无法进行演练。webhook 代码是真实的,会将事件报告 JSON POST 到您配置的任何 URL;而 Power Automate 端的 Teams/邮件扇出连接则需要您自行配置。
## 仓库结构
```
GridGuard-AI/
├── agents/ # Detection, Root Cause, ICS Knowledge, Risk, Response agents + orchestrator
├── api/ # FastAPI app and routes
├── automation/ # Power Automate webhook integration
├── config/ # config.yaml + settings loader
├── data/ # synthetic MMS traffic generator
├── detection/ # feature engineering + Isolation Forest / LOF ensemble
├── rag/ # knowledge base ingestion, TF-IDF/FAISS vector store, retriever
├── scripts/ # end-to-end demo script
├── tests/ # pytest suite (14 tests, all passing)
├── Dockerfile / docker-compose.yml
└── .github/workflows/ci.yml
```
## 快速开始
```
git clone https://github.com/Kanwardeep-Singh/GridGuard-AI.git
cd GridGuard-AI
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # defaults to LLM_PROVIDER=mock, no key needed
```
运行端到端演示(合成数据 → 检测 → agent 调查):
```
python scripts/run_pipeline.py
```
运行测试套件:
```
pytest tests/ -v
```
运行 API:
```
uvicorn api.app:app --reload --port 8000
# 交互式文档位于 http://localhost:8000/docs
```
或者使用 Docker:
```
docker compose up --build
```
要使用真实的 LLM 而不是 mock 提供商,请在 `.env` 中设置:
```
LLM_PROVIDER=anthropic
ANTHROPIC_API_KEY=sk-ant-...
```
## 事件报告示例
这是 `scripts/run_pipeline.py` 针对合成流量(mock LLM 提供商)的演示输出——并非基准测试的生产结果:
```
{
"attack_type": "Denial of Service",
"protocol": "MMS",
"target": "NAN-Gateway",
"severity": "High",
"confidence": 0.8,
"impact": "Communication disruption / potential loss of protective function",
"recommended_actions": [
"Isolate affected asset from the control network segment",
"Enable enhanced monitoring on related IEDs",
"Notify on-call ICS security engineer"
],
"root_cause": "Traffic pattern consistent with a Denial of Service attempt: elevated request rate with reduced packet size.",
"knowledge_references": ["..."]
}
```
## 论文渊源
本仓库扩展了我论文工作中的异常检测核心部分:
- 针对 MMS 协议通信数据进行特征工程,以提取时间维度和网络层面的异常信号。
- 基于 ML 对 DoS、MITM、False Data Injection 和重放攻击进行检测。
- 通过 precision/recall/F1/detection-latency 等指标进行评估(有关此处使用的合理性边界检查,请参阅 `tests/`;完整的基准测试数据属于论文文档本身,而非本仓库)。
此扩展的新增部分是顶部的 agent 层:GridGuard AI 不会停留在异常评分上,而是调查*为什么*某些内容被标记,引入 ICS 安全上下文,对风险进行评分,并提出响应建议——这更贴近 SOC 分析师工作流程的实际需求。
## 许可证
MIT — 请参阅 `LICENSE`。
标签:DLL 劫持, 大语言模型, 安全运营中心, 工业控制系统安全, 异常检测, 智能电网, 网络映射, 自动化响应, 请求拦截, 逆向工具