报告编号: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 | 文件名 | 文件类型 | 备注 |
---|---|---|---|---|
未混淆版本 | 91009419cb2a0511f388f56a17c54dea | app | ELF | 主模块 |
混淆版本 | ae2d15e4855f6d1e2cb0490f5669f1bf | e1 | ELF | 主模块 |
混淆版本与未混淆版本功能大体相同,具体对比如下:
对比点 | 混淆版本 | 未混淆版本 |
---|---|---|
函数、变量名 | 严重混淆+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高级威胁研究分析中心发布通告