西门子PLC S7-1500漏洞分析与复现

发布者:ADLab
发布于:2020-04-23 15:28

1. 研究背景

西门子PLC广泛运用在各行业的工业控制系统上,比如钢铁、石油、化工、电力、建材、机械制造、汽车、轻纺、交通运输、环保及文化娱乐等行业,其安全性直接关乎国家民生安全。

2019 BlackHat USA会议上, 安全研究员Sara Bitan指出西门子PLC最新的通信协议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功能码数据包

3. 算法分析

虽然主机TIA与PLC之间的认证引入了非对称加密算法,但是PLC与主机之间并没有进行绑定,因此仍然存在安全问题,攻击者可以伪造成一个恶意的主机/工作站,利用已知的公钥及加密算法,对PLC进行非法控制或者中间人攻击。

下面介绍密钥生成算法流程。


图6 密钥生成算法

l  主机(TIA)随机生成20字节的PreKey,使用类椭圆曲线加密算法和公钥加密PreKey,作为Keying materaial 1(对应图7中M3数据包的EG1、EG2)。

l  主机(TIA)根据PreKey计算KDF,并由此生成CEK(Checksum Encryption Key),CS(Checksum Seed),KEK(Key Encryption Key)。

l  主机(TIA)将Challenge和KDK相结合,使用AES-CTR加密算法和KEK进行加密,其结果作为Keying material 3(对应M3数据包中的EncryptedChallenge和EncryptedKDK)。

l  主机(TIA)用CS和Keying material 3进行哈希运算(Tabulation Hash),得到结果TB-HASH。

l  主机(TIA)使用AES-ECB算法和CEK来加密TB-HASH并得到结果Keying material 2(对应M3数据包中的EncryptedChecksum)。


图7 M3数据包结构

4.  漏洞复现

我们对OMSp_core_managed.dll进行逆向分析,通过调用关键接口函数,构造四次握手加密认证数据包。攻击端首先发送认证数据包,密钥认证完成后发送stop功能码,成功使得西门子PLC S7-1500停止运行。

正常运行时,PLC S7-1500运行指示灯为绿色。运行状态如图8所示。


图8:攻击前PLC正常运行

发送攻击脚本后,PLC S7-1500运行指示灯变为黄色,PLC停止运行,PLC状态如图9所示。


图9:攻击后PLC停止运行

攻击演示视频如下所示:

演示视频

5. 安全建议

西门子官方已发布安全补丁:

d74K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0k6i4u0@1i4K6u0V1M7r3!0J5N6r3q4D9i4K6u0W2M7$3W2W2L8h3g2F1M7#2)9J5k6h3y4G2L8g2)9J5c8Y4m8J5L8$3c8#2j5%4c8U0k6i4u0@1i4K6u0r3M7r3c8X3i4K6u0r3M7%4y4S2i4K6u0V1x3U0x3J5y4o6p5^5i4K6u0W2M7r3c8X3

7c9K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0k6i4u0@1i4K6u0V1M7r3!0J5N6r3q4D9i4K6u0W2M7$3W2W2L8h3g2F1M7#2)9J5k6h3y4G2L8g2)9J5c8Y4m8J5L8$3c8#2j5%4c8U0k6i4u0@1i4K6u0r3M7r3c8X3i4K6u0r3M7%4y4S2i4K6u0V1x3U0M7K6y4K6V1&6i4K6u0W2M7r3c8X3

6. 小结

在本次研究中,我们分析了西门子S7系列最新的通信协议S7Comm-Plus。虽然主机与PLC之间的通信协议采用了强大的加密算法,但是PLC并没有对TIA进行认证,使得攻击者可以伪装成一个恶意的TIA,在其通信过程中插入任意指令,如PLC的启停指令,即可达到远程控制PLC的效果。除此之外,相同型号/固件版本的PLC,其私钥完全相同,这意味着同样的攻击方法适用于所有相同的PLC。

7.  参考文献

[1]814K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6A6i4K6u0W2j5X3I4S2j5$3E0Z5j5i4c8Q4x3X3g2U0L8$3#2Q4x3V1k6g2f1@1q4Q4x3X3b7I4z5g2)9J5c8W2c8Z5N6i4u0K6k6r3q4&6i4K6u0r3N6i4y4Q4x3X3b7I4z5g2)9J5k6p5u0A6N6r3q4F1i4K6u0V1f1X3!0Y4N6h3f1%4i4K6u0V1f1X3!0Y4N6h3g2Q4x3X3c8q4L8X3N6A6L8X3g2W2M7X3W2F1k6#2)9J5k6q4y4@1j5i4c8A6L8$3&6Q4x3X3c8m8N6s2c8S2j5$3E0K6i4K6u0V1e0$3&6Q4x3X3c8e0y4#2)9J5k6q4y4A6L8h3q4@1K9h3y4Q4x3X3c8b7e0p5y4K6i4K6u0W2M7r3c8X3

[2]8f7K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6A6i4K6u0W2j5X3I4S2j5$3E0Z5j5i4c8Q4x3X3g2U0L8$3#2Q4x3V1k6g2f1@1q4Q4x3X3b7I4z5g2)9J5c8W2c8Z5N6i4u0K6k6r3q4&6i4K6u0r3N6i4y4Q4x3X3b7I4z5g2)9J5k6p5u0A6N6r3q4F1i4K6u0V1f1X3!0Y4N6h3f1%4i4K6u0V1f1X3!0Y4N6h3g2Q4x3X3c8q4L8X3N6A6L8X3g2W2M7X3W2F1k6#2)9J5k6q4y4@1j5i4c8A6L8$3&6Q4x3X3c8m8N6s2c8S2j5$3E0K6i4K6u0V1e0$3&6Q4x3X3c8e0y4#2)9J5k6q4y4A6L8h3q4@1K9h3y4Q4x3X3c8b7e0p5y4K6i4K6u0V1N6%4m8Q4x3X3g2H3k6r3j5`.

[3]ca6K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2K6k6h3y4K6K9r3W2Q4x3X3g2U0L8$3#2Q4x3V1j5K6x3o6t1&6x3q4)9J5k6h3S2@1L8h3H3`.





声明:该文观点仅代表作者本人,转载请注明来自看雪