S7comm协议深度解析:西门子PLC通信机理与攻击识别实战

S7comm/S7comm-Plus 协议结构、功能码分析、典型攻击模式与DPI防御

系统讲解 S7comm 与 S7comm-Plus 协议栈结构、通信机理、功能码语义,结合真实攻击场景剖析重放、注入、停机、固件提取四类典型攻击,给出工业防火墙DPI识别与白名单防御的工程化方案。

引言:为什么 S7comm 是工控安全的”必修课”

西门子是全球 PLC 市场的绝对领导者,其 S7-200/300/400/1200/1500 系列 PLC 在中国工业现场占有率超过 40%,覆盖电力、化工、石油、冶金、市政、智能制造等关键行业。S7comm 与 S7comm-Plus 作为这些 PLC 的”母语”,是任何工控安全研究、协议解析、攻击检测、防御方案无法绕开的核心协议。

从工控安全事件复盘角度看,S7comm 协议相关的事件占比居高不下。Stuxnet(2010)针对 S7-315/417 的攻击是工控安全的”分水岭事件”,2019年ICS-CERT 披露的 Siemens SNAP LAN 远程代码执行漏洞族、2021年的S7-1500 拒绝服务漏洞、2024年披露的TIA Portal 工程文件解析漏洞,均涉及 S7comm 协议层的攻击面。

理解 S7comm 协议机理,是构建工控协议深度解析能力、识别协议层攻击、设计协议白名单防御的前提。

S7comm 协议栈结构

三层嵌套架构

S7comm 协议是一个三层嵌套的协议栈,从下到上分别为:

应用层:S7 Communication (S7comm) — 西门子私有协议
表示层:COTP (Connection Oriented Transport Protocol) — ISO 8073
传输层:TPKT (Transport Service on top of TCP) — RFC 1006
承载层:TCP/IP — TCP 102 端口

每一层都承担明确职责:

TPKT 层(Transport Service on top of TCP):

  • 主要作用是在 TCP 流中划分 PDU(Protocol Data Unit)边界
  • TPKT 头固定 4 字节:版本号(1 字节,固定 0x03)、保留(1 字节,0x00)、长度(2 字节,含 TPKT 头)
  • 长度字段使接收方能从字节流中切分出独立的协议层消息

COTP 层(Connection Oriented Transport Protocol):

  • ISO 8073 标准,提供面向连接的传输服务
  • COTP 头含 PDU 类型(CR/CC/DT/DR 等)、长度字段、目的/源引用(TPDU Number)
  • COTP 数据 PDU(DT)承载 S7comm 数据;连接建立 PDU(CR/CC)用于会话建立

S7comm 层(西门子私有协议):

  • 用户数据首部:协议 ID(固定 0x32)、ROSCTR(Job/Ack/Data)、冗余长度、PDU 引用
  • 参数区:功能码(Function Code)、子功能码(Subfunction Code)
  • 数据区:变长,具体格式依功能码而定

S7comm-Plus 的演进

S7-1200/1500 引入的 S7comm-Plus 在保持 TCP 102 端口的基础上做了重大演进:

演进一:引入 ISO-on-TCP 之上的私有传输层。 TPKT 头格式保留但增加了版本协商与扩展能力。

演进二:默认启用 TLS 加密。 S7-1500 与 TIA Portal 通信默认启用 TLS 1.2+,对没有配置 TLS 的客户端拒绝通信。

演进三:引入”完整连接保护”(Connection Protection)。 通过 CPU 属性的”连接机制”选项,要求客户端提供凭证。

演进四:引入符号寻址(Symbolic Addressing)。 不再仅依赖绝对地址,支持通过符号名访问变量。

演进六:差异化强认证。 引入基于”PG/PC 连接密码”的访问控制,密码错误次数超限锁定。

这些演进显著提升了 S7comm-Plus 的安全性,但也使协议解析与攻击检测的难度大幅上升。

S7comm 关键功能码语义

S7comm 协议的核心操作通过功能码(Function Code)与子功能码(Subfunction Code)组合定义。理解功能码语义是协议分析与攻击识别的关键。

用户数据功能码

