一、前言
养成良好习惯,ssh端口不轻易对外开放,使用防火墙只放行需要的IP。使用非标端口,使用强口令并定期更换,最好是使用密钥。
二、正文
0.环境
系统:CentOS 7
1.发现问题
我自己使用的是Finalshell(不是打广告,请Finalshell作者看到后立马给我打钱(((
在连接主机后能清晰地看到机器的大况
可以看到cpu是一直被吃满的,然后有名为supervisorctl的进程吃满了cpu。
我们不能排出可能是显示的错误,那我们使用top命令看一下用户进程概况,再按shift+p以cpu占用率进行排序。
实锤了,确定是这几个进程吃满了cpu。
那么我们怎么定位
2.定位文件
我们可以使用这个命令定位文件
1 |
ls -l /proc/{pid号}/exe |
但是很快我就发现这样子行不通,为什么呢?因为top命令会实时刷新,我发现这几个进程不仅会不断变换PID还会换名
到这个地方,我们基本可以确认这是一个病毒,还极有可能是挖矿病毒。
3.检查crontab
既然我们无法按照不同方法定位到文件,那我们何不换一种思路?通常情况下这种挖矿病毒都会有守护进程,以及防杀,那就需要定时执行一个任务来判断病毒是否被杀,如果被杀就生成新的病毒。那我们就考虑从守护进程上下手,以及定时任务crontab。
使用这个命令,修改crontab
1 |
crontab -e |
4.杀病毒脚本
可以百分之114514确定这是一个病毒了,因为在这台机器上我并没有装过mysql。我们把这两个文件弄下来,用www.virustotal.com查杀病毒。
我们可以看到这个sh文件是一个挖矿病毒,挖比特币的。0202年了,怎么还有人在挖比特币啊。反正不是自己的机器,所以就随便挖(
那我们cd到这个路径,先把这两个文件都删掉。然后提示以下错误。
1 2 |
[root@***** mysql]# rm -f sh rm: 无法删除"sh": 不允许的操作 |
老问题了,无非就是chattr更改了文件属性,我们看看改了什么属性
1 2 |
[root@****** mysql]# lsattr sh -bash: lsattr: 未找到命令 |
这病毒还把我的chattr和lsattr给弄没了,不过这也问题不大,我们装回来就是了
1 |
yum install -y e2fsprogs |
我们再看看改了什么属性
1 2 |
[root@****** mysql]# lsattr sh ----i--------e-- sh |
然后我们再次执行命令,把i属性去掉就可以删除了
1 2 3 4 |
[root@****** mysql]# chattr -i sh [root@****** mysql]# rm -f sh [root@****** mysql]# chattr -i mysql [root@****** mysql]# rm -f mysql |
这次我们就成功把这两个文件干掉了。
WARNING:在这里我查杀mysql文件时没有发现病毒,但是我没有安装过mysql,而且定时任务执行的就是这个文件,就也当病毒处理了,如果你的机器安装了mysql,请谨慎操作!建议先提前备份数据库然后再进行操作!
5.恢复crontab
我们再把crontab给清除干净。
1 2 3 4 5 |
[root@****** ~]# crontab -e crontab: installing new crontab crontab: error renaming /var/spool/cron/#tmp.******.****** to /var/spool/cron/root rename: 不允许的操作 crontab: edits left in /tmp/crontab.****** |
不允许修改/var/spool/cron/root,应该也是文件属性的问题,我们cd到/var/spool/cron/,再看看改了什么属性
1 2 |
[root@****** cron]# lsattr root ----ia-------e-- root |
我们可以看到这个病毒给cron文件添加了i和a属性,只去掉任意一个属性都会无法修改,那我们把这两个属性都去掉就好了
1 |
chattr -i -a root |
然后我们再crontab -e,这时就能正常修改了
1 2 |
[root@****** cron]# crontab -e crontab: installing new crontab |
6.查杀守护进程和病毒
我这边有两台机器都中了同一个病毒,在另一台机器上使用Finalshell的进程查看功能,看到了一个python进程正在运行supervisord,我们使用ps命令再grep过滤一下
1 2 3 4 |
[root@****** ~]# ps -aux|grep python root 980 0.0 1.1 574232 24144 ? Ssl 09:00 0:00 /usr/bin/python2 -Es /usr/sbin/tuned -l -P root 1217 0.2 1.0 223064 20420 ? Ss 09:00 0:15 /usr/bin/python /usr/bin/supervisord -c /etc/.supervisor/supervisord.conf root 8206 0.0 0.1 114828 2364 pts/0 S+ 10:27 0:00 grep --color=auto python |
基本可以确认这个是病毒的守护进程了。因为我没对病毒样本进行逆向,只能大概猜到这个病毒的工作流程是:crontab定时执行任务,拉起守护进程,守护进程再拉起挖矿进程。
我们看看/etc/.supervisor/supervisord.conf里面有什么内容
1 2 |
[include] files = /etc/.supervisor/conf.d/*.conf |
可以看到这里又指向了另一个配置文件,在/etc/.supervisor/conf.d/下发现了一个123.conf,然后打开来看到以下内容
1 2 3 4 5 6 7 8 9 |
[program:.sh] directory=/etc/ command=/bin/bash -c 'cp -f -r -- /etc/spts /bin/.sh 2>/dev/null && /bin/.sh -c >/dev/null 2>&1 && rm -rf -- /bin/.sh 2>/dev/null' autostart=true autorestart=true startretries=999999999 redirect_stderr=true pidfile=/etc/psdewo.pid stdout_logfile=/etc/usercenter_stdout |
到这里就实锤了,我们把几个配置删了(也有i属性,需要先去除i属性),进程杀了,再到/usr/lib/python2.7/site-packages下把supervisor删了。
然后ps -aux看到一直在调用/usr/bin/supervisorctrl和/usr/bin/supervisord,也删了。
6.查找后门
在/root/.ssh下发现了来源不明的密钥,病毒作者确保自己能连上服务器添加的,删。
7.弃坑
不反编译就这么无厘头找一个病毒真的挺难的,到了后面找不到占用cpu高的程序了,等有时间了反编译一下再看看是什么回事。暂且先把系统重装了恢复了服务程序。
发表回复