目录
前言
最近安装redis的时候不慎忘记了设置redis密码,导致6379端口受到挖矿病毒攻击,伪造公钥进行免密登录,种下了挖矿木马,经过四个小时的对线终于把病毒干掉,世界清静了。
一、首先需要有能看到病毒进程的工具
病毒安装进了你的服务器,肯定顺便不会让你轻易的删除,所以大概率你的top里面是看不到进程的,安装一个busybus或sysdig,才能看到真正的病毒进程
1.使用busybox
busybox可以从http://www.busybox.net/downloads/进行下载,然后进行编译
编译好的busybox放到/usr/bin就可以直接使用了
执行busybox top 可以查看隐藏的病毒进程
可以看到病毒就藏在11738的pid中,明显占用了大量的cpu
kill -9 11738 执行kill,干掉病毒进程
这样病毒进程就停止了,但是这也只是暂时的,还需要清理定时任务和服务器开机进程
2.安装sysdig
安装不了busybox的话,也可以使用sysdig
curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | sudo bash
执行这个命令下载安装sysdig(这个地址在外网连接较差,如果失败了可以重新再执行可能就成功了)
sysdig -c topprocs_cpu 查看所有已隐藏进程
同样查找出异常的进程pid,然后kill掉
二、清理定时任务
1.清理流程
用crontab -l 或crontab -e 可以查看到定时任务中只有一条(而且我自己的定时任务都被删掉了)
这个就是定时重新启动木马进程的定时任务,这个不解决病毒就还会死灰复燃
直接的方式就是crontab -r 或crontab -e进入编辑模式然后删除这行任务再:wq保存
但是病毒早就猜到你会删除它所以对/var/spool/cron/root文件做了手脚,增加了ia属性,导致你不能删除它们
查看cron文件夹属性
lsattr /usr/spool
可以看到/var/spool/cron文件夹被添加了a属性(看了网上的资料有会改为ia)
执行
chattr -a /var/spool/cron
即可将cron文件属性a去掉
但果然事情没有这么顺利,这个命令执行失败了,因为病毒已经把chattr命令都给破坏了......
提示bash: chattr: command not found
于是得想办法把chattr恢复过来,
yum remove e2fsprogs 先删除(同时可能会删除依赖的包,但不要紧下面会恢复)
yum -y install 重新安装上一步被删掉的依赖包
yum -y install e2fsprogs 这步执行后,chattr就回来了
于是再次执行
chattr -a /var/spool/cron
(如果有ia属性就执行chattr -ia /var/spool/cron)
这次终于把a属性去掉了
接下来执行crontab -r或crontab -e,亦或直接rm /var/spool/cron/root将定时任务删掉
OK,到这步蚕食cpu的罪魁祸首应该是消停了。
2.注意
存在-----a-------e--属性的可能是/var/spool/cron文件夹,也可能是/var/spool/cron/root,
同时查看的时候要注意使用lsattr查看的是指定文件夹下的子文件的属性而非文件夹本身的属性,
我就是看漏了这个以为/var/spool/cron/root的ia属性已经清理掉了,但是弄半天定时任务还是删不掉,其实/var/spool/cron文件夹本身还有a属性
三、清除pamdicks文件
在根目录搜索find -name pamdicks,如果能搜索到
/usr/bin/pamdicks这个文件,那么说明你跟我中的是同一个病毒
可以先删除掉这个文件,然后创建一个顶包用的同名空文件(防止病毒自己重新生成这个文件),然后使用chattr修改文件树形锁定禁止修改
rm -rf /usr/bin/pamdicks
touch /usr/bin/pamdicks
chattr +i /usr/bin/pamdicks
这里有可能你的chattr提示不能使用,上一节里面已经讲过需要重新安装chattr
四、清除可疑的开机启动项
最后还需要看看开机自启动的任务中有没有可疑程序,在/etc/rc.local、/etc/profile等文件中进行查看。尽量删掉木马残留的文件或程序,防止死灰复燃,并且在一段时间内上服务器查看有没有可疑程序再冒出来。
总结
这次中木马的事件给了笔者一个教训,像redis或其它需要外放端口的服务,一定要设置密码且不要设置太简单的密码。常见的端口往往是木马的重点攻击对象(比如redis的6379),外放的端口能更换的尽量换成别的,比如redis改为6375等等。