功能码名称用途
0x04Read Var读取变量(输入/输出/位/字节/字/双字/计数器/定时器)
0x05Write Var写入变量
0x1ARequest Download请求下载(上传/下载块、读取块信息等)
0x1BDownload Block下载块(将块内容传输到 PLC)
0x1CDownload Ended下载结束
0x1DStart Upload开始上传(读取 CPU 中的块)
0x1EUpload上传块
0x1FUpload Ended上传结束
0x28PI Service程序调用(启动/停止 CPU、内存复位等)
0x29PLC Stop停止 PLC(CPU 切换到 STOP 模式)

PI Service 子功能(CPU 控制类,最敏感)

子功能码名称风险等级
0x00Unknown-
0x01Incomplete-
0x02Hot Restart中危(重新启动 CPU)
0x03Cold Restart高危(冷启动,丢失非保持变量)
0x04Stop极高危(CPU 立即停止)
0x05Copy RAM to ROM中危(写入 ROM)
0x06Compress低危(内存压缩)
0x09Memory Reset极高危(清空内存)
0x0BSet Password中危(设置 CPU 访问密码)

PI Service 子功能是 S7comm 攻击的核心战场。Stuxnet 利用 0x28 0x04 序列注入代码修改离心机频率;2018 年披露的 TRISIS/TRITON 攻击通过 S7 通信向 SIS 控制器注入恶意代码。

上传/下载子功能(块操作类)

子功能码名称用途风险等级
0x00Request请求下载指定块低
0x01Read Active Block Info读取活动块信息中
0x02Insert插入块极高危
0x03Insert End插入结束极高危
0x04Delete删除块极高危
0x05-0x07Module Identification模块识别低
0x08Read Block Info读取块信息(上传前)中
0x09-0x0BRead Block读取块(上传块内容)高(知识产权窃取)
0x0C-0x0ERead Block End上传结束高

实战功能码风险评估

从协议层安全分析角度,不同功能码的风险等级差异显著:

极高危功能码:CPU 停止、内存复位、块删除/插入、PG 密码修改——这些操作一旦被滥用直接威胁生产安全。

高危功能码:块上传、组态写入——这些操作一旦被滥用直接导致信息泄露或工艺篡改。

中危功能码:变量读写、块信息读取——这些是正常运维操作,但需基于最小权限原则授权。

低危功能码:心跳、连接保活——这些是正常通信操作,一般无需特殊授权。

工业防火墙应能识别功能码级别,并在 DI 配置(Detection & Inspection)层实施白名单控制。

S7comm 典型攻击模式

攻击模式一:协议重放攻击

机理:攻击者截获合法的 S7comm 通信报文,重新发送给 PLC,达到欺骗 PLC 执行特定操作的目的。

典型场景:

  • 截获工程师站的写值操作报文,重放到 PLC,使 PLC 执行非预期的工艺操作
  • 截获 PLC 的心跳报文,模拟 PLC 响应进行欺骗

真实案例:Stuxnet 的攻击链中包含协议重放环节。攻击者通过修改离心机频率的写值操作报文,使离心机长时间偏离正常频率运行,最终导致物理损毁。

防御:实施连接认证(PG/PC 连接密码)、消息序列号、反重放机制。

攻击模式二:协议注入攻击

机理:攻击者构造恶意的 S7comm 报文,直接发送给 PLC,覆盖 PLC 的正常运行逻辑。

典型场景:

  • 注入 PI Service 0x28 0x04(CPU Stop)使 PLC 立即停止
  • 注入变量写值操作修改关键工艺参数(温度、压力、流量)
  • 注入块下载操作替换 PLC 程序

真实案例:2018年 TRITON 攻击针对施耐德 Tricon 安全仪表系统,攻击者通过 S7 兼容协议注入恶意程序,使 SIS 控制器失效。

防御:工业防火墙基于白名单严格控制写操作、敏感功能码、组态下载。

攻击模式三:协议枚举与信息收集

机理:攻击者利用 S7comm 协议枚举 PLC 的型号、固件版本、模块配置、程序块,为后续攻击做准备。

典型场景:

  • 读取 PLC 系统状态列表(System State Lists)获取 CPU 型号、固件版本、模块信息
  • 枚举 PLC 中的块(OB/FB/FC/DB)获取程序结构信息
  • 读取 PLC 诊断缓冲区获取运行历史与告警

真实案例:2019 年披露的”Siemens S7-1500 CPU 信息泄露”漏洞(CVE-2019-13945),攻击者无需认证即可读取 PLC 信息。

防御:禁用未授权的枚举操作,启用 S7 通信密码,启用”访问保护”功能。

攻击模式四:协议级拒绝服务

