SupermanMiner挖矿木马新变种持续活跃
2024-02-28 16:27

报告编号:CERT-R-2024-714

报告来源:360CERT

报告作者:360CERT

更新日期:2024-02-28

0x01   背景

360安全大脑通过长期监测发现一种活跃了2年多时间的门罗币挖矿木马,其采用Go语言编写并通过漏洞利用(Spring Cloud Gateway RCE (CVE-2022-22947)、Apache Log4j RCE (CVE-2021-44228) 等)、SSH暴破、网页挂马等方式入侵传播。通过逐层溯源发现,其为SupermanMiner挖矿木马2021年11月之后的新分支,因其主、子程序函数名及路径多包含app和app2字符串,为便于区分遂将该新分支命名为“AppMiner”,其新变种具有如下特点:

1)利用Google sites(Google的一个WEB协作平台,可供开发者创建自己的网站)创建自定义网页进行挂马(同SupermanMiner最初版本)
2)样本中嵌入Google sites挂马页面url(不再使用唯一的C2),关联定位更为困难
3)TLSV1.3协议加密恶意模块下发通信实现隐秘挖矿(当前获利4.5万RMB)
4)使用cron V3设置非持久定时任务,重启失效,具有更好的隐蔽性
5)广泛使用文件名随机化、自删除技术
6)混淆版本使用go-strip严重混淆增加逆向工程难度
7)环环相扣的守护程序逻辑

目前已发现AppMiner家族4大分支至少8个变种版本,新版本通过严重混淆实现了更高级别的对抗,其持续的升级迭代值得安全社区引起注意。广大用户可使用360安全大脑相关产品进行全面查杀,并从以下4个方面进行加固,以免遭受黑客攻击,造成不必要的损失。

1)服务器应配置高强度的登录密码(大小写字母、数字和特殊字符的组合密码),并定期更换密码;
2)修改ssh端口为其他端口(非22端口);
3)若非业务需要,不要在公网开放业务端口(如:redis、GitLab接口),采用本地或内网访问,设置访问白名单等方式进行加固;
4)及时更新主机漏洞补丁,将应用软件升级到安全版本。

如下是AppMiner家族的演变进程图(仅罗列各分支部分变种情况)。

0x02   主要恶意功能

分析样本如下:

版本MD5文件名文件类型备注
未混淆版本91009419cb2a0511f388f56a17c54deaappELF主模块
混淆版本ae2d15e4855f6d1e2cb0490f5669f1bfe1ELF主模块

混淆版本与未混淆版本功能大体相同,具体对比如下:

对比点混淆版本未混淆版本
函数、变量名严重混淆+strip函数符号处理(大多函数名长达4096字节,变量名1832字节)未混淆+保留函数符号
功能做了精简,省去子程序AppMiner2的更新及下载启动逻辑包含AppMiner2的更新及下载启动逻辑
恶意模块下发逻辑不变不变
随机文件名无附加随机字符串附加随机字符串
字符串混淆处理明文

本文先对未混淆主模块样本(app)作详细分析。从该家族未混淆样本中可看到主要的关键go源文件,其中{}中的内容为可变部分,可发现样本中包含大量中文字符。

{/home/aaa/Desktop/新建文件夹}/app/randfile/读取系统文件go.go
{/home/aaa/Desktop/新建文件夹}/app/randfile/初始化随机名.go
{/home/aaa/Desktop/新建文件夹}/app/procss/进程.go
{/home/aaa/Desktop/新建文件夹}/app/protexe/防止多次启动.go
{/home/aaa/Desktop/新建文件夹}/app/xmr/挖矿.go
{/home/aaa/Desktop/新建文件夹}/app/crontab/计划.go
{/home/aaa/Desktop/新建文件夹}/app/down/下载.go
{/home/aaa/Desktop/新建文件夹}/app/zhu/exe.go
{/home/aaa/Desktop/新建文件夹}/app/zi/exe.go
{/home/aaa/Desktop/新建文件夹}/app/main.go

如下是AppMiner的执行流程图:

1)攻击者通过漏洞利用、SSH暴破等方式成功入侵受害者主机后,植入并启动AppMiner挖矿木马主模块(app);

2)主模块请求攻击者制作的Google sites挂马页面,通过正则匹配得到真实的木马下载链接,再经过二次正则匹配及base64解码后完成主程序AppMiner1(主模块的近似克隆版)及子程序AppMiner2的下发、释放xmrig矿工挖矿牟利;

3)主程序AppMiner1运行后会重复上述主模块的步骤(区别是下载矿工,而非释放);

4)子程序AppMiner2作为主程序的守护程序,会再次请求Google sites挂马页面以确保主程序存活且为最新版。

