1. 事件背景
根据国际相关媒体报道,2024年4月,隶属于乌克兰情报部门的黑客组织Blackjack声称,该组织针对俄罗斯进行了一次网络攻击。攻击的目标涉及到地下水和污水处理以及通信基础设施。被攻击的基础设施中使用的设备来自两家俄罗斯公司,Moscollector(https://ao-sbk.ru)和iRZ(https:// www.irz. net)。
图 1 cybersecuritynews针对该事件的报道
攻击者将攻击的结果在https://ruexfil. com/mos/网站上进行了公开。该网站上有大量针对Moscollector 的攻击信息,包括攻击者使用的Fuxnet恶意软件以及攻击者攻破并清空数据的服务器和数据库的截图。
图 2 攻击者披露的网站截图
Blackjack声称其攻击达到了预期的效果,主要包括以下方面:
(1)获取了俄罗斯112紧急服务号码;
(2)破坏了关键基础设施(包括机场、地铁、天然气管道)的传感器和控制器,使其全部失效,这些设备主要包括:
MPSB(传感器网关):424 个设备
TMSB(传感器网关+调制解调器):93 个设备
iRZ(3g路由器):93台设备
Windows 10(工作站):9 台设备
Windows 7(工作站):1 台设备
Windows XP(工作站):1 台设备
(3)禁用了路由器和防火墙等网络设备;
(4)删除了服务器、工作站和数据库的30TB的数据;
(5)所有进入Moscollector 办公楼的钥匙卡失效,导致无法进入该大楼;
(6)转储了多个内部服务的密码。
图 3 被攻击的工作站
被攻击的设备主要包括三类:工业网关、路由器和传感器。
(1)工业网关是俄罗斯的AO SBK公司的产品,主要涉及其中的两种型号的网关MPSB和TMSB。MPSB用于通过各种接口与外部设备进行信息交换。支持以太网和串行通信协议,包括 CAN、RS-232 和 RS-485。TMSB类似于 MPSB,包括内置的 3/4G 调制解调器,使其能够通过互联网将数据传输到远程系统。这两种工业网关的常见部署拓扑图如下所示。
图 4工业网关的部署拓扑图
图 5 MPSB工业网关
(2)传感器也是来自AO SBK公司的产品,该公司销售各种传感器,包括气体分析仪、温度传感器和消防和安全系统控制台等。这些传感器属于低级设备,部署在现场,用于测量现场的环境数值。
图 6 安全系统气体分析仪
(3)路由器是iRZ公司的RL22w型号的产品,该路由器是一款3G路由器,内置了OpenWRT,用于将传感器数据传输到互联网,最终上传到监控系统。
图 7 iRZ RL22w路由器
2. 技术分析
攻击者在本次攻击中使用的恶意软件Fuxnet主要是用来破坏网络设备的,该恶意软件会从四个方面对设备进行攻击,包括文件系统销毁、闪存破坏、销毁UBI卷和拒绝服务。
2.1 文件系统销毁
一旦将恶意软件Fuxnet部署到目标设备上,Fuxnet就会fork出一个新的子进程来锁定设备。它首先重新挂载文件系统并赋予其写访问权限。然后开始删除关键的文件系统中的文件和目录,并关闭远程访问服务,例如 SSH、HTTP、telnet 和 SNMP。这样,即使路由器仍处于工作状态,也无法远程访问来恢复其运行。然后,攻击者删除路由器的路由表,导致其无法与其他设备通信。该部分的功能是通过调用系统的命令实现的,以下是其实现的命令。
system(“mount -o remount,rw /; mount -o remount,rw /opt; mount -o remount,rw /mnt/usb”);
system(“rm -rf /etc/passwd /etc/shadow /sbin/agetty /usr/sbin/telnetd /usr/sbin/sshd /usr/bin/pinger /usr/bin/ifinfo /usr/bin/smsd /etc/config /usr/sbin/uhttpd /opt/ /mnt/usb /var/log”);
system(“systemctl stop systemd-logind; systemctl stop ssh; systemctl stop serial-getty@ttyS0; systemctl stop gettyetty1”);
system(“killall -9 sshd telnetd dropbear uhttpd askfirst smsd agetty”);
system(“pkill -9 sshd; pkill -9 telnetd; pkill -9 dropbear; pkill -9 uhttpd; pkill -9 askfirst; pkill -9 smsd; pkill -9 agetty”);
system(“cp /bin/sh /dev/shm”);
system(“firstboot -y”); // openwrt 恢复出厂设置
sleep(REAPER_RMRF_DELAY);
system(“ip route del default; route del default gw”);
system(“ip link del eth0; ip link del siml; ip link del pppol2tp1”);
system(“ifconfig eth0 down; ifconfig siml dopwn”);
system(“rm -rf /root /etc 2>/dev/null >/dev/null &”);
system(“dd bs=4k if=/dev/zero of=/dev/mmcblk0 2>/dev/null >/dev/null &”);
system(“dd bs=4k if=/dev/zero of=/dev/mtdblock7 2>/dev/null >/dev/null &”);
system(“dd bs=4k if=/dev/zero of=/dev/sda 2>/dev/null >/dev/null & “);
system(“dd bs=4k if=/dev/zero of=/dev/sdb 2>/dev/null >/dev/null &”);
system(“mv /bin/sh /bin/sh.bak; sync; sync”);// LAST, Therafter no more system() calls allowed.
2.2 闪存破坏
在破坏文件系统并阻止对设备的访问后,恶意软件会继续物理破坏设备上的NAND 内存芯片。恶意软件Fuxnet会对NAND 芯片的整个部分执行位翻转操作,不断写入和重写内存,直到因闪存损坏而无法写入时才停止。由于网关使用 NAND 内存,而 NAND 内存只能擦写一定的次数,因此不断重写内存会导致芯片发生故障而无法运行。
图 8 循环擦写NAND闪存
2.3 销毁UBI卷
为了确保传感器不会再次重启,恶意软件Fuxnet会重写UBI 卷。它使用IOCTL接口和UBI_IOCVOLUP参数与控制闪存的管理层进行交互,该管理层会告知内核 UBI 卷将被重写,并且将写入 x 个字节。在正常情况下,内核只有在写入 x 个字节后才会确定重写已完成。但是,Fuxnet不会向 UBI 写入 x 个字节,而是会写入少于其声明数的字节数,导致设备无限期地等待重写完成。最后,Fuxnet用垃圾数据(0xFF)覆盖 UBI 卷,导致 UBI 变得无用并且文件系统也会变得不稳定。
图 9 破坏UBI卷
2.4 拒绝服务
该恶意软件会继续破坏网关后面的传感器,通过向串行通道注入大量随机数据,使串行总线和传感器超载。
在恶意软件运行期间,会反复在 Meter-Bus 通道上写入任意数据,以阻止传感器和工业网关发送和接收数据,导致传感器功能失效。这种攻击方式只是淹没了连接不同传感器和工业网关的 Meter-Bus 通道,并未对传感器造成物理上的毁伤。本质上来讲,这种攻击方式是一种模糊测试的方法。
在这种攻击方式中,Blackjack 实现了两种 M-Bus 模糊测试方法:结构化模糊测试和随机模糊测试。在随机方法中,Blackjack 的恶意软件只是生成随机字节并通过 M-Bus 线路发送它们。为了确保帧不会被传感器丢弃,该恶意软件还会计算一个简单的 M-Bus CRC,并将其附加到随机帧中。在结构化模糊测试中,Fuxnet 尝试生成有效的 M-Bus 帧,仅对特定 M-Bus 字段进行随机化。这种遵循 M-Bus 协议结构生成的M-Bus帧,能够增加传感器对其进行完全解析的可能性,从而使得传感器可以执行更多的解析流程,增加触发漏洞的机会。
图 10 生成随机数据的过程
3.攻击延伸
通过对本次攻击的研究可以看出,攻击者的目标是工业控制系统中常见的工业网关和路由器,这些设备在整个工业控制网络中起着数据传输枢纽的作用,向下连接现场的传感器设备,向上连接上位机的监控系统。这种形式的拓扑结构在国内外的工业企业中大量存在,其中使用的工业网关和工业路由器与此次攻击事件中被攻击的设备在硬件和软件上具有极高的相似性,只需极少的修改即可将此次攻击事件应用到其他相似的工业网关和工业路由器上,因此,工业企业需要重点关注该类型的攻击。
攻击者本次针对基础设施的攻击在一定程度上对硬件设备造成了毁伤,基于此,在分析攻击者所使用的技术后,我们尝试复现该攻击方式中的重要步骤,并将其应用到其他的网关设备上,最终得到了预期的效果。
攻击者所使用的文件系统销毁、销毁UBI卷和拒绝服务这三种攻击中,只是在软件层面上的攻击,可以通过系统恢复来完成修复。而闪存破坏更偏向于物理毁伤攻击,被破坏的闪存需要更换硬件才能完成修复,这种方式造成的损伤更大、修复也需要更长的周期。因此,我们选取该种攻击方式进行复现和延伸。
3.1 闪存原理介绍
闪存的存储单元使用电荷状态来存储数据,通过改变电荷状态来实现写入和擦除操作。每次擦除操作都会使得存储单元中的电荷返回到初始状态,这就导致擦除操作比写入操作更耗时。每个存储单元可以承受有限的写入/擦除循环次数,超过这个循环次数之后,存储单元可能会变得不可靠或无法工作。
闪存是以块为单位进行擦除操作的,而不是以字节或位为单位的。即使只需要更改其中几个字节的数据,整个块也必须被擦除和重新写入。块擦除操作会增加存储单元的擦除次数,这会对闪存的寿命产生负面影响。
根据硬件上存储原理的不同,闪存主要可以分为NOR和NAND两类。其中,NOR的擦写次数是10万次,NAND的擦写次数是100万次。
3.2 闪存破坏思路
基于以上分析,在对工业网关的毁伤中,通过不断的循环对NAND进行写入和擦除,直到该过程报错或出现异常,表明NAND的擦写次数已经到达上限,NAND的存储出现了不可靠的情况,从而达到对工业网关的毁伤效果。该过程的核心代码如下图所示,通过不断的位翻转,并重新写入来实现对NAND的擦写操作。
图 11 重复擦写闪存的代码
3.3 模拟状态的闪存擦写
为了实现对闪存的擦写操作,我们在Ubuntu 18.04系统上模拟出NAND闪存,在此模拟环境中验证Blackjack攻击者代码对MTD设备进行的擦写操作,得到了预期的结果。
3.3.1 闪存设备简介
基于闪存的各个文件系统的架构如图所示。其中MTD(Memory Technology Device)子系统是 Linux 内核中的一个子系统,用于管理非易失性存储器设备,如闪存芯片(NAND、NOR 等)。MTD 子系统提供了一组通用的接口和驱动程序,使得 Linux 能够方便地访问和操作这些存储设备。
MTD 子系统的主要功能包括:
设备抽象和管理:MTD 子系统提供了一个设备抽象层,允许系统对不同类型的非易失性存储设备进行统一的管理。
设备擦除和编程:MTD 子系统允许 Linux 内核对支持擦除和编程操作的存储设备执行这些操作。
分区支持:MTD子系统允许将存储设备划分为多个逻辑分区,每个分区可以独立管理。
驱动程序支持:MTD 子系统提供了一组通用的驱动程序接口,使得开发者可以编写适配不同类型存储设备的驱动程序,并将其与 MTD 子系统集成起来。
图 12 基于闪存的各个文件系统
图 13 从Flash到UBIFS的各个层次
3.3.2 闪存设备模拟
使用modprobe命令加载mtd、mtd block、ubi和nandsim模块,并通过下面的命令modprobe nandsim first_id_byte=0x2c second_id_byte=0xac third_id_byte=0x90 fourth_id_byte =0x15 parts=371, 469,6,106,86,2,3056来创建nand设备。
图 14 在内存中模拟出NAND闪存
图 15 NAND设备信息
模拟得到的这些不同的设备文件通常对应同一块存储区域。比如在使用 NAND Flash存储器时,不同的设备文件只是提供了不同的访问方式和操作权限,但是它们对应的确实是同一个物理空间或逻辑分区。
在模拟得到的设备文件中/dev/mtd0、 /dev/ mtdblock0 和/dev/mtd0ro对应的都是 NAND Flash 存储器中的同一个物理空间或逻辑分区。其中,/dev/mtd0 和/dev/mtdblock0 提供了不同的读写方式,/dev/mtd0ro则是只读的。这些设备文件允许用户以不同的方式与 NAND Flash存储器进行交互和访问,例如可以进行烧写、读取和执行代码等操作。
因此,无论是块设备文件还是字符设备文件,以及只读设备文件,它们都可以对应同一块存储区域或相同的物理空间。区别在于它们提供了不同的权限和访问方式,以满足不同的使用需求。
图 16 模拟得到的设备文件
3.3.3 闪存擦写
在模拟的MTD设备中,通过先写入随机数据,再读出写入数据的方式来验证对MTD设备的擦写操作是否成功,下图是闪存擦写的实现代码。
图 17 闪存循环擦写代码
编译生成可执行文件后,在Ubuntu环境下对模拟闪存进行直接操作,下面是代码产生的随机数据,通过dd命令将写入的数据读出,与产生的随机数据对比,可以发现两者是相同的,证明已经成功的将随机数据写入了闪存中。
图 18 产生的随机数据
图 19 通过dd命令读取的闪存中的数据
3.4 国内工控设备预警
闪存大量应用于嵌入式设备的存储领域,包括工业网关和工业路由器等重要的工控设备,国内外的工业网关品牌如西门子、锐捷、Moxa、鼎信通达和有人物联,其产品在工业企业中被大量使用。以国内的某工业网关企业为例,其产品涉及到了工业路由器、边缘网关和数传DTU等。下面的图是其某款工业路由器的系统设备图,从中可以看到相应的MTD设备,以及挂载的文件系统。攻击者在获取到系统的root权限后,即可通过前述的方式对闪存进行无限重写,直到导致闪存的擦写次数超过其设计寿命,最终引起文件系统的不稳定,使工业路由器设备出现硬件损坏。
图 20 某工业路由器系统设备
图 21 某路由器挂载的文件系统
另一方面,我们针对该品牌的工业路由器和另一品牌的工控网关设备在FOFA上进行搜索,可以发现有大量的设备部署在公网,这些品牌产品的用户十分广泛。
图 22 FOFA搜索结果
由于擦写闪存的次数需要超过其设计寿命,因此可能需要较长的时间才能实现。为此,攻击者可以提前对闪存进行一定次数的擦写,使得其擦写次数接近其设计寿命,一旦准备攻击时,攻击者可以继续对闪存进行擦写,从而在短时间内使闪存的擦写次数超过其设计寿命,缩短攻击生效的时间。
4. 总结
据有关方面报道和相关研究,Blackjack针对俄罗斯的工业网关从销毁文件系统、破坏闪存、销毁UBI卷和拒绝服务四个方面进行了攻击。从实际的攻击效果来看,破坏闪存能够对设备的硬件进行毁伤,无疑是影响最大的。其他三种攻击方式可以通过系统恢复来进行修复,而破坏闪存则需要更换硬件设备。
我司研究团队在分析了Blackjack的攻击方式后,在模拟环境下针对闪存的擦写进行了相应的实验,得到了预期的效果。从实验过程可以看出,针对闪存的破坏性擦写无需很高的技术门槛。该攻击事件虽然发生在国外,但通过设备分析和调查研究,国内的工业企业使用的工业网关和工业路由器设备,在功能组成和系统结构上具有高度的相似性,且在电力系统、城市水务等行业内广泛使用,国内使用该类设备的企业同样有遭受此类攻击的风险隐患,需要工业企业引起足够的重视。
公司简介
Company Profile
浙江国利网安科技有限公司坚守“让控制更安全,让用户更放心”的使命,凭借30年的工控技术积累和12年的工控安全研究,已形成了“工控安全试验场”“工控安全盾”等独具特色与优势的攻防核心技术、安全产品与服务体系,以及完整的行业解决方案,在水务水利、石油炼化、油气管网、城市燃气、电力能源、轨道交通、智能制造等行业拥有众多客户,致力于成为世界一流的关键基础设施安全整体解决方案提供商。
原文始发于微信公众号(国利网安):乌克兰针对俄罗斯水务行业传感器攻击的研究和预警