无需在线攻击-通过时间块利用 S7-1500 PLC

无需在线攻击-通过时间块利用 S7-1500 PLC

摘要

​ 在本文中,我们采用我们之前的工作中介绍的攻击方法,朝着离线利用 PLC 的方向又迈出了一步,并将我们的实验扩展到涵盖最新和最安全的 Siemens PLC 系列,即 S7-1500 CPU。在这项工作中进行的攻击场景旨在混淆目标系统的行为,当恶意攻击者在攻击的那一刻既没有连接到受害者系统也没有连接到它的控制网络。本文提出的新方法包括两个阶段。首先,攻击者在成功访问或破坏暴露的 PLC 后,使用特定的中断块对 PLC 进行修补。然后他在攻击者希望的稍后时间触发块,当他完全离线时,即与控制网络断开连接。对于实际实施,我们在 Fischertechnik 系统上使用支持最新版本 S7CommPlus 协议(即 S7CommPlus v3)的 S7-1500 CPU 测试了我们的方法。我们的实验结果表明,我们可以成功感染目标 PLC 并将恶意中断块隐藏在 PLC 内存中,直到我们已经确定的那一刻。这使得我们的攻击隐秘,因为工程师站无法检测到 PLC 被感染。最后,我们提出了防止此类威胁的安全和缓解方法。

一、介绍

​ 攻击者以控制逻辑程序为目标,来破坏暴露的可编程逻辑控制器 (PLC),旨在破坏受害工业设备驱动的控制过程。这种威胁在工业界被称为控制逻辑注入或控制逻辑修改。它涉及操纵 PLC 编程的原始用户程序,通常采用中间人 (MITM) 方法。攻击者在此攻击中利用的主要漏洞是缺少 PLC 协议使用的完整性算法。作为对这一威胁的回应,大多数 ICS 供应商建议工程师和 ICS 操作员设置密码,以避免来自恶意对手的未经授权的访问。换句话说,当用户试图访问在 PLC 中运行的程序时,它首先通过启动所谓的身份验证协议来检查他是否通过了身份验证。如果认证过程成功,它允许他使用专有通信协议读/写程序。然而,该解决方案无法充分保护 PLC 免受未经授权的访问,因为以前的努力成功地绕过了来自不同供应商的 PLC 中使用的身份验证方法的攻击。因此,仅通过设置密码来保护控制逻辑程序并不能防止攻击者访问 PLC 并操纵其程序。

​ 研究界现有的控制逻辑注入攻击有两个巨大的挑战:首先,经典注入攻击通常被设计为在某些情况下访问 PLC,应用的安全手段因特定原因不存在或被禁用,例如正在进行的不忏悔过程,其他硬件组件被添加到控制网络或从控制网络中移除,安全手段正在更新等等。尽管 PLC 在这些关键时期很有可能受到未经授权的感染,但它们并没有在正常状态下运行,即物理过程更有可能暂时关闭。因此,如果对手在这段时间内获得了对受害 PLC 的访问权,并在此之后立即进行攻击,那么他很可能不会成功影响物理过程。其次,一旦ICS操作员完成任何维护过程,他通常在再次操作系统之前重新激活安全装置。这个程序允许他检测 PLC 中的任何感染。我们在本文中介绍的方法通过在中断块中插入某些恶意指令来克服上述挑战,然后在攻击者成功访问控制网络后用该块修补目标 PLC。
感染在 PLC 的内存中仍然是不可见的,并且只会在对手设置的稍后时间被激活。这确保了补丁不会在系统运行不正常或被实施的安全手段泄露的情况下被触发。

​ 本文主要关注西门子提供的 S7 SIMATIC PLC。 这是因为西门子在工业自动化市场上处于领先地位,其 SIMATIC 系列产品约占整个工业市场的 30-40%。 我们的实验涉及最新的 PLC 系列,即 S7-1500,及其各自的工程软件,即全集成自动化 (TIA) Portal 软件。 这项工作背后的动机是,据报道,西门子声称其 S7-1500 PLC 可以很好地抵御各种攻击,并且在此类设备中使用的开发的 S7CommPlus 协议改进了防重放和完整性检查机制。 为了实施真实世界的攻击,使用了由 CPU S7-1512SP 控制的 Fischertechnik 工业。

