导语:本文会详细介绍针对华硕路由器的 Cyclops Blink 恶意软件变种的技术能力,并包括 150 多个当前和历史命令和控制 (C&C) 服务器的 Cyclops Blink 僵尸网络的列表。
本文会详细介绍针对华硕路由器的 Cyclops Blink 恶意软件变种的技术能力,并包括 150 多个当前和历史命令和控制 (C&C) 服务器的 Cyclops Blink 僵尸网络的列表。
最近一个名为Cyclops Blink的模块化僵尸网络对诸多型号的华硕路由器发起了攻击。自2019年首次出现以来,该僵尸网络最初针对的是WatchGuard Firebox设备。根据英国国家网络安全中心 (NCSC) 进行的分析,Cyclops Blink 是一种高级模块化僵尸网络,据报道与 Sandworm 或 Voodoo Bear 高级持续威胁 (APT) 组织有关,最近已被用于攻击 WatchGuard Firebox 设备。我们获得了针对华硕路由器的 Cyclops Blink 恶意软件系列的变种。
本报告讨论了这个 Cyclops Blink 恶意软件变种的技术能力,并包括了 Cyclops Blink 僵尸网络的 150 多个当前和历史命令和控制 (C&C) 服务器的列表。此列表旨在帮助网络安全防御者在其网络中搜索受影响的设备并进行修复。追踪发现,尽管 Cyclops Blink 是一个国家支持的僵尸网络,但它的 C&C 服务器和木马会影响不属于关键组织的 WatchGuard Firebox 和华硕设备,或者那些对经济、政治或军事间谍活动具有明显价值的设备。
因此,我们认为 Cyclops Blink 僵尸网络的主要目的可能是为进一步攻击高价值目标构建基础设施。
Sandworm APT 组织被认为创建了 Cyclops Blink 和 VPNFilter 物联网 (IoT) 僵尸网络。 VPNFilter 于 2018 年首次被发现,专门针对路由器和存储设备。据报道,它还感染了数十万台设备。 2021 年,趋势科技发布了 VPNFilter 的技术分析,其中专门介绍了僵尸网络在被发现两年后如何继续影响受感染的系统。
Sandworm 还对许多引人注目的攻击负责,包括 2015 年和 2016 年对乌克兰电网的攻击、2017 年 NotPetya 攻击、2017 年法国总统竞选、2018 年冬奥会奥运会毁灭者攻击以及 2018 年针对禁止化学武器组织。
Cyclops Blink 恶意软件分析
Cyclops Blink 是用 C 语言编写的模块化恶意软件。在其核心组件中,恶意软件首先要做的是检查其可执行文件名是否以"[k"开头。如果没有,它将执行以下例程:
1.它将 stdout 和 stderr 文件描述符重定向到 /dev/null;
2.它为 SIGTERM、SIGINT、SIGBUS、SIGPIPE 和 SIGIO 信号设置默认处理程序;
3.它使用新的"[ktest]" 进程名称重新自我加载。
然后它会等待 37 秒,然后再设置其硬编码参数。这些包括硬编码的 C&C 服务器和应该用于与 C&C 服务器通信的时间间隔。
它还通过调用 pipe() 函数来创建用于进程间通信 (IPC) 的管道,以获取用于读取和写入数据的两个文件描述符。它还通过使用 ioctl() 为写入文件描述符启用非阻塞 I/O。
之后,将在内存中创建一个新的数据包,然后将其发送到 C&C 服务器。本分析稍后将介绍此通信的详细信息。
对于用于与 C&C 服务器通信的每个硬编码 TCP 端口,恶意软件会在 Netfilter(Linux 内核防火墙)中创建一个规则,使用 libiptc1 中的 iptc_insert_entry() 函数来允许与其进行输出通信。规则具有以下参数:
由于未知原因,恶意软件删除了上述规则并再次创建它们,这次是通过 system() 函数使用 iptables 命令。命令如下:
然后对OpenSSL库进行初始化,核心组件继续初始化硬编码的模块。
模块初始化
在此期间,核心组件初始化模块。通过管道与模块进行通信。对于每个硬编码的模块,恶意软件会在它们自己的子进程中执行之前创建两个管道。
初始化模块的函数
在下图中,我们推断出以下 mod_t 结构:
推断的 mod_t 结构,最后一个成员未知。
参数
然后初始化参数,它们由一个 592 字节的结构组成,其中包含通过管道发送到模块的基本信息。这些信息包括:
一个“<p:”字符串头;
核心部件的管道;
所有 C&C IP 地址和端口;
本地 IP 地址;
C&C服务器通信的时间间隔;
当下一个要发送到 C&C 服务器的数据包;
主进程PID;
硬编码 ID( 0xA08F078B、0xBD0A5B36 和 0xA244E5E2);
参数被推送到模块,此时模块被初始化。
C&C 通讯
从模块获取数据后,核心组件启动加密程序,在将数据发送到 C&C 服务器之前对数据进行加密。
加密
Cyclops Blink 使用动态加载的受感染设备中应该可用的 OpenSSL 功能对数据进行加密。
数据使用 AES-256 在密码块链接 (CBC) 模式下使用随机生成的 256 位密钥和 128 位初始化向量 (IV) 进行加密。然后使用每个样本唯一的硬编码 RSA-2560(320 位)公钥对其进行加密。
恶意软件开发者决定使用 EVP_SealInit() 函数。此函数执行所有上述加密步骤,包括随机 AES 密钥和 IV 生成。
C&C服务器必须有相应的RSA私钥才能解密数据。
加密后,如果数据包总长度大于 98303 字节,则发送数据包。
数据传输
为了向 C&C 服务器发送数据,核心组件在随机 TCP 端口上与随机选择的 C&C 服务器执行 TLS 握手,两者都来自硬编码列表。
在选择一个IP地址和一个TCP端口对之后,核心组件创建一个子进程来执行通信。子进程将连接到C&C服务器,并向SSL套接字写入四个字节。这四个字节是它想要发送的数据包大小。
子进程将四个字节写入 SSL 套接字
服务器必须用一个精确的四字节回答,也就是受害者的IPv4地址。
然后将 10 个字节写入核心组件管道。数据遵循特定格式。例如:
然后核心组件从 C&C 服务器接收更多数据。这一次,它希望使用硬编码的 RSA-2560 公钥来解密加密的数据包。
恶意软件需要一个响应,其中前四个字节是数据包的大小,后跟加密数据。
接收和解密来自C&C服务器的数据的核心组件代码
如果接收到某些内容,则将其解密并写入到主管道。为了解密,该恶意软件使用RSA_public_decrypt()函数,该函数利用RSA加密算法的“可逆性”解密用相应私钥加密的数据。
最后,将更新一个变量,该变量包含下一次应该发送的数据包,并将所有的参数再次发送给模块,这是因为核心组件可以从C&C服务器接收新参数。
命令
从C&C服务器接收到的数据包括对核心组件本身或其模块的命令。
首先,核心组件将受支持的命令发送到C&C服务器,然后进入一个循环,在这个循环中它需要其中一个命令。
如果命令以核心组件为目标,它可以是以下之一:
0、终止程序;
1、绕过数据发送间隔,立即向C&C服务器发送数据;
2、将新的 C&C 服务器添加到内存列表中;
3、设置发送下一个数据包到 C&C 服务器的时间;
4、设置发送下一个数据包到 C&C 服务器的时间;
5、添加一个新模块(应该在命令之后收到一个 ELF 文件);
6、重新加载恶意软件;
7、设置本地IP地址参数;
8、设置新的worker ID;
9、设置未知字节值;
10、向所有正在运行的模块重新发送配置;
模块
华硕 (0x38)
这个模块可以从设备的闪存读取和写入,这些设备使用闪存来存储操作系统、配置和文件系统中的所有文件。我们的研究是在RT-AC68U上进行的,但是其他华硕路由器如RT-AC56U也可能受到影响。然而,值得注意的是,由于恶意软件本质上是模块化的,它可以很容易地重新编译以针对任何其他设备。事实上,这就是他们对 WatchGuard 所做的,它是相同的代码,但它已经为相关品牌重新编译了。
首先,模块检查内容 /proc/mtd 文件,该文件提供有关设备的内存技术设备 (MTD) 子系统的一般信息。。MTD提供了一个抽象层来访问设备的闪存。
恶意软件查找字符串“linux”和“rootfs”,并使用printf()类格式读取它:
模块查找“linux”和“rootfs”字符串
推断出的mdt_data_t结构如下:
mtd_data_t 结构
数据被读取到这个结构中。 Asus RT-AC68U 设备的 /proc/mtd 内容如下:
来自 Asus RT-AC68U 路由器的典型 /proc/mtd
因此,根据这个案例,恶意软件会打开 /dev/mtd2,这是存储 Linux 内核映像的分区。为什么恶意软件开发者决定读取“linux”或“rootfs”分区是不清楚的。因为它们有完全不同的目的。前者保存操作系统,后者存储程序的关键文件,如可执行文件、数据和库。
Cyclops Blink 从闪存中读取 80 个字节,写入主管道,然后进入循环等待命令替换分区内容:
Asus 模块主循环
如果来自核心组件的数据以“<p:”开头,则表示它是该模块的参数,将80字节写入闪存,有效替换其内容。
写入由 j_save_data() 函数完成。它首先通过ioctl()调用正确地擦除NAND擦除块,然后写入新的内容,如下图所示:
用于写入原始闪存的 Cyclops Blink Asus 模块代码
由于闪存内容是永久性的,因此该模块可用于建立持久性和恢复出厂设置。
虽然它不能用作归属证明,但前面的代码让我们想起了 VPNFilter 进程的第三阶段代码中的一个例程,称为“dstr”,旨在“破坏”受感染的设备。除了删除许多重要文件甚至尝试删除整个根文件系统之外,这个特定的 VPNFilter 阶段还会将许多 0xff 字节写入原始闪存:
用于写入原始闪存的 VPNFilter “dstr” 第三阶段代码
系统侦察 (0x08)
该模块负责将信息从受感染设备发送到 C&C 服务器。以下数据来自受感染的设备:
1.模块通过调用 uname() 函数和 /etc/issue 文件获得的 Linux 版本;
2.有关设备内存消耗的信息,它通过调用 sysinfo() 函数获取;
3.SSD 存储信息,通过调用 statvfs() 函数获取;
以下文件的内容:
/etc/passwd
/etc/group
/proc/mounts
/proc/partitions
4.有关网络接口的信息,它通过使用 SIOCGIFHWADDR 和 SIOCGIFADDR 命令调用 if_nameindex() 和 iotctl() 函数来获取。
文件下载 (0x0f)
该模块可以从互联网上下载文件。使用 DNS over HTTPS (DoH) 执行 DNS 解析。恶意软件使用以下标头向 Google DNS 服务器 (8.8.8.8) 发送 HTTP POST 请求:
通过 SSL 进行 DNS 解析的 HTTP POST 请求
该模块似乎是 NCSC 报告的 Cyclops Blink 变体使用的同一模块 (0x0f) 的早期版本。模块之间的主要区别如下:
1.该模块没有上传功能;
2.该模块使用控制标志中的0x1位来指定是否应该通过HTTPS进行下载。
基础设施
我们已经能够确定 Cyclops Blink 僵尸网络从受感染的 WatchGuard 设备和华硕路由器中感染了路由器。这些受感染的设备会定期连接到 C&C 服务器,这些服务器本身托管在受感染的 WatchGuard 设备上。我们有证据表明,除了华硕和 WatchGuard 之外,至少有一家供应商的路由器也连接到了 Cyclops Blink C&C,但到目前为止,我们还无法收集该路由器品牌的恶意软件样本。
Cyclops Blink 僵尸网络已经存在了一段时间。使用互联网范围扫描的历史数据和 SSL 证书数据,Cyclops Blink 很可能至少可以追溯到 2019 年 6 月。自 2019 年 6 月以来,该攻击者已颁发了 50 多个 SSL 证书,用于 WatchGuard C&C 上各种 TCP 端口(据我们所知,使用了以下 TCP 端口:636、989、990、994、995、3269 和 8443)。
在附录 A 中,出于防护需要,我们列出了 Cyclops Blink 使用的活动和非活动 C&C。我们观察到,一些 WatchGuard 和 Asus 木马从未清理过,因为这些路由器仍会定期尝试连接到受保护或脱机的旧 C&C。
为 Cyclops Blink C&C 颁发的多个 SSL 证书的时间线
我们的调查显示,全世界有 200 多名 Cyclops Blink 受害者。受感染的 WatchGuard 设备和华硕路由器的典型国家是美国、印度、意大利、加拿大以及包括俄罗斯在内的一长串其他国家。应该指出的是,这些受害者似乎不是经济、军事或政治间谍活动的明显有价值的目标。例如,一些实时 C&C 托管在欧洲的一家律师事务所、一家为南欧的牙医生产医疗设备的中型公司和美国的一家管道工使用的 WatchGuard 设备上。这与其他 APT 组织(例如 Pawn Storm)执行的暴力攻击数量不断增加是一致的,该组织已经破坏了许多资产,例如电子邮件地址和目标的电子邮件服务器,这些资产通常与 Pawn Storm 的目标不一致。
缓解措施
在过去几年中,物联网攻击在全球范围内不断升级,互联网路由器一直是主要目标之一。这些设备受到攻击者的青睐有几个原因:1.修补频率低,2.缺乏安全软件,3.防御者的可见性有限。一旦物联网设备感染了恶意软件,攻击者就可以不受限制地访问互联网,下载和部署更多阶段的恶意软件,以进行侦察、间谍活动、代理或攻击者想做的任何其他事情。
大多数物联网设备的底层操作系统是 Linux,许多强大的系统工具也使用它。这可以允许攻击者添加他们可能需要完成攻击的任何其他内容。在 Cyclops Blink 的案例中,我们已经看到连续 30 多个月(大约两年半)被攻陷的设备被设置为其他木马的稳定 C&C 服务器。
VPNFilter 的目标供应商是华硕、D-Link、华为、Linksys、MikroTik、Netgear、QNAP、TP-Link、Ubiquiti、UPVEL 和 ZDE。在 Cyclops Blink 的案例中,我们收到了针对华硕路由器的样本,这些样本之前没有被报道过。我们分析的华硕 Cyclops Blink 恶意软件版本与之前讨论的 WatchGuard 版本相比存在一些差异。
我们分析的样本是为 ARM 编译的,并与 uClibc 动态链接。它们还包含一个专门针对华硕路由器的模块。华硕可能只是目前 Cyclops Blink 目标的供应商之一。我们有证据表明其他路由器也受到影响,但截至报告时,我们无法为 WatchGuard 和华硕以外的路由器收集 Cyclops Blink 恶意软件样本。根据我们的观察,这些都是 Cyclops Blink 攻击者深思熟虑的。
此外,该僵尸网络的目的仍不清楚:它是否旨在用于分布式拒绝服务 (DDoS) 攻击、间谍活动或代理网络仍有待观察。但显而易见的是,Cyclops Blink 是一种高级恶意软件。随着居家办公增多,间谍活动可能是物联网设备仍然是高级攻击者的主要目标的部分原因。受到攻击的路由器越多,攻击者可以使用的强大数据收集来源以及进一步攻击的途径就越多。拥有分布式基础设施也使网络安全团队更难以消除整个攻击。
这也是为什么在两年多之后,仍然有活动的 VPNFilter 主机出现的原因。
如果怀疑某个组织的设备感染了 Cyclops Blink,最好换个新路由器。执行恢复出厂设置可能会清除组织的配置,但不会清除攻击者修改的底层操作系统。如果特定供应商的固件更新可以解决 Cyclops Blink 攻击或系统中的任何其他漏洞,组织应尽快应用这些更新。但是,在某些情况下,设备可能是报废产品,供应商也不在提供更新。
在这种情况下,普通用户将无法修复 Cyclops Blink 感染。
本文翻译自:https://www.trendmicro.com/en_us/research/22/c/cyclops-blink-sets-sights-on-asus-routers--.html如若转载,请注明原文地址