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 中可见的通信行为。它们无法独立判定这些操作是经过授权的、意外的还是恶意的。 ## 分析工作流 ![Passive Modbus 分析工作流](https://static.pigsec.cn/wp-content/uploads/repos/cas/c8/c88fe0177bdba175540b562ad41aaccdc38c901157874c1eb016d4d1a43ba5b5.png) ## 仓库结构 ``` . ├── 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, 工业网络安全, 工控安全, 被动评估, 逆向工具, 防御绕过