A.假设

​ 为了进行真实世界的攻击场景,如 TRITON 和乌克兰电网攻击,我们假设对手已经访问了控制网络。 知道攻击者可以通过典型的 IT 攻击(例如受感染的 USB 设备)或典型的社会工程攻击(例如钓鱼攻击)访问控制网络。 为了使我们的攻击更具挑战性,我们还假设攻击者无法访问工程软件,只能使用 Wireshark 等数据包嗅探工具记录 PLC 和工程软件之间的网络流量。

B.攻击者的目标

​ 攻击者的目的是在他与目标或其网络断开连接时混淆受害者 PLC 的控制逻辑,即他在攻击的零点完全离线。 此外,只要不满足中断条件,感染就必须保持隐蔽。 即直到攻击者确定的那一刻。 换句话说,在感染 PLC 和攻击发起日期之间的时间不能代表其已经被攻击。

C.攻击目标

​ 在本文中,我们执行图 1 所示的攻击方法。考虑到前面提到的假设,我们的攻击包括以下两个主要阶段:
在这里插入图片描述

图1 攻击场景
1)感染 PLC:

​ 在此阶段,攻击者使用组织块 10 (OB10) 使用恶意块修补控制逻辑程序,确切地说是中断时间 (ToD) 块。 此阶段在线运行,即当攻击者获得对目标 PLC 的访问权限时。 请注意,在整个这个阶段,感染被隐藏并设置为空闲模式,以满足第二个攻击者的目标。

2)触发感染:

​ 攻击者根据自己的意愿在确定的日期和时间触发恶意块。 此阶段离线运行,无需在零点连接到 PLC或网络进行攻击。

​ 这项工作的其余部分如下。 第二节提供相关工作。 第三部分概述了最新的 S7CommPlus 协议版本。 在第四节中,我们展示了我们的实验设置,然后在第五节中描述了我们的攻击方法。第六节评估并讨论了我们的攻击的影响,然后提出了一些可能的缓解方法来应对这种威胁。 最后,我们在第七节结束我们的工作。

二、相关工作

​ 代表典型控制逻辑注入攻击的最著名的攻击是 2010 年针对伊朗核设施的攻击,即 Stuxnet。 最近的现实世界攻击发生在乌克兰和德国。在下文中,我们将概述最近的相关学术研究。

​ 2015 年,Klick 等人。在 SIMATIC PLC 中运行的程序中引入了恶意注入,但没有混淆用户程序的执行过程。在后续工作中,Spenneberg 等人发布了一个 PLC 蠕虫。他们工作中提出的感染方法正在从一个 PLC 内部传播到另一个 PLC。“PLC-blaster: A worm living solely in the PLC” 中介绍了用梯形逻辑或高级编程语言之一编写的梯形逻辑炸弹恶意软件。攻击者将这种恶意恶意软件注入到暴露的 PLC 中运行的控制逻辑程序中。 2021 年,研究人员表明,S7-300 PLC 容易受到控制修改攻击,并证明混淆受感染 PLC 控制的物理过程是可行的。在破坏了安全措施后,作者进行了注入攻击,并成功地将他们的感染隐藏在工程软件之外。他们的隐藏方法基于使用假 PLC 冒充真正的未感染 PLC。 *“Vulnerability analysis of S7 PLCs: Manipulating the security mechanism,”*的作者克服了在较新的 S7 PLC 模型中使用的反重放机制,并提出熟练的对手可以制作有效的捕获数据包来对控制逻辑程序进行恶意更改。 Rogue7的作者介绍了一个流氓工程师站,它可以作为 PLC 的工程软件运行,并注入攻击者希望的任何恶意代码。通过了解加密消息是如何在各方之间传输的,他们将感染隐藏在 PLC 的内存中。所有提到的攻击都非常有限,并且要求攻击者在攻击的零点连接到 PLC。因此,被 ICS 运营商或实施的安全手段检测到的可能性很高。

