警惕新型僵尸Goldoon:一款指令集覆盖最广的零检出率僵尸家族

发布时间 2024-04-29

一、概 述


近期,启明星辰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僵尸网络并针对其攻击活动特点、功能代码以及控制协议等进行深入分析。


图片1.png

图1: Goldoon Loader在VT的检测情况


图片2.png
图2: Goldoon dropper在VT的检测情况

二、攻击威胁分析


通过我们的物联网威胁数据平台及相关情报的交叉印证,目前共发现和关联到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当前支持攻击的指令集架构如下表所示:


表1:Goldoon支持的指令集架构

表1.png


由于Goldoon目前还处在构建扩张阶段,我们根据已知的攻击手法和投递样本等特点,梳理它的攻击流程如下所示:


图片3.png
图3:Goldoon攻击流程图


攻击者针对Linux和Windows平台分别设计了模块分离的方式降低耦合度从而减少被检测风险,包括漏洞扫描、脚本执行、Loader、Dropper等模块。从目前捕获到的样本代码来看,尚未发现漏洞扫描模块,猜想该模块应被设计用于在C2服务器中执行以避免泄露漏洞POC和情报资源。入侵成功后,攻击者进一步利用脚本或Loader程序下载执行最终的僵尸程序(Dropper)。


为了确认攻击者是否在进行免杀测试,我们统计了这批样本中存在编译时间的PE样本并与上传VT平台的时间进行比较,从下表可以看出样本的编译时间与上传时间间隔通常在数分钟内,非常接近。因此基本可以判断这部分样本是由攻击者自行上传并用于测试免杀效果,以下是部分PE样本的时间信息:


表2:PE样本时间信息

表2.png



之后,我们针对这批样本进行了多维度的溯源和分析,包括与常见僵尸家族的代码相似度、同源性等比对分析后,确认这是一款新出现的物联网僵尸网络。这批样本最早的活跃时间在4月8日,可以初步判断幕后的控制者应该在4月初完成了僵尸代码的开发布局,目前已经处于功能测试和扩张的前期阶段。我们从中提取到攻击者使用的两个C2服务器:185.106.94.51(奥地利)和94.228.168.60(德国)。在持续监测其活跃动向的过程中,曾监控到2次攻击者发送的指令,其采用udp_legit的攻击方式分别针对位于荷兰和伊朗的IP发起DDoS攻击,判断可能是用于小规模的测试活动。截止目前尚未发现有大规模的攻击活动发生,我们也会持续关注和追踪Goldoon的最新版本变化和攻击动态。


三、攻击样本分析


3.1 Linux平台样本


目前,监测到Goldoon基于Linux平台的样本约50个,其中绝大部分样本做了符号剥离处理。同时,相同架构平台的样本间也大多存在功能相异的情况,不过由于这些功能变化间隔时间较短且多属于独占设备、反调试、持久化等对抗性功能的变化,整体代码框架和通信协议等并未改变,因此不做版本的细分。此外,我们还从中发现了个别保留符号的调试版样本(猜测属于作者误传),同样能够佐证Goldoon处于测试功能及免杀的版本快速更迭阶段。


3.1.1 Shell脚本


在相关攻击中已发现了超过5种不同代码格式的脚本文件,代码实现的基本功能类似,均是通过wget、curl、ftp等方式下载执行不同架构的恶意模块Dropper,之后删除自身和下载的模块以清除痕迹。更进一步的,攻击者通过改变一些代码因子,如不同的命令执行参数、函数封装、循环嵌套、结构乱序、换行符、引号包裹等方式来尝试对抗静态特征检测,目前相关脚本在VT上依然是0报毒的状态。部分脚本示例如下图:


图片4.png

图4:Shell脚本


3.1.2 Loader


Loader主要是用于加载后续的恶意模块Dropper,相较Shell脚本加载Dropper的方式,会增加部分对抗检测的机制及功能,这里以Debug版Loader为例介绍。


图片5.png

图5:Loader核心代码


