西门子PLC广泛运用在各行业的工业控制系统上,比如钢铁、石油、化工、电力、建材、机械制造、汽车、轻纺、交通运输、环保及文化娱乐等行业,其安全性直接关乎国家民生安全。
2019 BlackHat USA会议上,安全研究员SaraBitan指出西门子PLCZui新的通信协议S7Comm-Plus存在安全问题。为此,启明星辰ADLab对相关漏洞进行研究,并在西门子S7-1500设备上复现了攻击效果。
2.西门子PLC协议
西门子PLC包括S7-200、S7-300、S7-400、S7-1200以及S7-1500等多个系列。S7-200/300/400系列PLC采用早期的西门子私有协议S7comm进行通信,S7-1200/1500系列PLC采用西门子S7Comm-Plus协议进行通信。
S7Comm-Plus协议在S7comm基础上引入了密钥保护机制,以对抗会话劫持、重放攻击和中间人攻击等。TIA与PLC交互过程可分为以下4个阶段:
(1)TCP Connection
(2)COTP Connection
(3)S7Comm-Plus Connection,即四次握手密钥认证阶段
(4)S7Comm-Plus Function,功能码执行阶段。
图1 S7Comm-Plus协议交互流程
密钥认证成功后方可进入功能码执行阶段,图2为四次握手认证具体流程。
图2 四次握手认证
(1)TIA向PLC发送M1开启一个新的会话。
(2)PLC将返回给TIA一个响应包M2,M2包含PLC固件版本和随机数ServerSessionChallenge,长度20个字节。
图3 M2认证数据包
(3)TIA收到M2后,将向PLC发送M3,M3中包含SecurityKeyEncryptedKey(图4中红色框所示)。其中,Magic字段为0xfee1dead,长度180字节。SecurityKeyEncryptedKey里包含3个关键的加密字段(图4中蓝色框所示)。
图4 M3认证数据包
(4)PLC收到M3后,进行密钥认证。若认证成功,向TIA回复M4数据包。
四次握手认证完成后,TIA向PLC发送功能码数据包,功能码数据包中包含IntergrityPart字段,如图5所示。PLC收到功能码数据包后,校验IntergrityPart字段,若校验通过,执行相应功能码。
图5 stop功能码数据包