rock0ne/prometheus-ot
GitHub: rock0ne/prometheus-ot
一个面向 OT/ICS 领域的安全平台,将工业流程模拟、多源遥测采集、确定性风险评分、异常检测与本地 AI 分析整合为可操作的训练与分析环境。
Stars: 0 | Forks: 0
# PROMETHEUS-OT
**一个 OT/ICS 安全平台与训练靶场 —— 包含实时 PLC 模拟、多源遥测采集、确定性风险评分、异常检测以及基于事实的 AI 分析工具。**
PROMETHEUS-OT 的诞生是因为运营技术(OT)颠覆了大多数分析师所接受的优先安全原则。在 IT 领域,你首先捍卫机密性(Confidentiality)。但在 OT 领域,流程停止就意味着工厂停工,因此优先级顺序变成了 **可用性 → 完整性 → 机密性(Availability → Integrity → Confidentiality)**。本平台让这种优先级的反转成为你可以实际操作的东西,而不仅仅是纸上谈兵:运行一个真实的 Modbus 流程,攻击它,观察检测机制触发,对案例进行分流,并生成监管机构或董事会所需的证据。

## 关于本仓库
这是一个更大型的私有平台的**精简公开子集**,作为作品样本发布。它包含了承载工程技术成果的应用程序代码——门户、后端服务、全部十二个遥测采集器、schema 迁移、MCP server,以及完整的测试与验证关卡套件:
| | 本仓库内容 |
|---|---|
| **Python 模块** | 140 |
| **测试** | 跨 98 个测试文件的 1,729 个测试函数 |
| **验证关卡** | 8 个关卡脚本 |
| **数据库迁移** | 14 个仅向前迁移(008–021) |
| **遥测采集器** | 12 |
| **后端服务** | 3(`living_engine`、`anomaly`、`code_sandbox`) |
| **技术栈** | Python/Flask、PostgreSQL + TimescaleDB、Redis、nginx、Docker Compose、Ollama |
**刻意未包含的内容:** 攻击工具(METATRON 助手和渗透测试控制台)、工业模拟层(OpenPLC 梯形逻辑、SCADA/HMI、流量生成)、可观测性配置以及设备封装。所有内部地址和主机名都已被重写为 `lab.invalid` 和文档说明范围,因此引用基础设施的路径和默认值仅供说明,并非真实存在。
由于缺少这些层,**此子集无法独立运行。** 下文的 Compose 文件和快速入门描述了完整的平台,包含它们是为了展示各个部分是如何组合在一起的。
## 它能做什么
### 1. 实时工业流程,而非模拟 mock
OpenPLC 在隔离的 OT 网络上通过 **Modbus TCP** 运行真实的梯形逻辑,驱动各类场景流程——水处理、能源变电站、油气管道、机场地面系统、制造生产线。流量生成器保持过程值和 Modbus 流量的真实性,使得检测机制是基于合理行为触发,而非触发于合成噪声。动态的 HMI 视图向操作员展示了网络行为带来的物理影响。