在Loader和Dropper中,Goldoon的多个样本均包含initkiller函数或是保留该函数未调用,类似的初始化和对抗功能较多,由于这些版本更迭的时间非常接近且不同功能版本的数量很多,因此不做更细的版本区分,一些重要功能例如:独占设备,程序通过禁用CVE-2017-17215漏洞端口(37215)、禁用telnet端口(23)以及禁用SSH端口(22)等方式来尝试独占设备。


图片6.png
图6:独占设备


在Start_dropper函数中,程序会从指定C2下载恶意代码,并在修改文件权限后执行恶意程序。


图片7.png
图7:下载执行后续恶意代码(Dropper)


3.1.3 Dropper


首先,后续下载执行的恶意代码(Dropper)会通过SetInjectMethod函数获取程序执行参数来设置BOT_INFECT_METHOD值,此值应指设备被感染的方式(如入侵使用的漏洞或爆破类别),该值之后在上线包中会作为系统信息回传。


图片8.png
图8:获取设备被感染方式


Start函数中则是程序核心的代码部分,包括初始化配置、上线机制、心跳机制、控制指令解析等。


图片9.png

图9:核心代码部分


(1)初始化配置


包括初始化异常处理、初始化随机种子、初始化DNS解析、初始化攻击管理等,其中还初始化了wolfSSL_Init的加密库,wolfSSL是一个轻量级、可移植、基于C语言面向嵌入式的TLS 库,不过从目前掌握的情况来看,攻击者还没有实际调用该库来加密通信流量,但是后期可能会通过wolfSSL加密以增强流量隐匿性。


图片10.png
图10:初始化配置


在初始化配置的基础上,Goldoon的一些版本还在测试增加不同的功能,例如反调试、持久化等对抗功能。


图片11.png

图11:反调试代码



图片12.png

图12:持久化代码


(2)上线机制


在open_connection函数中,程序会获取系统信息,包括用户名、主机名、操作系统信息、受感染方式、CPU核心数、是否支持IPV6、内存、系统版本等,并组包发送至C2。相关代码及上线数据包如下所示:


图片13.png
图13:上线机制代码


通过分析,我们将上线数据包格式进行解析,解析后的具体结构如下表所示。


表3:上线数据包格式

表3.png


(3)心跳机制

程序创建单独的线程用于发送心跳包,每间隔60秒发送”Time”及时间戳,相关代码和上线数据包如下:


图片14.png
图14:心跳包机制代码


心跳包数据解析如下表所示。


表4:心跳包数据格式

表4.png


抓取的上线包和心跳包流量数据如下图所示。


图片15.png
图15:上线包和心跳包流量数据


(4)控制指令解析


这里需要注意的是,在read_packet函数中,程序首先会接收两次(4字节/每次)数据,该数据分别为type和args_length,且在成功接收后进行判断,若值不为-1时再继续接收其他数据。


图片16.png
图16:接收数据代码


在handle_packet函数中,程序解析控制指令如下:


图片17.png
图17:控制指令代码


攻击指令数据包所对应的结构体如下所示。


图片18.png

图18:控制指令数据包结构体


攻击指令由Packet结构体中的type决定,共包含五类:


表5:攻击指令

表5.png


攻击指令的数据包(模拟数据包)如下图所示。


图片19.png
图19:攻击指令数据包


攻击指令数据解析如下表所示。


表6:攻击指令数据解析

表6.png


结构体数组args[]中value值会根据数组成员依序从下标0至3进行相应的数据提取,具体数据内容如下图所示。


图片20.png

图20:结构体数组内容


Linux版样本目前共发现28种攻击方式,其中http_exploit、http_xflow、http_pps函数内功能代码为空,攻击者未来可能会继续扩展相关功能。


图片21.png

图21:Linux版样本攻击方式代码


3.2 Windows平台样本


3.2.1 powershell脚本


Windows版的powershell脚本相对较简单,从指定地址下载并执行下一阶段的恶意模块。同时该脚本在VT检测率也极低,结果显示仅1家报毒。


图片22.png
图22:powershell脚本


3.2.2 Loader


Windows版与Linux版本的Loader功能相比,仅具有下载并执行下一阶段恶意程序的功能。


