vedantbhamre/SCD-driven-Zeek-Suricata-rule-generation
GitHub: vedantbhamre/SCD-driven-Zeek-Suricata-rule-generation
该项目是一个概念验证原型,通过解析 IEC 61850 SCD 变电站配置文件自动构建资产模型并生成 Suricata 和 Zeek IDS 规则,解决变电站配置变更后手动维护检测规则的痛点。
Stars: 0 | Forks: 0
# SCD 到 IDS 规则生成(原型)
这是一个小型概念验证项目,旨在探索从 IEC 61850 变电站配置描述(SCD)文件自动生成 IDS 规则的想法。
这个原型不再在变电站配置发生更改时手动维护 IDS 规则,而是解析 SCD,构建一个中间资产模型,并使用该模型生成基础的 Suricata 和 Zeek 规则模板。
## 动机
SCD 文件已经包含了描述网络所需的信息:
- 存在哪些设备 (IED)
- 它们的网络地址 (IP/MAC)
- 它们的通信配置
- GOOSE 发布者及其关联的 APPID
该原型不是直接从 XML 生成 IDS 规则,而是首先将 SCD 转换为中间的 **AssetModel**。
这种分离使得解析器独立于规则生成器,并允许将相同的资产模型重用于不同的输出。
```
SCD File
│
▼
parser.py
│
▼
AssetModel
│
├──────────────┐
▼ ▼
Suricata Zeek
Rule Gen Rule Gen
```
这种设计也使得以后可以轻松扩展项目,增加其他输出方式,例如 NetBox 资产导入或网络可视化。
## 项目结构
```
IDS/
├── sample_data/
│ └── example.scd
│
├── src/
│ ├── parser.py
│ ├── asset_model.py
│ ├── rulegen.py
│ └── main.py
│
├── output/
│ ├── asset_model.json
│ ├── generated_suricata.rules
│ └── generated_zeek.zeek
│
└── tests/
└── test_parser.py
```
## 流程
### 1. 解析 SCD
解析器提取以下内容:
- IED 和访问点
- IP 地址
- MAC 地址
- GOOSE 发布者
- APPID
- VLAN 信息
### 2. 构建资产模型
提取的信息被转换为简单的内部表示。
AssetModel 作为变电站资产及其通信信息的清晰描述,而不与 XML 或特定的 IDS 引擎绑定。
### 3. 生成 IDS 规则
随后使用 AssetModel 为两个不同的 IDS 引擎生成输出。
### Suricata
Suricata 是基于特征(signature-based)的。
该原型生成:
- 已知资产 IP 列表
- 检测未知 IP 地址的规则
- 检测意外 GOOSE APPID 的规则
### Zeek
Zeek 是事件驱动的。
该原型不是生成许多单独的规则,而是生成:
- 一个可重用的 Zeek 脚本
- 从 AssetModel 填充的资产表
检测逻辑保持不变,只是不同变电站的资产数据会有所不同。
## 运行原型
在 `src` 目录下执行:
```
python3 main.py ../sample_data/example.scd --out-dir ../output
```
生成的文件将写入:
```
output/
```
## 运行测试
```
python3 tests/test_parser.py
```
这些测试用于验证解析器是否从示例 SCD 文件中提取了预期的资产。
## 验证
### Suricata
生成的规则使用以下命令进行了验证:
```
suricata -T
```
规则成功加载,没有语法错误。
### Zeek
Zeek 脚本是由 AssetModel 生成的,但未在运行中的 Zeek/Malcolm 环境中进行验证。
GOOSE 事件处理程序有意留作占位符,因为在开发期间无法获取 Malcolm/Zeek 设置暴露的确切事件。
## 当前范围
此原型目前专注于:
- 从 SCD 提取资产
- GOOSE 发布者提取
- 资产模型生成
- 基础 Suricata 规则生成
- 基础 Zeek 规则生成
## 后续工作
可能的扩展包括:
- 解析 GOOSE 订阅者信息 (ExtRef)
- MMS 和 Report Control Block
- 采样值 (SV)
- 与 NetBox 集成
- 在完整的 Malcolm 部署中进行验证
- 基于生成的资产模型添加更多 IDS 规则
## 备注
本仓库旨在作为一个小型概念验证,以探索将 IEC 61850 SCD 文件转换为 IDS 配置的一种可能流程。
重点在于理解整体架构——从 SCD 解析、到资产建模、再到 IDS 规则生成——而不是实现一个完整的生产就绪解决方案。
标签:IDS规则生成, IEC 61850, Metaprompt, PKINIT, Python, Rootkit, Suricata, Zeek, 工控安全, 无后门, 现代安全运营, 逆向工具