说明:

AppMiner1是主模块(app)的一个近似克隆版,区别在于:
1)文件大小:主模块内嵌了一个加壳的xmrig样本,比AppMiner1大得多
2)xmrig矿工的获取方式:AppMiner1通过联网下载获取,主模块(app)则通过内部释放获得。

AppMiner2是AppMiner1的守护程序,只保留了一个定时任务,用于下载及启动AppMiner1。

2.1 以后台模式启动

AppMiner使用开源的golang第三方库github.com/zh/five/xdaemon(支持 linux、windows系统)以后台模式启动。其运行后,会在终端显示类似信息: 2024/01/22 11:31:54 6204 : 启动子进程成功: -> 6209,模式为:【启动时间】 【主进程pid : 】 【启动子进程(成功or失败)】 : -> 【子进程pid】。

此外,AppMiner早期版本路径中还有中文字符串,形如: /app/xmr/挖矿.go

2.2 删除自身

AppMiner主模块及其衍生恶意模块均带自删除功能,其在加载到内存后等待1秒便删除。

2.3 创建5个定时任务

AppMiner使用开源的golang第三方定时任务库github.com/robfig/cron/v3来设置定时任务,此类定时任务不支持持久化,重启后便失效,无法通过crontab -l命令查询,具有一定的隐蔽性。

2.4 下载主程序AppMiner1及写入定时任务

该部分在main_main_func2_run_ZhuExe( )中完成,其主要功能为:

主要功能:每20s执行一次
1)检查随机主程序是否存在
2)生成随机的主程序名
3)主程序更新检查,下载新的主程序AppMiner1
4)写入持久化定时任务、向中招主机多个文件中写入启动AppMiner1的shell命令

app_zhu_ReadCmd( )负责检测主程序是否存在,若存在则连接云端更新主程序AppMiner1。

app_zhu_Randexe( )负责生成随时间变化的主程序名(含11个随机字符串,由四部分拼接而成),实现逻辑在2.5 文件名随机化小节详细介绍。

app_zhu_checkout( )负责更新检查以及下载新的主程序AppMiner1,实现逻辑在2.6 利用Google sites传播木马小节详细介绍。

app_crontab_Countabwr(app_randfile_Randexename)负责实现持久化,其包含创建定时任务+自启动两种方式。

- 创建定时任务以启动主程序AppMiner1(如:/etc/O0o25P4kq41)。

/bin/bash -c "(crontab -l 2>/dev/null; echo \"*/2 * * * * /etc//O0o25P4kq41\") | crontab -"

- 向中招主机多个文件中写入执行AppMiner1的shell命令,形如:echo My>/dev/null 2>&1 &/home/xxx/O0o25P4kq41 1>/dev/null 2>&1。

root用户:写入到/etc/profile
非root用户:写入到5个文件中(/.bash_profile、/.profile、/.bash_history、/.bashrc、/.bash_logout)

同时其还会修改系统配置信息:

sh -c "/sbin/modprobe msr allow_writes=on > /dev/null 2>&1"

2.5 文件名随机化

广泛使用文件名随机化技术是AppMiner的一大特点,其各个子模块都具有随时间变化的文件名。随机文件名生成函数app_randfile_FileHost( )主要被app_zhu_Randexe()、app_zi_Randexe()、app_RandXMRexe()三个函数调用,分别用于生成具有随机文件名的主程序(AppMiner1)、子程序(AppMiner2,对应app2)、xmrig矿工。

下面以AppMiner释放/下载的xmrig矿工为例,其随机文件名生成过程包含以下4个步骤:

1)调用app_randfile_FileHost(14)生成14个随机字符串(随时间变化,以当前时间作为伪随机数种子);
2)获取存放随机文件的目录;
3)将上面两部分通过“/”拼接起来
4)将上述三部分与对应的附加字符串(如:9.00991)拼接起来,形成最终的随机文件路径。

最终的随机文件路径结构形如:[/etc] [/] [2arw4t2w84ig4w] [9.00991],对应路径 /etc/2arw4t2w84ig4w9.00991。

2.6 利用Google sites传播木马

AppMiner的另一大特点是:利用Google sites创建自定义网页进行挂马,完成恶意样本下发。该下发过程非常隐蔽,直接访问下发链接(如:https://sites.google.com/view/page501)会返回看似无意义的图片,其恶意样本下发过程如下:

1)AppMiner运行后会访问C2链接:https://sites.google.com/view/page501返回一个html,其通过正则匹配,取出其中的url(红框部分)

类似的C2链接还有:

https://sites.google.com/view/2022luckyboy/2022
https://sites.google.com/view/outyes/2023
https://sites.google.com/view/maintest0
https://sites.google.com/view/myskfc/2025

