报告编号:CERT-R-2024-714
报告来源:360CERT
报告作者:360CERT
更新日期:2024-02-28
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家族的演变进程图(仅罗列各分支部分变种情况)。
分析样本如下:
版本 | 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的相关逻辑)。
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
2024年02月28日 360高级威胁研究分析中心发布通告
1、 https://blog.netlab.360.com/li-yong-namesilo-parkinghe-googlede-zi-ding-yi-ye-mian-lai-chuan-bo-e-yi-ruan-jian/
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
https://s.tencent.com/research/report/1219.html
一直以来,360CERT对全球重要网络安全事件进行快速通报、应急响应。为更好地为政企用户提供最新漏洞以及信息安全事件的安全通告服务,现360CERT推出了安全通告特制版报告订阅服务,以便用户做资料留存、传阅研究与查询验证。
今后特制报告将不再提供公开下载,用户可扫描下方二维码进行服务订阅。
https://cert.360.cn/
进入官网查看更多资讯