机理:攻击者通过构造异常的 S7 消息使 PLC 进入异常状态。

典型场景:

  • 发送畸形 TPKT/COTP 报文导致 PLC 通信栈异常
  • 高频率连接请求耗尽 PLC 通信资源
  • 触发 PLC 看门狗机制导致 PLC 重启

真实案例:2018年披露的”Siemens S7-300/400 拒绝服务”漏洞(CVE-2018-4844),攻击者通过 S7comm 异常报文导致 PLC 进入 STOP 模式。

防御:工业防火墙的协议合规性检查、连接数限制、异常行为阻断。

工业防火墙的 S7comm DPI 防御

三层 DPI 识别架构

完整的 S7comm DPI 防御应包含三层识别:

协议层 DPI(Structural Validation):

  • TPKT 头合法性(版本号、长度字段)
  • COTP PDU 类型合法性(CR/CC/DT/DR 等)
  • S7comm 头合法性(协议 ID、ROSCTR、长度)
  • 嵌套关系合法性(TPKT 长度 ≥ COTP 长度 + 4;S7comm 长度 ≥ 用户数据)

功能码层 DPI(Function Code Filtering):

  • 基于白名单的允许功能码列表(如允许 0x04/0x05,禁止 0x28 0x04/0x09 等)
  • 子功能码级白名单(如允许 0x1A 0x00,禁止 0x1A 0x02/0x04)
  • 操作方向(上传 vs 下载)的精细控制

行为层 DPI(Behavioral Analysis):

  • 通信对象白名单(限定源 IP、目的 IP)
  • 通信时段控制(限定允许通信的时间窗口)
  • 通信量基线(正常通信量的统计基线,异常偏离告警)
  • 操作模式识别(识别批量下载、连续停机请求等异常模式)

白名单配置工程实践

基于风险评估与最小权限原则,S7comm 白名单配置建议:

层级一:协议白名单(最严格场景) 仅允许 0x04 读、0x05 写(写仅允许特定变量)、禁止所有 PI Service、禁止所有块上传/下载。

层级二:操作白名单(典型工程师站) 允许 0x04 读、0x05 写、0x1A 0x08-0x0E(块上传,用于备份)、0x28 0x02(热重启,用于维护);禁止 0x28 0x04/0x09(停机/复位)、禁止 0x1A 0x02-0x04(块删除/插入)。

层级三:审计白名单(仅记录,不阻断) 记录所有功能码与子功能码,用于安全审计与异常分析。

S7comm-Plus 的特殊处理

S7comm-Plus 由于默认启用 TLS 加密,工业防火墙的 DPI 处理有三种策略:

策略一:基于元数据识别(不解密)。 通过 S7comm-Plus 握手过程的元数据(连接来源、客户端标识、TLS 版本)识别异常。适合加密流量比例高、解密成本大的场景。

策略二:协商解密。 在客户端与 PLC 之间部署解密代理,使用防火墙自身证书从 TLS 终结,加密流量解密后进行 DPI,再加密转发给 PLC。适合加密流量比例中等、有解密需求的场景。

策略三:证书前置。 在 PLC 端预置防火墙证书,由防火墙作为 MitM 中间件解密后检查。适合对加密流量有强制要求的合规场景。

策略选择需权衡安全需求、合规要求、性能成本三方面因素。

实战检查清单

OT 环境 S7comm 安全防御建议检查以下要点:

协议层:

  • 工业防火墙是否支持 S7comm/S7comm-Plus 协议深度解析?
  • 是否启用协议合规性检查(畸形报文阻断)?
  • 是否配置功能码白名单?

认证层:

  • PLC 是否启用 S7 通信密码?
  • 是否启用 CPU 访问保护(Protection)?
  • 工程师站是否启用 PG/PC 连接密码?
  • S7-1500 是否启用 Connection Protection?

访问控制层:

  • 工程师站访问 PLC 是否限定特定 IP?
  • 远程运维是否通过堡垒机+协议代理?
  • 第三方维护是否时限授权?

审计层:

  • 是否记录所有 S7comm 通信日志?
  • 是否对敏感操作(停机、复位、块操作)实时告警?
  • 审计日志是否保存不少于6个月?

应急层:

  • 是否制定 S7comm 异常事件应急预案?
  • 是否具备 PLC 固件/程序备份与快速恢复能力?
  • 是否定期演练应急流程?

