更多安全资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)
01
概 述
近期,启明星辰ADLab监测到一批VT平台零检出率的新物联网僵尸,我们对僵尸程序的二进制代码和通信协议做了深入同源性分析,并判断该系列僵尸为一款从未出现过的新型僵尸家族。该僵尸的文件命名、代码特征中常常包含” Goldoon“的字符串,因此我们将此僵尸网络家族命名为“Goldoon“。此外该僵尸具有极强的平台兼容性,是目前支持指令集最全的僵尸家族(目前已发现的支持指令集多达18种),除了支持主流的x86、arm、mips、mipsel、powerpc、sparc、riscv、sh4、m68k等指令集外,其还支持一些非常罕见的指令集alpha、hppa等。值得注意的是,alpha指令集目前除了我国某国产处理器(主要用于我国超级计算机)在使用外,其他国家几近绝迹,其可能造成的威胁值得我们重视。
我们最初于2024年4月8日发现Goldoon僵尸,起初,我们对这些零报毒的ELF文件进行了快速分析确认,发现其存在恶意行为,但对于这些文件安全软件在近两周时间内都未能检测预警,这引起了我们的浓厚兴趣并进一步对其追踪分析,最后我们发现了80多个样本。通过逆向工程这些样本发现,该僵尸通过模块化设计和分阶段作业的方式降低被检测的风险,比如将入侵扫描、远程下发、本地加载及僵尸守候等功能设计成独立模块。此外相比于常规的物联网僵尸,Goldoon僵尸的攻击设备类型可覆盖超过18种处理器架构,并且几乎支持包括windows、unix/linux以及所有POSIX标准的系统,除此之外,其还将“魔爪”伸向了一些相对小众的指令集架构,这对于物联网设备尤其是一些长期未遭遇攻击的小众架构设备来说可能构成严重的威胁。
目前,大量新出现的被各大厂商重新命名的物联网僵尸网络大部分还是基于开源僵尸框架如Mirai、Gafgyt等进行定制开发,此次我们发现的Goldoon则是完全重新设计和开发的新僵尸程序,目前,攻击者还在持续针对多阶段样本进行功能的更迭和测试。截止本文发布,尚未发现控制者发起大规模攻击活动,不过我们已经监测到其发出的一些零星的指令用于测试攻击,这说明Goldoon当前可能处于快速构建阶段,需要高度警惕其后续的扩张和攻击活动。本文将具体介绍Goldoon僵尸网络并针对其攻击活动特点、功能代码以及控制协议等进行深入分析。
02
攻击威胁分析
通过我们的物联网威胁数据平台及相关情报的交叉印证,目前共发现和关联到Goldoon相关样本80余个。从这批样本的攻击目标来看,Goldoon僵尸网络除了针对传统的PC端设备如Windows、Linux(x86、x64)实施攻击外,还盯上了物联网设备这块肥肉,包括arm、mips、mipsel、powerpc、sparc、riscv、sh4、m68k等常见处理器架构的设备都在其攻击范围之内。Goldoon共计支持18种处理器架构,有意思的是其中还涉及到s390x、alpha、hppa等相对小众的指令集,这些指令集虽然普及率较低,但仍有不少小众设备、旧设备或是基于相关指令集自研升级的国产设备在使用,比如IBM zSystems服务器(s390x)、某国产处理器(alpha)等,该国产处理器目前主要用于我国超级计算机,涉及到国家算力安全。因此不能仅仅因为设备小众、潜在攻击少就放松警惕,高枕无忧,同样需要重视其中可能隐藏的安全风险。Goldoon当前支持攻击的指令集架构如下表所示:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
由于Goldoon目前还处在构建扩张阶段,我们根据已知的攻击手法和投递样本等特点,梳理它的攻击流程如下所示:
攻击者针对Linux和Windows平台分别设计了模块分离的方式降低耦合度从而减少被检测风险,包括漏洞扫描、脚本执行、Loader、Dropper等模块。从目前捕获到的样本代码来看,尚未发现漏洞扫描模块,猜想该模块应被设计用于在C2服务器中执行以避免泄露漏洞POC和情报资源。入侵成功后,攻击者进一步利用脚本或Loader程序下载执行最终的僵尸程序(Dropper)。
为了确认攻击者是否在进行免杀测试,我们统计了这批样本中存在编译时间的PE样本并与上传VT平台的时间进行比较,从下表可以看出样本的编译时间与上传时间间隔通常在数分钟内,非常接近。因此基本可以判断这部分样本是由攻击者自行上传并用于测试免杀效果,以下是部分PE样本的时间信息:
文件名 |
编译时间 |
上传时间 |
GoldooNet.exe |
2024-04-14 14:34:47 |
2024-04-14 14:40:14 |
GoldooNet.exe |
2024-04-14 14:44:39 |
2024-04-14 14:45:32 |
Firewall.exe |
2024-04-17 23:48:16 |
2024-04-17 23:49:43 |
main.exe |
2024-04-20 17:58:44 |
2024-04-20 18:00:16 |
之后,我们针对这批样本进行了多维度的溯源和分析,包括与常见僵尸家族的代码相似度、同源性等比对分析后,确认这是一款新出现的物联网僵尸网络。这批样本最早的活跃时间在4月8日,可以初步判断幕后的控制者应该在4月初完成了僵尸代码的开发布局,目前已经处于功能测试和扩张的前期阶段。我们从中提取到攻击者使用的两个C2服务器:185.106.94.51(奥地利)和94.228.168.60(德国)。在持续监测其活跃动向的过程中,曾监控到2次攻击者发送的指令,其采用udp_legit的攻击方式分别针对位于荷兰和伊朗的IP发起DDoS攻击,判断可能是用于小规模的测试活动。截止目前尚未发现有大规模的攻击活动发生,我们也会持续关注和追踪Goldoon的最新版本变化和攻击动态。
03
攻击样本分析
3.1 Linux平台样本
目前,监测到Goldoon基于Linux平台的样本约50个,其中绝大部分样本做了符号剥离处理。同时,相同架构平台的样本间也大多存在功能相异的情况,不过由于这些功能变化间隔时间较短且多属于独占设备、反调试、持久化等对抗性功能的变化,整体代码框架和通信协议等并未改变,因此不做版本的细分。此外,我们还从中发现了个别保留符号的调试版样本(猜测属于作者误传),同样能够佐证Goldoon处于测试功能及免杀的版本快速更迭阶段。
3.1.1 Shell脚本
在相关攻击中已发现了超过5种不同代码格式的脚本文件,代码实现的基本功能类似,均是通过wget、curl、ftp等方式下载执行不同架构的恶意模块Dropper,之后删除自身和下载的模块以清除痕迹。更进一步的,攻击者通过改变一些代码因子,如不同的命令执行参数、函数封装、循环嵌套、结构乱序、换行符、引号包裹等方式来尝试对抗静态特征检测,目前相关脚本在VT上依然是0报毒的状态。部分脚本示例如下图:
3.1.2 Loader
Loader主要是用于加载后续的恶意模块Dropper,相较Shell脚本加载Dropper的方式,会增加部分对抗检测的机制及功能,这里以Debug版Loader为例介绍。
在Loader和Dropper中,Goldoon的多个样本均包含initkiller函数或是保留该函数未调用,类似的初始化和对抗功能较多,由于这些版本更迭的时间非常接近且不同功能版本的数量很多,因此不做更细的版本区分,一些重要功能例如:独占设备,程序通过禁用CVE-2017-17215漏洞端口(37215)、禁用telnet端口(23)以及禁用SSH端口(22)等方式来尝试独占设备。
在Start_dropper函数中,程序会从指定C2下载恶意代码,并在修改文件权限后执行恶意程序。
3.1.3 Dropper
首先,后续下载执行的恶意代码(Dropper)会通过SetInjectMethod函数获取程序执行参数来设置BOT_INFECT_METHOD值,此值应指设备被感染的方式(如入侵使用的漏洞或爆破类别),该值之后在上线包中会作为系统信息回传。
Start函数中则是程序核心的代码部分,包括初始化配置、上线机制、心跳机制、控制指令解析等。
包括初始化异常处理、初始化随机种子、初始化DNS解析、初始化攻击管理等,其中还初始化了wolfSSL_Init的加密库,wolfSSL是一个轻量级、可移植、基于C语言面向嵌入式的TLS 库,不过从目前掌握的情况来看,攻击者还没有实际调用该库来加密通信流量,但是后期可能会通过wolfSSL加密以增强流量隐匿性。
在初始化配置的基础上,Goldoon的一些版本还在测试增加不同的功能,例如反调试、持久化等对抗功能。
在open_connection函数中,程序会获取系统信息,包括用户名、主机名、操作系统信息、受感染方式、CPU核心数、是否支持IPV6、内存、系统版本等,并组包发送至C2。相关代码及上线数据包如下所示:
通过分析,我们将上线数据包格式进行解析,解析后的具体结构如下表所示。
数据大小 |
数据说明 |
数据内容示例 |
4字节 |
固定值 |
00 00 00 00(Packet.type) |
4字节 |
固定值 |
00 00 00 01(Packet.args_length) |
4字节+Char* |
字串长度+固定字串 |
strlen(“SystemInof”) +“SystemInfo”(Arg.key) |
4字节 |
固定值 |
00 00 00 0A(Arg.type) |
4字节+Char* |
字串长度+字符串 |
00 00 00 4F+”username…”(Arg.value,字串为获取的系统信息) |
程序创建单独的线程用于发送心跳包,每间隔60秒发送”Time”及时间戳,相关代码和上线数据包如下:
心跳包数据解析如下表所示。
数据大小 |
数据说明 |
数据内容示例 |
4字节 |
固定值 |
00 00 00 03(Packet.type) |
4字节 |
固定值 |
00 00 00 01(Packet.args_length) |
4字节+Char* |
字串长度+固定字串 |
strlen(“Time”) +“Time”(Arg.key) |
4字节 |
固定值 |
00 00 00 08 00 00 00 0A(Arg.type) |
4字节+Char* |
字串长度+字符串 |
strlen(timestamp)+timestamp(Arg.value) |
抓取的上线包和心跳包流量数据如下图所示。
这里需要注意的是,在read_packet函数中,程序首先会接收两次(4字节/每次)数据,该数据分别为type和args_length,且在成功接收后进行判断,若值不为-1时再继续接收其他数据。
在handle_packet函数中,程序解析控制指令如下:
攻击指令数据包所对应的结构体如下所示。
控制码 |
控制指令说明 |
0x01 |
开始攻击 |
0x02 |
判断自身进程是否正在运行/关闭远程连接 |
0x04 |
执行system命令 |
0x05 |
停止指定攻击 |
0x06 |
DNS相关操作 |
攻击指令的数据包(模拟数据包)如下图所示。
攻击指令数据解析如下表所示。
结构类型 |
数据大小 |
数据说明 |
数据内容示例 |
type(Packet.type) |
4字节 |
攻击指令 |
00 00 00 01 |
args_length(Packet. args_length) |
4字节 |
args数组大小 |
00 00 00 01 |
struct args[] (Packet.args[]) |
由args_length决定 |
Arg结构体数组 |
00 00 00 03 00 00 00 08 52 65 71 75 65 73 74 00 00 00 04 00 00 00 12 |
mx(Packet.mx) |
8字节 |
线程互斥体 |
00 00 00 00 00 00 00 05 |
type(Arg.type) |
4字节 |
反序列化转换类型 |
00 00 00 03 |
key(Arg.key) |
字串长度+Char* |
配合控制指令0x02和0x05使用 |
00 00 00 08 52 65 71 75 65 73 74 |
value(Arg.value) |
字串长度+Char* |
攻击线程、攻击时长、攻击类型,攻击ID |
00 00 00 04 00 00 00 12 |
结构体数组args[]中value值会根据数组成员依序从下标0至3进行相应的数据提取,具体数据内容如下图所示。
Linux版样本目前共发现28种攻击方式,其中http_exploit、http_xflow、http_pps函数内功能代码为空,攻击者未来可能会继续扩展相关功能。
图21:Linux版样本攻击方式代码
3.2 Windows平台样本
3.2.1 powershell脚本
Windows版的powershell脚本相对较简单,从指定地址下载并执行下一阶段的恶意模块。同时该脚本在VT检测率也极低,结果显示仅1家报毒。
3.2.2 Loader
Windows版与Linux版本的Loader功能相比,仅具有下载并执行下一阶段恶意程序的功能。
3.2.3 Dropper
当Dropper完成初始化异常处理、初始化随机种子、初始化DNS解析以及初始化攻击管理等配置后,其会开启单独的线程来遍历当前运行的进程,并从中查找”taskmgr.exe”和”debugg”进程,若存在则关闭该进程,以达到隐藏自身和反调试目的。
通过控制台命令查找正在监听3389端口(通常用于远程桌面连接)的进程,若存在则结束该进程,随后再绑定和监听该端口。
设置当前进程优先级为实时以及当前线程优先级为最高级别。具体代码如下图所示。
将自身文件复制到启动项文件夹路径下和Windows系统文件夹中,并添加到注册表自启动项,以实现其持久性。
通过分析我们发现,Windows版与Linux版的上线机制、心跳机制以及控制指令解析等通信协议相同,因此我们便不再进行赘述。
但在攻击模式方面,Windows版Goldoon目前总共仅包括15种攻击模式,且其中有4种攻击模式暂未实现,具体如下图所示。
04
总 结
本文披露了近期新出现的物联网僵尸网络Goldoon,重点针对其攻击活动特点、各独立模块的功能代码以及控制协议等进行了深入分析和介绍,并分别对Linux平台和Windows平台的样本进行了技术分析,包括其中涉及的功能迭代、兼容性、免杀性等特性。
Goldoon在设计之初就已适配了超过18种指令集架构,这在大多数物联网僵尸中是较为少见的,也可能成为未来僵尸网络扩张的一个新方向。通常来说,存在安全隐患的设备往往可能被不同的僵尸网络重复多次入侵,而当前越来越多的僵尸都开始尝试禁用漏洞端口以独占设备,这就造成大量易入侵的 “肉鸡”资源在海量的僵尸攻击下越来越稀缺。与此同时,对于一些小众指令集架构来说,由于大多数僵尸网络并没有做适配支持,那么即使其中存在安全隐患的设备被入侵也很可能未成功植入恶意代码。因此,针对这些“漏网之鱼”定制攻击可能成为未来僵尸网络控制者快速扩大网络规模的一种相对高效的方式,需要格外警惕。未来我们也会持续关注和追踪Goldoon的最新版本迭代变化和攻击动态。
05
IOC
94.228.168.60
185.106.94.51
6ddd5789e2ed4d071a17f6aaeba61f3a7c4844168a3cb02fb4cebdbaee183b49
48130a7c09a5c92e15b3fc0d2e1eb655e0bd8f759e01ba849f7734e32dbc2652
启明星辰积极防御实验室(ADLab)
ADLab成立于1999年,是中国安全行业最早成立的攻防技术研究实验室之一,微软MAPP计划核心成员,“黑雀攻击”概念首推者。截至目前,ADLab已通过 CNVD/CNNVD/NVDB/CVE累计发布安全漏洞5000余个,持续保持国际网络安全领域一流水准。实验室研究方向涵盖基础安全研究、数据安全研究、5G安全研究、人工智能安全研究、移动安全研究、物联网安全研究、车联网安全研究、工控安全研究、信创安全研究、云安全研究、无线安全研究、高级威胁研究、攻防体系建设。研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。
原文始发于微信公众号(ADLab):警惕新型僵尸Goldoon:一款指令集覆盖最广的零检出率僵尸家族