近期,火绒安全实验室收到用户反馈称自己电脑运行异常,火绒安全工程师第一时间为用户提供技术支持。经排查,确认异常为挖矿病毒事件导致且提取到相关病毒源头xbash。xbash是Coinminer家族开发的恶意脚本,去年开始就被发现大规模传播,近期动作不断且频繁更新,在国内以其投放的xmrig挖矿病毒变种libgcc_a闻名,又称libgcc_a挖矿病毒。
该病毒主要通过SSH口令爆破来获得初始访问权,通过各种技术手段来运行、隐藏和传播,其中包括预加载劫持、杀软对抗、流量代理,内网横向等。目前,火绒安全产品已支持对该类病毒进行拦截和查杀,请广大用户及时更新病毒库以提高防御能力。
火绒查杀图
一、样本分析
xbash分析:
起始样本为一个xbash脚本文件,通过查看其开头的描述可以确认其使用了Makeself打包工具:
前置描述截图
Makeself是一个自提取压缩工具,打包后的程序前半段是相关解压函数,后半段是被压缩的二进制数据:
开源项目简介
这里使用 --noexec --noexec-cleanup --confirm --keep --chown 参数来解压,发现里面包含一个cronman脚本,其为主要执行脚本:
解压截图
引导脚本分析:
cronman是主引导脚本,主要行为包括:下载payload、持久化、清除痕迹、清除杀软、内网代理、内网横向、运行挖矿程序等,具体分析如下:
cronman首先通过run_cmd函数,以传参的方式执行安装xinetd守护进程:用于后续配置代理转发服务,包括smtp、http、https 等,以供后续攻陷主机无法回连恶意域名及C2地址时通过内网横向代理下载 payload:
设置转发代理
调用clean函数清理杀毒软件及其它挖矿程序:通过终止进程、停止服务、删除自保护驱动、调用自带的卸载脚本等操作,移除包括360、sangfor在内的安全软件并终止其它同类挖矿程序:
清除杀软
清理挖矿病毒
依据SKIPUPDATE变量的值和data文件进行配置更新,通过get_remote_file函数下载文件并写入计划任务中实现自启动:
自身配置更新
通过修改/etc/ld.so.preload内容以劫持程序启动后加载的动态库从而实现hook行为,写入的文件适配具体架构,具体分析见“预加载劫持分析”:
预加载劫持
通过checkfrw和addportfrw检查iptables、firewalld安装情况,并开放特定端口:
修改防火墙配置
修改SSH配置文件,实现持久化:
修改 ssh 配置
通过下载开源网络探测工具spirit,通过crontab命令创建周期任务来执行ssh爆破,以实现内网横向移动:
创建计划任务
依据不同的架构下载对应的程序xfitaarch.sh、xfit.sh,在后续发现均为xmrig挖矿程序的变种:
下载挖矿程序
清除系统日志和历史记录,消除痕迹:
清理记录
预加载劫持分析:
对相关库进行逆向分析发现,sshkit.so库文件会hook掉readdir函数,获取原始返回结果并过滤掉ssh进程文件,pkit.so隐藏libgcc_a,skit.so隐藏spirit,sshpkit.so隐藏sshpass:
隐藏相关进程
fkit.so则是隐藏相关恶意文件:
隐藏相关恶意文件
readdir函数是c语言libc库在用户层提供用于读取目录内容的函数,在该函数内部的实现中,会调用系统getdents64函数,所以hook readdir函数就间接hook了使用getdents64函数的命令,包括常用的ls、ps、top命令等:
函数追踪
隐藏进程分析:
被隐藏的进程中spirit.sh是一个开源渗透测试工具(https://github.com/theaog/spirit),用于linux下内网主机存活探测及横向移动:
开源项目简介
Spirit会加载sshpass组件,用于内网主机ssh的暴力破解,加载ip.txt中的ip序列进行探测,对于活跃的内网ip则会调用 sshpass进行ssh密码爆破。其中,已破解的口令会存储到/usr/spirit/password.txt中,用于后续继续爆破利用:
sshpass 运行命令
被隐藏的另一个程序libgcc_a根据相关字符串可以确定是XMrig挖矿程序的变种,其由前面cronman下载的xfitaarch.sh、xfit.sh重命名而来,用于挖矿牟利:
开源项目简介
xmrig 字符串
二、附录
HASH:
C&C:
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)