百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Redis 安全问题(redis的一些问题)

mhr18 2024-11-01 12:17 42 浏览 0 评论

2015年, 很多redis节点都遭受到了攻击, redis中的数据全部被清除, 只包含一个名为crackit(换一个key就很难被发现了)的key, key的value为类似如下的公钥:

`ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCoqWfDFlTW1aG0aywc/n+f8H0DXcKJ/T5812jzo8jhgthtrOCo/C8x+R8q2KYgihO/anGtHk86Wr8Ng9Kciy495omc18aLHmq5v9TDT24ws//Gj8Rtqn3cEn6LhckDE+nYIrMTaFG164odAYUZJkJyYOxql5xnJzm1Dmlpjft8Se/fOOdtLn4sfyKntDVfVEAT1T5PRu6XS3RSuMUfDxxIhQsidZn5m+V+eHiJESSVhjEIFmbWcITyzwu+xd+/GlvyTtMWNZNB/03zlJY4KCnqMST8sAwQbHZT1JbMa4xL2RZQRONDZp2n7C3jCtNf/J67z4A6olCdaUKrSkh9lvJ5`,对用户的生产环境产生了很大的影响:

  1. 将redis作为持久化数据库的产品, 引起数据丢失
  2. 将redis作为缓存使用的产品, 因为从redis获取不到数据, 所用请求全部涌入到后端数据库服务器, 造成数据库服务器压力过大, 影响产品性能甚至数据库崩溃
  3. redis服务器被植入了非法公钥, 以至于redis服务器被他人控制

那么攻击是如何发生的呢?简要说来有如下几个步骤:

1. 恶意扫描6379端口(redis 默认端口), 确定包含redis服务, 并试图ssh登录, 因为Redis服务器并无攻击者public key, 登录失败

2. 使用redis 客户端连接redis服务器, 执行redis命令(del, flushdb, flushall)清除所有redis数据

3. 使用“config dir” 命令将 redis 数据备份路径至 /root/.ssh/

4. 使用“config filename”指定 RDB(redis定时备份) 备份文件名称为authorized_keys

5. 设置crackit key, 将value设置为恶意访问者的公钥

6. 执行bgsave, save动作触发RDB数据备份,将攻击者公钥存储在authorized_keys

7. 攻击者ssh到redis 服务器成功


redis本身要求redis部署在一个只有可信赖的client才可访问的安全环境, 因此包含如下建议:

1. 更改默认端口:

更改默认端口可以降低redis服务被发现的可能性, 但并不能完全制止, 攻击可以扫描其他端口并试图判定其为redis服务器

2. 增加redis密码验证,增加redis密码验证可有效防止redis服务器的恶意登录, 但redis但密码要足够复杂:

2.1 redis是基于内存的数据库, 访问速度十分快, 如果密码不够复杂, 则很容易被恶意破解

2.2 redis的密码传输是基于明文的, 如果攻击者在客户端和redisf服务器所属的网络之内, 还是可以截取到密码

3. 不要绑定所有网络接口

redis提供bind配置选项, 用于配置redis服务绑定都那个所在物理服务器的网络接口, 如果不指定则默认绑定所有网络接口, 如果服务器本身有外网地址, 则外网也可以访问

4. 使用非root用户启动redis服务

当redis被贡献后, 如果使用root启动服务器, 可能导致攻击者具有root用户权限, 对服务器危害较大, 因此尽量不要使用root用户

6. 更改命令名称防止破坏性命令的执行

redis支持rename操作更改命令名称, 如rename flushall abcdefg, renam后执行flushall命令则会提示命令不存在

rename的缺点是rename后的aof文件向前兼容, 即一个aof文件如果即包含rename前和rename后的command, 在导入其他redis实例时可能会失败

相关推荐

Java培训机构,你选对了吗?(java培训机构官网)

如今IT行业发展迅速,不仅是大学生,甚至有些在职的员工都想学习java开发,需求量的扩大,薪资必定增长,这也是更多人选择java开发的主要原因。不过对于没有基础的学员来说,java技术不是一两天就能...