2)访问上述提取出的url,得到下一个html

AppMiner1下载链接:https://sites.google.com/view/page501/2021/E, 通过exe101(.*)exe101过滤
AppMiner2下载链接:https://sites.google.com/view/page501/2021/E1,通过exe102(.*)exe102过滤
xmrig下载链接1:   https://sites.google.com/view/page501/2021/D, 通过UPXD(.*)UPXD过滤
xmrig下载链接2:   https://sites.google.com/view/page501/2021/J, 通过UPXJ(.*)UPXJ过滤    //得到的2个xmrig跟主模块(app)内嵌的xmrig相同

3)通过正则匹配得到对应base64编码的elf木马,经base64解码后得到最终的elf样本(均为upx样本)。

AppMiner1:7041dc1a174987a014175bd7b38dbbf9,大小2167KB
AppMiner2:825fb8fb520137432ddb425bed6e825d,大小2095KB
下载的xmrig矿工:c7c967f9e6e74ab7a86097dc68b2ced1(跟AppMiner内部释放的xmrig相同),大小1644KB

分析发现,AppMiner主模块中总共包含12种正则匹配串:

some101(.*)some101
some102(.*)some102
sourl(.*)sourlover
staicurl(.*)staicurlover
UPXD(.*)UPXD
UPXJ(.*)UPXJ 
xmrDhash(.*)xmrDhash
xmrJhash(.*)xmrJhash
exehash(.*)exehash 
exe2hash(.*)exe2hash
exe101(.*)exe101
exe102(.*)exe102

2.7 释放xmrig挖矿

AppMiner历次版本会通过下载或释放xmrig矿工进行挖矿牟利,挖矿进程名为[kworker/1:0-mm_]或者[card0-crtc0]。

对应的挖矿配置信息如下:

该钱包地址当前挖矿收益为27个XMR,加上该家族其他钱包地址收益,该家族当前挖矿收益约40个XMR(折合人民币4.5万)。

从其挖矿收益历史记录可看出,其自2021.11月便开始活跃,表明该家族已活跃2年多时间。

2.8 使用混淆技术

新的变种还使用go-strip工具对函数及变量名进行混淆,大多函数名长达4096字节。

最新的混淆版相比未混淆版有以下变化:

1)使用混淆技术,对函数名、变量名进行严重混淆;

2)下载的AppMiner1(文件名e1)对关键字符串做混淆+strip函数符号处理;

3)流程更加简洁:以前是5个cron V3定时任务,现在只有3个(下载及启动主程序、xmrig矿工、结束相关进程,省略了子程序AppMiner2的相关逻辑)。

0x03   附录

IOCs

URL:

https://sites.google.com/view/page501/2021

https://sites.google.com/view/2022luckyboy/2022

https://sites.google.com/view/outyes/2023

https://sites.google.com/view/maintest0

https://sites.google.com/view/myskfc/2025

矿池:

51.75.64.249:80

199.247.0.216:80

pool.hashvault.pro:80

pool.hashvault.pro:443

gulf.moneroocean.stream:80

gulf.moneroocean.stream:10128

钱包地址:

839zRxkBUaJGTciMadM61bdZrPwvVpT1cGkhxbVSeVRY1NQbaLv9LjkeTt6Y8WeESEb9HSZyfdDfo8EeJ3NMtxSzGDRkQUn

464zbS9i68WL37NQs6c8VzCVAotewaJ72W7wm9pDAmQ2VpL2LyCTsBYR6eSPtE5kLtf7pHhH5gvn9Dwt8dT5FUisQBQPSE5

83SQBmzs9EhLzxsJkT2hx3ZRY36zCGmx5PRQasN1gjkeTd6AuQ8RggP63G67YpVMCabpPxyPhJifJVsJ988psUxJ6FDbRZK

MD5:

91009419cb2a0511f388f56a17c54dea

ae2d15e4855f6d1e2cb0490f5669f1bf

3fba8610078c1a899f4ff4b06ffa8805

0ad3ae775c80f02afa638af3956a2530

5e4c74d7b27350924c42e58d2b2e6703

6c615f8c6ab439cee1bce36620a22e41

3c8358f06b349d739e5371930224fa39

7041dc1a174987a014175bd7b38dbbf9

0x04   时间线

2024年02月28日 360高级威胁研究分析中心发布通告

0x05   参考链接

1、 https://blog.netlab.360.com/li-yong-namesilo-parkinghe-googlede-zi-ding-yi-ye-mian-lai-chuan-bo-e-yi-ruan-jian/

2、 https://s.tencent.com/research/report/1219.html