anshulec23-cloud/aegis-ics
GitHub: anshulec23-cloud/aegis-ics
面向 ICS/OT 环境的零信任安全框架,在 broker、服务器和设备端三层执行策略以实现主动遏制而非仅被动观测。
Stars: 3 | Forks: 0
# Aegis ICS

本仓库包含两个独立的构建版本,用于在工业控制系统 (ICS) 和运营技术 (OT) 环境中实现零信任安全:
### 仓库结构
- **根目录 (版本 1.0.0)**:核心的零信任遥测摄取、HMAC 签名验证、ML 信任引擎,以及在 broker 层实现的自动化微分段隔离。
- **[`version-two/`](file:///C:/Users/morbi/.gemini/antigravity/scratch/aegis-ics/version-two)**:一个独立且经过强化的构建版本,具有防 Stuxnet 的 AI 代理命令执行器、基于 SQLite 的位置坐标审计,以及数学统计分析仪表板。
用于工业遥测的零信任微分段和设备端策略执行。
## 创新贡献
1. 微分段引擎
- 根据实时信任评分自动隔离可疑设备。
- 在切断不安全网络访问的同时保持设备继续运行。
2. 设备端策略引擎
- 在执行之前,在设备端拒绝不安全的服务器命令。
- 防止服务器被攻破后进而导致现场设备被攻破。
## 重要意义
大多数 ICS 演示仅停留在异常检测阶段。Aegis ICS 更进一步:它在 broker、服务器和设备本身上执行策略,因此系统可以遏制不良行为,而不仅仅是观察它。
## v1 版本的成果
- 仅限 TLS 的 MQTT broker 配置。
- 不允许匿名访问 broker。
- 敏感的 API 路由可以要求提供管理员 token。
- 遥测摄取在处理前会验证 payload 结构。
- 设备隔离已持久化并被测试覆盖。
- 安全关键的单元测试通过。
## 解决的问题
- 阻止格式错误或恶意的遥测数据导致 API 崩溃。
- 在设备边界拦截无效的控制命令。
- 减少设备或服务器被攻破时的爆炸半径。
- 防止在仓库中不必要地暴露密钥、密钥和日志。
## 系统概述
- `esp32_sim/` 模拟设备及其本地策略检查。
- `server/api/` 接收遥测数据,对信任进行评分,并提供仪表板服务。
- `server/ai_engine/` 计算信任度并隔离有风险的设备。
- `server/mqtt_broker/` 定义 broker TLS 和 ACL 规则。
- `policies/` 定义服务器和设备的命令限制。
- `certs/` 生成本地 TLS 证书。
- `docs/` 解释架构、威胁和评估。
- `tests/` 验证安全关键行为。
## 实时执行器运行情况 (版本 2)
以下是一个执行轨迹,展示了防 Stuxnet 执行器如何拦截协同的物理压力攻击:
### 1. SCADA 控制服务器日志 (`app.py`)
```
* Running on http://127.0.0.1:5000 (Press CTRL+C to quit)
[Server] Operator 'admin' logged in from Coordinates: X=12.4, Y=-48.1, Z=3.5.
[Server] Operator issued setpoint command: set_pressure = 7.0 bar
[Server] Dispatched control command: set_pressure=7.0
[Server] Telemetry received: Temp=32.40C, Pressure=7.05 bar (Signature: VALID)
[Server] Operator issued setpoint command: set_temp = 55.0C
[Server] AI SECURITY EXPOSURE BLOCK (Stuxnet Prevention): Blocked raising Temperature to 55.0C because live Pressure is 7.05 bar. Coordinated high-temperature/high-pressure damage profile detected.
[Server] Security violation audited to DB for operator 'admin' at Coordinate: X=12.4, Y=-48.1, Z=3.5
```
### 2. 模拟硬件设备日志 (`simulator.py`)
```
[ESP32_001] Connected to MQTT Broker - Subscribed to ics/control/ESP32_001
[ESP32_001] Telemetry published: Temp=25.32C, Pres=4.02 bar
[ESP32_001] Applied Pressure setpoint: 7.0 bar
[ESP32_001] Telemetry published: Temp=26.45C, Pres=7.05 bar
# 如果被入侵的操作员试图直接在硬件层面绕过安全限制:
[ESP32_001] Received direct command: set_temp = 70.0C
[ESP32_001] SECURITY REJECTION: Temp setpoint 70.0C exceeds hard hardware limit (65.0C)!
```
## 快速开始
您可以使用新的自动化 PowerShell 启动脚本,一键启动整个技术栈:
```
./start.ps1
```
这个菜单驱动的脚本会自动处理环境配置、生成 TLS 证书、启动 broker 服务、在单独的可视化终端窗口中启动服务器和模拟器,并加载 Web 仪表板。
或者,要手动启动服务,请阅读 `QUICKSTART.md` 获取分步说明。
## 验证
- 运行:`python -m unittest discover -s tests`
- CI:GitHub Actions 会在 push 和 pull request 时运行测试套件。
## 重要的环境变量
- `MQTT_HOST`, `MQTT_PORT`, `MQTT_USE_TLS`, `MQTT_CA_CERT`
- `MQTT_USERNAME`, `MQTT_PASSWORD`
- `FLASK_SECRET_KEY`
- `API_ADMIN_TOKEN`
- `DEVICE_KEY_ESP32_001`, `DEVICE_KEY_ESP32_002`
## 安全默认设置
- 默认开启 TLS。
- 明文 MQTT 不是默认选项。
- 敏感的 API 路由可以要求提供 `API_ADMIN_TOKEN`。
- 密钥和生成的数据会被 git 忽略。
## 仓库结构图
- `.env.example` - 本地环境变量值的模板。
- `.gitignore` - 防止密钥、证书、虚拟环境和生成的数据被提交到 git。
- `QUICKSTART.md` - 运行演示的精确命令。
- `README.md` - 本概述。
- `docs/trust_scoring.md` - 实时信任评分引擎的数学公式和权重设置。
- `version-two/` - 版本 2.0.0 的构建代码。
标签:ESP32, Flask, PKINIT, 工控安全, 底层编程, 微隔离, 物联网, 逆向工具, 零信任网络