在网络安全环境日趋复杂的时代,威胁行为者必须要定期更新和重构其恶意软件,以与其他威胁行为者和安全研究人员做“斗争”。自2023年9月首次发现以来,BunnyLoader恶意软件即服务(MaaS)一直都在更新其功能,包括以下内容:
1、修复旧版本漏洞; 2、添加额外的保护措施和反病毒规避机制; 3、数据窃取组件新增多种数据恢复功能,包括额外浏览器路径和键盘记录等;
2024年2月11日,BunnyLoader背后的威胁行为者正式对外发布BunnyLoader 3.0,并声称新版本BunnyLoader进行了彻底的重构,功能增强了近90%。BunnyLoader Payload的增强部分包括:
1、Payload/模块完全重写以提高性能; 2、减少Payload体积; 3、高级键盘记录功能; 4、...
因此,本文将通过揭开BunnyLoader恶意软件的神秘面纱,包括其演变进程和TTP,来帮助安全社区更好地检测BunnyLoader的活动,并阻止相关的威胁风险。
BunnyLoader概述
BunnyLoader的开发周期特点就是“时间短、速度快”。1.0版本于2023年9月初首次出现,当时的BunnyLoader是一个使用C/C++开发的MaaS僵尸网络和恶意软件,并具备以下多种功能:
1、无文件加载; 2、凭证窃取; 3、加密货币窃取; 4、剪贴板数据窃取;
BunnyLoader 1.0背后的威胁行为者被称为“Player”或“Player_Bunny”,买家可以选择BunnyLoader要传播和感染的恶意软件类型,而且BunnyLoader 1.0禁止被用于俄罗斯境内的设备和系统。
居住在俄罗斯境内或附近的恶意软件开发者通常禁止对俄罗斯目标使用他们的恶意软件,威胁行为者可能会利用这一限制来绕过俄罗斯执法部门的检测。
2023年9月4日在暗网上发布了BunnyLoader 1.0,永久访问套餐价格位250美元:
到2023年9月底,BunnyLoader进行了快速重构,并新增了下列功能:
1、命令和控制(C2)仪表盘错误修复; 2、防病毒检测规避; 3、新增用于信息盗窃的多种数据恢复方法; 4、添加了浏览器路径; 5、新增键盘记录功能; 6、新增反分析保护;
BunnyLoader恶意软件的加载程序生态系统一直处于不断进化的状态,而BunnyLoader的积极重构和更新很大程度上是为了吸引市场眼光,并扩大其市场占有率。因此,2023年9月底,BunnyLoader 2.0正式上线。
2023年10月,BunnyLoader新增了“私人定制”版本,售价为350美元。这个版本中新增了代码混淆,并且会定期更新以尝试绕过反病毒产品的检测。
随后,也就是2024年2月11日,BunnyLoader背后的威胁行为者开始在他们的Telegram频道上为最新版本BunnyLoader 3.0打广告。
基础设施揭秘
当安全研究人员在2023年9月首次发现BunnyLoader 1.0时,它的C2服务器当时使用的IP地址位37.139.129[.]145,如下图所示:
在BunnyLoader最早的已知样本中,客户端使用了http://[url]/Bunny/[PHP节点]这样的标准化目录结构与C2服务器进行通信,而且在BunnyLoader 3.0之前发布的所有样本中也都使用了这样的模式:
BunnyLoader 2.0使用以Add.php结尾的URL向C2服务器初始注册BunnyLoaders客户端。在注册之前,恶意软件会枚举设备,并使用收集的信息作为指纹来识别不同的目标。
BunnyLoader和C2建立通信后,会使用以TaskHandler.php结尾的URL重复发送请求。并利用这些请求返回的响应初始化BunnyLoader需要进一步执行的恶意任务,这些任务被单独开发成了独立的功能,其中包括:
1、键盘记录; 2、窃取剪贴板数据; 3、下载其他恶意软件; 4、执行远程命令; 5、窃取加密货币; 6、窃取应用程序凭证;
2023年10月,BunnyLoader的C2基础设施将IP地址更换为了185.241.208[.]83,当月所发现的另一个BunnyLoader样本是通过一个名为Shovel Knight.zip的压缩文件来传播的,进一步分析表明,Shovel Knight.zip的内容包含一个Windows可执行文件,而它就是BunnyLoader 2.0的Stager。
Shovel Knight实际上是一款众筹开发的知名电子游戏,各大电子游戏平台基本上都有这款游戏,而威胁行为者使用这个名字,毫无疑问就是为了诱骗用户打开并执行恶意文件。
在2023年11月间,我们利用托管在下列地址的C2服务器识别了其后续活动:
195.10.205[.]23 172.105.124[.]34
2023年11月收集的样本使用了Themida来将BunnyLoader打包为Windows可执行文件。除了Themida之外,研究人员还观察到了通过PureCrypter来分发BunnyLoader的样本,这些技术也表明BunnyLoader的运营商开始采取额外措施来保护他们的恶意软件。
12月份,BunnyLoader又将C2服务器转移到了下列IP地址:
134.122.197[.]80 91.92.254[.]31
2023年12月份的感染链比之前几个月的要复杂很多,而且TTP有了额外变化:
PureCrypter感染链的一个分支会通过分发PureLogs加载器来继续部署额外的Pure恶意软件,然后感染PureLogs窃取程序。在第二个分支中,PureCrypter利用了一个.NET注入程序来分发BunnyLoader,这个分支中的样本会伪装成notepet.exe文件,而Notepet则是一款适宠物健康追踪器应用程序。
2024年2月11日,威胁行为者发布了BunnyLoader 3.0,并进行了完全的代码重构:
BunnyLoader的最新版本3.0在其C2服务器上使用了与2.0版本不同的目录结构。此目录结构的格式为http://[C2]/[path]/[PHP API]。
在BunnyLoader 3.0中,威胁行为者使用了一个CMD文件作为Dropper,并在其中嵌入了BunnyLoader恶意软件来分发实际的恶意Payload。当威胁行为者将BunnyLoader分发到目标设备上后,恶意软件就会与C2服务器(91.92.247[.]212)通信,并等待响应信息以执行下一步操作。
样本深入分析
2024年2月14日,安全研究员Germán Fernández识别到了第一个BunnyLoader 3.0样本,其中就包含了上述的恶意.cmd脚本。
随后,Unit 42的研究人员便对从.cmd脚本中提取初的最新BunnyLoader文件进行了分析,并确定了更新的部分,包括C2通信协议的更新和二进制的模块化。
C2通信的基本URI结构与以前的版本相比保持不变,使用格式为http://[C2]/[path]/[PHP API]。本文之前提到的样本使用的C2服务器托管在hxxp://ads[.]hostloads[.]xyz/BAGUvIxJu32I0/gate.php,而之前的BunnyLoader版本在URL路径中使用了字符串“Bunny”,BunnyLoader 3.0则允许手动指定路径名。
在版本3.0发布之前,BunnyLoader服务器使用了多个PHP API节点接收来自客户端的通信,而且3.0版本的所有样本都使用了同一个节点,即gate.php。
BunnyLoader 3.0使用了RC4算法对参数加密以实现模糊处理,而不是像以前的版本那样以明文形式发送HTTP参数。每次执行BunnyLoader时都会生成一个包含32个字符的随机密钥,用于RC4加密所有HTTP查询参数值。加密的值随后被转换为charcode和URL编码,如下图所示,其中客户端正在与C2服务器进行初始连接:
为了让C2服务器区分客户端请求,每个客户端函数都使用唯一的URI参数格式以及特定的用户代理。下表概述了所有可能的C2通信例程,包括其用途和使用的参数:
C2地址、C2地址、C2路径、BunnyLoader版本和操作员ID都是二进制硬编码的,而且该函数还负责生成RC4密钥:
BunnyLoader 3.0的第二个主要变化是从一个文件过渡到一个较小的基础客户端,该客户端具有可下载模块的功能。虽然大多数客户端代码与以前的版本相似,但BunnyLoader的自定义数据窃取程序、剪切板程序、键盘记录程序和新的DoS功能现在被分离为不同的二进制文件。BunnyLoader的操作员可以根据需求选择部署这些模块,也可以使用BunnyLoaders的内置命令来加载他们选择的恶意软件。
当在目标计算机上运行时,BunnyLoader将每两秒钟与C2进行一次检查,然后等待一个特定格式的命令,并按以下方式格式化,而这些指令有助于在目标计算机上下载和执行其他恶意软件:
ID --> [value]; Task_Name --> [value]; Task_Args --> [value]; DLL --> [value]
恶意软件会从命令中提取Task_Name和Task_Arg值并传递给相应的函数,这些函数负责指示客户端如何下载和执行新的Payload。随后,通过这些命令执行的所有HTTP下载请求都将使用用户代理ESET NOD32(下载保存到磁盘)或curl/1.0(无文件注入),所有下载的文件都保存到目标设备的%localappdata%\Temp文件夹中。
下面给出的是C2可以给客户端发送的所有可能的任务:
BunnyLoader 3.0使用了下列URL结构来下载功能模块,其中的文件名和URL格式在多个样本中均保持一致:
BunnyLoader 3.0的键盘记录模块可以记录所有的击键信息,并将记录存储到%localappdata%\Temp目录的日志文件中,除此之外,键盘记录模块还会试图识别目标用户何时对敏感应用程序或服务进行身份验证。为了实现该目标,键盘记录模块使用GetForegroundWindow和GetWindowTextA API来识别目标用户何时与目标应用程序或服务进行交互,并把相关的数据单独保存到硬编码文件中:
BunnyLoader 3.0的信息窃取模块会自动执行,使用了与基础客户端相同的地址格式,即http://[C2]/[path]/[PHP API],信息窃取模块可以窃取目标设备中的凭证信息,然后直接提取到C2服务器中。
信息窃取模块收集到的所有信息都存储在%localappdata%\Temp\ADE_LOGS目录中,然后上传键盘记录模块的日志信息,并将其整合到同一文件夹中。
收集完所有数据后,信息窃取模块将使用PowerShell将ADE_LOGS文件夹压缩为zip文件中,在提取zip之前,信息窃取模块将使用Windows Defender用户代理向C2发送一个GET请求,其中将包含窃取数据的摘要。
HTTP GET请求的查询参数概述如下:
如果C2响应正确,信息窃取模块将会使用Uploader用户代理和自定义的Content-Type HTTP Header来上传.zip文件,上传完成后,信息窃取模块将删除收集到的数据和.zip文件:
BunnyLoader 3.0的剪切器模块会使用指定的通信程序定期与C2交互并执行检查,C2通过向目标发送加密货币钱包的名称以及由威胁行为者控制的相应钱包地址来激活剪切器模块。
剪切器模块使用正则表达式模式来识别目标的剪贴板是否包含所需的钱包地址类型。如果找到匹配项,它将用威胁行为者的钱包地址替换目标用户的钱包地址:
拒绝服务DoS模块
BunnyLoader 3.0的DoS模块会使用指定的通信程序与C2交互并等待命令执行,支持使用GET或POST HTTP洪泛来对目标URL执行恶意行为。
为了执行攻击,该模块将生成一个新的线程,并进入无限循环状态,使用下列User Agent向目标服务器重复发送GET或POST请求:
Mozilla/5.0 (compatible; U; ABrowse 0.6; Syllable) AppleWebKit/420+ (KHTML, like Gecko)
总结
在MaaS不断变化的环境中,BunnyLoader不断发展,表明威胁行为者需要频繁重构代码以逃避检测。通过揭秘这些不断演变的战术和这种威胁的动态性质,可以帮助广大研究人员加强防御态势,更好地保护数字资产的安全。
入侵威胁指标IoC
BunneyLoader网络识别
YARA规则
rule u42_crime_win_bunnyloader_3: windows_memory
{
meta:
author = "Unit 42 Threat Intelligence"
date = "2024-02-28"
description = "Detects Bunnyloader 3.0, a loader with additional capabilities including keylogger, stealer, clipper, and DoS modules."
hash1 = "c80a63350ec791a16d84b759da72e043891b739a04c7c1709af83da00f7fdc3a"
malware_family = "bunnyloader"
strings:
参考资料
https://www.justice.gov/usao-cdca/pr/qakbot-malware-disrupted-international-cyber-takedown
https://www.virustotal.com/gui/ip-address/37.139.129.145/relations
https://any.run/cybersecurity-blog/pure-malware-family-analysis/#staged-and-stageless-loader-6639
https://www.zscaler.com/blogs/security-research/bunnyloader-newest-malware-service
https://twitter.com/0xperator/status/1706402486083350586 https://unit42.paloaltonetworks.com/analysis-of-bunnyloader-malware/