产品经理MacBook软件清单-20个实用软件

三年前开始使用MacBookPro,从此再也不想用Windows电脑了,作为生产工具,MacBook可以说是非常胜任。作为产品经理,值得拥有一台MacBook。MacBook是工作平台,要发挥更大作...

RAD Studio(Delphi) 本月隆重推出新的版本12.3

#在头条记录我的2025#自2024年9月,推出Delphi12.2版本后,本月隆重推出新的版本12.3,RADStudio12.3,包含了Delphi12.3和C++builder12.3最...

图解Java垃圾回收机制,写得非常好

什么是自动垃圾回收?自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象;而未使用中的对象(未引用...

Centos7 初始化硬盘分区、挂载(针对2T以上)添加磁盘到卷

1、通过命令fdisk-l查看硬盘信息:#fdisk-l,发现硬盘为/dev/sdb大小4T。2、如果此硬盘以前有过分区,则先对磁盘格式化。命令:mkfs.文件系统格式-f/dev/sdb...

半虚拟化如何提高服务器性能(虚拟化 半虚拟化)

半虚拟化是一种重新编译客户机操作系统(OS)将其安装在虚拟机(VM)上的一种虚拟化类型,并在主机操作系统(OS)运行的管理程序上运行。与传统的完全虚拟化相比,半虚拟化可以减少开销,并提高系统性能。虚...

HashMap底层实现原理以及线程安全实现

HashMap底层实现原理数据结构:HashMap的底层实现原理主要依赖于数组+链表+红黑树的结构。1、数组:HashMap最底层是一个数组,称为table,它存放着键值对。2、链...

long和double类型操作的非原子性探究

前言“深入java虚拟机”中提到,int等不大于32位的基本类型的操作都是原子操作,但是某些jvm对long和double类型的操作并不是原子操作,这样就会造成错误数据的出现。其实这里的某些jvm是指...

数据库DELETE 语句,还保存原有的磁盘空间

MySQL和Oracle的DELETE语句与数据存储MySQL的DELETE操作当你在MySQL中执行DELETE语句时:逻辑删除:数据从表中标记为删除,不再可见于查询结果物理...

线程池—ThreadPoolExecutor详解(线程池实战)

一、ThreadPoolExecutor简介在juc-executors框架概述的章节中,我们已经简要介绍过ThreadPoolExecutor了,通过Executors工厂,用户可以创建自己需要的执...

navicat如何使用orcale(详细步骤)

前言:看过我昨天文章的同鞋都知道最近接手另一个国企项目,数据库用的是orcale。实话实说,也有快三年没用过orcale数据库了。这期间问题不断,因为orcale日渐消沉,网上资料也是真真假假,难辨虚...

你的程序是不是慢吞吞?GraalVM来帮你飞起来性能提升秘籍大公开

各位IT圈内外的朋友们,大家好!我是你们的老朋友,头条上的IT技术博主。不知道你们有没有这样的经历:打开一个软件,半天没反应;点开一个网站,图片刷不出来;或者玩个游戏,卡顿得想砸电脑?是不是特别上火?...

大数据正当时,理解这几个术语很重要

目前,大数据的流行程度远超于我们的想象,无论是在云计算、物联网还是在人工智能领域都离不开大数据的支撑。那么大数据领域里有哪些基本概念或技术术语呢?今天我们就来聊聊那些避不开的大数据技术术语,梳理并...

秒懂列式数据库和行式数据库(列式数据库的特点)

行式数据库(Row-Based)数据按行存储,常见的行式数据库有Mysql,DB2,Oracle,Sql-server等;列数据库(Column-Based)数据存储方式按列存储,常见的列数据库有Hb...

AMD发布ROCm 6.4更新:带来了多项底层改进,但仍不支持RDNA 4

AMD宣布,对ROCm软件栈进行了更新,推出了新的迭代版本ROCm6.4。这一新版本里,AMD带来了多项底层改进,包括更新改进了ROCm的用户空间库和AMDKFD内核驱动程序之间的兼容性,使其更容易...

取消回复欢迎 发表评论: