Claroty的Team82和罗克韦尔自动化研究人员在罗克韦尔(Rockwell)可编程逻辑控制器(PLC)和工程工作站软件中发现了两个安全漏洞。攻击者可远程利用这些漏洞,修改自动化流程,破坏工厂运营,对工厂造成物理损坏,或采取其他恶意行为。
其中CVE-2022-1161影响Rockwell的Logix控制器的多个版本,CVSS得分为满分10.0,是严重漏洞。Logix控制器是罗克韦尔的主打产品,广泛应用于各个领域。另外一个漏洞CVE-2022-1159影响其Studio 5000 Logix Designer应用程序的多个版本,CVSS评分为7.7,是高危漏洞。
受到篡改后的代码可以下载到PLC,而在工作站的工程师会看到该进程按预期运行,类似震网病毒(Stuxnet)和Rogue7攻击。
对此,罗克韦尔为用户提供了检测此类隐藏代码的工具,并敦促用户升级受影响的产品,以利用这些检测功能。此外,美国CISA也已发布警告,警告该问题的严重性。同时罗克韦尔也对此发布了安全公告。
成功隐秘利用可编程逻辑控制器(PLC)是最罕见、最耗时、且投资大的攻击之一。震网病毒(Stuxnet)开发者通过研究如何运行隐藏在PLC上的恶意代码,从而攻击PLC,而对控制器进行编程的工程师却只能在工程工作站上看到正常情况。如果没有高级取证工具,就无法发现此类恶意代码的执行情况。
在针对西门子SIMATIC S7 PLC的Rogue7攻击中,研究人员能够在将恶意字节码传输到PLC的同时修改文本代码。空客研究人员对施耐德电气的PLC进行了类似的研究和攻击,并将修改后的本机字节码传输到PLC。理论上讲,该漏洞利用也与这些攻击相似:将字节码和文本代码解耦,并进行修改。
于是,Team82决定在罗克韦尔自动化PLC平台上测试这些Stuxnet类型的攻击,并发现了两个漏洞。罗克韦尔用于工程工作站的Logix控制器和Logix Designer应用程序容易受到攻击,攻击者能够偷偷修改自动化流程。
可编程逻辑和预定义变量驱动这些流程,对其中任何一个的更改都会改变PLC的正常运行及其管理过程。能够修改PLC逻辑的攻击者可能会对工厂造成物理损坏,从而影响制造装配线的安全性、及机器人设备的可靠性,或者例如在Stuxnet事件中,攻击者可能会损坏核设施铀浓缩核心中的离心机。
罗克韦尔自动化披露了这些漏洞,并开发了一种检测二进制代码和文本代码差异的工具,利用此工具可检测隐藏代码。
工程工作站的核心是一个完全工作的集成开发环境(IDE)和PLC程序的编译器。在PLC上执行逻辑的过程包括四个主要步骤:开发、编译、传输、和执行。
图1 在PLC上执行逻辑的四步骤
开发:工程师将使用工程工作站的IDE功能,以主要自动化编程语言开发新的PLC程序,例如梯形图(LD)、结构化文本(ST)、功能块图(FBD)和其他。这种代码称为文本代码。
编译:一旦开发完成,工程师将新逻辑传输到控制器。为此,工程工作站将根据目标PLC的固件和架构,将程序编译为与PLC兼容的字节码。这种代码称为二进制代码。
传输:接下来,工程工作站将通过其专有协议与PLC通信,并传输编译的字节码。此过程通常称为下载过程、下载逻辑或下载配置。
执行:一旦字节码成功传送到PLC,逻辑将被执行。
在Team82对罗克韦尔自动化的工程工作站Studio 5000 Logix Designer及其下载逻辑过程机制的研究中,发现了两个漏洞,利用这些漏洞能够将文本代码与二进制代码解耦,并将其传输到PLC,同时进行修改。
图2 攻击者可能会在PLC中隐藏代码,这些代码将在不被检测的情况下运行
图3 被劫持并修改后的二进制代码,以及工程师认为在PLC上执行的原始代码对比
利用这两个漏洞的最终结果是相同的:工程师认为在PLC上运行的是良性代码,然而在PLC上正在执行完全不同的潜在恶意代码。
对逻辑流程或预定义局部变量的更改将改变PLC的正常运行,并可能导致新命令被发送到物理设备,例如由PLC控制的皮带和阀门。
可编程逻辑驱动自动化过程,并且该逻辑对来自物理连接和特定过程的预定义局部变量的变量输入执行操作。逻辑和变量在不同的PLC之间各不相同,并且每个PLC在一个过程中都有特定的作用。
例如在PoC中,研究人员修改了二进制代码,悄悄地将某些自动化流程变量(也称为标签)修改为不同的值。在现实生活中,这些更改的值可能会对自动化过程造成极大的损害,例如控制引擎速度的标签。
图4 PoC表明,虽然工程工作站显示良性代码,但在PLC上运行的实际代码是不同的,并且会悄悄地改变一些标签的值
漏洞CVE-2022-1161的CVSS V3.1评分为10.0分,受影响的产品包括:
-
1768 CompactLogix控制器;
-
1769 CompactLogix控制器;
-
CompactLogix 5370控制器;
-
CompactLogix 5380控制器;
-
CompactLogix 5480控制器;
-
Compact GuardLogix 5370控制器;
-
Compact GuardLogix 5380控制器;
-
ControlLogix 5550控制器;
-
ControlLogix 5560控制器;
-
ControlLogix 5570控制器;
-
ControlLogix 5580控制器;
-
GuardLogix 5560控制器;
-
GuardLogix 5570控制器;
-
GuardLogix 5580控制器;
-
FlexLogix 1794-L34控制器;
-
DriveLogix 5730控制器;
-
SoftLogix 5800控制器。
能够修改用户程序的攻击者可能会更改某些ControlLogix、CompactLogix和GuardLogix控制系统上的用户程序代码。Studio 5000 Logix Designer将用户可读的程序代码写入与执行的编译代码不同的位置,从而允许攻击者更改其代码。此外,通过未经身份验证的EtherNet/IP版本进行通信的设备可能容易受到来自利用CVE-2021-22681的自定义客户端的攻击。
CVE-2022-1159的CVSS v3.1得分为7.7分,受影响的产品包括:
-
Studio 5000 Logix Designer应用程序v28及更高版本;
-
ControlLogix 5580控制器;
-
GuardLogix 5580控制器;
-
CompactLogix 5380控制器;
-
CompactLogix 5480控制器;
-
Compact GuardLogix 5380控制器。
Studio 5000 Logix Designer在工作站上编译用户程序。此编译过程为Logix Designer应用程序用户程序下载到Logix控制器做好准备。要成功利用此漏洞,攻击者必须首先获得对运行Studio 5000 Logix Designer的工作站的管理员访问权限。然后攻击者可以拦截编译过程,并将代码注入用户程序。用户可能不知道已经发生了这种修改。
Team82与罗克韦尔自动化工程师密切合作,以了解这些攻击的根本原因。对此,罗克韦尔工程师提出了复杂的解决方案,通过分析和比较PLC上运行的文本代码和二进制代码来检测运行在其PLC上的隐藏代码。如果检测到不匹配,该工具将提醒两者之间的差异,表明隐藏代码正在PLC上运行。
图5 检测结果
-
Studio 5000 V34或更高版本;
-
Logix 5580、5380、5480、GuardLogix 5580和Compact GuardLogix 5380控制器固件的对应版本;
-
Logix Designer应用程序Compare Tool V9或更高版本,随Studio 5000 Logix Designer一起安装;
-
FactoryTalk AssetCentre V12或更高版本。
-
利用控制器日志功能;
-
在Logix Designer应用程序中使用变更检测;
-
实施CIP安全,以帮助在正确部署时防止未经授权的连接。
-
尽量减少所有控制系统设备和/或系统的网络暴露,并确保无法从互联网访问;
-
在防火墙后定位控制系统网络和远程设备,并将其与业务网络隔离;
-
当需要远程访问时,应使用安全方法,例如使用VPN。然而VPN也可能存在漏洞,因此应将VPN更新到最新版本。
参考:
【1】https://claroty.com/2022/03/31/blog-research-hiding-code-on-rockwell-automation-plcs/
【2】https://www.cisa.gov/uscert/ics/advisories/icsa-22-090-07
原文始发于微信公众号(工控安全卫士):罗克韦尔PLC存在严重漏洞,堪比震网病毒