awais1-cybersec/solar-shield
GitHub: awais1-cybersec/solar-shield
基于 LSTM Autoencoder 的物联网太阳能逆变器实时异常检测系统,可识别虚假数据注入、重放攻击和硬件篡改等网络物理威胁。
Stars: 1 | Forks: 0
## 🎥 实时演示
观看 Solar Shield 的实际运行情况。下面的视频演示了实时的 MQTT 攻击注入(FDI、Volatility)以及 LSTM Autoencoder 触发 SOC 仪表板从 **SYSTEM NORMAL** 变为 **THREAT DETECTED** 的即时响应。
https://github.com/user-attachments/assets/e5c0492c-c9f8-4e50-8ca1-4f84070c6a7d
## 🌟 核心功能
* **🧠 AI 驱动检测:** 使用定制的长短期记忆网络 (LSTM) Autoencoder 来识别遥测数据中复杂的非线性偏差。
* **⚡ 实时监控:** 专为 SOC(安全运营中心)环境和蓝队监控设计的亚秒级推理管道。
* **⚔️ 红队验证:** 内置模拟攻击向量,用于测试针对虚假数据注入、重放和硬件篡改的检测效能。
* **🔗 物理信息逻辑:** 根据“主太阳能周期”验证数据,以确保传感器读数符合真实世界中的热力学和电学定律。
## 🏗️ 顶层系统架构
该架构分为三个不同的层,确保了物理隔离以及从边缘到 SOC 仪表板的安全遥测传输。
## 🛠️ 技术栈
| 层级 | 使用的技术 | 描述 |
| --- | --- | --- |
| **边缘层** | C++, ESP32-S3 | 模拟物理太阳能逆变器硬件和遥测生成。 |
| **传输层** | Eclipse Mosquitto, MQTT | 部署在 Ubuntu 24.04.4 LTS 网关上的安全消息代理。 |
| **AI 引擎** | Python, TensorFlow/Keras | 执行 `solar_shield.keras` 的实时异常检测系统 (R-TADS) 脚本。 |
| **数据与可视化** | InfluxDB, Grafana | 用于蓝队分类的时间序列存储和实时 SOC 仪表板展示。 |
## ⚙️ 工作原理:多变量相关性
Solar Shield 的运行前提是,复杂的网络物理攻击可能会破坏变量之间潜在的物理相关性,即使单个指标仍保持在“正常”阈值内。
ESP32-S3 边缘设备生成由程序化 **主太阳能周期** 控制的 **8 特征多变量数据集**(包括电压、电流、辐照度、温度等)。该周期保证了当辐照度达到峰值时,电压和电流会基于模拟的光伏物理学产生适当且成比例的响应。
R-TADS Python 脚本没有依赖静态阈值,而是将此遥测数据输入到预训练的 **LSTM Autoencoder** 中。该模型尝试对时间序列进行压缩和重建。由于它仅在良性的、物理上准确的数据上进行训练,任何偏离主太阳能周期的情况(例如,在零辐照度下出现高电流)都会导致高重建误差,从而标记为异常。
## 🚀 安装与配置指南
### 前置条件
* Ubuntu 24.04.4 LTS 环境(网关/主机)。
* ESP32-S3 微控制器。
* 已安装 Python 3.10+。
### 步骤 1:传输层(MQTT Broker)
部署 Mosquitto 代理以处理边缘通信。
```
sudo apt update
sudo apt install mosquitto mosquitto-clients
sudo systemctl enable mosquitto
sudo systemctl start mosquitto
```
### 步骤 2:数据栈(InfluxDB & Grafana)
1. 安装并启动 InfluxDB 以捕获时间序列遥测数据。
2. 安装 Grafana 并导入 `Dashboards/solar-shield.json` 模板。
3. 通过 Data Sources 菜单将 Grafana 连接到您的 InfluxDB 实例。
### 步骤 3:AI 引擎(R-TADS)
克隆仓库并初始化 AI 检测环境。
```
git clone https://github.com/awais1-cybersec/solar-shield.git
cd solar-shield/Ai-engine
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python3 run_inference.py --model models/solar_shield.keras
```
### 步骤 4:边缘层(ESP32-S3)
使用 PlatformIO 或 Arduino IDE 打开 `Firmware` 目录。使用您的 MQTT Broker IP 更新 `simulation.ino` 文件,并将固件刷入 ESP32-S3。
## 🎯 红队验证场景
为了确保 SOC 仪表板和 AI 引擎在压力下能发挥最佳性能,边缘固件包含了针对特定威胁向量的触发器:
1. **通过漂移进行的虚假数据注入 (FDI):** 模拟受损传感器逐渐偏移电压或频率指标。传统的阈值告警在此会失效,但 LSTM 可以检测到多变量相关性的破坏。
2. **重放攻击(陈旧数据):** 攻击者拦截并重新广播以前的合法网络流量(例如,在午夜传输正午的辐照度数据)。LSTM 模型的时间感知能力会立即标记出序列的异常。
3. **波动性攻击(硬件篡改):** 注入突然、不稳定的电流或温度尖峰,模拟对手对逆变器电气负载进行的物理篡改。
## 📊 性能:MSE 阈值判定
异常分类是使用**均方误差 (MSE)** 动态确定的。
重建误差的公式会持续进行评估:
$MSE = \frac{1}{n} \sum_{i=1}^{n} (Y_i - \hat{Y_i})^2$
* **$Y_i$** = 来自 ESP32-S3 的实际观测遥测值。
* **$\hat{Y_i}$** = 由 LSTM Autoencoder 重建的值。
在正常运行期间,MSE 徘徊在计算出的 `MAX_NORMAL_MSE` 阈值以下。当发生攻击场景(如 FDI 或重放攻击)时,模型无法重建恶意模式,导致 MSE 呈指数级飙升。Grafana SOC 仪表板会实时跟踪此 MSE 值,并在突破阈值时立即从绿色状态变为危急的红色,从而实现快速的蓝队响应。
## 🤝 致谢与许可
**团队成员:** Muhammad Awais Asgher, Muhammad Ahmed, Mohammad Huzaifa Asim
**指导教师:** Dr.Amna Iqbal (Assistant_Professor@RiphahInternationalUniversity)
**项目范围:** 毕业设计 / 独立安全研究
**许可证:** 本项目基于 MIT 许可证授权 - 有关详细信息,请参见 [LICENSE]() 文件。
该架构分为三个不同的层,确保了物理隔离以及从边缘到 SOC 仪表板的安全遥测传输。
## 🛠️ 技术栈
| 层级 | 使用的技术 | 描述 |
| --- | --- | --- |
| **边缘层** | C++, ESP32-S3 | 模拟物理太阳能逆变器硬件和遥测生成。 |
| **传输层** | Eclipse Mosquitto, MQTT | 部署在 Ubuntu 24.04.4 LTS 网关上的安全消息代理。 |
| **AI 引擎** | Python, TensorFlow/Keras | 执行 `solar_shield.keras` 的实时异常检测系统 (R-TADS) 脚本。 |
| **数据与可视化** | InfluxDB, Grafana | 用于蓝队分类的时间序列存储和实时 SOC 仪表板展示。 |
## ⚙️ 工作原理:多变量相关性
Solar Shield 的运行前提是,复杂的网络物理攻击可能会破坏变量之间潜在的物理相关性,即使单个指标仍保持在“正常”阈值内。
ESP32-S3 边缘设备生成由程序化 **主太阳能周期** 控制的 **8 特征多变量数据集**(包括电压、电流、辐照度、温度等)。该周期保证了当辐照度达到峰值时,电压和电流会基于模拟的光伏物理学产生适当且成比例的响应。
R-TADS Python 脚本没有依赖静态阈值,而是将此遥测数据输入到预训练的 **LSTM Autoencoder** 中。该模型尝试对时间序列进行压缩和重建。由于它仅在良性的、物理上准确的数据上进行训练,任何偏离主太阳能周期的情况(例如,在零辐照度下出现高电流)都会导致高重建误差,从而标记为异常。
## 🚀 安装与配置指南
### 前置条件
* Ubuntu 24.04.4 LTS 环境(网关/主机)。
* ESP32-S3 微控制器。
* 已安装 Python 3.10+。
### 步骤 1:传输层(MQTT Broker)
部署 Mosquitto 代理以处理边缘通信。
```
sudo apt update
sudo apt install mosquitto mosquitto-clients
sudo systemctl enable mosquitto
sudo systemctl start mosquitto
```
### 步骤 2:数据栈(InfluxDB & Grafana)
1. 安装并启动 InfluxDB 以捕获时间序列遥测数据。
2. 安装 Grafana 并导入 `Dashboards/solar-shield.json` 模板。
3. 通过 Data Sources 菜单将 Grafana 连接到您的 InfluxDB 实例。
### 步骤 3:AI 引擎(R-TADS)
克隆仓库并初始化 AI 检测环境。
```
git clone https://github.com/awais1-cybersec/solar-shield.git
cd solar-shield/Ai-engine
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python3 run_inference.py --model models/solar_shield.keras
```
### 步骤 4:边缘层(ESP32-S3)
使用 PlatformIO 或 Arduino IDE 打开 `Firmware` 目录。使用您的 MQTT Broker IP 更新 `simulation.ino` 文件,并将固件刷入 ESP32-S3。
## 🎯 红队验证场景
为了确保 SOC 仪表板和 AI 引擎在压力下能发挥最佳性能,边缘固件包含了针对特定威胁向量的触发器:
1. **通过漂移进行的虚假数据注入 (FDI):** 模拟受损传感器逐渐偏移电压或频率指标。传统的阈值告警在此会失效,但 LSTM 可以检测到多变量相关性的破坏。
2. **重放攻击(陈旧数据):** 攻击者拦截并重新广播以前的合法网络流量(例如,在午夜传输正午的辐照度数据)。LSTM 模型的时间感知能力会立即标记出序列的异常。
3. **波动性攻击(硬件篡改):** 注入突然、不稳定的电流或温度尖峰,模拟对手对逆变器电气负载进行的物理篡改。
## 📊 性能:MSE 阈值判定
异常分类是使用**均方误差 (MSE)** 动态确定的。
重建误差的公式会持续进行评估:
$MSE = \frac{1}{n} \sum_{i=1}^{n} (Y_i - \hat{Y_i})^2$
* **$Y_i$** = 来自 ESP32-S3 的实际观测遥测值。
* **$\hat{Y_i}$** = 由 LSTM Autoencoder 重建的值。
在正常运行期间,MSE 徘徊在计算出的 `MAX_NORMAL_MSE` 阈值以下。当发生攻击场景(如 FDI 或重放攻击)时,模型无法重建恶意模式,导致 MSE 呈指数级飙升。Grafana SOC 仪表板会实时跟踪此 MSE 值,并在突破阈值时立即从绿色状态变为危急的红色,从而实现快速的蓝队响应。
## 🤝 致谢与许可
**团队成员:** Muhammad Awais Asgher, Muhammad Ahmed, Mohammad Huzaifa Asim
**指导教师:** Dr.Amna Iqbal (Assistant_Professor@RiphahInternationalUniversity)
**项目范围:** 毕业设计 / 独立安全研究
**许可证:** 本项目基于 MIT 许可证授权 - 有关详细信息,请参见 [LICENSE]() 文件。标签:AI驱动, Autoencoder, CISA项目, ESP32-S3, FDI, Grafana, IoT, Keras, LSTM, PKINIT, Python, SOC仪表板, TensorFlow, 固件安全, 太阳能逆变器, 实时异常检测, 工控安全, 数据波动攻击, 新能源, 无后门, 时序数据, 智能电网, 智能硬件, 深度学习, 物联网, 网络安全, 能源安全, 自编码器, 虚假数据注入, 边缘计算, 逆向工具, 通信协议安全, 隐私保护