### 2. 来自真实安全工具的遥测采集
十二个采集器(`collectors/`)将异构的安全遥测数据标准化,汇入一个采用 partial-ECS schema 的统一 `collector_events` 存储:
`security_onion` · `splunk` · `wazuh` · `wazuh_indexer` · `velociraptor` · `greenbone` · `soar` · `ot_suricata` · `ot_zeek` · `threat_intel` · `unifi` · `zerotrust`
每个采集器都作为一个专用的最小权限身份进行身份验证,完全通过环境变量进行配置——不会在任何地方提交凭据(请参阅 [安全态势](#security-posture))。**事件搜索(Events Search)**控制台使用带有时间限制、完全参数化的 SQL 以及硬性语句超时的方式查询统一存储。

### 3. 确定性风险评分 —— 可解释,而非凭感觉
**动态漏洞引擎(Living Vulnerability Engine)**(`services/living_engine/`)利用 CVSS、实时的 FIRST **EPSS** 富化、**CISA KEV** 成员身份、漏洞利用成熟度、资产关键性、暴露面、控制置信度衰减、时间累积以及红蓝对抗(紫队)基本事实,将原始发现转化为有理有据的优先级决策。评分是确定性的,且每个输入都会展示出来,因此分析师可以解释某些事物*为什么*排在特定的位置。AI 可以**建议**输入调整;重新计算需要分析师批准并写入审计轨迹。
Greenbone/OpenVAS 通过 GMP 连接以进行经过身份验证的漏洞管理,其发现结果将汇入同一个案例系统。
### 4. 零误报预算的异常检测
`anomaly` 服务确立行为基线,并在两个领域运行确定性检测器——**OT 流程/协议**和 **IT/基础设施**——共享公共的观察表。检测器具备幂等性,并在**零误报预算**下运行:无法证明自身存在合理性的检测器不予发布。确认的观察结果会自动开启带有 SLA 计时的案例。
### 5. 案例管理、SLA 及经得起审查的证据
观察结果转化为带有自动 SLA 计时器、`/case` 调查工作区、证据保管链跟踪、MITRE ATT&CK 映射、交接班、值班调度以及基于事实的高管/技术报告生成的案例。**SOC 2** 证据视图和合规平面复用相同的案例底层数据,而不是对其进行重复构建——审计视角的记录和运营视角的记录来源于同一个事实来源。
### 6. 基于事实的 AI 分析工具
- **`/assistant`** —— 一个基于平台自身数据进行检索支撑的问答层。它根据实时的平台状态进行回答,并**引用**它所使用的数据。ATT&CK 技术说明通过平台自身的注册表解析,而不是依赖基础模型的记忆,这明显纠正了错误的技术回答。
- **检测副驾驶(Detection copilots)** 连接至 IDS 告警、PLC 标签、采集器日志和活动场景状态。
- 所有推理均在**本地通过 Ollama 运行**,支持 GPU 加速和流式传输;任何数据都不会离开主机。
**关于“我们自己的 AI”的诚实说明:** 助手运行一个自定义的 Ollama 模型(`prometheus-ot-purple`),该模型在开放权重基础模型之上叠加了紫队角色设定和事实基础约束。这是**自定义模型定义加上检索式事实基础——而不是微调(fine-tune)。** QLoRA 过程被刻意限制在一个基于真实已结案案例构建的带标签语料库之上,而在撰写本文时,该语料库实在太小,无法进行真正意义上的训练。在数据足以支撑更多需求之前,提示词加事实基础是正确的性能上限。

### 7. 受治理的攻击工具
*(实现未包含在此公开子集中。)* 浏览器渗透测试控制台和 METATRON 攻击助手支持针对该靶场的红队演练。Fleet Query 提供了一个基于 Velociraptor 的统一只读查询平面,而受治理的命令执行在**三道默认拒绝(fail-closed)关卡**背后,针对已注册的实验室主机运行授权命令,并且命令通过带外传递——绝不插入到查询文本中——以确保路径是注入安全的。
## 工程实践
本仓库中对审查者而言最重要的部分恰恰不是那些功能特性:
- **验证关卡取代简单断言。** `tests/run_*.sh` 中的关卡脚本会启动一次性的 Postgres 容器,应用真实的迁移链,并针对**真实的 schema** 运行集成测试——并且明确地**在测试被跳过时报错失败**,因为跳过并不等于证据。
- **仅向前迁移。** 带有编号,仅追加;schema 的更改绝不进行原地修改。
- **间接管理密钥,始终如此。** 每一个凭据都通过 `os.getenv` 或 `${VAR:-}` 解析。不存在被提交的 `.env`、密钥或证书。
- **最小权限集成。** 每个采集器都以专用的只读服务身份进行验证,其权限范围仅限于它所需的索引或资源。
- **只读、有审计的 MCP server。** `mcp/` 暴露了五个只读工具,并以仅追加的审计日志作为信任边界。
- **容器平面的深度防御。** 前端与 docker-socket-proxy 通信,而不是持有原始的 root Docker socket;`exec`、镜像和主机 endpoint 均被拦截,并且经过证实确实被拦截。
- **注入安全的查询构造。** 事件搜索和 Fleet Query 构建了完全参数化、受时间限制的 SQL/VQL,并强制执行语句超时。
## 运行完整平台
完整的 stack 启动命令:
```
docker compose up -d --build
```
| 服务 | URL |
|---|---|
| Portal | http://127.0.0.1 |
| Events Search | http://127.0.0.1/events |
| Living Vulnerability Engine | http://127.0.0.1/engine |
| Cyber Resilience | http://127.0.0.1/resilience |
| Platform Assistant | http://127.0.0.1/assistant |
| Tabletop Exercise | http://127.0.0.1/tabletop |
| FUXA SCADA/HMI | http://127.0.0.1:1881 |
| OpenPLC | http://127.0.0.1:8080 |
| IDS Console | http://127.0.0.1:1443 |
| Grafana SOC | http://127.0.0.1:3000 |
| Splunk Enterprise | http://127.0.0.1:8888 |
### 实验室默认凭据 —— 请务必更改
这些是**随实验室一起提供的种子值**,以便全新的克隆副本能够启动。它们是刻意公开的,并非任何人的真实凭据。在将 stack 暴露于 localhost 之外的环境之前,请更改它们:
| 服务 | 默认值 |
|---|---|
| OpenPLC | `openplc` / `openplc` |
| Splunk | `admin` / `Prometheus0T!` |
| METATRON SSH (port 2222) | `root` / `metatron` |
容器网段(`192.168.30-33.0/24` 分别用于 OT / 安全 / 渗透测试 / 管理)由 Compose 文件定义——它们描述的是 stack 构建的实验室环境,而不是任何外部网络。
## 分析师工作流
1. 选择一个场景,并确认流程已在 HMI 上实时运行。
2. 从渗透测试控制台运行侦察或 Modbus 练习。
3. 观察 Suricata 告警进入 IDS 控制台。
4. 在 Events Search 中搜索统一证据,或在 Grafana 中关联指标和日志。
5. 向助手询问 AIC 影响、告警解释或事件说明——并检查其引用。
6. 使用 Living Vulnerability Engine,将 CVSS/EPSS/KEV 加上暴露面和控制衰减转化为可解释的优先级。
7. 开启一个 Cyber Resilience 案例,跟踪修复证据直至结案,并生成高管报告。
8. 运行 `/tabletop`,根据 NIST 800-61 评分标准进行带分数的勒索软件应急响应(IR)演练。
## 安全态势
**本仓库中不包含任何真实凭据。** 配置在运行时由环境变量和保存在版本控制之外的主机端密钥文件提供。这一点是经过验证而非假设的:使用 **Gitleaks** 和 **TruffleHog** 对源码仓库进行的全历史扫描返回了**零验证密钥**,并且唯一提交过的具有敏感名称的文件是 `.env.example`,其值均为占位符。
此外,此公开子集中的内部地址和主机名已被重写为 `lab.invalid` 和文档说明范围。
### 负责任的使用
完整平台包含攻击工具和故意设置了漏洞的工业场景。它**仅限用于本地教育、检测工程和授权培训**。请勿将任何组件指向您不拥有或缺乏明确书面测试许可的系统。这些工业场景属于模拟——切勿将此 stack 连接到真实的流程网络。
## 仓库结构
| 路径 | 用途 |
|---|---|
| `portal/` | Flask 门户 —— 操作员 UI 和 API |
| `services/living_engine/` | 确定性风险评分与富化 |
| `services/anomaly/` | OT 和 IT 异常检测引擎 |
| `services/code_sandbox/` | 沙盒化执行服务 |
| `collectors/` | 12 个遥测采集器 |
| `db/migrations/` | 仅向前的 SQL 迁移 |
| `tests/` | 单元和测试,以及验证关卡脚本 |
| `mcp/` | 只读、有审计的 MCP server |
| `docs/screenshots/` | 界面截图 |
## 状态与限制
坦白地说,因为一个过度吹嘘自己的平台算不上是安全平台:
- 这是一个**单操作员实验室构建版本**,而非受支持的产品。它尚未经过外部渗透测试或第三方代码审计。
- 这个公开仓库是一个**子集**,无法独立运行,如上所述。
- 在 WSL2 环境下,GPU 推理吞吐量是**不稳定**的,因为显卡与主机共享——通常比 CPU 提升 3-4 倍左右,而不是此类设置经常声称的 10 倍提升。流式响应缓解了可感知的延迟问题。
- 一些集成需要凭据和基础设施,而这些被刻意不予分发。在配置完成前,这些组件是不生效的。
## 许可证
不授予任何重新使用的许可。本仓库作为作品样本发布;保留所有权利。
标签:AI风险缓解, Flask, OT/ICS, PKINIT, Python, TimescaleDB, 工控安全, 异常检测, 搜索引擎查询, 无后门, 测试用例, 版权保护, 逆向工具, 遥测收集