【天穹】Linux后门Xnote家族的新变种:FZX

一、概述

2024年8月1日,天穹沙箱分析人员在例行巡检样本分析报告时,注意到一个名为“top”的elf样本,这个样本是x86架构的32位elf程序,使用变形UPX加壳躲避杀软检测。经分析,这是来自Xnote家族的一个新型变种,主要是感染系统文件连接C2以及启动反弹shell等。根据样本文件多处使用到FZX字符串,将其命名为FZX变种。进一步筛查线上样本发现该变种目前还在不断迭代,已出现多个同类型样本,本次我们跟随天穹沙箱分析报告做一个简单介绍。

Xnote家族是由Dr.WEB于2015年5月发现,之后出现多个变种,如:HELLOBOT、TOBOXHELL、PATPOOTY、REKOOBE等。虽然不同变种的代码结构有很大变化,但主体框架是一致的:加密配置数据、感染/etc/init.d/目录下以“!#/bin/bash”字符串开头的脚本、连接控制服务器、反弹shell等。

二、样本基本信息

  • 文件名: top.386-32.elf
  • SHA1: 601ae74ac4780ca4b65180257f5c5ea5e5ec6700
  • 文件类型:ELF
  • 文件大小:1022.01KB

三、样本分析

天穹沙箱动态分析该样本后,捕捉到以下关键行为:

  • 伪装自身:样本启动后修改自身进程名,伪装成系统进程“[md]” 或者“crond”;
  • 连接C2:通过53端口连接C2地址;
  • 释放文件:释放恶意程序替换系统计划任务程序“/usr/sbin/crond”。

1、动态分析

沙箱报告的行为逻辑关系图展示了样本的执行流程和关键恶意行为,如图1所示,图中标注为Pid:2728的进程为样本进程。

图1 样本动态行为关系图

由图中展示的进程文件关系可知,样本主进程Pid:2728从自身释放了一个恶意程序到/usr/sbin/crond,替换了系统原始crond文件,并给释放文件添加可执行属性,如图2所示。

图2 释放恶意程序

在报告的分析衍生物部分标注了释放的crond程序疑似为样本变种,如图3所示。经二进制分析工具对比,样本本身与释放文件的末尾0xb6字节的数据完全一致,如图4所示。通过动态调试和内存数据提取双重验证,该数据为样本硬编码到自身的默认配置文件数据。

图3 样本释放文件
图4 加密配置文件内容

样本运行初期,调用解密函数将硬编码到自身文件中的默认配置文件数据解密到内存中。借助于天穹沙箱的自动脱壳工具,使用IDA查看脱壳后的文件,如图5所示。样本将读取文件位置调整到自身文件流末尾倒数4字节处,读取末尾4字节内容作为配置文件长度,根据长度数据继续调整读取文件位置到文件末尾倒数(4+配置文件长度)的位置,读取加密配置文件数据到内存缓冲区中。接下来使用密钥“6hqsblum7cno1cyf”对缓冲区中的数据进行解密。

图5 解密流程

解密后的配置文件数据如下:

[crond]
auto_start=0
close_iptable=0
dns=114.114.114.114
host0=175.178.106.9:53
lock_fd = -1
lock_file=/bin/sh
mon_interval=15
plugin_dir=/usr/local
protocol=2
retry_interval=15

在解密配置文件数据后,样本将根据配置文件内容执行恶意操作,同时再将解密后的配置文件数据加密处理后追加到释放文件crond末尾,如图6所示。由于样本的解密数据存储在内存中,报告中的敏感字符串记录了沙箱动态分析过程中内存数据提取结果,可输入关键词或选择特定类型查找相关数据信息,如图7所示。天穹沙箱支持详细数据下载,可点击“内存字符串文件下载”下载原始内存提取结果进行查看。

图6 加密配置文件数据追加到crond文件末尾
图7 内存数据提取

随后,样本主进程Pid:2728 Fork出两个子进程Pid:2738Pid:2741,其中子进程Pid:2741通过修改自身进程名为”crond”伪装成系统进程,如图8所示。接着向C2发起连接,如图9所示。最后该子进程启动反弹shell,执行攻击者发送的shell命令,如图10所示。