图片23.png
图23:Loader部分代码


3.2.3 Dropper


当Dropper完成初始化异常处理、初始化随机种子、初始化DNS解析以及初始化攻击管理等配置后,其会开启单独的线程来遍历当前运行的进程,并从中查找”taskmgr.exe”和”debugg”进程,若存在则关闭该进程,以达到隐藏自身和反调试目的。


图片24.png
图24:反调试代码


通过控制台命令查找正在监听3389端口(通常用于远程桌面连接)的进程,若存在则结束该进程,随后再绑定和监听该端口。


图片25.png
图25:端口监听代码


设置当前进程优先级为实时以及当前线程优先级为最高级别。具体代码如下图所示。


图片26.png
图26:设置进程和线程优先级


将自身文件复制到启动项文件夹路径下和Windows系统文件夹中,并添加到注册表自启动项,以实现其持久性。


图片27.png
图27:实现持久化


通过分析我们发现,Windows版与Linux版的上线机制、心跳机制以及控制指令解析等通信协议相同,因此我们便不再进行赘述。


但在攻击模式方面,Windows版Goldoon目前总共仅包括15种攻击模式,且其中有4种攻击模式暂未实现,具体如下图所示。


图片28.png
图28:Windows版攻击模式代码

四、总 结


本文披露了近期新出现的物联网僵尸网络Goldoon,重点针对其攻击活动特点、各独立模块的功能代码以及控制协议等进行了深入分析和介绍,并分别对Linux平台和Windows平台的样本进行了技术分析,包括其中涉及的功能迭代、兼容性、免杀性等特性。


Goldoon在设计之初就已适配了超过18种指令集架构,这在大多数物联网僵尸中是较为少见的,也可能成为未来僵尸网络扩张的一个新方向。通常来说,存在安全隐患的设备往往可能被不同的僵尸网络重复多次入侵,而当前越来越多的僵尸都开始尝试禁用漏洞端口以独占设备,这就造成大量易入侵的 “肉鸡”资源在海量的僵尸攻击下越来越稀缺。与此同时,对于一些小众指令集架构来说,由于大多数僵尸网络并没有做适配支持,那么即使其中存在安全隐患的设备被入侵也很可能未成功植入恶意代码。因此,针对这些“漏网之鱼”定制攻击可能成为未来僵尸网络控制者快速扩大网络规模的一种相对高效的方式,需要格外警惕。未来我们也会持续关注和追踪Goldoon的最新版本迭代变化和攻击动态。


五、IOC


C&C :


94.228.168.60

185.106.94.51


Shell脚本:


3f0e0c2f929d2e8ed24efac137fba2100a9afa317b5e74cb9a98b306e36d38bd
53acad3c3017049c5b02bbbb39118198d22c494d21fd2a528eccc8ea7feb6c33
f25f235823386935504b91e74f34a581c8c66982e51d0d94b9af2fb9e528aac7
35ad992121d507477793fc3cd555fbabf38b399a282bd6a29e4361f0b42ebbe8

6ddd5789e2ed4d071a17f6aaeba61f3a7c4844168a3cb02fb4cebdbaee183b49


Loader:


b48afb4e5fed1a42e2d60709329f2ac1009aae5fb18a6ec23917e64872ed540f
8eb9c1eaecd0dcdd242e1bc8c62a1052915b627abe2de8ce147635fb7da3bfcc

48130a7c09a5c92e15b3fc0d2e1eb655e0bd8f759e01ba849f7734e32dbc2652


Dropper:


e7cd7305eeb4b26b36648febbed3ed5bfebf0345464f73deefa54d366bbbb6a1
cd416d8ef5c1274a5e77dfd4830d495a29f02442fb5ccaa9842824d70a43c640
a60b505d0d42c334901fb4972b004a4bcb78de5035ed4f8c3f27b16df35429c3
df8d88ff3e138be09c921058265e07df98ad50121dd70d9a292f223b19f456ac
26737091fe62098ec80bf03ae1377bafd85c6796fffd538519689fd663649af7