结语:协议理解是工控安全防护的根基

S7comm 协议作为西门子 PLC 的”母语”,其深度解析能力是工业防火墙、IDS、审计平台、安全测试工具的共同基础。理解协议结构、功能码语义、典型攻击模式,是识别异常行为、设计白名单策略、构建纵深防御的前提。

奇固科威工业防火墙基于完整 S7comm/S7comm-Plus 协议解析,提供功能码级、对象级、操作级三层白名单控制,结合行为基线与异常检测,为西门子 PLC 部署环境提供工程化的协议层安全防护。

OT 安全是开放的行业。下一阶段,全球威胁情报与协议攻击模式应联动,工业防火墙、IDS、SOC 平台应将协议层信号纳入统一安全运营,构建”协议可解析、行为可识别、异常可响应”的工控安全运营能力。

标签:S7comm西门子PLC工业协议解析DPIModbus工控防火墙协议攻击
发布:2026-09-22 | 作者:奇固科威

常见问题

Q: S7comm 和 S7comm-Plus 的核心差异是什么?
S7comm 基于 ISO-on-TCP(RFC 1006),运行于 TCP 102 端口,是西门子 S7-200/300/400 的传统通信协议;S7comm-Plus 是 S7-1200/1500 引入的新协议,运行于 TCP 102 端口但采用全新的 TPKT 版本与加密机制,握手、读写、程序上装均有自主协议格式。核心差异有三点:一是 S7comm 明文传输易于解析,S7comm-Plus 默认启用 TLS 加密或私有加密;二是 S7comm-Plus 引入完整连接保护(Connection Protection)与符号寻址;三是 S7comm-Plus 引入完整性校验与反重放机制。安全审计场景下需分别处理。
Q: 工业防火墙如何识别 S7comm 异常行为?
三层 DPI 识别:协议层——验证 S7comm 头部结构合法性、TPKT/COTP/S7 协议嵌套是否符合规范;功能码层——基于白名单限定允许的功能码(0x04 读值、0x05 写值、0x1A 下载/上传请求、0x1D 在线编辑等),异常功能码组合触发告警;行为层——基于基线检测异常通信对象、异常时序、异常数据量(如大批量读 PLC 程序即异常)。奇固科威工业防火墙支持完整 S7comm/S7comm-Plus 解析与白名单控制,覆盖功能码级、对象级、操作级三层控制。
Q: S7comm 协议攻击的主要危害是什么?
S7comm 攻击的危害分四类:一是信息泄露——读取 PLC 程序、组态、参数、配方,窃取工艺数据;二是状态篡改——写入错误参数导致工艺异常、产品质量事故、设备损坏;三是控制接管——通过 PG 功能强制停止 CPU、复位、内存清空、固件替换;四是横向移动——利用 S7comm 作为攻击载体在内网横向移动。Stuxnet(2010年)是经典代表,针对西门子 S7-315/417 通过重放攻击修改离心机频率导致设备物理损毁;2019年披露的ICS-CERT Siemens RCE漏洞族也利用S7comm作为攻击通道。
Q: PLC 程序上传(程序提取)的安全风险如何防范?
PLC 程序上传(功能码 0x1A 子功能 0x00-0x08)是攻击者窃取知识产权、研究 PLC 漏洞、构造针对性攻击的关键步骤。工程化防御方案包含五要点:一、网络隔离禁止从办公网到 OT 网的程序上传通道;二、工业防火墙白名单严格控制 0x1A 子功能调用,仅允许工程师站→目标 PLC 的单向;三、关键 PLC 启用 S7 通信密码(Connection Password)与“PG/PC 连接保护”;四、关键 PLC 启用“访问保护”功能(CPU 属性→Protection),要求操作员/工程师密码;五、上传事件应纳入审计与告警,异常上传(非常规时段、非常规操作员)立即告警。

相关阅读

Siemens产品安全态势分析(10月16日):CISA近期355个相关CVE漏洞深度梳理2026-10-16Siemens产品安全态势分析(10月16日):CISA近期361个相关CVE漏洞深度梳理2026-10-16CVE-2026-94127深度解析:BIG-IP APM漏洞在野利用威胁与防护2026-10-12Siemens产品安全态势分析(10月9日):CISA近期16个相关CVE漏洞深度梳理2026-10-09CVE-2026-86950深度解析:Multiple Products漏洞在野利用威胁与防护2026-09-30
选择区号