图8 伪装为系统进程
图9 与C2通信
图10 反弹shell执行远控命令

样本子进程Pid:2738执行释放文件“/usr/sbin/crond”,crond进程修改自身的uid和gid为root,以获取更高的系统权限,如图11所示。

图11 修改进程权限

2、静态分析

除上述动态分析行为外,样本还包含其他恶意行为,依赖于启动参数设置、配置文件内容和远程指令下发触发相应行为。

配置文件内容项主要关联了以下恶意行为:

1)设置自启动

根据配置文件内容项auto_start=的具体值设置自启动。当设置值为1时,样本遍历/etc/init.d/目录下的文件内容,匹配文件头部数据为#!/bin/sh#!/bin/bash#! /bin/bash#! /bin/sh的任一形式,匹配成功后就在文件尾部追加自启动代码,如图12、13所示。

图12 遍历/etc/init.d目录
图13 感染/etc/init.d目录下的文件

2)关闭防火墙
根据配置文件内容项close_iptable=的具体值执行关闭防火墙行为,清空所有防火墙规则,如图14所示。

图14 关闭防火墙

3)设置插件

根据配置文件内容项plugin_dir=的具体值设置插件存放目录。样本在接收到C2发送的插件数据后存放到指定目录,由上述解密后的配置文件数据可知,该样本设置的插件存放目录为/usr/local。样本执行插件功能时支持参数设置,如图15所示,具体参数功能见下表:

参数说明
Help显示插件支持的命令
List列举已经安装的插件
Del删除插件
Load加载运行插件
图15 插件参数

4)设置通信协议

根据配置文件内容项protocol=的具体值选择通信协议。当设置值为0时,使用UDP协议通信,值为1时使用TCP协议通信,值为2时根据UDP通信结果动态切换TCP,如图16所示。天穹沙箱捕捉到的多个同类型变种样本的网络流量验证了这一结果,如图17、18所示。

图16 通信协议选择
图17 TCP通信
图18 UDP通信

其他恶意行为:

窃取信息

样本提取受害者的系统信息后发送给C2,包括机器名、cpu信息、内存大小等数据,如图19所示。

图19 获取信息

设置代理

攻击者通过发送C2指令调整代理配置,如图20所示。

图20 通过代理发送数据

3、C2指令总结

以下表格总结了攻击者向被控端发送的指令及其功能:

功能说明
7CFZXasK获取系统信息
8CManager管理进程
9FZXConfig配置文件
9CFileTask文件读写任务
11CPluginTask运行插件任务,自删除
11ProxyFZXasK执行代理任务
12CPortMapTask执行端口映射扫描
12ShellyFZXasK执行脚本
12FZXcketlient未知
12FZXClientUdp执行UDP通信
12AutoStartFZX安装自启动

四、IOC

1
2
3
4
5
6
7
a99824165604f2cc0a9bb81b6fc19550 crond
b1aee13e168021db54faa0666fe4ca82 top.386-32.elf
9f632279eec2a96f380b8355ee844cee top.386-32.elf
e849f53e605614c58b065fea93f7cdc8 eeee.386-32.elf
9de48713ed73aad20cff0025b5f557f6 45.386-32.elf
ee6a8234f6fe62f0d35b518f83d35364 server.386-32.elf
175.178.106.9[:]53 C2地址

报告链接: 天穹沙箱分析报告

五、技术支持与反馈

星图实验室深耕沙箱分析技术多年,致力于让沙箱更好用、更智能。做地表最强的动态分析沙箱,为每个样本分析人员提供便捷易用的分析工具,始终是我们最求的目标。各位同学在使用过程中有任何问题,欢迎联系我们。

天穹沙箱支持模拟14种CPU架构的虚拟机,环境数量50+,全面覆盖PC、服务器、智能终端、IoT设备的主流设备架构形态。在宿主机方面,除了Intel/AMD的x86架构CPU和CentOS操作系统之外,天穹沙箱支持海光、飞腾、鲲鹏等x86、ARM架构国产CPU和银河麒麟、中科方德等信创操作系统。

天穹沙箱系统以云沙箱、引擎输出、数据接口等多种形式服务于公司各个业务部门,包括天眼、终端安全、态势感知、ICG、锡安平台、安服等。