检测不出的 PLC rootkit 终于现世

本文讲的是 检测不出的 PLC rootkit 终于现世,该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攻击检测新技术的两个研究方向。他们未来工作的基础就是这个。

时间: 2025-01-21 03:26:58

检测不出的 PLC rootkit 终于现世的相关文章

研究人员开发了一款无法被检测到的工控系统PLC Rootkit

两名安全研究人员开发出了一款无法被检测到的PLC Rootkit,并计划在即将到来的2016欧洲黑帽大会上公布其具体细节. 作为网络犯罪分子以及国家支持的黑客组织的重点攻击目标,能源行业面临的网络攻击威胁正逐渐加深.Stuxnet(震网病毒 )事件的爆发已经向世人证明了网络攻击的危险后果.威胁组织者完全能够将恶意代码传播到 关键基础设施中,干扰其内部运作流程. 这一新型攻击手段将在即将召开的2016欧洲黑帽大会上亮相 ,据悉,利用该手段能够悄无声息地侵入工业网络流程. 危险性可能超过 Stuxn

绿盟科技研究员刚实现PLC蠕虫 荷兰研究员就要发布PLC Rootkit 据说这种攻击难以检测

绿盟科技刚实现PLC蠕虫,荷兰两个安全研究员就开发了PLC Rootkit,并将在即将到来的2016年欧洲黑帽大会上进行展示.据说PLC Rootkit目前还没有检测手段,Blackhat 2016欧洲展会将在11月1日开幕,让我们拭目以待. 荷兰特温特大学研究员将在BlackHat 2016欧洲展会上展示PLC RootKit 两名安全研究员开发了一个无法检测的PLC Rootkit.其中一个是荷兰特温特大学分布和嵌入式系统安全组的博士生Ali Abbasi,另一个是独立研究员Majid Ha

JavaScript检测弹出窗口是否已经关闭的方法

 这篇文章主要介绍了JavaScript检测弹出窗口是否已经关闭的方法,涉及javascript中window属性的closed属性的使用技巧,需要的朋友可以参考下     本文实例讲述了JavaScript检测弹出窗口是否已经关闭的方法.分享给大家供大家参考.具体实现方法如下: 代码如下: var win = window.open('foo.html','windowName',"width=200,height=200,scrollbars=no"); var timer = s

JavaScript检测弹出窗口是否已经关闭的方法_javascript技巧

本文实例讲述了JavaScript检测弹出窗口是否已经关闭的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: var win = window.open('foo.html','windowName',"width=200,height=200,scrollbars=no"); var timer = setInterval(function() {       if(win.closed) {          clearInterval(timer);     

USB转串口通过windows消息检测拨出,为什么检测不到?

问题描述 正如题,我需要通过USB转串口线向外传送数据,在网上找了很久才找到了一个用例,修改了下只能检测到插入消息,怎么也检测不到拨出消息,但换成U盘就可以,通过将消息弹出拨出时只检测到了消息为"7"我的是笔记本电脑.请高手指点下是什么原因?完代码如下://usb消息定义publicconstintWM_DEVICE_CHANGE=0x219;publicconstintDBT_DEVICEARRIVAL=0x8000;publicconstintDBT_DEVICE_REMOVE_C

Java安装没错 可是检测时出错了 还是环境变量设置问题吗?

问题描述 我按照说明装了可是检测环境的时候javac检测成功但java-version检测失败它出现了如下错误:"Erroropeningregistrykey'softwarejavasoftjavaruntimeenvironmentError:conldnotfindjava.dllError:couldnotfindjavaseruntimeenvironment"请问大家这是怎么回事儿呢??? 解决方案 解决方案二:你确定你的这个"java-version"

吉象食用油三次检测仍出问题仍有部分未召回

作为云南规模数一数二的企业,无论是在本地市场,还是外地市场,云南丰瑞油脂有限公司生产的"金菜花"."吉象"油品牌都有着很大的销量和影响力.前日晚上,昆明市食品安全委员会通报,该公司涉嫌使用非食品原料违法加工食用油脂,昆明市质监局已责令该企业召回"吉象"牌散装猪油.桶装猪油.猪油植物油调和油3个问题产品.这样一条爆炸性的消息,让昆明油脂市场"非常紧张". 据生活新报报道,云南丰瑞油脂有限公司位于昆明市杨林工业园区,成立于2010

如果反病毒软件不工作 有可能中了Rootkit Rootkit检测和清除还是有办法的

Rootkit 是一种特殊的 恶意软件 ,因为它们能够在操作系统启动前就加载,还能躲过普通的恶意软件扫描和防护.这种逃避检测的能力让它们尤其难以清除,后续清理工作更难以进行. Rootkit难以查找,这是有意为之.在笔者看来,即使只有些许迹象表明有Rootkit感染,也应该利用确认干净的最新备份重装系统.若无法确定感染时间,则假定所有备份镜像均已感染,将其丢弃.这进一步促使我们将数据同操作系统(OS)文件隔离开,对两者进行定期备份.这样,丢弃OS/运行时环境时就不必同时清除数据文件. 本文探讨了

opencv怎么样有效检测出红绿灯的位置?

问题描述 opencv怎么样有效检测出红绿灯的位置? 我在检测时是先用Canny检测边缘,然后再用HoughCircles进行圆的检测,但是效果十分不理想,有时什么都检测不出,有时检测出一堆圆但就是没有我想要的那个,最好的结果是得到一堆圆里面有想要的,但是无用圆数量太多了.我该怎么操作才能更加准确地检测呢? 解决方案 http://www.zhihu.com/question/45686643