learnwithvidya/cic-modbus-passive-security-assessment
GitHub: learnwithvidya/cic-modbus-passive-security-assessment
基于 TShark 和 Python 的被动式工业网络安全评估工具,利用开源数据集将海量 Modbus/TCP 数据包转化为结构化的资产清单、通信关系图谱及写操作证据,并自动生成专业评估报告。
Stars: 0 | Forks: 0
# Passive Modbus/TCP 安全评估
一项基于证据的 passive 网络安全案例研究,使用了开源的 CIC Modbus 2023 packet-capture 数据集。
本项目演示了如何使用 TShark 和 Python 将大型的工业网络 capture 转换为:
- 观察到的资产信息
- 有向通信关系
- Modbus function-code 摘要
- 请求与响应分类
- Write-operation 证据
- 匿名化的发现
- 面向管理层的建议
- 一份专业的网络安全评估报告
## 项目概述
工业 packet capture 可能包含数百万条记录,难以通过人工解读。
本项目应用了结构化的 passive 分析工作流程来识别:
- capture 中观察到的设备
- 资产之间的通信路径
- 活跃的 Modbus/TCP 操作
- 发起 write command 的系统
- 疑似的 Modbus server 或控制 endpoint
- 频繁成为目标的 coil 和 register 地址
- 需要进行操作验证的 cyber-hygiene 观察
该分析是 passive 的。它不会主动扫描、利用或修改任何受监控的系统。
## 案例研究摘要
经过分析的 packet capture 包含:
| 指标 | 结果 |
|---|---:|
| 分析的 packet | 1,172,759 |
| 观察到的 IP 资产 | 7 |
| 有向通信路径 | 9 |
| Modbus 记录 | 205,422 |
| 真实的 Modbus write request | 61,873 |
| Write Single Coil request | 61,727 |
| Write Single Register request | 146 |
| 接收 write 的疑似控制 endpoint | 3 |
其中一个匿名化资产作为主要的 Modbus write 发起者,向三个疑似的 Modbus server 或控制 endpoint 发送了 write request。
Coil 地址 `1` 是最频繁成为目标的 coil 地址。同时观察到涉及地址 `8` 和 `35` 等的 register-write 活动。
这些发现证实了在 capture 中可见的通信行为。它们无法独立判定这些操作是经过授权的、意外的还是恶意的。
## 分析工作流

## 仓库结构
```
.
├── README.md
├── LICENSE
├── requirements.txt
├── .gitignore
│
├── src
│ ├── validate_and_summarize.py
│ ├── analyze_modbus_writes.py
│ ├── classify_modbus_write_direction.py
│ ├── anonymize_portfolio_evidence.py
│ └── generate_portfolio_report.py
│
├── sample_outputs
│ ├── public_asset_inventory.csv
│ ├── communication_pairs_anonymised.csv
│ ├── modbus_write_request_paths_anonymised.csv
│ └── modbus_target_addresses_anonymised.csv
│
├── figures
│ ├── modbus_function_distribution.png
│ └── modbus_write_request_paths.png
│
├── report
│ └── CIC_Modbus_Passive_Security_Assessment_Portfolio.pdf
│
├── linkedin
│ └── CIC_Modbus_Passive_Assessment_Carousel_202607.pdf
│
└── docs
├── methodology.md
├── portfolio_findings.md
└── management_summary.md
```
## 主要脚本
### `validate_and_summarize.py`
读取 packet 清单和 Modbus 证据导出文件,并生成:
* Protocol 摘要
* 观察到的资产清单
* 通信对摘要
* Modbus function-code 摘要
* 评估摘要
### 'analyze_modbus_writes.py'
提取与 Modbus write 相关的记录,并生成:
* Write-operation 证据
* Write-path 摘要
* Target-address 摘要
* Register-value 摘要
### 'classify_modbus_write_direction.py'
使用 TCP 端口方向将 write request 与 write response 区分开来:
* 目标端口为 502 表示这是疑似的 Modbus request
* 源端口为 502 表示这是疑似的 Modbus response
### 'anonymize_portfolio_evidence.py'
将原始 IP 地址替换为公开的别名,例如:
* Asset-01
* Asset-02
* Asset-03
* Asset-04
私有 IP 到别名的映射文件不包含在此仓库中。
### 'generate_portfolio_report.py'
生成:
* 辅助图表
* 供客户阅读的 Word 评估报告
* 带有时间戳的报告版本,以确保可追溯性
## 数据集
本案例研究使用了与 CIC Modbus 2023 数据集关联的 PCAP。
原始的 packet capture 不会通过此仓库重新分发。
用户应从其官方来源获取数据集,并遵守数据集提供者适用的许可、引用和使用条款。
此处呈现的分析是独立的,并非来自数据集提供者的官方报告。
标签:Modbus协议, PKINIT, 工业网络安全, 工控安全, 被动评估, 逆向工具, 防御绕过