1 相关研究
S7-1200和S7-1500 PLC协议和安全性比较的基本情况如下:
S7CommPlus协议在TCP(TTPKT)和面向连接的传输协议(COTP)上运行,用于在PLC和工程软件之间传输关键的操作和配置信息、例如PLC逻辑、诊断信息、配置详细信息和数据块值。操作员从TIA Portal初始化到PLC连接,例如,点击TIA门户中的“Go online”按钮,如下图:
以下步骤将被执行:
1、TIA Portal 向 网络广播 Profinet Discovery 和基本配置协议 (PN-DCP) “Identify All”数据包。
2、所有PLC或设备都使用PN-DCP “Identify OK” 数据包回复 TIA Portal。
3、TIA Portal初始化与PLC的TCP握手,PLC将回复。
4、TIA Portal和PLC交换COTP连接信息。
5、TIA Portal发送第一个S7数据包。
6、PLC使用包含1字节和20字节反重放机制的数据包进行回复。
7、TIA Portal 会回复一个包含反重播字节和 132 字节阵列的数据包、即反重放响应。
8、TIA Portal将数据包连同请求的操作一起发送到PLC,并在每个数据包中进行20字节的完整性检查,其中包含特殊字节,如果任何 S7CommPlus反重放字节数或完整性检查值数据不正确,连接的另一端将发送TCP重置数据包,会话将终止。
图4 S7CommPlus会话和反重放机制
图5 S7CommPlus(连接)请求(来自TIA Portal)
图6 S7 质询数据包(来自PLC)
图7 S7CommPlus响应数据包(来自TIA Portal)(左:流量捕获、右:字节位置表示)
1.1 抗重放字节
1.2 响应数据包中的加密
1.3 功能包“加密”
图8 S7CommPlus功能包(来自TIA Portal)
如下表,对上述几个图中的标号字段进行了总结:
字段号 |
描述 |
目的 |
① |
ASCII格式的服务器会话号 |
通信会话得标识符。 |
② |
PC会话号 |
TIA Portal会话的标识符。 |
③ |
以十六进制表示的服务器会话号 |
通信会话得标识符。 |
④ |
防重播字节 |
首先从以前的固件版本中找到防重放字节。 |
⑤ |
S7连接挑战 |
用于S7响应和完整性检查的密钥生成。 |
⑥ |
7字节字符串 |
用于密钥生成的S7响应的一部分可以被操纵。 |
⑦ |
9字节字符串 |
用于密钥生成的S7响应的一部分可以被操纵。 |
⑧ |
132字节块 |
S7响应的主要部分之一,其包括用于加密的信息和关于生成的信息 |
⑨ |
第一次加密 |
防重放机制的主要部分之一,在会话启动时由PLC检查 |
⑩ |
第二次加密 |
防重放机制的主要部分之一,在启动会话时由PLC检查。它依赖于第一次加密, |
⑪ |
24字节完整性检查 |
为每个包含S7数据的数据包编译的完整性检查字节。 |
2 脆弱性实验分析
2.1 TIA Portal分析
图9 步骤A至F 用于分析TIA Portal流程。蓝框显示“挑战阵列”。黄色框显示“功能B”
为了支持分析,在软件和PLC之间的通信期间设置了几个断点。通过手动分析发现,每次TIA Portal发出请求时,字节数组都会发生显著变化。通过使用SCAPY向PLC发送完全相同的连接请求数据包,可以确认该20字节块与连接请求数据包的有效负载没有明显关系。从以前的工作来看,鉴于S7CommPlus协议的可用信息有限,从哪里开始逆向工程过程并不明显。因此,对于任何进行这种分析的人来说,第一个挑战是确定生态系统中易受攻击的部分和分析的切入点,如下所示。为了开始分析,在没有任何断点的情况下使用一次TIA Portal的搜索功能,并生成一个完整的通信会话(由来自PLC的TCP重置数据包结束)。通过软件上的WinDbg手动启动中断,然后使用命令“s”在存储器中搜索来自PLC的20字节,可以识别包含该20字节块的存储器地址。该存储器地址可以仅通过一次“s”搜索来定位,或者通常仅定位存储整个接收到的S7询问分组的区域。进一步的搜索必须通过使用访问时断点来完成,并跟踪该20字节数组被写入的特定地址。一旦确定了该地址,在重新启动TIA Portal之前,该地址不会更改。如标签所示,在该地址上设置访问时断点“断点A”。在使用TIA Portal初始化另一个S7通信后,发现断点A是通过两个不同的位置访问的,这两个位置都是涉及将20字节块复制到另一个地址的功能。第一个函数复制断点A指向的地址,而第二个函数将字节复制到特定地址,如标签所示。因此,为了继续调查,为两个识别的地址中的每一个设置了另外两个访问断点,即断点B和断点C。发现断点B指向第3字节的地址,并且断点C存储20字节数组的第3到第18字节(图6中的标记⑤)。这个16字节值(字节3到18),或“挑战数组”,已被发现在字节生成过程的其余部分起着重要作用。进一步发现,断点B和C所指向的两个存储器位置分别涉及为s7commplus响应和功能分组生成字节。
2.1.1 来自TIA Portal的S7响应包
2.1.1.1可以操作的字节
2.1.1.2 第一次加密
图10 第一次加密
2.1.1.3 第二次加密
(1)“有限域”增量算法(见图11).有限域是具有有限阶的元素的集合,并且乘法和加法的运算应该符合某些规则。域的阶是域中元素的个数,并且阶应该是素数的幂。
图11 “有限域”增量算法
对于该递增,字段的顺序是2128,其可以由16字节值表示。在分析过程中,不可能找到广义不可约多项式(有限域中的运算规则),因此计算由一组运算和一组常数来表示。要开始操作,将16字节值乘以从0到255的所有整数。此16字节值是从与两个加密密钥相同的哈希生成的(请参阅标签)。它采用四个4字节小字节值的形式。计算如图11所示。在乘法过程中,如果乘数的nTH根为2,其中n为正整数,即乘数为2,4,8…,输出将与特定值xpn进行异或运算,并存储在具有256个元素的数组或数组“ value256[]”中,其中每个元素都是16字节值。由于值必须保持在“有限域”内,乘法的其余部分不能简单地通过将输入值乘以乘数来实现。通过首先以其二进制形式表示乘数来完成计算。然后从最高有效位读取乘法器的二进制。如果是“ 0 ”,则没有进一步的操作。但是如果它是‘1’,例如,如果乘数是“9”,其在二进制中是“1001”,则value256[23]和value256[20]将被异或在一起,并且输出被存储在value256中。
图12 算法a480
图13 第二次加密
(2)算法A480。该算法以地址的存储器偏移量命名为“算法A480 ”,取图11中的“值256[]”。“有限域”增量算法的输出,以及作为输入的16字节值。16字节输入“ B_输入”被分成四个4字节数组,它们以小端格式表示。图12示出了算法A480的伪代码,算法的第一部分在循环中执行,将依次读取4字节值的每个字节位置。通过从B_输入的第一元素中的第一字节位置开始读取,到第二元素中的第一字节位置,等等。(即B_输入[0][0],然后B_输入[1][0],等等)。与十六进制中的任何值一样,它可以是0x00到0xFF,这对应于value256[]中16字节值的不同256个元素。16字节值(第一个读取值为value256[B_input[0][0]])将附加零,零的长度取决于它当前所在的元素。例如,对于元素0或B_INPUT[0],追加了16个零。类似地,对于B_输入[1]到B_输入[3],将分别添加12、8或4个零。结果将被存储,并与添加了零的下一个值进行异或运算。(例如,经XOR运算的前两个值是Value256[B_输入[0][0]]和Value256[B_输入[1][0]],两者都添加了零)。在进行到下一字节位置(例如,从B_输入[X][0]到B_输入[X][1])之前,每一递增的结果将被转换成大端字节序,向右移位1个字节,并且再次被转换回小端字节序值。对于最后一个位置,不是将32字节值向右移动1个字节,而是执行更复杂的操作。操作从伪代码中语句的左侧开始。该操作包括:“<<”二进制左移、“>>”二进制右移和“^”逐位异或。在移位期间,任何方向上超过16字节限制的字节都将被丢弃。生成的32字节值将被划分为8个不同的4字节值用于操作。在算法结束时,通过将四个4字节数组连接成字节串来获得16字节串。
(3)明文生成。如图13所示,在用于第二加密的明文生成过程中有五个不同的输入。这五个输入是:1)16字节值;2)第一次加密的结果(图13中的红框);3)16字节密文(图13中的绿色框);4)从另一个密文缩减的8字节值(图13中的蓝框);以及5)用零填充的4字节计数器值。实验已经表明,除了第一次加密的结果之外,所有这些输入相对于点Ⓕ处标识的两个散列是恒定的。明文生成过程的每一步都涉及对两个输入进行XOR运算,并通过“算法A480”运行结果。
(4)完成第二次加密。在生成明文之后,使用“密钥2 ”对其进行加密(参见图9),使用与第一加密相同的对称密钥加密。密文将用作132字节块的最后16个字节,即来自TIA Portal的反重放响应。图13示出了“有限域”增量算法、算法A480和明文生成是如何相互关联的。输入在132字节数组中的字节位置以及如何生成第二次加密也可以在图中找到。与Cheng[6]的工作相比,对S7响应数据包的生成提供了更完整的描述,两个加密的细节也提供了Biham后来工作之外的额外信息。值得注意的是,算法A480先前已被简要地呈现为制表散列,但没有围绕用于生成第二加密的步骤的细节。由于先前描述的较低级字节计算,现在呈现该进一步分析。这允许对修补可能的操纵提出初步建议。
2.1.2 来自TIA Portal的功能包
图14 完整性检查
图15 用于生成8字节块的伪代码,它是第一个HMAC明文的一部分
2.1.2.1 第一次HMAC
第一次HMAC的计算在S7响应分组被发送到PLC之前完成。HMAC的明文由从断点C读取的8字节值和16字节质询数组组成(参见图9).图15示出了用于8字节生成的伪代码,该伪代码对于S7函数完整性检查是关键的,但是在文献中先前没有描述。该算法未被识别为标准化算法,因此伪代码是通过分析汇编代码生成的。由于8字节生成算法是完整性字节生成的基本部分,因此从安全角度来看,该分析具有指导意义。然后,使用在图9中标签Ⓕ处的黑盒中生成的24字节密钥来对组合的24字节值进行签名。32字节的HMAC输出将被缩减为24字节值,该值将被存储并用作第二个HMAC的密钥。
2.1.3.2 第二个HMAC
2.1.3 总结和讨论
本节记录了获取有关S7CommPlus协议中使用的反重放机制的信息所需的方法和实验过程。这些新发现的信息,包括使用的标准化哈希和加密算法,以及用于明文和密钥生成的专有算法,可能会被利用来创建生成“合法”S7通信的工具。基于上述实验,
现在将讨论一些有趣的实践方面,旨在为该领域的未来研究人员提供指导,以帮助重现类似的实验结果。
① 尽管在本次调查中未使用“IDA Pro”或新的开放式软件“Ghidra”,但它们可能会显著加快调查速度,尤其是发现软件各个部分中使用特定功能的位置。
② 在存在质询和响应机制的情况下,跟随或回溯存储器中质询的存储器位置可以为反向工程过程提供入口点。
③ 在WinDbg中记录“ta”(trace to address)命令的输出提供了一种查找生成特定字节的位置的方法。虽然在这项工作中没有使用,但自定义脚本可能有助于在跟踪期间转储额外信息。
④ 当发现内存中使用或存储的各种字节是密码函数使用的常量时,该研究中的大多数重大突破都出现了。例如,AES的S盒和Sha-256的初始哈希值。因此,当执行类似的分析时,当仅有汇编代码可用时,搜索存储器中使用的密码学常数可以提供识别特定算法的简单方式。
⑤ 在找到要使用的标准算法(例如AES)之后,在存储器中的搜索和对父函数的回溯可以提供揭示使用该算法的多个实例的信息。
参考资料
[1]J. H. Park, M. Kim, and D. Kwon, “Security weakness in the smart grid key distribution scheme
proposed by Xia and Wang,” IEEE Trans. Smart Grid, vol. 4, no. 3, pp. 1613–1614, 2013.
[2] Y.-M. Kwon, J. Yu, B.-M. Cho, Y. Eun, and K.-J. Park, “Empirical analysis of mavlink protocol
vulnerability for attacking unmanned aerial vehicles,” IEEE Access, vol. 6, pp. 43203–43212, 2018.
[3] M. Kim, J. Lee, and J. Paek, “Neutralizing BLE beacon-based electronic attendance system using
signal imitation attack,” IEEE Access, vol. 6, pp. 77921–77930, 2018.
[4] L. Martín-Liras, M. A. Prada, J. J. Fuertes, A. Morán, S. Alonso, and M. Domínguez,
“Cybersecurity Comparative of Configuration Protocols in Industrial Control Devices,” Int. J. Crit.
Infrastruct. Prot., vol. 19, pp. 4–15, 2017, doi: 10.1016/j.ijcip.2017.10.001.
[5] A. Ghaleb, S. Zhioua, and A. Almulhem, “On PLC network security,” Int. J. Crit. Infrastruct.
Prot., vol. 22, pp. 62–69, 2018.
[6] L. Cheng, L. Donghong, and M. Liang, “The spear to break the security wall of S7CommPlus,”
2017, [Online]. Available: https://media.defcon.org/DEF CON 25/DEF CON 25
presentations/Cheng Lei/DEFCON-25-Cheng-Lei-The-Spear-to-Break-the-Security-Wall-ofS7CommPlus-WP.pdf.
[7] E. Biham, S. Bitan, A. Carmel, A. Dankner, U. Malin, and A. Wool, “Rogue7: Rogue engineeringstation attacks on S7 Simatic PLCs,” Black Hat USA, 2019。
[8] https://www.anquanke.com/post/id/206579
…………
原文始发于微信公众号(博智非攻研究院):S7 PLCs漏洞分析