​ 为了克服先前工作中的现有限制,我们引入了一种新颖的攻击方法,该方法基于向 PLC 注入中断代码,精确地使用 Time-Of-Day 块。我们攻击中使用的特定恶意块旨在在攻击者设置的特定时间中断程序的执行过程。我们的实验结果证明了提出的概念,即使对手没有连接到目标 PLC,他也可以操纵控制过程。尽管我们的攻击方法仅在 S7-300 PLC 上进行并目的是强制 PLC 关闭,但攻击是有效的,并且可能会混淆在受害 PLC 中运行的程序的执行顺序。此类攻击非常严重,因为受感染的 PLC 会继续适当地执行原始程序,即不会在数小时、数天、数周、数月甚至数年内中断;在对手想要他的攻击触发的那一刻之前。然而,揭示我们方法的唯一现实方法是当 ICS 主管向 PLC 请求控制逻辑并分别比较在受感染设备和工程师站中运行的在线和离线代码时。但是,我们克服了这一挑战,如下所示。

三、S7COMMPLUSV3 协议

​ 最新的 S7 协议版本,即 S7CommPlusV3,用于较新版本的全集成自动化 (TIA) 门户,即从 V13 开始,以及较新的 CPU S7-1500 固件,例如 V1.8、2.0 等 最新的 S7 协议被开发为涉及复杂的完整性方法,与之前的版本(例如 S7CommPlusV1 和 S7commPlusV2)相比,它被认为是最安全的协议。

​ 它提供各种操作,例如 启动、停止、下载、上传等首先由 TIA Portal 转换为 S7CommPlus 消息,然后传输到 PLC。 图 2 显示了常规 S7CommPlusV3 消息的结构。
在这里插入图片描述

图2 S7CommPlusV3消息的结构

​ PLC接收到消息后,执行用户要求的控制操作,然后相应地回复工程软件。 这些消息在会话中传输,每个都有一个由 PLC 选择的唯一 ID。 图 3 描述了通过 S7CommPlusV3 协议的通信会话中的数据包顺序。 如图所示,每个会话都以由四个消息组成的握手开始。 在这四个消息中选择加密属性以及协议版本和密钥。
在这里插入图片描述

图3 通过S7CommPlusV3在S7会话中交换的信息

​ 握手成功后,所有数据包都使用非常复杂的密码保护机制进行完整性保护。 请注意,解释加密过程或提取此协议中使用的加密密钥超出了本文的范围。 然而,有下面三篇文章提供了有关最新版本 S7 协议使用的完整性保护方法的足够技术信息。

[1] F. Weißberg, “Analyse des Protokolls S7CommPlus im Hinblick  auf verwendete Kryptographie,” March, 26, 2018. Available at: https://www.oss.net/publications/thesis/Bachelor_Thesis_Weissberg.pdf.
[2] E. Biham, S. Bitan, A. Carmel, A. Dankner, U. Malin, and A. Wool,“Rogue7: Rogue Engineering-Station attacks on S7 Simatic PLCs”,Black Hat USA 2019, 2019.
[3] W. Alsabbagh and P. Langendorfer, "A New Injection Threat on S7-1500 PLCs - Disrupting the Physical Process Offline," in IEEE Open Journal of the Industrial Electronics Society, doi:10.1109/OJIES.2022.3151528.

​ S7CommPlus 协议以请求-响应方式运行。 这意味着,每个请求数据包都包含一个请求头和请求集。 标头包含标识所需操作的功能代码,例如 0x31 用于下载消息,如图 4 所示。
在这里插入图片描述

图4 S7CommPlus 下载请求-对象和属性

​ 此外,每条消息都包含多个由属性组成的对象。 所有对象和属性都使用唯一的类标识符来标识。 例如,由工程软件通过 S7CommPlus 下载消息发送到 PLC 的 CreateObject 请求在 PLC 内存中构建一个具有唯一 ID 的新对象(在我们给定的示例中,0x04ca)。 因此,下载数据包会生成一个 ProgramCycleOB 类的对象。 这个创建的对象包含多个属性,每个属性都有专用于某个目标的特定值,如下:

  • 对象 MAC:使用项目值 ID:Block.AdditionalMac 捐赠,并在加密完整性过程中用作附加消息验证代码 (MAC) 值。
  • 对象代码:使用的项目值 ID:函数 alObject.code。它是 PLC 读取和处理的二进制可执行代码。
  • 源代码:使用的项目值 ID:Block.BodyDescription。它相当于 ICS 操作员编写的程序,该程序存储在 PLC 中,以后可以根据要求上传到 TIA Portal 项目。
