S7 通信协议
Siemens S7 Communication Protocol for PLC
S7 通信协议是西门子 PLC 的专有通信协议,用于 S7-300/400/1200/1500 系列编程、数据采集和远程控制。协议缺乏加密认证机制,是工控安全事件中暴露最多的 PLC 协议之一。
概述
S7 通信协议(S7comm)是西门子公司为 SIMATIC S7 系列 PLC 设计的专有通信协议,是西门子工业自动化生态系统的核心通信基础。S7 协议覆盖 S7-200、S7-300、S7-400、S7-1200 和 S7-1500 系列 PLC,以及对应的 HMI、上位机组态软件(如 WinCC、TIA Portal)等设备。
S7 协议是工控安全研究领域关注最多的 PLC 协议之一。由于协议规范长期未公开,安全社区通过逆向工程分析了协议的报文格式和功能机制,发现了大量安全隐患。根据 CNVD 和 NVD 的公开数据,涉及西门子 S7 协议的漏洞通报数量在 PLC 厂商中位居前列。
通信机制
S7 通信协议基于 TCP 102 端口,采用客户端-服务器模型,通常由编程软件、HMI 或 SCADA 系统作为客户端(上位机),PLC 作为服务端。协议握手过程分为三个阶段:首先是 COTP(Connection Oriented Transport Protocol)连接建立,协商 TPKT 参数;然后是 S7 Connection Setup,协商通信参数(如 PDU 大小、功能码范围);最后进入 S7 数据交换阶段。
S7 协议支持多种功能码,包括 Upload/Download(程序上传下载)、Read/Write Variable(变量读写)、Start/Stop(PLC 启停)、Diagnostics(诊断)、PLC Scan Cycle 控制(强制 I/O、设置系统状态)等。S7 数据报文包含 TPKT 头(4字节)、COTP 头和 S7 参数/数据域,数据编码采用大端序。
S7-1200/1500 系列引入了优化的块访问和 PUT/GET 通信机制。PUT/GET 支持双向数据交换,可通过 TIA Portal 配置通信伙伴关系(伙伴名称和 IP 地址白名单),并在较新固件版本中提供 TLS 加密选项。
安全风险分析
S7 协议的安全风险极其突出。传统 S7comm 协议无任何加密和认证机制——通信内容明文传输,TCP 连接建立无需身份验证,任何能到达 102 端口的设备均可发起 S7 通信。攻击者可执行的操作包括:读取 PLC 程序代码获取工艺逻辑、读写数据块(DB)修改控制参数、发送 Stop 命令停止 PLC 运行、通过强制功能(Force)覆盖 I/O 状态直接操控物理设备。
S7 协议的配置功能也带来信息泄露风险。通过 S7 协议的诊断请求,攻击者可获取 PLC 型号、固件版本、模块列表和系统状态等详细信息。COTP 连接参数中的 PDU 大小、功能码支持范围等也为攻击者提供了侦察信息。
S7-1200/1500 的 PUT/GET 通信虽然引入了伙伴白名单和可选的 TLS 加密,但在许多实际部署中 PUT/GET 功能被全局启用而未配置伙伴限制,安全机制形同虚设。西门子 PLC 的 Web 服务器(通过 HTTP/HTTPS 访问)如果暴露在网络上,也可能成为辅助攻击入口。
应用场景
S7 协议在中国工业领域应用极为广泛,覆盖汽车制造、化工、冶金、电力、水处理、轨道交通等几乎所有工业行业。S7-300/S7-400 系列在存量设备中占比较大,S7-1200/S7-1500 是新建项目的主流选择。S7 协议不仅用于 PLC 编程和维护,也是 SCADA 系统(如 WinCC)、MES 和 DCS 与西门子 PLC 之间数据交换的主要通道。
安全防护建议
在 PLC 前置部署工控防火墙,对 TCP 102 端口实施深度协议检测,仅允许授权的上位机 IP 地址访问,并基于 S7 功能码白名单进行细粒度控制(例如禁止 Upload 功能码以保护程序知识产权)。对于 S7-1200/1500,在 TIA Portal 中配置 PUT/GET 白名单并启用 TLS 加密。关闭 PLC 的 Web 服务器功能或将其限制在独立的维护网络中。部署终端白名单系统,确保只有经过认证的设备能够与 PLC 建立 S7 通信。在网络层实施 VLAN 隔离,将 PLC 所在的控制网络与其他网络区域严格分离。定期审查 S7 通信日志,检测异常的连接请求和功能码调用。
常见问题
发布日期:2026-05-19