长亭百川云 - 文章详情

G.O.S.S.I.P 阅读推荐 2024-06-19 基辅危急之电网毁灭者!

安全研究GoSSIP

52

2024-07-13

2015年圣诞节前夕(12月23日),乌克兰电网中用于配电管理的SCADA系统(也就是数据采集与监视控制系统,英文全称为Supervisory Control And Data Acquisition)被网络安全攻击者入侵,30个变电站受到影响,运营中断了三个小时,影响到了约8万名客户。这个事件很快被网络安全研究人员拿来进行了深入分析(https://www.vnf.com/webfiles/cyberattackukraine.pdf 英文版分析报告;
https://blog.nsfocus.net/wp-content/uploads/2016/11/乌克兰电网攻击分析20161101.pdf 中文翻译版分析报告),并且认为是俄罗斯黑客主导了这次攻击。可是还没到一年时间,2016年12月17日,俄罗斯黑客再次对乌克兰电网发动了攻击,导致了乌克兰首都基辅五分之一面积的地区受到断电影响。

当然,后来我们知道,2015和2016年的网络攻击只是预演,到了2022年,在俄乌冲突进行到白热化的时候,第三次针对乌克兰电网的攻击如约而至,并且这次攻击是配合着其他攻击(比如导弹袭击)一起进行的,网络安全公司Mandiant将这起攻击和俄罗斯联邦武装力量总参谋部情报总局(GRU)的“沙虫”(Sandworm,这是《沙丘》看多了?)APT组织联系起来,著名的《连线》杂志也进行了报道:

https://www.wired.com/story/sandworm-ukraine-third-blackout-cyberattack/

在这些攻击的背后,究竟有什么样的复杂技术细节,敬请收看今天的《走近科学》之《电力毁灭兽》 在今天我们要介绍的IEEE S&P 2024会议论文_A Tale of Two Industroyers: It was the Season of Darkness_中,研究人员详细剖析了这些安全攻击背后使用的恶意软件——Industroyer(这个名字听起来就很鬼畜),同时也介绍(带货)了一款他们开发的工业控制系统安全分析所用的testbed——NEFICS

虽然电气和自动化这个领域的很多概念对于我们读者群来说都相对比较陌生,但是有一个基本的事实可能是对我们有利的,那就是基本上人类所有工业领域中用到的各种控制和管理系统,基本上都是基于计算机领域这么多年的积累(说得不对,冒犯到其他领域,敬请批评指正)。不管是用到的芯片、软件还是控制协议,基本上都是从计算机这边选择一些合适的原型,做些小的修改之后就用起来。所以一来我们完全不要被陌生的名词吓到,二来其实工业界对于网络安全攻击者其实非常友好——那些改过的系统可能大部分都是计算机这边的系统进行了精简之后形成的,各种安全防护措辞很可能都被裁剪掉了。在本文中,我们需要了解的概念,除了SCADA系统(用来管理电网中的各类设施)之外,还有就是整个电网的组成。电网中的主要节点包括了控制中心(control room)、变电站和配电站(substation)以及智能设备(Intelligent Electronic Device,IED),可以认为控制中心统管各类变电站和配电站,而各类变电站和配电站内部都是由一些IED智能设备组成的局域网。除了网络结构,还需要了解的就是电网的通信协议,像下图中标记的IEC 101、IEC-104和IEC-61850都是电网通信的一些规范,其实也都是基于计算机网络这边的各种协议魔改出来的,而RS-232这种古老的通信协议(1970年就定下来的)则是用来在嵌入式设备之间进行短距离数据低速交互用的。

在看完上面的介绍之后(希望你没有头晕,只是些名字而已,和奢侈化妆品呀豪华汽车啊一样,品牌都是用来唬人),接下来就要进入到针对Industroyer恶意软件的分析了。作者调查发现,攻击者实际上开发了两个版本的Industroyer,在论文里面就叫做Industroyer-1和Industroyer-2,下表表格里面是这两个版本的Industroyer的文件组成(哈哈都是Windows可执行文件,赶紧信创一下)。Industroyer-1还是一堆文件,而到了Industroyer-2就变成单文件了,这也和Industroyer的演化有关,具体是什么情况呢?请继续往下看。

对Industroyer-1的分析表明,这个版本实际上要比Industroyer-2要复杂,它是一个高度灵活、可配置可定制化的实现,光是拿到样本的情况下,如果没给特定的配置文件,你甚至无法确定它的具体攻击行为。而到了Industroyer-2,攻击者对攻击的目标已经非常明确,开发思路也已经驾轻就熟,于是就是一个高度定制化、裁剪得非常干净的版本。Industroyer-1支持很多通信规范,而Industroyer-2只支持IEC 104定义的通信协议,目标也只针对那些能够用IEC 104协议通信的终端节点设备(如下图所示)。

Industroyer各个版本释放的payload的具体工作细节我们就不在这里赘述了,有兴趣的读者可以去论文里面看看(从第4.3章开始到第5章),除了基本的攻击(控制那些电网中的设备,通过触发断路器引起断电)以外,Industroyer还有很多细节值得关注,比如它们会杀掉正常的进程(因为这些进程会和Industroyer抢占通信资源),还会在引发断电之后,把运行环境上的一些关键的文件(例如那些与设备通信相关的可执行文件)删掉,破坏后续的恢复,也会想办法把一些工控设备的引导程序破坏,让它们无法正常启动。总之,两个版本的Industroyer都有一个共同的特点——它们都是被设计成不需要C&C控制服务器就能工作的,也就是说,你尽管物理隔离好了,我找个内鬼带进内网里面释放一下就搞定。这么的细节说明了什么?说明攻击者是相当相当熟悉被攻击的环境,在完全不需要联网的情况下,放一个恶意软件进去,就像进入了自家一样,轻车熟路搞破坏,所以那些迷信大内网物理隔离就是安全的人是不是该被打脸了(当然乌克兰没法像我们一样又红又专,显然就应该老老实实按照西方的计算机安全标准体系来构建自己的基础设施对不对)?

在分析中还有很多有意思的发现,比如说Industroyer-1实际上开发得并不完善,在处理IEC-104通信的时候,状态机会有一些错误,完全可以用一些主动检测的方法发现,但是到了Industroyer-2就实现得比较完善了(当然肯定是要怪Industroyer-1的项目经理贪图大而全,你看Industroyer-2小而美就不会有问题)。从这个案例我们也知道,不管是哪个开发团队,做减法都比做加法更重要(说的就是你,越来越臃肿的Windows!)

当然,本文其实夹带了一个大私货,那就是作者设计的NEFICS分析系统(testbed),它号称比以前的同类系统都厉害,能够很好分析Industroyer的功能,具体的设计我们也不多说了,大家可以去NEFICS的GitHub repo里面看看代码(https://github.com/Cyphysecurity/NEFICS 确实有代码)。

最后作者也说,Industroyer恶意软件实际上只和俄乌冲突之前的断电攻击相关,到了2022年那次攻击(也就是前面说的“沙虫”攻击),恶意代码已经不再以可执行文件的形式去执行,而主要是复用了SCADA系统中有一个microSCADA server(可以理解为是一个解释器,能够把脚本翻译成控制信令下发),直接通过给这个microSCADA server发送恶意脚本,让它去控制底下的设备(断电)。如果大家感兴趣,也可以去看看Mandiant(已经卖给Google了)的分析文章:

https://cloud.google.com/blog/topics/threat-intelligence/sandworm-disrupts-power-ukraine-operational-technology/


论文:https://zambo99.github.io/publication/sp2024/s&p2024.pdf
代码:https://github.com/Cyphysecurity/NEFICS

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2