四、实验装置

​ 为了测试我们在本文中提出的方法,我们使用了 Fischertechnik 培训工厂 2,如图 5 所示。请注意,此设置已在早期运行的实验中使用,即以下描述与我们之前的出版物中的描述非常相似。
在这里插入图片描述

图5 实验装置

​ 该工厂由五个工业模块组成:真空吸盘(VGR)、高架仓库(HBW)、带窑的多处理站(MPO)和带颜色识别(SLD)的分拣线带监控摄像头的环境站(SSC)。 整个系统由带有固件 V2.9.2 的 SIMATIC S7-1512SP 控制,并由 TIA Portal V16 编程。 PLC 通过物联网网关连接到 TXT 控制器3。 TXT 控制器用作消息队列遥测传输 (MQTT) 代理和 fischertechnik 云的接口。

​ 我们在实验中使用的工厂提供了两个工业流程。存储和订购材料。默认处理周期从存储和识别材料(即工件)开始。该工厂有一个集成的 NFC 标签传感器,存储可以通过 RFID NFC 模块读取的生产数据。这允许用户以数字方式跟踪工件。云显示零件的颜色及其 ID 号。之后,真空夹具对物料进行吸力并将物料输送到采用先进先出原则进行外包的高架仓库。所有存储的商品都可以使用仪表板再次在线订购。用户选择想要的产品和相应的颜色,然后放入购物车。吸盘将工件从一个步骤传递到下一个步骤,然后在生产完成后返回分拣系统。一旦色选机检测到正确的颜色,分拣系统就会收到分配命令。使用气缸对材料进行分类。最后在生产过程结束时将生产数据写入材料,并提供成品供收集。

五、攻击描述

​ 我们在这项工作中介绍的方法包括两个阶段:感染 PLC(在线阶段)和触发中断块(离线阶段)。请注意,获取 IP 和 MAC 地址以及受害 PLC 的型号超出了本文的范围,可以通过应用基于 PN-DCP 协议的扫描仪、S7CommPlus 扫描仪,或任何其他网络扫描仪。 在接下来的两个小节中,我们将详细说明我们的攻击方法。

A.感染PLC(在线阶段)

​ 在这里,我们的目标是使用 OB10 中插入的恶意命令来修补受害者。 为此,我们使用了一个已开发的中间人 (MITM) 站,该站包含两个组件:

— TIA Portal 软件:恢复和修改受害设备运行的实际程序。

— PLCinjector 工具:使用对手的恶意代码修补 PLC。

​ 我们的感染阶段由以下四个步骤组成:

​ 1)读取和写入用户程序。 2) 改变和更新用户程序。 3)隐藏恶意感染。 4) 传输精心制作的 S7 消息。

1.阅读和编写用户程序

​ 在获得对控制网络的访问权后,我们需要窃取受害设备编程的用户程序。 图 6 描述了此步骤。 如图所示,我们启动攻击者的 TIA Portal 并直接与目标 PLC 建立连接。 由于最新的 S7 PLC 设计(即 S7-1500 系列)存在安全漏洞,我们能够使用未经授权的 TIA Portal 软件与受害设备进行通信。 为了更好地理解,S7-1500 PLC 没有实施任何安全机制或检查程序来确保当前连接的 TIA Portal 软件与 PLC 在之前的通信会话中通信的软件相同。 此漏洞允许任何在其机器上安装了 TIA Portal 软件的对手轻松地与 S7 PLC 进行通信,而无需付出任何努力。

​ 成功建立通信后,我们通过发送上传命令将用户程序请求到攻击者的 TIA Portal 软件。之后,我们再次将其下载到目标,并使用 Wireshark 软件记录在攻击者机器和受害 PLC 之间传输的整个 S7CommPlus 数据包。最终,攻击者在他自己的 TIA Portal 软件上拥有用户程序,并且所有捕获的专用于下载命令的消息都保存在 Pcap 文件中,以供后续步骤进一步使用。
在这里插入图片描述

图6 上传、下载和记录用户程序
2.更改和更新用户程序:

