一个环境,突然使用很卡顿,于是用top查看什么进程占用了资源,发现进程中有大量b开头的进程,基本确定系统是中病毒了。
如上图,top显示大量b开头进程,进程号还不停的变。快速用lsof -p <PID>,查看一个病毒进程,结果如下
lsof的输出来看,病毒进程程序体被删除了。尝试用rm去删除程序体也显示无文件。
于是用ps命令查看进程情况,竟然发现无法列出病毒进程
ps命令无法列出进程名,十有八九ps命令的文件被替换了,好多病毒有这方面的套路,于是重启安装ps的rpm包,恢复ps命令。重新安装ps的rpm包后,ps命令的md5值确实不一样了,基本可以断定ps命令被替换了。
替换到正确的ps命令后,此时top按cpu负载排序,发现2个ps开头,100%占用cpu的进程。
ps能占用100%的cpu,更加佐证之前ps有问题。再次用lsof -p <PID>查看。
从上面输出来看,病毒从/tmp目录下执行,程序体像是运行了一个perl脚本,对外连接到193.169.252.253这个IP的80端口。于是用kill命令杀掉这两个进程,发现没有复生,top显示系统负载也正常。
总结:
总得来看,病毒像是个perl脚本,替换了系统ps命令然后伪装执行。很多病毒体,特别是rootkit类,会替换更多的系统命令的程序体,拦截系统调用来隐藏自己,排查起来往往更加棘手。事后分析了系统的/var/log/secure日志,是系统弱密码导致的这次病毒侵入,因为测试环境,密码设置得很简单,更没强制ssh秘钥登录。正式生产环境,安全意识不能放松。