该木马一共涉及多个脚本与可执行文件:
r88.sh最开始执行的downloader,会远程下载执行root.sh/rootv2.sh/lower.sh/lowerv2.shroot.sh 这四个脚本内容完全一致,作者为了起到保险作用会考虑当前账户是是否为root以及考虑是否下载执行成功。关于这个逻辑,可参考以上流程图。
rootv2.sh
lower.sh
lowerv2.sh
bashd 基于https://github.com/fireice-uk/xmr-stak-cpu的一个挖矿组件,x64,ELF
bashe 基于https://github.com/xmrig/xmrig的一个挖矿组件,x64,ELF
配置文件
bashe的config.json配置文件:
config.json这个配置文件中显示其矿池地址为pool.supportxmr.com:80,
用户为:
46TCcaaDn4LXkWZ1EGKBkzcWsTm32Mmy8a2VWqL8pGhRPf65GmUdkZWbrLVYNhFaucWXjU5aJqMraLMEoXq53GHYJPv3LP6bashd的pools.txt配置文件:
该配置文件中显示器矿池地址为pool.supportxmr.com:80,钱包地址为:
46TCcaaDn4LXkWZ1EGKBkzcWsTm32Mmy8a2VWqL8pGhRPf65GmUdkZWbrLVYNhFaucWXjU5aJqMraLMEoXq53GHYJPv3LP6,矿池密码为bashe。 r88.sh代码分析r88.sh首先判断当前用户是否为root账户,若是则下载并执行root.sh,若下载执行失败则会下载执行rootv2.sh,两者代码一样;若非root账户,那么则下载并执行lower.sh,若下载失败则下载执行lowerv2.sh,root.sh与rootv2.sh两者代码一致。下图是r88.sh的完整代码截图。
lowerv2.sh代码分析lowerv2.sh是在非root权限下才会被执行的downloader脚本,代码中有两个函数:kills和downloadyam,隔600s循环执行。
Kills函数用于删除其他同行的挖矿木马的文件并kill进程,真是一山不能容二马的节奏啊。
其中downloadyam函数,用于下载挖矿程序bashd和bashe以及对应的配置文件并执行挖矿程序。
lower.sh代码分析若当前用户是非root权限,r88.sh会作为下载器下载该脚本,若是其下载执行失败,那么就会选择下载lowerv2.sh。两个脚本完全一样,只是为了在下载失败时作为替代的保险操作。
rootv2.sh代码分析rootv2.sh的代码与lowerv2.sh的代码完全一样,只是rootv2.sh的代码多了两行注释:
猜测是作者本来想在rootv2.sh中加入写crontab的代码的,可是最后没有加上,故rootv2.sh与lowerv2.sh代码当前是完全一样的。
root.sh代码分析当前用户若是root权限,root.sh是r88.sh下载首选,在下载root.sh失败的情况下才会选择下载rootv2.sh,两个文件的代码是完全一致的。r88.sh的代码片段如下:
Bashe代码分析该ELF可执行文件静态编译造成程序达到20m,通过对其代码分析发现跟很多挖矿木马一样使用到了开源的挖矿代码,该程序使用的开源挖矿项目在:https://github.com/fireice-uk/xmr-stak-cpu,是一个通用的挖矿项目,支持CPU,AMD与NVIDIA GPU,用于挖“门罗币”。下图可见该可执行文件中多处使用引用的代码:
通过对比github上的代码:
可确定其是基于开源代码xmr-stak 2.4.2编写的一个针对门罗币的挖矿木马。
bashd代码分析该木马用于针对“门罗币”挖矿的组件,x64架构的ELF格式文件。通过代码相似性分析可确定该程序是基于xmrig 2.5.2开源���目开发的一个基于CPU的针对Monero(XMR)的挖矿木马。
该项目在:https://github.com/xmrig/xmrig
0×03 总结