CYSECPRP/zt-dt-industrial-cps
GitHub: CYSECPRP/zt-dt-industrial-cps
该项目通过零信任数字孪生和机器学习模型,实现对工业网络物理系统的实时异常检测,以增强安全韧性。
Stars: 105 | Forks: 2
# 工业网络物理系统实时异常检测的
零信任数字孪生方案
[](https://python.org) [](https://tensorflow.org) [](https://scikit-learn.org) [](https://streamlit.io) [](LICENSE) [](https://doi.org/10.1109/NMITCON65824.2025.11188236) []() []() []()
**TTEH 实验室 · 达亚南德萨加尔大学工程学院** *印度卡纳塔克邦班加罗尔 – 562112*
| | |
|:---:|---|
| **🏭 问题** | 工业网络物理系统面临绕过传统边界安全模型的网络攻击 |
| **💡 解决方案** | 数字孪生 + 双重机器学习模型 + 零信任引擎,实现实时连续威胁检测 |
`零信任安全` · `数字孪生` · `异常检测` · `工业CPS` · `实时机器学习`
📋 目录
| # | 章节 | 描述 |
|:-:|---------|-------------|
| 1 | [🔍 问题陈述](#-1-problem-statement) | 传统工业控制系统安全为何失效 |
| 2 | [🏗️ 系统架构](#️-2-system-architecture) | 三层防御设计 |
| 3 | [⚙️ 工作原理](#️-3-how-it-works) | 端到端流水线详解 |
| 4 | [🔧 核心模块](#-4-core-modules) | 深入探讨每个组件 |
| 5 | [🖥️ 实时仪表盘](#️-5-live-dashboard) | 实时安全运营中心监控界面 |
| 6 | [📊 结果与基准](#-6-results--benchmarks) | 性能指标与对比 |
| 7 | [🗂️ 项目结构](#️-7-project-structure) | 代码库组织 |
| 8 | [🚀 快速入门](#-8-quick-start) | 安装与使用指南 |
| 9 | [📦 数据集](#-9-datasets) | BATADAL 与 SWaT 基准数据集 |
| 10 | [⚠️ 局限性](#️-10-limitations) | 已知约束条件 |
| 11 | [🤝 贡献指南](#-11-contributing) | 如何参与贡献 |
| 12 | [👥 团队](#-12-team) | 贡献者与导师 |
| 🔮 数字孪生核心 | 🛡️ 零信任引擎 | 💉 攻击注入器 |
|---|---|---|
| 正常CPS行为的虚拟副本。它持续监控传入的操作数据,并通过隔离森林集成评分机制检测偏差。 **输出:** 异常分数 `(0–1)` | 为异常提供时间上下文。使用基于EMA的信任评分,通过自适应、基于风险的阈值,根据过去行为评估异常证据。 **输出:** `允许` · `限制` · `隔离` | 模拟真实攻击场景(放大、欺骗、漂移)进行验证。 **输出:** 带标签的攻击真实情况 |
|  *安全运营中心仪表盘 — 初始状态* |  *实时监控 — 安全状态* |
| ### 阶段一 — 训练与基线建立 ``` 📥 Collect clean operational data (50-100 timesteps) ↓ 🧠 Train Isolation Forest on normal behavior distribution ↓ 🎯 Calibrate anomaly thresholds via grid search + 5-fold CV ↓ 💾 Store model weights & initial trust scores ``` |
| ### 阶段二 — 实时监控与信任评估 *系统并非对单个孤立数据点做出二元决策,而是计算一个运行的"信任分数"。指数移动平均确保单个噪声读数不会触发误报,而持续攻击会在数学上迫使信任分数低于可接受阈值,触发自动隔离。* ``` 📡 Ingest streaming sensor data (no buffering) ↓ 🔮 Digital Twin computes reconstruction error ↓ 🌲 Isolation Forest scores: normal (−1) or anomalous (+1) ↓ 📊 Normalize to 0–1 anomaly score ↓ 🛡️ Update trust via EMA: Trust(t) = α × Trust(t-1) + (1−α) × (1 − Anomaly) ↓ 🚦 Apply policy: T ≥ 0.80 → ALLOW │ 0.50 ≤ T < 0.80 → RESTRICT │ T < 0.50 → ISOLATE ``` |
| ### 阶段三 — 攻击模拟与验证 ``` 💉 Inject controlled anomalies (scaling, spoofing, drift) ↓ 📏 Measure TPR, FPR, detection latency ↓ 📈 Evaluate Precision, Recall, F1-Score against ground truth ↓ 🔄 Fine-tune thresholds without disrupting live operations ``` |
| **隔离森林集成:** - 100个估计器,污染率 = 0.05 - 在高维空间中工作,无需距离度量。这避免了具有数百个传感器的系统中的"维度灾难"。 - 毫秒级推理(每样本约1ms) - 使用50个时间步的清洁基线数据进行训练 **传感器输入:** | 传感器 | 基线 | 噪声σ | |--------|----------|---------| | 流速 | 50.0 | ±2.0 | | 压力 | 120.0 | ±5.0 | | 温度 | 22.5 | ±0.5 | | 液位 | 8.0 | ±0.2 | | 泵速 | 1500.0 | ±10.0 | | ``` class DigitalTwin: def __init__(self): self.model = IsolationForest( contamination=0.05, random_state=42 ) self._baseline_training() def evaluate(self, sensor_data): """Returns 1 (anomaly) or 0 (normal)""" features = np.array( [list(sensor_data.values())] ) prediction = self.model.predict( features )[0] return 1 if prediction == -1 else 0 ``` |
| **信任公式:** ``` Trust(t) = α × Trust(t-1) + (1−α) × Behavior_Score ``` | 参数 | 值 | 用途 | |-----------|-------|---------| | α (alpha) | 0.80 | 80%历史权重 | | τ_high | 0.80 | 允许阈值 | | τ_low | 0.50 | 隔离阈值 | | 初始信任 | 1.0 | 完全信任起始 | | **策略动作:** | 动作 | 信任范围 | 响应 | |--------|:-----------:|----------| | ✅ **允许** | `T > 0.80` | 完全访问,正常操作 | | ⚠️ **限制** | `0.50 ≤ T ≤ 0.80` | 只读,速率限制 | | ⛔ **隔离** | `T < 0.50` | 网络隔离,警报 | |
Model: IF Ensemble
Reads: [flow, pressure, temp, level, speed]
Output: anomaly_score (0.0 – 1.0)"] ZTE["Zero Trust Engine
Policy: Threshold
Updates: Trust(t) = EMA(Trust(t-1), score)
Output: {ALLOW, RESTRICT, ISOLATE}"] LOG["Enforce & Log
Apply action → Log decision → Audit trail"] NEXT["⏱️ [Next Observation in ~100ms]"] STREAM --> DT DT --> ZTE ZTE --> LOG LOG --> NEXT end style PIPELINE fill:#0d1117,stroke:#3b82f6,stroke-width:2px,color:#fff style STREAM fill:#1a1a2e,stroke:#3b82f6,color:#fff style DT fill:#16213e,stroke:#0EA5E9,color:#fff style ZTE fill:#1a1a2e,stroke:#F59E0B,color:#fff style LOG fill:#16213e,stroke:#8B5CF6,color:#fff style NEXT fill:#1a1a2e,stroke:#22C55E,color:#fff ``` ## 🖥️ 5. 实时仪表盘 该项目包含一个**基于Streamlit的企业安全运营中心仪表盘** (`dashboard.py`),用于实时可视化和交互式攻击模拟。 ### 仪表盘功能 | 功能 | 描述 | |---------|-------------| | 📊 **实时监控** | 信任分数、异常分数和传感器流速的实时Plotly图表 | | 🌐 **CPS拓扑** | 带有信任级别进度条的工业网络状态视图 | | 📝 **审计日志** | 带完整历史的颜色编码零信任策略决策日志 | | 💉 **攻击注入** | 一键式定向攻击注入,用于实时测试 | | ⚙️ **模拟控制** | 可调节的节拍率、启动/停止和环境重置 | ### 📸 仪表盘截图
|  *🟢 系统安全 — 信任: 1.0 — 允许* |  *🔴 检测到入侵 — 信任: 0.79 — 限制* |
|  *📈 零信任评估引擎 — 实时图表* |  *🌐 CPS拓扑 — 节点信任级别* |
|  *📝 审计日志 — 零信任策略决策历史* | |
| 方法 | 精确率 (%) | 召回率 (%) | F1分数 (%) | 提升 |
|--------|:---:|:---:|:---:|:---:|
| 🥇 **ZT-DT (所提方案)** | **95.2** | **93.8** | **94.5** | — |
| 仅隔离森林 | 91.0 | 88.7 | 89.8 | +4.7% |
| 仅自编码器 | 89.6 | 86.1 | 87.8 | +6.7% |
| 基于规则的IDS | 84.2 | 82.5 | 83.3 | +11.2% |
### 效率与资源指标
| 方法 | 误报率 (%) ↓ | 延迟 (s) ↓ | CPU使用率 (%) ↓ |
|--------|:---:|:---:|:---:|
| 🥇 **ZT-DT (所提方案)** | **2.8** | **1.7** | **24.7** |
| 仅自编码器 | 6.3 | 1.4 | 28.5 |
| 仅隔离森林 | 5.5 | 1.6 | 32.2 |
| 基于规则的IDS | 8.1 | 2.1 | 36.8 |
### 性能可视化
```
xychart-beta
title "CPU Usage vs Latency Trade-off (Lower is Better)"
x-axis "Detection Method & Latency" ["AutoEncoder (1.4s)", "Isolation Forest (1.6s)", "ZT-DT Proposed (1.7s)", "Rule-Based IDS (2.1s)"]
y-axis "CPU Usage (%)" 20 --> 40
bar [28.5, 32.2, 24.7, 36.8]
```

*所有检测方法的F1分数、精确率、召回率和误报率对比*
### 💡 为何ZT-DT表现更优
| **🔄 双重检测** 隔离森林立即标记突发、极端的物理异常(如压力尖峰),而数字孪生的持续预测能捕捉细微、渐进的操作(如缓慢隐蔽的篡改)。两者结合,使攻击者几乎没有盲点。 | **📈 信任历史** 随时间累积证据——区分噪声与持续攻击。实现2.8%误报率。 | **⚡ 持续验证** 传统系统通常每隔几分钟批量分析网络日志。ZT-DT每100毫秒直接从数据流评估遥测数据,在可操作的损害发生前可靠地捕捉物理入侵。 | **🎯 自适应阈值** 通过交叉验证经验调优。平衡早期预警与操作员疲劳。 |
| #### 🖥️ 命令行模式 ``` python main.py ``` **预期输出:** ``` Initializing components... Initialization complete. Starting live stream... Timestamp | Status | Anomaly | Trust Score | ZTP Action --------------------------------------------------------------------------- 2024-01-15 10:30:15.123 | Normal | 0.12 | 0.9500 | ✅ ALLOW 2024-01-15 10:30:16.456 | Normal | 0.08 | 0.9600 | ✅ ALLOW 2024-01-15 10:30:17.789 | Attack | 0.87 | 0.3400 | ⛔ RESTRICT ``` | #### 📊 仪表盘模式 ``` streamlit run dashboard.py ``` **功能:** - 🟢 启动/停止监控 - 💉 注入定向攻击 - 📈 实时信任与异常图表 - 📝 颜色编码审计日志 - ⚙️ 可调节节拍率 |
🧪 实验设置(点击展开)
| 参数 | 详情 | 原理 |
|-----------|---------|-----------|
| **环境** | Python 3.8+ 基于套接字通信 | 真实网络模拟 |
| **组件** | 5个虚拟传感器 + PLC + 执行器 | 最小水处理拓扑 |
| **基线数据** | 50–100个时间步的清洁操作数据 | 足够IF正常性学习 |
| **IF配置** | 100个估计器,污染率=0.05 | 通过网格搜索优化 |
| **异常阈值** | 网格搜索 (0.5–0.9),5折交叉验证 | 最优TPR/FPR权衡 |
| **信任参数** | EMA α=0.80, τ_high=0.80, τ_low=0.50 | 根据ICICI-2025论文 |
| **数据划分** | 70/30训练/测试,60个时间步窗口 | 防止时间泄漏 |
| **攻击注入** | 每10个时间步一次(10%频率) | 真实攻击频率 |
| **硬件** | Intel i7 (4核), 16 GB RAM, 无GPU | 验证边缘可行性 |
| **评估指标** | 精确率, 召回率, F1, 误报率, 延迟, CPU | 全面评估 |
[](https://github.com/yourusername) [](https://tteh.dsu.edu.in)
**TTEH 实验室 • 工程学院 • 达亚南德萨加尔大学** *印度卡纳塔克邦班加罗尔 — 562112*
*如果您觉得此工作有用,请考虑给它一个* ⭐
标签:Apex, BATADAL数据集, Kubernetes, Python, scikit-learn, Streamlit, TensorFlow, 代码示例, 孤立森林, 工业安全, 工业网络物理系统, 工业韧性, 异常检测, 快速响应, 控制系统安全, 数字孪生, 数据分析, 无后门, 机器学习, 水分布系统, 网络安全, 自编码器, 访问控制, 逆向工具, 隐私保护, 零信任安全, 高性能检测