​ 在我们检索到用户程序后,未经授权的 TIA Portal 会以最初编程使用的高级编程语言(例如结构化控制语言 SCL)显示它。 通过了解受害 PLC 驱动的控制过程,我们可以配置恶意指令来操纵目标系统中的某些输出或输入,例如,我们可以在触发中断块时强制关闭某个输出。 这是按如下方式完成的。 我们向当前用户程序添加一个具有特定事件类 Time-of-Day 的新 OB,然后输入块的名称、所需的编程语言(例如 SCL)和分配的组织块的编号,即 i.e.10. 之后,我们使用攻击者的命令对块进行编程,以在中断发生时执行。 然而, [文章](https://support.industry.siemens.com/cs/document/109773506/simaticstep-7-basic-professional-v16-and-simatic-wincc-v16?dti=0&lcen-WW)提供了在 S7-1500 PLC 中配置和编程时钟中断的所有技术细节。

​ 尽管我们的恶意代码与原始代码只有一个额外的小块 (OB10) 不同,但这足以扰乱我们实验设置的控制过程,如下一节后面所示。 感染 PLC 的最简单方法是使用攻击者的 TIA Portal 将修改后的程序直接写入 PLC。 这使得攻击者可以毫不费力地将他的程序(带有新中断块 OB10 的原始代码)传输到受害 PLC。 PLC 接收到攻击者的程序后,在不知道自己连接到未经授权的 TIA Portal 的情况下成功更新程序。

3.隐藏恶意感染:

​ 使用攻击者的 TIA Portal 将攻击者的程序下载到 PLC 中存在挑战。 合法用户可以通过要求补丁设备的控制逻辑,并将保存在合法工程师站(即 TIA Portal)上的离线程序与远程 PLC 上运行的在线程序进行比较来轻松披露感染。 为了克服这一挑战,我们需要通过精心制作的 S7CommPlus 下载消息传输攻击者的代码,从而向 ICS 运营商隐瞒感染。

​ 西门子为其 S7-1500 PLC 提供了一个预防程序,可仔细检查每个会话的最新时间。因此,如果 ProgramCycleOB 对象的属性不具有相同的会话 ID,即不属于同一会话,它可以揭示任何潜在的操纵并拒绝更新其程序。此过程是西门子用来保护其最新 PLC 产品线免受重放攻击的非常复杂的反重放机制的一部分。然而,我们的观察表明,PLC 并没有像预期的那样检查通过 S7CommPlus 协议传输的所有属性的完整性。这意味着,PLC 仅检查仅对象 Mac 和对象代码在其字节码中包含的特定完整性字节,而源代码没有那些完整性字节或任何其他专用于安全目的的字节。因此,我们可以得出结论,PLC 没有检查源代码属性的完整性,并且攻击者可以从已经预先记录的 S7CommPlus 消息中恶意地将该属性替换为另一个属性。因此,通过使用 Scapy 4,我们可以通过将恶意程序的 ProgramCycleOB 对象的 Source Code 属性替换为原始用户程序的 ProgramCycleOB 对象的 Source Code 属性来制作攻击者的 S7CommPlus 下载消息。图 7 描述了这种方法。
在这里插入图片描述

图7 制作S7CommPlus来下载消息

在这种情况下,只要 ICS 主管需要来自受感染 PLC 的控制逻辑,它就会通过发送存储在其内存中的 ProgramCycleOB 对象来响应。 TIA Portal 然后反编译源代码属性,该属性最终代表原始用户程序而不是攻击者的程序。 这种方法通过总是向他显示原始用户程序来欺骗 ICS 操作员,而 PLC 执行不同的程序。

4.传输精心制作的S7消息:

​ 我们制作的下载包包含以下属性:恶意程序的对象 MAC 和对象代码属性,以及用户程序的源代码属性。为了将消息推送到目标 PLC,我们使用了我们在上文[3]中发布的开发的 PLCinjector 工具。该工具专用于注入 S7-1500 PLC,具有两个功能。第一个功能用于破坏 S7CommPlusV3 使用的两个完整性保护模块,即预分段消息保护和会话密钥交换协议。而第二个功能基于 Scapy,用于在对会话 ID 进行适当修改后将对手的下载数据包发送到 PLC,并完成 S7 消息的某些完整性字段。值得一提的是,我们的 PLCinjector 工具也可以用于所有共享相同固件的 S7-1500 PLC,因为西门子设计了新的 S7 密钥交换机制,并强烈假设所有 PLC 具有相同的固件版本,也使用相同的公共-私钥机制。

B.触发阶段(脱机)

​ 将恶意程序注入目标 PLC 后,我们会离线并关闭与受害者及其网络的当前实时会话。 恶意程序将在下一个执行周期执行,CPU 在每个执行周期检查中断条件。 我们的补丁保持在空闲模式,直到满足中断条件,即一旦攻击日期,攻击者设置,匹配 CPU 的日期,中断将被触发,并且恶意指令在 PLC 的内存中未被观察到。 然后将处理块 OB10。 在我们的实验设置中,我们对 OB10 进行了编程,以在我们与控制网络断开连接时强制特定电机在特定时间和日期关闭。

六、试验结果、评估和缓解措施

​ 在本节中,我们展示了实施前一节中介绍的攻击场景的结果,并评估了由于我们的补丁而导致的控制过程的服务中断。 之后,我们讨论了我们的实验结果,并提出了一些可能的缓解方法,以使我们的工业系统免受如此严重的攻击。

A.结论

​ 为了取得令人信服的结果,我们对 Fischertechnik 工厂的工业模块进行了五种攻击场景。 下面我们只详细解释一个场景,因为其他场景以相同的方式执行

​ 第一个攻击场景旨在混淆 VGR 模块。 该模块使用 8 个电机操作如下:垂直电机向上 (%Q2.0)、垂直电机向下 (%Q2.1)、水平电机向后 (%Q2.2)、水平电机向前 (%Q2.3)、转向电机顺时针旋转 (%Q2.4),电机逆时针旋转 (%Q2.5),压缩机 (%Q2.6) 和阀门真空 (%Q2.7)。 这 8 个电机(PLC 的输出)分配给数据块中的特定参数,即 QX_VGR,并在控制逻辑程序中用作:

QX_VGR_M1_VerticalAaxisUp_Q1,
QX_VGR_M1_VerticalAaxisDown_Q2,
QX_VGR_M2_HorizontalAxisBackward_Q3,
QX_VGR_M2_HorizontalAxisForward_Q4,
QX_VGR_M3_RotateClockWise_Q5,
QX_VGR_M3_RotateCounterclockwise_Q6,
QX_VGR_Compressor_Q7,
QX_VGR_ValveVacuum_Q8 respectively.

​ 为了混淆 VGR 模块,我们插入了带有特定命令的 OB10,以在零点关闭所有 8 个电机以进行攻击。之后,我们按照第五节中说明的四个步骤对 PLC 进行了修补。我们的结果表明,我们成功地更新了 PLC 的程序,而没有记录在修补 PLC 之间的任何物理影响,以及非常确定的攻击时刻,即工件保持在工业模块之间正常移动。一旦受害 CPU 的时钟与我们已经配置的时间和日期匹配,我们观察到 VGR 模块停止移动。此外,由夹具运送的工件已掉落。这是因为提供适当气流以运输货物的压缩机已关闭。这导致了不恰当的操作,成功地混淆了工件的运动顺序。在现实世界的工厂中,例如汽车制造业,这样的干扰可能是灾难性的,甚至会造成人命损失。

​ 我们以相同的方式为其他模块(即 HBW、MPO、SLD 和 SSC)提取链接到 PLC 的输出,然后对中断块 OB10 进行编程,以在激活中断块时强制关闭相应的输出。 我们的结果表明,PLC 总是更新其程序,我们可以成功地将每次感染的中断块保持在空闲模式,直到我们确定的那一刻。

B.评估

​ 默认情况下,西门子 PLC 将最后一个执行周期的时间存储在 OB1 的一个名为 OB1_PREV_CYCLE的局部变量中。 因此,为了准确评估我们的补丁对控制过程造成的干扰,我们在我们的用户程序中添加了一个小的 SCL 代码片段,它将最后一个循环时间存储在一个单独的数据块中。 之后,我们为每个场景记录了多达 4096 个执行周期,计算了算术平均值,最终使用了 Kruskal-Wallis 和 Dunn 的多重比较检验进行统计分析。 我们所有的实验结果如图 8 所示。
在这里插入图片描述
​ 我们的结果表明,第一次感染(即攻击 VGR 模块)执行 OB1 的平均值约为。 38 毫秒 (ms),与执行 OB1 的原始用户程序(基线)的平均值略有不同,后者几乎为 36 毫秒。 我们攻击 HBW 模块时的执行周期时间也略有增加。 我们记录的平均值高达 37 毫秒。 我们专门用于攻击 MPO 模块的补丁引入了高达 40 毫秒的周期时间平均值,而我们的实验记录的最高值是当我们使用专用于混淆 SLD 模块的 OB10 修补控制逻辑时。 我们注意到平均值上升到 46 毫秒。 使用 OB10 修补控制逻辑以破坏 SSC 模块的功能在执行 OB1 时没有记录明显差异,我们记录的平均值为 37 ms。

​ 综上所述,我们可以得出结论,在每个执行周期检查我们的恶意块(OB10)的中断条件不会影响PLC程序的执行过程,Fischertechnik系统保持正常运行。 为了成功隐藏我们的感染,我们需要考虑到执行恶意程序不应超过总体最大执行时间 150 毫秒。 但是,我们所有的感染都不太可能触发此超时,因为它们与 150 毫秒相比非常小。 此外,我们感染中使用的 OB10 块的大小非常小(几乎在 6 到 9 KB 之间)。 因此,我们的攻击方法更有可能不会超过 PLC 内存中的可用空间来存储攻击者修补的额外恶意块。

C.缓解措施

​ 我们强烈建议的适当建议是解决我们调查发现的 S7-1500 PLC 中的完整性机制问题。新的改进机制必须包括 PLC 和 TIA Portal 软件之间的双向组验证。但另一方面,我们也明白,这样一个根本性的解决方案需要一段时间才能实施,因为它需要很高的成本,而且可能有副作用。此外,工业组件的生命周期比普通 IT 设备更长。因此,我们认为他们,PLC,可能不会及时更新。因此,暴露的设备仍将在现实世界的工业环境中运行。在这个术语中,一个适当的直接解决方案可能是将网络检测集成到现有的 ICS 设置中。例如,可以采用控制逻辑检测和验证来缓解当前情况。由于我们的感染被隐藏在 PLC 内部,精确地在内存中,划分内存空间和执行内存访问控制也可能是一个方便的解决方案。另一种解决方案是实现控制消息的数字签名,例如控制逻辑操作、网络监控工具,用于披露涉及 MITM 方法的任何威胁,以及安全机制扫描并仔细检查包含有关有效负载类型的关键数据的协议标头。建议使用所有这些建议来检测和阻止任何潜在的未经授权的控制逻辑传输。

七、结论

​ 本文扩展了我们在中介绍的攻击方法,以涉及最新的 SIMATIC PLC 产品线。基于 S7-1500 PLC 中的设计漏洞,我们执行了一个复杂的注入攻击场景,该场景使用时间块 (OB10) 感染暴露的 PLC。恶意中断块允许攻击者在特定时间和日期触发补丁,并最终在攻击的零点处既不连接到 PLC 也不连接到其网络的情况下扰乱工业过程。我们的调查证明了原始控制逻辑程序始终显示在合法的 TIA Portal 上,而受感染的 PLC 运行另一个程序的概念。另一方面,我们的恶意程序不超过 150 毫秒的整体最大执行时间。因此,当补丁处于空闲模式时,工业过程不会被中断/干扰。尽管如此,即使 ICS 主管在重新操作系统之前重新激活安全手段,也不会检测到恶意感染。最后,我们提供了一些可能的安全建议,以保护我们的 ICS 环境免受如此严重的威胁。

[8] W. Alsabbagh and P. Langendörfer, "Patch Now and Attack Later - Exploiting S7 PLCs by Time-Of-Day Block," 2021 4th IEEE International Conference on Industrial Cyber-Physical Systems (ICPS), 2021, pp. 144-151, doi: 10.1109/ICPS49255.2021.9468226.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值