anshulec23-cloud/aegis-ics

GitHub: anshulec23-cloud/aegis-ics

面向 ICS/OT 环境的零信任安全框架,在 broker、服务器和设备端三层执行策略以实现主动遏制而非仅被动观测。

Stars: 3 | Forks: 0

# Aegis ICS ![测试](https://static.pigsec.cn/wp-content/uploads/repos/cas/6b/6b52945adbf8d9e421fe243515ae54cfbd3da263f16b1eabda37cdc0b797b8eb.svg) 本仓库包含两个独立的构建版本,用于在工业控制系统 (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, 工控安全, 底层编程, 微隔离, 物联网, 逆向工具, 零信任网络