00:00
今天我们有好戏看了,他马上就要开始讲解关于恶意PLC攻击的内容,话不多说,我们把舞台交给他,谢谢大家,谢谢大家,屏幕显示都正常,没有什么问题了。好了,我们开始吧。大家好,我要分享的是一个超酷的研究项目,恶意PLC攻击。我们是如何将PLC就是可编程逻辑控制器武器化的。先跟大家介绍一下我自己,我是Sharon bna, 任职于clarity,从事漏洞研究工作,在座很多关于SSES和scada安全方面的研究。我平时参加CTF竞赛,参加过PWN2、alone迈阿密站的202和2020年比赛,我还在I CS ctf中夺冠,获得了def con的黑徽章,真的非常幸运。我主要的乐趣就是破解PLC。不知道大家能不能看到小图,这是我们在特拉维夫的超酷实验室,我在特拉维夫工作。
01:09
特别感谢和我一起参与这项研究的同事,Michell your NUM以及me,非常感谢你们。今天我会先讲讲这项研究的背景以及我们开展它的初衷。为什么要开始这项研究。我们还会介绍PLC的程序上传与下载操作,这就是我们将逻辑程序传输到PLC的方式,这样他就能执行逻辑程序并控制实际的物理过程,最后来揭开恶意PLC攻击的真面目。这是我们提出的一种概念,我会介绍他是如何传播,如何攻击工程师和技术人员的。从一个故事开始吧,就像我之前说的,我们在特拉维夫有一个超酷的实验室,里面配备了大量的ICS设备。2年前,我们就已经搭建好了这间超酷的ICS实验室。我们在想,为什么不把几台PLC暴露在互联网上呢?这样外部扫描器就能发现我们,而我们则可以实时监控这些交互行为。于是我们决定从实验室挑选几台PLC来进行实验。比如原本由GE生产的PLC,现在由Emerson接手了RX3I型号。这些设备都是工业控制器,我们只是把它们连接到外部路由器,然后将它们暴露在互联网上。
02:28
我们对整个实验进行了持续的监测与记录。我们使用了网络嗅探器,同时开启了审计机制和日志收集。然后我们等待了几个星期,看看会发生什么。没错,我们的系统遭到了入侵。然而,我们真正的蜜罐却遭遇了典型的OT式攻击。那么OT式攻击指的是怎样的入侵方式?就是一群人用收on对整个互联网进行扫描。
03:03
接着,他们就直接使用了市面上的工程工作站。这套软件是厂商在销售硬件时一并附带的,用于对PLC进行编程和监控。说白了,它就是一款既能诊断问题,又能编程PLC的软件工具。这些攻击者只是利用这款软件输入目标IP就能轻松接入系统。他们很可能是通过稍LD的或3SS找到目标的,通过工程工作站直接改写了我们的逻辑程序。那么攻击者具体是怎么做到的呢?他们使用了两个主要功能。他们使用的第一个功能叫做上传流程,在上传流程中,你其实是在向PLC发出请求,那工程工作站软件会向PLC发出请求,查询其当前运行的逻辑程序。它会请求将PLC中的逻辑程序传输到应用程序中。这个应用通常是基于Windows的,这样我们就能在工程工作站上看到PLC当前正在运行的程序。它本质上是一种诊断工具。现在他们完成了上传,成功获取了我们写入PLC的逻辑程序。他们修改了几个关键参数。
04:19
彻底篡改了我们的程序逻辑。接着他们执行了下载流程,这是上传流程的反向操作,他会将逻辑程序传输到PLC中。现在PLC基本上就被植入了一套新的程序,他必须按照这套逻辑来运行。至少在攻击者看来,一切都按他们的计划在进行。他们以为攻击成功了,以为已经顺利破坏了系统。可事实上,我们的PLC只是亮起了红色系统故障警报,除此之外什么都没发生。众所周知,推动某些研究最强烈的动力往往是复仇心理。当时我们真的非常愤怒,攻击者竟然擅自篡改了逻辑程序,还自以为攻破了什么核设施,我们决定反击,于是制定了一个复仇计划。
05:07
我们打算再次把PLC当作蜜罐,并以某种方式将它武器化。当时我们还不确定具体该怎么做,但我们决定先把它当作诱饵。接下来,我们就等着攻击者再次通过收找上门来,毕竟他们自认为技术高超,能轻松扫遍整个互联网的外部IP。果不其然,他们还是按照老套路来先执行上传流程。当他们执行上传流程时,我们打算利用这台被武计划的PLC对攻击者发起反击,在他们的系统上执行代码,这就是我们的计划。在深入讲解之前,我们先来梳理几个关键术语。我们先了解一下什么是PLC,什么是下载流程,什么是上传流程。PLC全称是可编程逻辑控制器,它是一种小型计算设备,用于控制和自动化物理流程。简单来说,PC就是用来控制现场设备的,它可以连接各种现场设备,比如传感器、温度传感器,它可以控制执行器,比如电梯或马达。要让PLC执行任务,我们必须先对它进行编程,而编程的方式就是使用一种叫做工程工作站的软件。所以我们是在工程工作站软件中开发程序,我们将程序传输到PLC中。现在PLC已经具备了控制现场设备的能力,现在是时候展示一个真正有趣的例子了。比如GE的may平台,你看到的是IDE,也就是工程工作站,你现在看到的是一种特定的。
06:48
PLC编程语言,这是一种图形化的编程方式。我们就是通过这个软件将控制逻辑传输到控制器中。在这个例子中,使用的是记忆的Macy平台。一旦PLC或控制器接收到我们传输的程序逻辑,它可以控制实际的物理流程。在这个案例中,这个平台主要用于控制绿色能源领域的物理流程,比如说,它可以用来控制风力发电厂。从宏观角度来看,第一步是开发或编写控制逻辑,我们通常会使用专门的PLC编程语言。
07:30
比如常见的有梯形图逻辑或功能块图逻辑。这些通常是图形化的编程语言,所以我们编写逻辑时就是在用一个个方框或功能模块来搭建流程,基本上我们做的就是构建一个流程。也就是说,我们让PLC或控制器去读取某个传感器的数值,如果这个数值高于设定的阈值X,那我们就启动风扇来给房间降温。而在GE的系统中,我们所看到的图形化逻辑其实在背后是以XML的形式呈现。
08:09
你可以看到这里展示了不同功能的主题,具体的功能模块以及一些其他参数。接下来我们的整个逻辑展示需要经过某种编译过程。我们要把脑海中的想法转化成控制器能够理解的逻辑。我们通过图形化的逻辑展示,最终将其转换成某种自解码形式,这样我们就可以把它传输到PLC中。现在我们以记忆的系统为例来说明,当然,这只是众多ICS供应商中的一个。在记忆的案例中,他们使用了一种叫做P扣的东西,这是一种中间字解码,最终会被传输到控制器中执行。你可以看到,比如这个特定的字节就代表了加法运算功能。当然,我们可以进一步拆解和分析它,但这里展示的只是一个通用事例。下一阶段就是将这些逻辑传输到PLC或控制器中。比如,在记忆的系统中,他们使用一种专有的产品代码来传输这些控制逻辑。
09:14
他们使用一种叫做FDI的协议,将我们在工程工作站中编写的逻辑程序传输到控制器。我们将逻辑编译成p code, 也就是中间字解码,通过专用协议将它传输到控制器中。最后,PLC需要执行这些逻辑,控制器接收到字解码后,会逐个字节进行解码,控制器会将这些字解码转换为本地机器码并执行。这就是我们实现控制的方式。控制器正式通过这样的流程来操控物理过程。最关键的两个环节就是上传和下载。下载操作用于将控制逻辑传输到目标控制器。
10:00
这一过程是从工程工作站传输到控制器的,而上传通常是相反的过程,用于将控制器中的逻辑提取回工程工作站,这样我们就可以进行调试,并实时查看系统的运行状态。我们可以通过上传操作获取控制器当前正在运行的全部逻辑,并对其进行修改,然后我们在通过下载操作把修改后的新逻辑重新写入控制器。大多数情况下,我们使用的是自解码,它会从工程工作站传输到PLC。然而我们发现了一个严重问题,在上传和下载的过程中,传输到控制器的并不只是自解码。除了自解码这种实际执行的逻辑,我们还发现源代码也被一并传输到了PLC。我们有一张符号表,里面包含了所有变量的详细信息,还包括输入输出配置、设备配置、网络配置、变量定义等等。
11:00
这一切的操作既是为了将程序传输到PLC,也是为了方便我们进行调试。我们是在传输大量的数据对象和原数据,这些内容与调试信息、配置参数等密切相关。此外,我们还有上传操作,它会将这些数据对象从PLC回传到工程工作站。我们发现PLC实际上只关心字节码和配置数据。尽管PLC接收了源代码和原数据。PLC并不会解析,它们只是被存储在控制器中。而在上传过程中,工程工作站其实并不处理自检码,因为工程工作站并不具备反编译功能,他只关注源代码和调试数据。于是我们开始思考,是否可以利用这一点,如何在不影响PLC正常运行的前提下存储一些信息或数据对象呢?
12:02
但当这些数据被工程工作站软件读取时,事情就开始变得不一样了。所以我想大家现在应该和我有着相同的思路了。我们现在来谈谈恶意PLC攻击。我们的目标是将PLC5计划,从而对工程工作站发起攻击。为了实现这个目标,我们在PLC中植入了特定的恶意数据对象,让它具备攻击能力。也就是说,PLC之所以被武器化,是因为其中存储了某些恶意的数据对象,这些数据之所以不会影响PLC,是因为PLC并不会解析源代码或其他调试信息。当工程工作站执行上传操作时,只要有人执行上传操作,PLC里那些本该沉睡的数据就会被完整的带回工程工作站。我们希望能在这些数据对象的解析过程中找到某种漏洞或缺陷,从而在工程工作站上实现有效的代码执行。
13:05
我们决定对7家业内领先的ICS厂商展开分析。并进一步验证我们的攻击概念是否能够在每个平台上成功实施。在研究ICS厂商时,第一步就是获取他们的硬件设备。我们都觉得获取ICS的硬件设备非常困难,其实上eBay就能搞定,可以在网上买到任何一种PLC。我们之前完全没有意识到这一点,原来可以在eBay上买到任何想要的工业硬件。只要有钱就行了。就这样,我们顺利拿到了所有所需的设备。首先,我们在实验室中搭建了7个不同产品线的测试环境,7个平台全部连接并运行,我们还配置了工程工作站,使其能够与这些设备进行通信。在完成设备部署和环境搭建之后,我们着手分析各平台的上传与下载流程。我们开始对工程工作站进行逆向分析,也对PLC的固件进行了拆解研究。我们还分析了工程工作站软件与PLC之间的通信过程。我们之所以进行这一切,就是为了深入了解PLC中究竟存储了哪些数据,以及工程工作站在交互过程中会提取哪些信息。那么我们如何利用这一点呢?那我们如何知道工程工作站到底接收了哪些数据?最终,我们的目标是找到解析流程中的漏洞,从而构造可利用的攻击方式。
14:41
把恶意数据对象存储在PLC当中。在工程工作站的数据解析流程中找到漏洞,然后将整个攻击链条串联起来,我们亲手完成了这一切。我们成功挖掘出了7个零日漏洞,准确的说是7个以上。这些0日漏洞不是孤立存在的,我们在所有受影响的平台上发现了7条完整的漏洞链,而我们必须这么做。我们必须对所有不同的平台进行深入研究,包括工程工作站,我们必须对所有不同平台的解析流程进行逆向分析,我们必须深入了解每个平台是如何实现上传与下载机制的,我们还必须自行实现这些专有协议的客户端,所以我们不得不深入研究大量的汇编代码,最终这一切都得到了回报。
15:32
正是因为我们找到了这些漏洞,并成功将他们串联成完整的攻击链。接下来,我想给你举一个我们研究过的平台的例子,我们确实做了一些魔法。我想分享的例子是关于记忆的may平台,这个平台主要应用于绿色能源领域。比如用来控制风力涡轮机,这个平台运行在top PC架构的PLC控制器上,并采用big n dn字节序。它运行的是实时操作系统。该平台运行的是QNX实时操作系统,这对我们的研究非常有帮助,因为它采用了类unix的微内核架构。工程工作站的名称是TU8萨T,它是一个使用C编写的耐应用程序,所以再次强调借助反射机制,逆向工程变得相对容易。PLC与工程工作站之间使用的通信协议叫做s Di, 该协议运行在TCP协议之上,使用的是5311端口,其实已经拥有了所有关键组件。
16:38
画面中有工程工作站,旁边是出8ST工具,还有控制器,在下方你可以看到一个来自Sha的数据包。视力。首先我们要做的就是搞清楚控制器上到底存储了什么。我们一直在寻找一种特殊的数据对象,它被控制器存储,但却不会被解析或使用。我们的目标是让PLC保持不受影响。后来发现控制器的二进制代码,也就是p Co de被存储为P扣文件,这对我们来说非常方便。而源代码则被打包存储在一个名为device.zip的归档文件中,而在这个归档文件中,我们发现了之前见过的所有XML文件。
17:21
事实上,PLC或控制器根本不关心源代码,他就待在控制器里,直到工程工作站发出请求,控制器就会将这些文件传输给工程工作站。所以现在我们已经清楚控制器上存储了哪些内容,但还必须深入了解工程工作站中的解析缺陷。于是我们开始分析上传流程,而这就是Q8ST程序中负责上传的主函数。在上传流程中,我们发现工程工作站会读取大量文件,其中一个被读取的文件就是device.zip归档。工程工作站对控制器完全信任。
18:07
当文件被检索时,它会被直接解压,没有任何限制或安全检查。于是我们发现了第一个漏洞,Zip sleep.Zipp让我们能够覆盖系统中的任意文件。我们开始思考如何利用zip sleep将控制器变成一个真正的攻击载体。于是我们决定寻找在上传流程完成后被加载的DLL文件。我们的目标是放置一个DLL文件,在上传流程完成后由工程工作站自动加载。而我们确实找到了这样一个目标,DLL不克ADLL是一个非常理想的攻击目标,因为这个DLL会在上传流程完成后立即被加载。于是我们拿到了原始的DLL文件。我们将自定义的CLL代码注入到了一个我们知道会被API调用的函数中。
19:09
于是我们把这个device最归档进行了武器化处理。把这个武器化的device.z归档传输回控制器。为了完成这一步,我们必须实施s Di协议,而s Di协议是专有协议,我们不得不进行大量逆向工程来破解这些协议,这样我们就能完全理解整个认证流程以及上传与下载的所有协议细节,并将其自行实现。我们最终确定需要实现的关键函数是0乘十八零乘190×0D。这一步是想让控制器知道我们即将启动一个恶意的下载流程,我们还需要将这个武器化的归档文件覆盖到控制器上。最终我们成功实现了整个攻击链,我要播放一个非常酷的演示。
20:04
太好了,视频没出问题。现在你所看到的就是我们正在对控制器上的归档文件进行武器化处理,这一侧是攻击者的操作界面,现在我们切换到工程师这一侧,他们正在使用一个全新的平台,他们现在准备执行上传操作,查看控制器上的最新状态。工程师会打开TO8ST平台,输入控制器的IP地址,执行上传操作,各种不同的文件正在被加载,现在系统里出现了一个勒索软件。谢谢大家,仅仅一个平台是不够的,我之前也提到过,我们已经研究了7个不同的平台,我们实现了7条不同的攻击链,其中包含了多个漏洞,这些漏洞都已被公开修复,并得到了有效缓解。
21:00
我想给大家展示一段我们精心准备的视频,包含了我们曾分享给各大厂商的演示片段。好,我们来看一下,现在我已经把所有视频同步到了同一个时间点。The.我们正在执行恶意下载操作。正在对所有平台进行武器化处理。一旦所有平台都完成了武器化处理,我们将等待伪造的勒索软件在各个工程工作站上被触发。这些就是我们最初分享给厂商的视频,一开始在部分工作站上弹出了计算器窗口,随后切换到了画图程序,最后是我们伪造的勒索软件。这个演示非常有意思,我特意加入到视频中。最终我们成功在所有平台上实现了完整的攻击链,并在真实运行的PLC上触发了伪造的勒索软件。这是一项非常精彩的研究,这项研究也帮助我们深入理解了攻击CS设备和PLC的一些全新概念,谢谢大家,我们下次再见。
我来说两句