该rootkit实现了对可编程逻辑控制器(PLC)输入/输出(I/O)接口的新攻击。
研究人员设计出新的恶意软件攻击方式,针对可编程逻辑控制器(PLC),利用的是微处理器中的架构缺陷,可规避现有检测机制。
PLC是专用嵌入式计算机,工厂、电站、炼油厂、公共设施和其他工业装置都需要PLC来对各种物理过程进行控制和监视。它通过由I/O引脚组成的接口与其他设备进行通信,比如传感器、阀门、电机等。该攻击修改的就是这一通信接口的引脚配置。
11月3号在伦敦举行的黑帽欧洲安全大会上将展示该攻击方法。荷兰特温特大学分布式与嵌入式系统安全小组博士研究生阿里·阿巴斯,巴黎网络安全公司Quarkslab研发工程师马吉德·哈舍米,是该攻击方法的开发者。
该I/O攻击的一个版本被称为引脚配置,在PLC操作系统不知道的情形下用恶意代码切换I/O引脚配置,从输出改成输入或反之。
举个例子,假设连到某阀门的PLC,可通过向配置成输出的I/O引脚发送信号,来开启或关闭阀门。该PLC同时通过另一条配置成输入的引脚来接收传感器的压力读数。PLC逻辑是监视传感器读数,在需要的时候自动开启阀门释放压力。
攻击者注入到该PLC的恶意代码可重配置输出引脚成输入,阻止PLC逻辑向该引脚输出信号,导致阀门不能开启。还可以重配置输入引脚成输出,发送虚假数据。结果将会是:PLC向监视软件报告称自己已经打开了阀门且压力正在下降——拜攻击者提供的虚假读数所赐,而实际上阀门并未开启,压力持续上升。
根本问题在于,嵌入式设备(如PLC)所用片上系统(SoC)中,并没有用于引脚配置的硬件中断,因而试图向重配置成输入的引脚进行写入操作时,系统将不会收到任何报错。这意味着,在运行时环境内部执行的PLC逻辑,不会崩溃,将会继续表现得好像操作成功一样——因为在操作系统虚拟内存里,一切看起来都很正常。
这就是核心问题所在。似乎没有哪家SoC厂商考虑过引脚配置反馈问题,对其他嵌入式系统而言这个问题好像也不是很重要。但对主要操作就是与I/O打交道的PLC而言,这个问题就超级重要了,会引发各种问题。
阿巴斯和哈舍米用rootkit实现了该攻击技术,作为可加载内核模块 (LKM)执行。这种方式可绕过现有基于主机的入侵检测和用于嵌入式系统的控制流完整性工具,比如 Autoscopy Jr 和Doppelganger。
两位研究员的文章称:“我们这种攻击的创新性在于,我们不用修改PLC逻辑指令或固件,就可以操纵物理过程。这里面没有利用到任何传统函数钩子技术,也不用将整个恶意代码载入动态内存。”
将rootkit实现为LKM(基本上就是个驱动)的缺陷是:部署上需要root权限。因此,研究人员还开发出一个用现有PLC运行时功能来重配置引脚的版本,该变种可由内存泄露漏洞利用实现,直接加载恶意代码到动态内存。
另一种攻击技术针对的是引脚复用功能(除通用输入输出(GPIO)外引脚还用作其他接口模式)。引脚的功能可在运行时被重分配,而且同样的,也没有任何反馈以告诉操作系统发生了什么。
阿巴斯说:“假设你通过引脚连到电机,并通过CPU里的脉冲宽度调制(PWM)控制器进行管理。我们的攻击所做的,就是复用该引脚,将其功能改成其他什么东西,但CPU不会告诉负责将虚拟地址转换成物理地址的内存管理单元(MMU)说,‘嘿,这个引脚对应的物理地址不可用了哟’。MMU会继续试图向改地址写入,CPU则无视掉了该请求,但不会返回任何错误,PLC就依然认为电机还是处于控制之下的——细思恐极。”
阿巴斯表示,此类I/O攻击不会很快出现,因为目前还有其他更容易方法侵入PLC。不过,随着厂商在下一代PLC中植入更好的安全,最好谨记固件和逻辑操纵并非黑客的唯一攻击选择。
而且,不仅仅是PLC对I/O攻击束手无策,所有用于I/O的嵌入式设备都在I/O攻击风险笼罩之下,比如汽车中用的电控单元(ECU),或电力工业用的智能电子装置(IED)。
论文中,研究人员提出了I/O攻击检测新技术的两个研究方向。他们未来工作的基础就是这个。