西门子PLC代码-本地/远程执行攻击演进
一、漏洞简介及受影响产品
1、漏洞概况
编号:CVE-2020-15782,在内存缓冲区范围内对操作的不当限制。CVSS v3.1得分:8.1。
2、受影响产品
受影响的设备容易受到内存保护绕过而实施特定的操作。对TCP端口102进行网络访问的远程未经身份验证的攻击者可能会将任意数据和代码写入受保护的内存区域,或读取敏感数据以发动进一步攻击。
5月28日,西门子发布了警告SSA-434534,向用户通报该漏相关信息。西门子还发布了包括S7-1500、S7-1200的各种产品的 更新,建议用户更新到***新版本以弥补漏洞。该公司表示,正在为尚未更新的产品准备进一步更新。西门子还提供了用户可用于降低风险的具体缓解措施。
二、西门子PLC本地代码执行的演进
CVE-2020-15782之所以受到如此关注,主要是这一漏洞的成功利用,将有可能将工业网络安全研究者对西门子控制器攻击研究提高到新层次,而攻击者实施成功攻击的限制则越少越易,原因就是该漏洞的条件太优越。
在可编程逻辑控制器(PLC)等工业控制系统上实现本机代码执行是那些高级水平高能力攻击者已经实现的***终目标。因为这些复杂的系统有许多内存保护,攻击者不仅为了能够运行他们选择的代码,而且还要不被发现,因此必须要跨越这些保护措施。
早期的攻击尝试需要对PLC的物理访问和连接,或者以工程师工作站为目标的技术和通向PLC的其他链接,以获得那种级别的代码执行。而此次Claroty公司利用一个新发现的漏洞,在西门子SIMATIC S7-1200和S7-1500 PLC cpu内绕过PLC沙箱,在内存保护区域运行本机代码,进一步提升了这种攻击思路的远程可行性。攻击者可以利用这个CVE-2020-15782漏洞,远程获取难以检测和删除的读写内存访问。
从攻击者的角度来看,PLC漏洞利用的***目标就是在PLC上实现不受限制和不被检测的代码执行。这意味着,能够将代码隐藏在PLC内部深处,而不被操作系统或任何诊断软件检测到。
多年来,鉴于西门子PLC在市场上的***地位,已经出现了许多在西门子PLC上实现这种能力的尝试。
首先,史上***著名的震网攻击(Stuxnet),它在旧的SIMATIC S7-300和S7-400上获得了用户级的代码执行。代码修改本身是通过操作本地step7项目文件来完成。然后,Stuxnet能够通过操纵本地工程站上的WinCC二进制文件来隐藏PLC上的代码更改。这样一来,恶意软件不仅可以偷偷地将自己安装在PLC上,而且当控制软件试图从PLC读取受感染的内存块时,还可以保护自己不受WInCC检测。当然,通过对其Windows操作系统的Microsoft更新和SSA-110665和SSA-027884中记录的西门子产品更新的组合,这个问题早已得到解决。
第二个经典型的PLC攻击,是2019年的Rogue7的攻击(出自论文Rogue7:Rogue Engineering-Station attacks on S7 Simatic PLCs)。《Rogue7》背后的研究人员能够创建一个流氓工程站,它可以伪装成TIA(TIA Portal是一系列无缝集成的自动化解决方案)通往PLC的门户,并注入任何有利于攻击者的信息。通过理解密码信息是如何交换的,他们能够将代码隐藏在用户内存中,而TIA工程站是看不见的。西门子部分解决了此问题,并提供了缓解措施,详见SSA-232418。
第三个,同在2019年,德国波鸿鲁尔大学(Ruhr University Bochum)安全研究***Ali Abbasi和Tobias Scharnowski介绍了他们如何通过物理攻击SIMATIC 1200来获得在西门子S7 PLC上的代码执行。他们使用UART(通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上。)物理连接来转储固件,并发现了一个漏洞链,使他们能够将代码隐藏在系统中更深的地方,并获得不受限制的代码执行。西门子在SSA-686531中解决了这个问题。
本次,claroty研究团队将这项研究向前推进了一大步,他们展示了一种新的复杂的远程攻击,它允许攻击者在西门子S7 PLC上获得本机代码执行。攻击目标是内核的深处,并避免了任何检测,因为能够逃离用户沙箱,并在受保护的内存区域中编写shellcode。CVE-2020-15782漏洞恰恰是促成PLC沙箱逃逸的关键条件。
三、PLC沙箱逃逸(西门子SMART-200系列PLC)
PLC的完整性对操作人员和工程师来说至关重要,而攻击者的目标就是通过隐藏于控制器上的代码和提升权限来破坏这种完整性。本次利用的漏洞CVE-2020-15782,绕过了PLC执行环境中的现有保护,包括工程代码通常会运行的沙箱。Claroty能够利用这个漏洞实现沙箱逃逸,以便直接访问内存,然后编写并注入shellcode来执行其对西门子1200/1500 PLC的攻击。
为了执行这种攻击,需要对PLC进行网络访问。此外,攻击者还需要PLC下载权限。自从TIA Portal V12以来,西门子提供了各种缓解控制,以限制用户网络和对PLC的读写访问,特别是口令保护机制。此外,从V17开始,西门子引入了在PLC、HMI和TIA Portal之间使用个人证书的TLS通信,这大大减少了潜在的攻击面。
为了理解Claroty的具体攻击,首先要概述一个标准PLC的通用结构。它的CPU是一个16或32位微处理器,由一个内存芯片和集成电路组成,管理控制逻辑、过程监控和通信。CPU指导PLC执行控制指令,与其他设备通信,执行逻辑和算术操作,并执行内部诊断。它还运行内存例程,不断检查PLC,以避免编程错误,并确保内存没有损坏。逻辑运行在沙盒环境(有时也被称为“监狱”)中。传输到控制器的逻辑仅限于供应商提供的特定内存区域和API。
以西门子S7 PLC为例,它运行在ADONIS内核和ARM或MIPS处理器上,有许多编程语言可用于配置控制器,包括语句列表(STL)、梯形图(LD)、功能框图(FBD)和结构化控制语言(SCL)。
不管何种输入源,PLC程序都会编译成MC7/MC7+字节码,这是一种低级别的代码表示。经工程站编译后-西门子TIA门户-代码块(MC7/MC7+格式)通过西门子的S7Comm/S7Comm+协议下载并安装到PLC中。然后,PLC中的MC7虚拟机将对代码块进行分派,并对字节码进行解释和执行。
(本站siemens-zuan.gongboshi.com/,提供西门子S7-1200系列PLC,S7-1500系列PLC)
(本站siemens-zuan.gongboshi.com/,提供西门子S7-1200系列PLC,S7-1500系列PLC)