A Stealth Program Injection Attack against S7-300 PLCs(针对S7-300 PLC的隐形程序注入攻击)
针对S7-300 PLC的隐形程序注入攻击
一、摘要
在本文中,我们展示了S7-300 PLC的脆弱性,并证明了利用PLC中运行的逻辑程序的执行过程是可行的。我们讨论了一种危及密码保护的PLC的重放攻击,然后展示了如何从目标检索字节码并将字节码反编译为STL源代码。之后,我们将介绍如何执行典型的注入攻击,这表明即使对代码进行非常微小的修改也足以伤害目标系统。最后,我们将重放攻击与注入方法相结合,以实现更强大的攻击——隐形程序注入攻击——它可以通过使用伪PLC来隐藏先前的修改,模拟真实受感染的设备。对于真实场景,我们使用S7-300 PLC在真实工业环境中实施了所有攻击。我们最终建议采取缓解措施来保护系统免受此类威胁。
二、介绍
我们的重点是研究利用西门子S7-300可编程逻辑控制器的可能性,下图1显示了我们在本工作中执行的五种攻击场景的概述,包括:
(1) 危及可编程逻辑控制器的安全性。
(2) 从PLC中窃取控制逻辑程序。
(3) 将盗取的字节码反编译为STL源代码。
(4) 感染控制逻辑代码。
(5) 对ICS操作员隐藏正在进行的注入攻击。
三、场景分析
(一)损害可编程逻辑控制器的安全措施
西门子PLC通常有密码保护,以防止未经授权访问和篡改其设备中运行的逻辑程序。本文中,我们使用重放攻击,删除PLC设置的密码,而不改变目标PLC的当前配置。PLC上的典型重放攻击包括记录与TIA门户/PLC发送的特定请求/响应相关的数据包序列,然后在未经授权的情况下将捕获的/精心编制的数据包发送到目标。从技术上讲,当将密码写入S7-300 PLC时,它实际上嵌入SDB块中,SDB块由静态字节0x3042定义,精确地说是在块编号0000:0x30303030中,因此,在执行任何函数或命令之前,加载过程首先检查SDB0块(0x304230303030),以查看是否已设置密码。我们这里有两种情况:
(1)PLC没有密码,我们可以通过在PLC和TIA门户之间发送之前捕获的包含设置新密码的加载过程序列,轻松设置新密码。
(2)PLC已经有了一个密码,我们想用一个新的密码更新它,或者完全删除密码。在本文中,我们只对第二种情况感兴趣,即PLC已经有密码保护。
对于PLC已经有密码保护的情况,块SDB0有一个密码,要更新/删除密码,在进行任何更改之前,用户应始终提供旧密码。当合法用户使用新密码更新PLC时,PLC无法用新密码直接覆盖SDB0。这意味着PLC首先需要清除此块以前的内容中,然后将新密码写入该块。这个有趣的发现触发了这样一个想法:在用新密码更新旧密码期间,我们可以使用捕获旧的加载过程序列来操纵密码的设置。我们使用Wireshark作为网络嗅探器记录TIA门户和PLC之间的整个密码修改过程,过滤生成的数据包,只保留负责删除块SDB0内容的数据包,忽略将新密码写入SDB0的数据包。这样我们通过将更新新密码的相应数据包替换为删除块SDB0所需的数据包来创建自己的加载会话,并最终将我们精心编制的数据包序列作为新的加载过程推回到目标PLC。重放攻击完成后,我们发现PLC已更新,不再受密码保护。
(二)从PLC中窃取字节码
在安全措施被破坏后,我们使用Python-snap7库与公开的PLC通信,并请求在目标设备中运行控制逻辑。使用Python-snap7库中的函数full_upload(type,block number)可以轻松完成此步骤。对于我们的示例应用程序,我们成功地将PLC中运行的程序上载到攻击者机器上,方法是将上述函数的参数替换为相应的块名称和编号,即我们分别设置参数为OB和1。
(三)将字节码反编译为STL代码
我们需要识别在PLC中运行的用户程序的字节码集和相应的STL指令集,为了实现这一点,我们采用了离线除法,一个接一个地提取程序中使用的所有指令。我们打开TIA门户软件,并用10倍相同指令组成的特定代码对目标PLC进行编程。这里,我们使用了对程序没有影响的NOP 0指令。可以确定每个NOP 0指令在字节码中表示为OxF000。之后,我们将该代码下载到我们的PLC,并记录包含字节码的数据包,字节码表示10条NOP 0指令,如图2a所示,我们之后,我们在TIA门户软件中打开了正常程序(在我们的示例应用程序中使用),并在每个指令之前和之后插入NOP 0,然后将新程序下载到PLC。我们记录了包含这个新字节码的数据包,并标识了代表每个指令的每个十六进制字节,如图2b所示。在使用相应的十六进制字节提取所有指令后,我们创建了一个小型的成对映射数据库:将十六字节转换为相应的STL指令,并使用此映射数据库在线将原始机器字节码转换为其STL源代码。然而,尽管我们的映射数据库非常局限于程序中使用的指令,但这种方法可以开发为将所有十六进制字节映射到任何逻辑控制程序的STL指令。
(四)感染控制逻辑代码
成功反编译后,攻击者现在对PLC中运行的控制过程有足够的了解,并且破坏系统所需的一切就像用新指令替换一条或多条指令一样都很容易。下图3显示了Wireshark捕获的用户和攻击者字节码仅在四个字节内变化。值得一提的是,即使不知道PLC运行的程序,攻击者也可能跳过反编译过程,只是用全新的机器代码替换原始机器代码。如果没有安全措施来检查代码大小、周期时间等的变化,我们的方法可以实现,但另一方面,如果ICS操作员请求并比较受感染PLC中运行的在线代码与TIA门户上的离线代码,则可以轻松检测到这种攻击。
(五)先进的隐形注入攻击
为了隐藏正在进行的注入攻击,我们提出了一种新方法,我们方法的主要目标是阻止操作员从远程PLC上传实际受感染的代码,将其连接重定向到伪PLC,从而发送我们希望用户看到的未受感染的版本。这隐藏了我们正在进行的注入,并实现了完全的隐形攻击。
(1)模拟真实的PLC
因为PN-DCP协议(数据链路层)存在漏洞,所以可以通过将ICS操作员连接到模拟真实远程设备的伪PLC(攻击者机器)上来受骗。PN-DCP协议主要用于发现设备或配置设备的名称、IP地址等。TIA门户通过广播称为“identify all”的特定数据包请求网络中的所有可访问设备,所有可用的S7 PLC将使用称为“identify ok”的特定响应数据包进行回复。每个PLC发送的响应数据包的有效载荷包含设备的所有详细信息,例如名称、IP地址、供应商名称、子网等。在这项工作中,我们的目标是阻止TIA门户到达远程PLC,并将其连接到伪PLC。具体做法如下:在旧会话期间,我们记录了TIA门户和远程PLC之间的“identify all”和“identify ok”数据包,然后修改了真实PLC的响应数据包,将PLC 192.168.0.1的IP地址替换为伪PLC 192.168.0.3的IP地址。如下图4。
(2)将原始逻辑传输到TIA门户
一旦ICS操作员怀疑远程PLC运行的逻辑程序与其应运行的逻辑程序不同,他将请求当前逻辑程序(在线程序),并将其与TIA门户上的逻辑程序(离线程序)进行比较,这使他能够检测到任何潜在的感染/修改。为了欺骗这次安全检查,我们记录了TIA门户和远程PLC之间的旧上传会话,然后在安全检查期间用原始代码而不是受感染的代码来修改被捕获的数据包。由于离线和在线程序完全匹配,这种隐形攻击可能会对相关ICS造成重大伤害,工程师不会检测到我们正在进行的注入攻击,除非他检查Profinet接口中连接设备的IP地址。
四、总结
在本文中,我们提出了一种先进的隐形攻击方案,用于感染控制逻辑,包括漏洞攻击、反编译、注入和通过伪PLC方法隐藏感染。本文中的开发很有效,但一点也不复杂,这是因为S7-300 PLC仍然使用旧版本的S7协议,与现代S7 PLC(例如S7-1200/1500 PLC)使用的新版本(S7communication Plus)相比,该版本缺乏安全机制。因此,在我们未来的工作中,我们将研究我们的隐形攻击是否能够成功地针对现代S7 PLC。这将是一个更具挑战性的事实,因为S7comm plus支持改进安全性,实现反重放机制和完整性检查。
[1]Siemens. Modular PLC controllers SIMA TIC S7, 2014. Avail-
able at: http://www.automation.siemens.com/ mcms/programmable-
logic-controller/en/simatic-s7-controller.
[2]Electrical engineering Blog. The top most used PLC systems around the
world. Electrical installation & energy efficiency, May 2013. Available
at: http://engineering.electrical-equipment.org/electrical-distribution/the-
top-most-used-plc-systems-around-the-world.html.
[3]N. Falliere, Exploring Stuxnet’s PLC infection process, Sept. 2010.
[4]R. M. Lee, M. J. Assante, and T. Conway, "Analysis of the cy-
ber attack on the Ukrainian power grid," Technical report, SANS
E-ISAC, March 18 2016. Available at: https://ics.sans.org/media/E-
SAC_SANS_Ukraine_DUC_5. pdf
[5]G. liang, S. R. Weller, J. Zhao, F. Luo, and Z.Y . Dong, "The
2015 Ukraine blackout: Implications for false data injection at-
tacks," IEEE Transactions on Power Systems, 2016, doi: 10.1109/TP-
WRS.2016.2631891
[6]T. De Maizière, "Die Lage Der IT-Sicherheit in Deutschland 2014,"
The German Federal Office for Information Security,2014. Avaliable at:
https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/
Lageberichte/ Lagebericht2014.pdf
[7]J. Klick, S. Lau, D. Marzin, J. Malchow, and V . Roth, "Internet-facing
PLCs-a new back orifice," in Black Hat USA 2015, Las Vegas, USA,
2015.
[8]A. Spenneberg, M. Brüggemann, and H. Schwartke, "PLC-blaster: A
worm living solely in the PLC," in Black Hat Asia, Marina Bay Sands,
Singapore, 2016.
[9]N. Govil, A. Agrawal, N. O. Tippenhauer, "On Ladder Logic Bombs
in Industrial Control Systems," January, 2018, dio: 10.1007/978-3-319-
72817-9_8.
[10]A. Keliris, and M. Maniatakos, "ICSREF: A framework for automated
reverse engineering of industrial control systems binaries," in 26th
Annual Network and Distributed System Security Symposium, NDSS
2019.
[11]B. Lim, D. Chen, Y . An, Z. Kalbarczyk, and R. Iyer, "Attack induced
common-mode failures on plc-based safety system in a nuclear power
plant: Practical experience report," in 2017 IEEE 22nd Pacific Rim
International Symposium on Dependable Computing (PRDC), pages
205–210.
[12]K. Sushma, A. Nehal, Y . Hyunguk, and A. Irfan, "CLIK on PLCs!
Attacking Control Logic with Decompilation and Virtual PLC," 2019,
dio: 10.14722/bar.2019.23xxx.
[13]H. Hui, and K. Mclaughlin, "Investigating Current PLC Security Issues
Regarding Siemens S7 Communications and TIA Portal," 5th Interna-
tional Symposium for ICS & SCADA Cyber Security Research 2018
(ICS-CSR 2018), pages: 66-72, dio: 10.14236/ewic/ICS2018.8.
[14]D. Beresford, “Exploiting Siemens Simatic S7 PLCs,” Black Hat USA,
2011.
[15]M. Stouffer, V . Pillitteri, “Guide to industrial control systems (ics)
security,” NIST special publication, 2015.
[16]“Framework for improving critical infrastructure cybersecurity version
1.1,” National Institute of Standards and Technology, Tech. Rep., 2018,
Available at: https://doi.org/10.6028/NIST.CSWP .04162018.
[17]H. Wardak, S. Zhioua and A. Almulhem, "PLC access control: a
security analysis," 2016 World Congress on Industrial Control Sys-
tems Security (WCICSS), London, 2016, pp. 1-6, doi: 10.1109/WCI-
CSS.2016.7882935.