黑客正在寻求上升到攻击的顶级梯队,实现他们可以吹嘘多年的单一入侵。这些值得吹嘘的黑客之一是获得对可编程逻辑控制器(PLC)上执行的代码的未检测到的访问权限。为什么?因为这些系统有大量需要绕过的内存保护。如果成功,集成代码将处于操作系统或安全软件无法检测到的现有代码中。以前的工作需要物理访问和连接到PLC,或者针对工程工作站和PLC的其他链接的技术,以获得该级别的代码执行。
Team82 在西门子 PLC、SIMATIC S2020-15782 和 S7-1200 中发现了一个严重的内存安全绕道漏洞 CVE-7-1500。常见漏洞和暴露 (CVE) 禁用访问保护,允许在 PLC 上的任何位置读取和写入代码或远程执行恶意代码的能力。
使用 CVE-2020-15782 逃离沙盒
所披露的漏洞在PLC执行生态系统中的安全性以及代码通常运行的沙箱中滑动。Team82 利用 CVE-2020-15782,躲避沙箱访问内存,用于编写和注入外壳代码以攻击西门子 1200/1500 PLC。
为了“越狱”本机 SIMATIC S7-1200 和 S7-1500 沙箱,Team82 利用其内存保护绕过漏洞,允许黑帽将随机数据输入“受保护”内存或读取关键信息以进一步利用环境。
西门子S7 PLC由ADONIS内核和ARM或MIPS内核供电。该控制器与许多编程语言兼容,包括结构化控制语言 (SCL)、梯形图(LD)、语句列表 (STL) 和功能块图 (FBD)。
Claroty不得不对字节码语言进行逆向工程(西门子尚未公开披露有关如何解码MC7 / MC7+字节码的信息),以了解有关内部环境的更多信息并找到可以利用的领域。
Team82的虚拟机通过操作系统提供的编译字节码而不是直接的硬件操作来阻碍用户程序中的数据流。这会将用户和代码限制为安全的特定协议*,将代码锁定到沙箱中,减少对存储和资源的访问,并削弱功能,从而损坏 PLC。
Team82总结道:“逃离沙箱意味着攻击者能够从PLC上的任何地方读写,并可以使用恶意代码修补内存中的现有VM操作码以根设备。例如,Claroty能够将ARM或MIPS外壳代码直接注入内部操作系统结构,这样当操作系统使用我们选择的特定操作码时,我们的恶意shellcode将执行,从而为我们提供远程代码执行。我们使用这种技术来安装一个内核级程序,该程序具有一些对操作系统完全隐藏的功能。
漏洞
CVE-2020-15782
CWE-119 在内存缓冲区范围内操作的不当限制
CVSS v3.1 成绩: 8.1
*例如,操作系统将限制对受保护内存的任何直接访问,但允许使用西门子提供的标准库中的任何函数(例如ADD_I - 添加整数子例程)。